Skip to main content

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

Project description

Crocoddyl Logo

Documentation AUR package nixpkgs stable 24.05 package nixpkgs unstable package Code style: black

Introduction

Crocoddyl is an optimal control library for robot control under contact sequence. Its solvers are based on novel and efficient differential dynamic programming (DDP) algorithms. Crocoddyl computes optimal trajectories and feedback gains. It uses Pinocchio for fast computation of robot dynamics and analytical derivatives.

If you want to learn more about Crocoddyl and its solvers, we suggest reading [1] [2] [3] and visiting PUBLICATIONS.md. If you want to follow the current developments and contribute, please directly refer to the devel branch.

:crocodile: Crocoddyl features

Crocoddyl is versatile:

  • Various optimal control solvers (DDP, FDDP, BoxFDDP, Ipopt, etc)
  • Analytical and sparse derivatives via Pinocchio
  • Differential geometry support leveraging Pinocchio
  • Various integrators, dynamics, costs and constraints
  • Numerical differentiation support
  • Automatic differentiation support via CppAD

Crocoddyl is efficient and flexible:

  • Cache friendly
  • Multi-threading support via OpenMP
  • Python bindings (including abstractions) via Boost Python
  • C++11/14/17/20 compliant
  • Extensively tested
  • Code generation in both C++ and Python via CppADCoGen

:penguin: Installation

Crocoddyl can be easily installed on various Linux (Ubuntu, Fedora, etc.) and Unix distributions (Mac OS X, BSD, etc.). Below, there are different ways to install Crocoddyl.

On ArchLinux

With your favorite AUR helper, eg. paru:

    paru -Syu crocoddyl

:dragon: From

Just run the following command in the terminal:

   conda install crocoddyl -c conda-forge

Conda installation supports conda install.

From Nix

crocoddyl & python3Packages.crocoddyl are available in nixpkgs.

This repository is also a flake, so you may:

  • run a python shell with crocoddyl: nix run github:loco-3d/crocoddyl
  • use it in your own flake: crocoddyl.url = "github:loco-3d/crocoddyl";

The build cache use by CI and developers is gepetto.cachix.org

:snake: From

Just run the following command in the terminal:

  pip install --user crocoddyl

:turtle: With ROS

Just clone it (with --recursive) into a catkin workspace and compile it.

:package: From Debian / Ubuntu packages, with robotpkg

  1. If you have never added robotpkg's software repository, do it now:
    sudo tee /etc/apt/sources.list.d/robotpkg.list <<EOF
    deb [arch=amd64] http://robotpkg.openrobots.org/packages/debian/pub $(lsb_release -sc) robotpkg
    EOF
    
    curl http://robotpkg.openrobots.org/packages/debian/robotpkg.key | sudo apt-key add -
    sudo apt update
    
  2. Install Crocoddyl and its Python bindings:
    sudo apt install robotpkg-py3\*-crocoddyl
    
  3. Configure your environment variables:
    export PATH=/opt/openrobots/bin:$PATH
    export PKG_CONFIG_PATH=/opt/openrobots/lib/pkgconfig:$PKG_CONFIG_PATH
    export LD_LIBRARY_PATH=/opt/openrobots/lib:$LD_LIBRARY_PATH
    export PYTHONPATH=/opt/openrobots/lib/python3.10/site-packages:$PYTHONPATH
    

:file_folder: From source

  1. Install Crocoddyl's mandatory dependencies:
  2. (optional) Install Crocoddyl's optional dependencies
    • OpenMP                                        (for multi-threading support)
    • CppADCoGen                                (for code-generation support)
    • pycppad                                        (for code-generation support)
    • Ipopt                                              (for Ipopt support)
    • example-robot-data                      (for robotic examples, install Python loaders)
    • gepetto-viewer-corba                   (for display in Gepetto viewer, i.e., GepettoDisplay)
    • meshcat-python                            (for display in Meshcat, i.e., MeshcatDisplay)
    • whole_body_state_rviz_plugin      (for display in ROS, i.e., RvizDisplay)
    • crocoddyl_msgs                            (for display in ROS, i.e., RvizDisplay)
    • urdf_parser_py                              (for display in ROS, i.e., RvizDisplay)
    • jupyter                                            (for notebooks)
    • matplotlib                                       (for plotting)
  3. Clone it (with --recursive), create a build directory inside, and:
    cmake .. && make && make install
    

