Add static taxel geometry to tactile sensing#79
Open
fabricenoelbourquin wants to merge 8 commits into
Open
Conversation
Restore the per-model taxel position data (touch-sensor-finger/thumb/pinky) and load it as fixed sensor geometry rather than per-frame data. - taxel_geometry.py loads (n,3) positions per model, in the fingertip-local frame, aligned by index with the force stream. - TactileSensorConfiguration carries taxel_geometry, captured once at connect and validated against the sensor-reported taxel counts. - OrcaHandTouch.get_taxel_geometry() exposes positions so users can join them with get_tactile_taxels() by index. Positions are static (sensor CAD), so they live on the configuration, not in the 1 kHz stream. The frame label leaves room for a future kinematics layer to transform them into the hand/world frame.
The taxel YAML coordinates are the vendor sensor-frame values (mm); the previous fingertip_local tag was inaccurate. YAMLs are now self-describing (frame/units fields) and positions load as meters. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Chains are extracted from the orcahand_description v2 URDFs (scripts/extract_urdf_kinematics.py) with per-joint signs audited against config ROMs vs URDF limits. Sensor mount poses come from mesh-registering the vendor sensor geometry onto the fingertip meshes. FK validated against the raw URDFs to ~1e-9. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
get_taxel_data(frame=...) returns per-finger taxel positions (m) and forces (N) in sensor/fingertip/palm/base/world frames; positions get the full rigid transform, forces rotation only. set_base_pose() feeds the world frame; get_sensor_transforms() exposes raw transforms. Includes mock-friendly example script and docs page. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The left fingertip meshes are the same geometry as the right-hand ones (mirroring happens upstream in the kinematic tree), so the sensor mount poses are identical; verified by an independent mesh registration against the left assets. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fabricenoelbourquin
added a commit
that referenced
this pull request
Jul 8, 2026
…sing Grafts the feature/tactile-frames work (PR #79 taxel geometry + frame stack) onto this branch's link-based tactile architecture: - static taxel geometry (sensor frame, meters) loaded at configuration read, exposed via get_taxel_geometry() - orca_core.kinematics: Transform, packaged v2 URDF chains, hand FK, fitted sensor mount poses (identical left/right) - OrcaHandTouch.get_taxel_data(frame=...) across sensor/fingertip/ palm/base/world; set_base_pose() for world; get_sensor_transforms() All parallel-lineage changes from the main-based branch were dropped in favor of the joint-sensing versions. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Port the kinematics corrections made after this feature branched: - Flip the middle/ring/pinky abduction sign (+1 -> -1) so positive abduction moves every fingertip toward the pinky, and trim the provenance metadata to the fields FK actually reads. - Precompile chain entries and add a trusted-matrix Transform fast path. - get_taxel_data / get_sensor_transforms: validate the frame up front, serve the sensor frame without loading packaged kinematics, and raise a clear error when joint angles are needed but the motor bus is closed. - Replace the now-vacuous audit-metadata test with geometric checks that a flipped abduction sign would fail; move the URDF extractor to tools/. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The left kinematics were a separately-modelled, imperfect mirror: the index/ring/pinky abduction axes were tilted 10-22 deg off the right's clean [0,0,1], and the right wrist origin carried a -35 deg roll the MuJoCo model does not have. Drop the -35 deg right wrist roll (matching the MuJoCo model) and regenerate the entire left chain and sensor mounts as the exact sagittal-plane reflection of the right. Left/right fingertip and sensor poses now mirror to <1e-7 mm in every frame, and the left abduction axes come out clean. Refresh the base-frame goldens for the corrected right wrist, switch the mount test to expect a mirror, and add TestLeftRightMirror to lock the invariant in. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Restores the per-taxel 3D positions and exposes them as static sensor geometry, aligned by index with the force stream so position and force join trivially.
Geometry is read once on connect and validated against the sensor-reported taxel counts. Positions are in the fingertip-local frame