RobotLocomotion / drake

Model-based design and verification for robotics.
https://drake.mit.edu
Other
3.35k stars 1.27k forks source link

Allow reversed revolute and prismatic joints #22212

Open sherm1 opened 3 days ago

sherm1 commented 3 days ago

Background

Reversed weld joints are allowed in Drake as of #22122. That means it's OK if the child body of the weld is closer to World (or is World) in the tree structure than the parent body is. This gets us closer to solving #17429 but the addition of a weld is likely to require reversal of some of the other joints. For most robots the only such reversals will be revolute and occasionally prismatic joints. These are the easiest to reverse of the remaining joints since they just require flipping the reaction forces (already done in general in #22122) and negating the q and v.

Proposal

Add revolute and prismatic joints to the list of permitted reversed joints and implement the coordinate sign change in the corresponding mobilizers. Add unit tests for the coordinates; shouldn't need to test reaction flip as long as the same, already-tested code is used as for welds.

Per f2f discussion, consider whether it is sufficient to flip the axis while leaving the q and v signs alone. That would have the advantage of eliminating any conditionals or extra multiplies by a "sign" factor.