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.1.0.tar.gz (748.4 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.1.0-0-py3-none-manylinux_2_28_x86_64.whl (4.7 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

libcrocoddyl-3.1.0-0-py3-none-manylinux_2_28_aarch64.whl (4.4 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

libcrocoddyl-3.1.0-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.1.0.tar.gz.

File metadata

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

File hashes

Hashes for libcrocoddyl-3.1.0.tar.gz
Algorithm Hash digest
SHA256 deb910b3a5edbc25df8f0f898cc8bfe1008d06cd57b320fd644a9ee3f871aac8
MD5 74d20ed7b622c4f88be78805b6cae7d3
BLAKE2b-256 60fcbeaccd02399f1eae430e4855a952d538cf5dd02d0b0e9292ebcee698e8fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for libcrocoddyl-3.1.0.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.1.0-0-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for libcrocoddyl-3.1.0-0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bfdb948d5715c3d1014a30394dee93601b47b4cdf650a9b464e9075ae397ae9a
MD5 0cc4238a513e6cd215e44676905319d6
BLAKE2b-256 ea565300e6b1e77260d880a286becfc6c17f5d2e47c0d806002f5d9fe500bf80

See more details on using hashes here.

Provenance

The following attestation bundles were made for libcrocoddyl-3.1.0-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.1.0-0-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for libcrocoddyl-3.1.0-0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 14d376afbab1a9fed0ec4463d869316fbecc6c31d60637a7a52ac9de1552752b
MD5 64476d4ccc1343d52264cea7ecaa0e59
BLAKE2b-256 43f4a202e080422328bb22573e099315fcca5fa4539bd42ec3f873afef30b00d

See more details on using hashes here.

Provenance

The following attestation bundles were made for libcrocoddyl-3.1.0-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.1.0-0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for libcrocoddyl-3.1.0-0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 eff1f72c8d370f47267e699a12f78b765c4641be97b242313a9f0441d5bf36f2
MD5 196d4587abd384f618612d78194cb7aa
BLAKE2b-256 e8257a3a7f881af0211a6da8cc0dc5fa32aadfac0a3c1187e10f6b3749a93a9b

See more details on using hashes here.

Provenance

The following attestation bundles were made for libcrocoddyl-3.1.0-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.1.0-0-py3-none-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for libcrocoddyl-3.1.0-0-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6fa8b0b88ec5538ca4bb79a95f26e3b48ab699d6b87d3e6ae4bbdc2250b7d36c
MD5 b0161c1f87cac025f1ab76c644ed3def
BLAKE2b-256 335f86b0fe41e0a8b14eba16f2ce51a51725053148a84c8b642d52d7a1ff00eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for libcrocoddyl-3.1.0-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