Revolute2 vs Universal joint?

asked 2021-01-06 22:42:44 -0500

pcdangio gravatar image

I'm having difficulty understanding Gazebo/SDFormat's differentiation between a Revolute2 and a Universal joint.

According to ODE's documentation, a Hinge2 joint (which SDFormat/Gazebo call Revolute2) is actually supposed to have 3 DOFs: a rotation and translation around/along axis 1, and rotation around axis 2. It appears that Gazebo/SDFormat revolute2 joints only implement 2 DOFs, and ignore/constrain the translation along axis 1.

A universal joint, according to ODE, is just a Hinge2 joint without the translation DOF along axis 1.

So it seems that in Gazebo/SDFormat, a universal joint and a revolute2 joint are actually exactly the same joint (with a universal joint just being a particular configuration of a revolute2 joint).

Am I missing something here?

edit retag flag offensive close merge delete


On further inspection, it seems like Gazebo isn't even implementing a universal joint properly. A universal joint, according to both it's mechanical definition and ODE's implementation, should not allow rotation between the parent and child links. The joint should allow "bending" between the child and parent links, but not "rotation" between them. In Gazebo's "Demo Joint Types" model, you can see the universal joint is not behaving properly, especially if you visualize joints and slow it down.

pcdangio gravatar imagepcdangio ( 2021-01-06 23:36:10 -0500 )edit

Yes, I think you are correct; if we see this visualization of the universal joint, the child link cannot yaw about itself, but I see some child link rotating about itself in the demo. Also, at times it seems like the child link is accelerating. I think the difference is two revolute joints in series (revolute2) and parallel (universal)

pkot gravatar imagepkot ( 2021-01-07 15:24:38 -0500 )edit

I believe the translation you're referring to for Revolute2 is a parameter, not a DOF. i.e, the two axes of a Revolute2 are allowed to be offset from each other, but that offset is fixed. While for a universal joint, the two axis are colocated.

azeey gravatar imageazeey ( 2021-01-08 15:00:35 -0500 )edit

I believe Gazebo's Revolute2 joint was meant to implement a Hinge2 joint from ODE, which has an actual dynamic 3rd DOF for translation along axis 1.

pcdangio gravatar imagepcdangio ( 2021-01-08 16:18:55 -0500 )edit

I don't believe so. If you see dJointAddHinge2Torques, it takes only two torques, same as dJointAddUniversalTorques.

azeey gravatar imageazeey ( 2021-01-08 16:24:35 -0500 )edit