Major Release of Pinocchio 4

Pinocchio 4: A New Constraint Architecture, Closed-Loop Dynamics, and a Modernised Foundation

Pinocchio 4 is the most significant release in the library’s history, marking a thorough architectural evolution in how constrained dynamics, contact modelling, and Lie group operations are handled — while raising the technical baseline of the entire codebase.

A new constraint API

The centrepiece of this release is a fully redesigned constraint system. Five dedicated constraint model types now cover the most common robotics scenarios: unilateral point contact with Coulomb friction, point-wise bilateral anchoring, frame-wise bilateral anchoring, joint limit bounds, and joint friction bounds. Each constraint model is paired with its own constraint data structure, and a unified variant type encapsulates all models and data for use across algorithms. This design enables modular, composable constraint problems to be constructed and solved in a consistent way across the entire stack.

Closely tied to the new constraint models is a redesigned Delassus operator API. Four operator variants — dense, sparse, Cholesky-expression, and rigid-body — each compute the same fundamental quantity relating constraint Jacobians to the inverse mass matrix, but with different internal algorithms and sparsity-exploitation strategies. Two constrained dynamics solvers, based on ADMM and projected Gauss-Seidel respectively, complete the picture and allow these constraint problems to be resolved efficiently at runtime.

Closed kinematic loops

A new forward dynamics algorithm for systems with closed kinematic loops extends Pinocchio’s reach to a class of mechanisms that has historically required workarounds or external tools. To dive deeper, a Python example demonstrates a full simulation workflow using the new interface.

Lie group enhancements and mimic joint coverage

The Lie group layer gains new functions for mapping configuration variations into parametric-space small variations, with variants that exploit sparsity during transport and product operations. Mimic joint support — progressively introduced in the 3.x series — now covers all Lie group related algorithms, improving its integration across the library. New joint model methods expose Lie group instances directly, making it simpler to build generic algorithms that operate uniformly across joint types.

MJCF and SDF parsers extended

Both the MJCF and SDF parsers gain new overloads to load models alongside their constraints using the new API, in addition to backward-compatible overloads for legacy constraint structures.

Modernisation and breaking changes

Version 4 raises the minimum C++ standard to C++17 and the minimum Eigen version to 3.4, removes all Eigen aligned allocator workarounds in favour of standard containers, and completes the long-running transition from HPP-FCL to COAL — deprecating all remaining FCL-facing headers, macros, and Python bindings in favour of their COAL equivalents. A new header convention introduces omnibus includes for major subsystems. Several algorithms that have more efficient alternatives had been marked deprecated in the 3.x series (e.g., legacy forward dynamics and impulse dynamics interfaces) are now formally unsupported. A porting guide from 3.x to 4.0 is provided in the repository documentation.

Together, these changes position Pinocchio as a capable and maintainable foundation for the next generation of physics engines, trajectory optimisers, and real-time controllers being built across the robotics community.

Pinocchio 4 Release page