Skip to main content

A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives

Project description

Pinocchio Logo

License Documentation Ask DeepWiki Coverage Report Conda Downloads Conda Version PyPI version pre-commit.ci status

Pinocchio is open-source software actively developed by the Willow team at Inria in the lovely city of Paris. Pinocchio instantiates state-of-the-art Rigid Body Algorithms for poly-articulated systems, building upon and revisiting the foundational algorithms introduced by Roy Featherstone.

Beyond traditional rigid-body dynamics formulations, Pinocchio delivers cutting-edge algorithmic solutions for modern robotics and physics-based simulation challenges. It efficiently handles closed-loop kinematic mechanisms, solves frictional contact problems, and differentiates physics computations — making it a powerful and versatile library for both research and industrial applications.

Pinocchio also provides analytical derivatives of the main Rigid Body Algorithms — such as the Recursive Newton-Euler Algorithm and the Articulated-Body Algorithm — enabling gradient-based optimization, control, and learning in both simulation and real-world settings.

Pinocchio was originally designed for robotics applications, but it can be used in other contexts (biomechanics, computer graphics, vision, etc.). It is built upon Eigen for linear algebra and coal for collision detection. Pinocchio includes a Python interface for fast code prototyping, directly accessible through Conda.

Pinocchio is now at the heart of various robotics software as Aligator, Crocoddyl, an open-source and efficient Differential Dynamic Programming solver for robotics, the Stack-of-Tasks, an open-source and versatile hierarchical controller framework, or the Humanoid Path Planner, open-source software for Motion and Manipulation Planning. Pinocchio is also a primary source of inspiration for the Kamino simulator developed by Disney Research, which populates the Newton physics engine.

If you want to learn more about Pinocchio internal behaviors and main features, we invite you to read the related paper and the online documentation or DeepWiki.

If you want to dive into Pinocchio directly, only one single line is sufficient (assuming you have Conda):

conda install pinocchio -c conda-forge

or via pip (currently only available on Linux):

pip install pin

Table of contents

Pinocchio main features

Pinocchio is fast:

  • C++ template library,
  • cache-friendly,
  • support custom scalar type.

Pinocchio is versatile, implementing basic and more advanced rigid body dynamics algorithms:

  • forward kinematics and its analytical derivatives,
  • forward/inverse dynamics and their analytical derivatives,
  • centroidal dynamics and its analytical derivatives,
  • computations of kinematic and dynamic regressors for system identification and more,
  • full support of closed-loop mechanisms,
  • state-of-the-art frictional contact solvers,
  • low-complexity constrained articulated body algorithms,
  • sparse constrained dynamics and its analytical derivatives,
  • full support of multiple-precision floating-point (MPFR) in Python and C++,
  • support of modern and open-source Automatic Differentiation frameworks like CppAD or CasADi,
  • automatic code generation support is available via CppADCodeGen.

Pinocchio can support description formats:

  • URDF format,
  • SDF format,
  • MJCF format,
  • SRDF format,
  • programmatically.

Pinocchio is flexible:

  • header only,
  • template instantiation,
  • C++ 17/20/23 compliant.

Pinocchio is extensible. Pinocchio is multi-thread friendly. Pinocchio is reliable and extensively tested (unit tests, simulations, and real-world robotics applications). Pinocchio is supported and tested on Windows, Mac OS X, Unix, and Linux (see build status here).

Documentation

The online documentation for the latest release of ** Pinocchio ** is available here. A cheat sheet pdf with the main functions and algorithms can be found here.

Examples

In the examples directory, we provide some basic examples of using Pinocchio in Python. Additional examples introducing Pinocchio are also available in the documentation.

Tutorials

Pinocchio comes with a large set of tutorials that introduce the basic tools for robot control. Tutorial and training documents are listed here. You can also consider the interactive Jupyter notebook set of tutorials developed by Nicolas Mansard and Yann de Mont-Marin.

Pinocchio continuous integrations

Pinocchio is constantly tested for several platforms and distributions, as reported below:

CI on ROS ROS
CI on Linux via APT linux
CI on macOS and Windows via Pixi mac
CI on Linux via Robotpkg Pipeline Status

Performances

Pinocchio exploits, at best, the sparsity induced by the kinematic tree of robotics systems. Thanks to modern programming language paradigms, Pinocchio can unroll most of the computations directly at compile time, allowing to achieve impressive performances for an extensive range of robots, as illustrated by the plot below, obtained on a standard laptop equipped with an Intel Core i7 CPU @ 2.4 GHz.

Pinocchio Logo

For other benchmarks, and mainly the capacity of Pinocchio to exploit, at best, your CPU capacities using advanced code generation techniques, we refer to the technical paper. In addition, the introspection may also help you to understand and compare the performances of the modern rigid body dynamics libraries.

Ongoing developments

If you want to follow the current developments, you can refer to the devel branch. The devel branch only contains the latest release. Any new Pull Request should be submitted on the devel branch.

Installation

Pinocchio can be easily installed on various Linux (Ubuntu, Fedora, etc.) and Unix distributions (Mac OS X, BSD, etc.). Please refer to the installation procedure.

Conda

You simply need this simple line:

conda install pinocchio -c conda-forge

Docker

docker run --rm -it ghcr.io/stack-of-tasks/pinocchio:devel

ROS

Pinocchio is also deployed on ROS. You may follow its deployment status below.

If you're interested in using Pinocchio on systems and/or with packages that integrate with the ROS ecosystem, we recommend the installation of Pinocchio via the binaries distributed via the ROS PPA. Here, you can install Pinocchio using:

sudo apt install ros-$ROS_DISTRO-pinocchio

This installs Pinocchio with Coal support for collision checking and with Python bindings. You can then use Pinocchio in your ROS packages by:

  • Depending on Pinocchio in your package.xml config (<depend>pinocchio</depend>)
  • Including Pinocchio via CMake (find_package(pinocchio REQUIRED)) and linking against Pinocchio (target_link_libraries(my_library pinocchio::pinocchio))

We include support and hooks to discover the package for ROS build systems. A ROS 2 example can be found in this repository.

Please note that we always advise including the pinocchio/fwd.hpp header as the first include to avoid compilation errors from differing Boost-variant sizes.

ROS 2 Distro Build Status
Humble
Jazzy
Kilted
Rolling

Visualization

Pinocchio provides support for many open-source and free visualizers:

  • Gepetto Viewer: a C++ viewer based on OpenSceneGraph with Python bindings and Blender export. See here for a C++ example on mixing Pinocchio and Gepetto Viewer.
  • Meshcat: supporting visualization in Python and which can be embedded inside any browser.
  • Panda3d: supporting visualization in Python and which can be embedded inside any browser.
  • RViz: supporting visualization in Python and which can interact with other ROS packages.
  • Viser: supporting browser-based visualization in Python, with support for widgets such as sliders and interactive markers.

Many external viewers can also be integrated. For more information, see the example here.

Citing Pinocchio

To cite Pinocchio in your academic research, please consider citing the software paper and use the following BibTeX entry:

@inproceedings{carpentier2019pinocchio,
   title={The Pinocchio C++ library -- A fast and flexible implementation of rigid body dynamics algorithms and their analytical derivatives},
   author={Carpentier, Justin and Saurel, Guilhem and Buondonno, Gabriele and Mirabel, Joseph and Lamiraux, Florent and Stasse, Olivier and Mansard, Nicolas},
   booktitle={IEEE International Symposium on System Integrations (SII)},
   year={2019}
}

And the following one for the link to the GitHub codebase:

