Skip to content

Revo2 thumb MCP travels ~66.4 deg, URDF declares 60 deg #2

Description

@TannerGilbert

Thanks for the recent corrections (3341c11 mimic ratios + thumb zero, abafd5f MCP/abduction vs mass-production). They clearly improved our sim/real agreement. One residual remains: right_thumb_proximal_joint still reaches noticeably further on hardware than its
upper="1.04720" (60 deg), enough to change whether the thumb collides with the fingers.

Device: Revo2 Basic right hand, S/N BCMTR2027J2500001, FW 1.0.20.U, Modbus RTU.

Method

Contact bisection — no camera or calibration needed:

  1. Close one finger to command 1000, everything else 0.
  2. Step thumb_flex up in 10-unit increments until it just touches that finger.
  3. Divide the model's thumb angle at contact by the commanded fraction.

Commands are raw 0–1000 normalized units over set_finger_positions, so no unit→radian conversion of ours is involved. Sim is revo2_right_hand.urdf in MuJoCo, unmodified, with <mimic> re-added as equality constraints (MuJoCo's URDF importer drops them); geometry verified identical to the URDF import to 0.000000 mm.

Result

finger closed first touch model angle at contact implied MCP travel
index 810 units 53.72 deg 66.3 deg
middle 985 units 65.36 deg 66.4 deg

Two different contact geometries, 12 deg apart, agree to 0.1 deg. At the declared 60 deg the
model predicts first contact 85 and 104 units late — the real thumb reaches the finger while the
model still shows clearance. Setting travel to 66.4 deg also reproduces a third, held-out pose
(thumb_flex 710, thumb_aux 600, middle 1000, which just touches on hardware) to 0.3 mm,
versus 5.9 mm as published — and that pose exercises thumb_aux, which the fit never used.

A 60 deg travel plus a ~5–6 deg zero offset also fits, but worse (1.15 deg spread between the two
tests, vs 0.04 deg for a pure scale). Since 3341c11 already added +9 deg of origin compensation
here, an offset that fell slightly short is plausible; contact data alone cannot separate the two.

Pictures

Real hand vs URDF as published (60 deg) vs measured (66.4 deg):

1. thumb_flex + thumb_aux against a closed middle

Image Image

Questions

  1. Is upper="1.04720" the mechanical travel of the MCP, or a nominal/derated figure?
  2. Should command unit 1000 map to that joint limit, or is an offset intended between the command zero and the URDF zero?
  3. max_position on our unit reads 60 deg for this joint — is that register the mechanical range or metadata?

Two minor notes

  • Every *_distal_joint carries the same velocity as its proximal while mimicking at 1.0945–1.271. A rigid follower at multiplier m moves m times faster whenever the parent does, so e.g. right_middle_distal_joint needs 2.874 rad/s, not 2.2685. Harmless kinematically, but velocity-limited planners reject reachable motions.
  • revo2_description_ros1 carries byte-identical values, so any fix needs applying there too.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions