Robotics StackExchange | Archived questions

Revolute2 vs Universal joint?

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?

Asked by pcdangio on 2021-01-06 23:42:44 UTC

Comments

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.

Asked by pcdangio on 2021-01-07 00:36:10 UTC

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)

Asked by pkot on 2021-01-07 16:24:38 UTC

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.

Asked by azeey on 2021-01-08 16:00:35 UTC

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.

Asked by pcdangio on 2021-01-08 17:18:55 UTC

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

Asked by azeey on 2021-01-08 17:24:35 UTC

Answers