Skip to content

The shipped Franka arms do not collide link 5 with link 7 (Panda: link 5 with the hand)

What is wrong. The FR3 packs (emb_e1_fr3, emb_e4_fr3_bimanual, emb_e5_fr3_duo and their _route / _stiff variants) carry an <exclude> for the pair link5 / link7, and emb_e2_panda one for link5 / hand: these bodies never make a contact with each other. The exclude was added because the arms start at joint angles 0, which is outside the range of joint 4 on every arm (FR3: -3.08 to -0.12 rad) and of joint 6 on the FR3 (0.44 to 4.62 rad), and there the two links' collision hulls overlap. It also covers poses inside the joint ranges in which the hulls overlap: there the arm passes through itself with no contact and no health flag.

The number. At joint angles 0 the hulls overlap by 5.6 mm (FR3 and each arm of the bimanual), 42.7 mm (Duo, link 5 with link 7's hand piece) and 30.2 mm (Panda, link 5 with the hand); at the packs' init pose none overlaps. Of 20,000 random FR3 poses inside the joint ranges, 198 (1 %) overlap by more than 0.5 mm, the deepest 16 mm, all with joint 6 at or below 0.66 rad and joint 7 turned far; the Duo is similar, up to 19.7 mm. Not established: whether the real links touch in those poses (the hulls are convex pieces of the collision meshes), and the Panda's share of poses (only joint 6 was swept).

Why. alloy.build starts a robot at joint angles 0, not at the file's init pose, and for these arms 0 is outside a joint range. Without the exclude every scene with one of these arms started with a self-overlap.

Workaround. Keep joint 6 above 0.66 rad while joint 7 is turned far, or check the clearance of link 5 and link 7 along a planned motion yourself (mujoco.mj_geomDistance on the pack's scene.xml).

Planned fix. After the release tag the FR3 and Panda packs get a start inside their joint ranges (the joint zero moved to the home pose, as for the Go2), and the exclude is removed.