stack-of-tasks/pinocchio
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
What it solves
Pinocchio is a high-performance C++ library designed to handle the complex mathematical computations required for rigid multi-body dynamics. It provides the tools necessary to simulate and control poly-articulated systems (like robotic arms or humanoid robots), solving challenges related to forward and inverse dynamics, kinematics, and frictional contact problems.
How it works
Built on Eigen for linear algebra and coal for collision detection, Pinocchio implements state-of-the-art rigid body algorithms (such as the Recursive Newton-Euler Algorithm and the Articulated-Body Algorithm). It leverages C++ templates and cache-friendly designs to maximize CPU performance. The library also provides analytical derivatives of these algorithms, which allows developers to use gradient-based optimization and learning techniques. It supports multiple robot description formats including URDF, SDF, MJCF, and SRDF.
Who it’s for
It is primarily aimed at robotics researchers and engineers working on simulation, control, and motion planning. It is also applicable to fields like biomechanics, computer graphics, and computer vision where multi-body physics is required.
Highlights
- High Performance: A C++ template library optimized for speed and cache efficiency.
- Analytical Derivatives: Provides derivatives for main algorithms, enabling gradient-based control and learning.
- Versatile Dynamics: Supports closed-loop mechanisms, centroidal dynamics, and state-of-the-art frictional contact solvers.
- Broad Compatibility: Includes Python bindings for prototyping and integrates with ROS, Conda, and various visualizers like Meshcat and RViz.
Related
- Project
- Project
- Project
- Project
- Project