pinocchio  3.5.0
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
Joints

Within a model, a robot is represented as a kinematic tree, containing a collection of all the joints, information about their connectivity, and, optionally, the inertial quantities associated to each link. In Pinocchio a joint can have one or several degrees of freedom, and it belongs to one of the following categories:

  • Revolute joints, rotating around a fixed axis, either one of \(X,Y,Z\) or a custom one;
  • Prismatic joints, translating along any fixed axis, as in the revolute case;
  • Spherical joints, free rotations in the 3D space;
  • Translation joints, for free translations in the 3D space;
  • Planar joints, for free movements in the 2D space;
  • Free-floating joints, for free movements in the 3D space. Planar and free-floating joints are meant to be employed as the basis of kinematic tree of mobile robots (humanoids, automated vehicles, or objects in manipulation planning).
  • More complex joints can be created as a collection of ordinary ones through the concept of Composite joint.

Remark: In the URDF format, a joint of type fixed can be defined. However, a fixed joint is not really a joint because it cannot move. For efficiency reasons, it is therefore treated as operational frame of the model.

From joints to Lie-group geometry

Each type of joints is characterized by its own specific configuration and tangent spaces. For instance, the configuration and tangent spaces of a revolute joint are both the real axis line \(\mathbb{R}\), while for a Spherical joint the configuration space corresponds to the set of rotation matrices of dimension 3 and its tangent space is the space of 3-dimensional real vectors \(\mathbb{R}^{3}\). Some configuration spaces might not behave as a vector space, but have to be endowed with the corresponding integration (exp) and differentiation (log) operators. Pinocchio implements all these specific integration and differentiation operators.

See Dealing with Lie-group geometry to go further on this topic.