\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.