Skip to content

Add static taxel geometry to tactile sensing#79

Open
fabricenoelbourquin wants to merge 8 commits into
mainfrom
feature/taxel-geometry
Open

Add static taxel geometry to tactile sensing#79
fabricenoelbourquin wants to merge 8 commits into
mainfrom
feature/taxel-geometry

Conversation

@fabricenoelbourquin

Copy link
Copy Markdown
Member

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

fabricenoelbourquin and others added 6 commits June 26, 2026 19:39
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>
fabricenoelbourquin and others added 2 commits July 14, 2026 10:52
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant