\page md_doc_a-features_c-joints 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 \f$X,Y,Z\f$ 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 \f$\mathbb{R}\f$, 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 \f$\mathbb{R}^{3}\f$. 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 \ref md_doc_a-features_e-lie to go further on this topic.