You can disable the tests, examples, and benchmarks using the following CMake options: BUILD_TESTING, BUILD_EXAMPLES, and BUILD_BENCHMARK. Note that the tests, examples or benchmarks require example-robot-data.

:mag: Documentation

Crocoddyl's Doxygen documentation is available here. Alternatively, you can also check out the Jupyter notebooks. We suggest to explore at least these notebooks:

Moreover, after installation, you could run the examples as follows:

python -m crocoddyl.examples.quadrupedal_gaits "display" "plot" # enable display and plot

or run examples, unit tests and benchmarks from your build directory as

cd build
make test
make -s examples-quadrupedal_gaits INPUT="display plot" # enable display and plot
make -s benchmarks-cpp-quadrupedal_gaits INPUT="100 walk" # number of trials ; type of gait

where it is possible to enable display and/or plots generated by our examples using the environment variables:

export CROCODDYL_DISPLAY=1
export CROCODDYL_PLOT=1

:telescope: Citing Crocoddyl

To cite Crocoddyl in your academic research, please use the following BibTeX lines:

@inproceedings{mastalli20crocoddyl,
  author={Mastalli, Carlos and Budhiraja, Rohan and Merkt, Wolfgang and Saurel, Guilhem and Hammoud, Bilal
  and Naveau, Maximilien and Carpentier, Justin and Righetti, Ludovic and Vijayakumar, Sethu and Mansard, Nicolas},
  title={{Crocoddyl: An Efficient and Versatile Framework for Multi-Contact Optimal Control}},
  booktitle = {IEEE International Conference on Robotics and Automation (ICRA)},
  year={2020}
}

Please consider citing our selected publications and contributions described in PUBLICATIONS.md.

Crocoddyl's contributions extend beyond efficient software development. Please also consider citing the algorithm contributions of our different solvers and formulations:

  • Feasibility-driven solvers (FDDP and Box-FDDP): [1], [2]
  • Inverse-dynamics trajectory optimization and endpoint constrains: [3] [4]
  • Multi-Contact Inertial Parameters Estimation and Localization in Legged Robots: [5]

Finally, please also consider citing Pinocchio, which contributes to the efficient implementation of rigid body algorithms and their derivatives. For more details on how to cite Pinocchio visit: https://github.com/stack-of-tasks/pinocchio.

:open_book: Selected publications

[1] C. Mastalli, R. Budhiraja, W. Merkt, G. Saurel, B. Hammoud, M. Naveau, J. Carpentier, L. Righetti, S. Vijayakumar and N. Mansard. Crocoddyl: An Efficient and Versatile Framework for Multi-Contact Optimal Control, IEEE International Conference on Robotics and Automation (ICRA), 2020.

[2] C. Mastalli, W. Merkt, J. Marti-Saumell, H. Ferrolho, J. Sola, N. Mansard and S. Vijayakumar. A Feasibility-Driven Approach to Control-Limited DDP, Autonomous Robots, 2022.

[3] C. Mastalli, S. P. Chhatoi, T. Corbères, S. Tonneau and S. Vijayakumar. Inverse-Dynamics MPC via Nullspace Resolution, IEEE Transactions on Robotics, 2023.

[4] M. Parilli, S. Martinez, and C.Mastall. Endpoint-Explicit Differential Dynamic Programming via Exact Resolution, IEEE International Conference on Robotics and Automation (ICRA), 2025.

[5] S. Martinez, R. Griffin, and C.Mastalli. Multi-Contact Inertial Parameters Estimation and Localization in Legged Robots, IEEE Robotics and Automation Letters (RAL), 2025.

:computer: Questions and Issues

You have a question or an issue? Please open a new issue or a discussion.

:copyright: Credits

:writing_hand: Written by

:construction_worker: With contributions from

:trophy: Acknowledgments

Crocoddyl development was supported by the EU MEMMO project and the EU RoboCom++ project. It is maintained by the Robot Motor Intelligence (RoMI) Lab @ Heriot-Watt University, the Gepetto team @ LAAS-CNRS, and the Willow team @ INRIA.

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

libcrocoddyl-3.2.1.tar.gz (754.7 kB view details)

Uploaded Source

Built Distributions

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

libcrocoddyl-3.2.1-0-py3-none-manylinux_2_28_x86_64.whl (5.1 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

libcrocoddyl-3.2.1-0-py3-none-manylinux_2_28_aarch64.whl (4.7 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

libcrocoddyl-3.2.1-0-py3-none-macosx_11_0_arm64.whl (2.7 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

libcrocoddyl-3.2.1-0-py3-none-macosx_10_9_x86_64.whl (3.2 MB view details)

Uploaded Python 3macOS 10.9+ x86-64

File details

Details for the file libcrocoddyl-3.2.1.tar.gz.

File metadata

  • Download URL: libcrocoddyl-3.2.1.tar.gz
  • Upload date:
  • Size: 754.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for libcrocoddyl-3.2.1.tar.gz
Algorithm Hash digest
SHA256 d0689a191d4cc1905b7000f064c1d572dcfec7cca202b495213724997762c702
MD5 05c87e08ee9b46554f8f8d3e3852e92f
BLAKE2b-256 36b43af1cc0fc186c2cbb17b2cd972e26e107866841c4f664097f44161e51d25

See more details on using hashes here.

Provenance

The following attestation bundles were made for libcrocoddyl-3.2.1.tar.gz:

Publisher: release.yml on cmake-wheel/libcrocoddyl

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

File details

Details for the file libcrocoddyl-3.2.1-0-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for libcrocoddyl-3.2.1-0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e7553b1aeb027f85496adb00397df6cb5b61ef7e9db8252bf45044e065540f79
MD5 43dd34a661d0afb7d7ece052a02e9c81
BLAKE2b-256 7e5631f988d8315b1627d62f879d8f93ca91bcfa3eb2181e35630e99ebaa14d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for libcrocoddyl-3.2.1-0-py3-none-manylinux_2_28_x86_64.whl:

Publisher: release.yml on cmake-wheel/libcrocoddyl

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

File details

Details for the file libcrocoddyl-3.2.1-0-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for libcrocoddyl-3.2.1-0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0e0cfd2c41af79ae9e2f883c4267eeea31aa087d22a0e123ad4bf8455357e90e
MD5 6743ec5d5eab8c4826361d402ed4488a
BLAKE2b-256 164134c9ec682605ceb913f7a084beb7a32c227cf662c89c5e7d531bf5ae06f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for libcrocoddyl-3.2.1-0-py3-none-manylinux_2_28_aarch64.whl:

Publisher: release.yml on cmake-wheel/libcrocoddyl

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

File details

Details for the file libcrocoddyl-3.2.1-0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for libcrocoddyl-3.2.1-0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a5be0ed5765318f90c2b2b537fe787720805d6579be12da75c636be75d0cca7e
MD5 67e4481fbb59e2936b219e08634e6d2d
BLAKE2b-256 64bbd52a5ff0685a94f0c4cbb78ad3bb55b9fe2c073558c18d802bff4c05e9b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for libcrocoddyl-3.2.1-0-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yml on cmake-wheel/libcrocoddyl

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

File details

Details for the file libcrocoddyl-3.2.1-0-py3-none-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for libcrocoddyl-3.2.1-0-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0f08c0ca30bc999e3636cd8cf7dbe83309d41c1f499bad2a708b0dbceb662f67
MD5 7bbf57afba7af24d12842c2b1c7f0694
BLAKE2b-256 e44a4d355cb3cebb85179f11f187e2089c449ff0c47981a0098ffe3d9fde2159

See more details on using hashes here.

Provenance

The following attestation bundles were made for libcrocoddyl-3.2.1-0-py3-none-macosx_10_9_x86_64.whl:

Publisher: release.yml on cmake-wheel/libcrocoddyl

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