@misc{pinocchioweb,
   author = {Justin Carpentier and Florian Valenza and Nicolas Mansard and others},
   title = {Pinocchio: fast forward and inverse dynamics for poly-articulated systems},
   howpublished = {https://stack-of-tasks.github.io/pinocchio},
   year = {2015--2021}
}

Citing specific algorithmic contributions

Pinocchio goes beyond implementing the standard rigid-body dynamics algorithms and results from active research on simulation, learning, and control. Pinocchio provides state-of-the-art algorithms for handling constraints, closed-loops mechanisms, differentiating forward and inverse dynamics, etc. If you use these algorithms, please consider citing them in your research articles.

Questions and Issues

Do you have a question or an issue? You may either directly open a new question or a new issue or, directly contact us via the mailing list pinocchio@inria.fr.

Core-dev team

The currently active core developers of Pinocchio are:

Credits

In addition to the core dev team, the following people have also been involved in the development of Pinocchio and are warmly thanked for their contributions:

If you have participated in the development of Pinocchio, please add your name and contribution to this list.

Open-source projects relying on Pinocchio

  • Crocoddyl: A software to realize model predictive control for complex robotics platforms.
  • TSID: A software that implements a Task Space Inverse Dynamics QP.
  • HPP: A SDK that implements motion planners for humanoids and other robots.
  • Jiminy: A simulator based on Pinocchio.
  • ocs2: A toolbox for Optimal Control for Switched Systems (OCS2)
  • TriFingerSimulation: TriFinger Robot Simulation (a Robot to perform RL on manipulation).
  • Casadi_Kin_Dyn: IIT Package for generation of symbolic (SX) expressions of robot kinematics and dynamics.
  • PyRoboPlan: An educational Python library for manipulator motion planning using the Pinocchio Python bindings.
  • RoboPlan: A modern robot motion planning library based on Pinocchio, built in C++ with Python bindings (successor to PyRoboPlan).
  • ProxSuite-NLP: A primal-dual augmented Lagrangian solver for nonlinear programming on manifolds.
  • Aligator: A versatile and efficient framework for constrained trajectory optimization.
  • Simple: The Simple Simulator: Simulation Made Simple.
  • LoIK: Low-Complexity Inverse Kinematics.
  • PlaCo: Rhoban's planning and control library, featuring task-space inverse kinematics and dynamics high-level API for whole-body control tasks.
  • CRISP controllers: Collection of real-time, C++ controllers for compliant torque-based control for manipulators compatible with ros2_control.

Acknowledgments

The development of Pinocchio is actively led by the Willow team @INRIA, with the support of the Gepetto team @LAAS-CNRS.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

libpinocchio-4.0.0.tar.gz (4.4 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

libpinocchio-4.0.0-0-py3-none-manylinux_2_28_x86_64.whl (3.8 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

libpinocchio-4.0.0-0-py3-none-manylinux_2_28_aarch64.whl (3.6 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

libpinocchio-4.0.0-0-py3-none-macosx_11_0_arm64.whl (3.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

libpinocchio-4.0.0-0-py3-none-macosx_10_9_x86_64.whl (3.7 MB view details)

Uploaded Python 3macOS 10.9+ x86-64

File details

Details for the file libpinocchio-4.0.0.tar.gz.

File metadata

  • Download URL: libpinocchio-4.0.0.tar.gz
  • Upload date:
  • Size: 4.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for libpinocchio-4.0.0.tar.gz
Algorithm Hash digest
SHA256 425a4ea81fa046238ddb7d8e0c6109bff69a80dd945f84dc3813243b59e3d548
MD5 bf3c882a7f6716b3bb998e710fa92a81
BLAKE2b-256 e0c96c1d428cc8dc10eda45726ac4898bd9ce659366c934e2c37e8e5ba3ae330

See more details on using hashes here.

Provenance

The following attestation bundles were made for libpinocchio-4.0.0.tar.gz:

Publisher: release.yml on cmake-wheel/libpinocchio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file libpinocchio-4.0.0-0-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for libpinocchio-4.0.0-0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a5b7b8d968f1fe8a57e01fb05464521c09a8d368d2b4e482bee25db018bbd197
MD5 b28929e76f783d8f9e3113176b54754a
BLAKE2b-256 e2b49292b05386d51975ffe69ebcc9dee351ee8018eb0dd1acbcdf48352b2b63

See more details on using hashes here.

Provenance

The following attestation bundles were made for libpinocchio-4.0.0-0-py3-none-manylinux_2_28_x86_64.whl:

Publisher: release.yml on cmake-wheel/libpinocchio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file libpinocchio-4.0.0-0-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for libpinocchio-4.0.0-0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 43d0ee81449126c6f1b184111cac74d83e8903a57401b8d37bde53ed946cf24e
MD5 2472bcbd5254e13422df343263a44290
BLAKE2b-256 4565150b7d6b3986a63d20f95c0f066fadb586fed21ab027bf4cbe8a70230474

See more details on using hashes here.

Provenance

The following attestation bundles were made for libpinocchio-4.0.0-0-py3-none-manylinux_2_28_aarch64.whl:

Publisher: release.yml on cmake-wheel/libpinocchio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file libpinocchio-4.0.0-0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for libpinocchio-4.0.0-0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c6d617a36b0a0c60774b321f1662d86aeb7161cf88581ae5c2ca4665d765ea16
MD5 d1fa07a71bcd4a22311dd80db67c882a
BLAKE2b-256 c966150954766542d00e9c3ede6ea918f9ec852e7657637e5dc0c842ff059339

See more details on using hashes here.

Provenance

The following attestation bundles were made for libpinocchio-4.0.0-0-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yml on cmake-wheel/libpinocchio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file libpinocchio-4.0.0-0-py3-none-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for libpinocchio-4.0.0-0-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c497750021075ca95715d478314970a82d7b9d0ce0e9138800378db8cbd4ac3d
MD5 cfb50f2f1d47aaeb6a18990fa1ffb2c2
BLAKE2b-256 5ff453010f1cf23def730d774b9a99d33ffe76da1bdb63ba2e877432d7f652bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for libpinocchio-4.0.0-0-py3-none-macosx_10_9_x86_64.whl:

Publisher: release.yml on cmake-wheel/libpinocchio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page