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 in poly-articulated systems (like robots). It provides the necessary tools to calculate how robots move (kinematics) and the forces that cause that movement (dynamics), while remaining efficient enough for real-time control and simulation.

How it works

Built on Eigen for linear algebra and coal for collision detection, the library implements state-of-the-art 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. Pinocchio 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

This library is intended for robotics researchers and engineers working on motion planning, control, and physics-based simulation. It is also applicable to fields like biomechanics, computer graphics, and computer vision where rigid body dynamics are required.

Highlights

  • High Performance: A C++ template library optimized for speed and cache efficiency.
  • Analytical Derivatives: Provides gradients for dynamics algorithms, enabling advanced optimization and learning.
  • Versatile Dynamics: Supports forward/inverse dynamics, centroidal dynamics, and closed-loop kinematic mechanisms.
  • Advanced Contact Solving: Includes state-of-the-art frictional contact solvers and constrained articulated body algorithms.
  • Broad Compatibility: Offers a Python interface for prototyping and integrates with ROS, Conda, and various visualizers like Meshcat and RViz.

Related

  • Project
  • Project
  • Project
  • Project
  • Project