{"id":13699575,"url":"https://github.com/loco-3d/crocoddyl","last_synced_at":"2025-05-12T09:55:17.731Z","repository":{"id":38382876,"uuid":"190190517","full_name":"loco-3d/crocoddyl","owner":"loco-3d","description":"Crocoddyl is an optimal control library for robot control under contact sequence. Its solver is based on various efficient Differential Dynamic Programming (DDP)-like algorithms","archived":false,"fork":false,"pushed_at":"2025-04-29T03:45:00.000Z","size":24004,"stargazers_count":957,"open_issues_count":20,"forks_count":187,"subscribers_count":26,"default_branch":"devel","last_synced_at":"2025-05-04T16:44:23.015Z","etag":null,"topics":["code-generation","conda","crocoddyl","differential-dynamic-programming","legged-robotics","model-predictive-control","motion-planning","optimal-control","robotics","ros","trajectory-optimization"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/loco-3d.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-06-04T11:46:13.000Z","updated_at":"2025-04-28T06:53:08.000Z","dependencies_parsed_at":"2023-12-30T06:26:45.738Z","dependency_job_id":"4578deb6-e49a-4156-8794-8ea3e1c02b44","html_url":"https://github.com/loco-3d/crocoddyl","commit_stats":{"total_commits":5020,"total_committers":51,"mean_commits":98.43137254901961,"dds":0.7358565737051792,"last_synced_commit":"5b415a16138d01cf43118b38f64dbb6ad535b61b"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loco-3d%2Fcrocoddyl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loco-3d%2Fcrocoddyl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loco-3d%2Fcrocoddyl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loco-3d%2Fcrocoddyl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loco-3d","download_url":"https://codeload.github.com/loco-3d/crocoddyl/tar.gz/refs/heads/devel","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253712002,"owners_count":21951683,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["code-generation","conda","crocoddyl","differential-dynamic-programming","legged-robotics","model-predictive-control","motion-planning","optimal-control","robotics","ros","trajectory-optimization"],"created_at":"2024-08-02T20:00:36.869Z","updated_at":"2025-05-12T09:55:17.719Z","avatar_url":"https://github.com/loco-3d.png","language":"C++","readme":"\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./doc/images/crocoddyl_logo.png\" width=\"800\" alt=\"Crocoddyl Logo\" align=\"center\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://gepettoweb.laas.fr/doc/loco-3d/crocoddyl/master/doxygen-html/\"\u003e\u003cimg src=\"https://img.shields.io/badge/docs-online-brightgreen\" alt=\"Documentation\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://gepgitlab.laas.fr/loco-3d/crocoddyl/pipelines?ref=devel\"\u003e\u003cimg src=\"https://gepgitlab.laas.fr/loco-3d/crocoddyl/badges/devel/pipeline.svg\"\u003e\n\u003ca href=\"https://gepettoweb.laas.fr/doc/loco-3d/crocoddyl/devel/coverage/\"\u003e\u003cimg src=\"https://gepgitlab.laas.fr/loco-3d/crocoddyl/badges/devel/coverage.svg\"\u003e\n\u003ca href=\"https://repology.org/project/crocoddyl/versions\"\u003e\u003cimg src=\"https://repology.org/badge/version-for-repo/aur/crocoddyl.svg\" alt=\"AUR package\"\u003e\u003c/a\u003e\n\u003ca href=\"https://anaconda.org/conda-forge/crocoddyl\"\u003e\u003cimg src=\"https://img.shields.io/conda/vn/conda-forge/crocoddyl.svg\"\u003e\n\u003ca href=\"https://repology.org/project/crocoddyl/versions\"\u003e\u003cimg src=\"https://repology.org/badge/version-for-repo/nix_stable_24_05/crocoddyl.svg\" alt=\"nixpkgs stable 24.05 package\"\u003e\u003c/a\u003e\n\u003ca href=\"https://repology.org/project/crocoddyl/versions\"\u003e\u003cimg src=\"https://repology.org/badge/version-for-repo/nix_unstable/crocoddyl.svg\" alt=\"nixpkgs unstable package\"\u003e\u003c/a\u003e\n\u003ca href=\"https://pypi.org/project/crocoddyl/\"\u003e\u003cimg src=\"https://badge.fury.io/py/crocoddyl.svg\"\u003e\n\u003ca href=\"https://anaconda.org/conda-forge/crocoddyl\"\u003e\u003cimg src=\"https://anaconda.org/conda-forge/crocoddyl/badges/downloads.svg\"\u003e\n\u003ca href=\"https://tldrlegal.com/license/bsd-3-clause-license-%28revised%29#fulltext\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-BSD--3--Clause-blue.svg?style=flat\"\u003e\n\u003c!-- \u003ca href=\"https://github.com/loco-3d/crocoddyl/graphs/contributors\"\u003e\u003cimg src=\"https://img.shields.io/github/contributors/loco-3d/crocoddyl\"\u003e --\u003e\n\u003ca href=\"https://github.com/psf/black\"\u003e\u003cimg src=\"https://img.shields.io/badge/code%20style-black-000000.svg\" alt=\"Code style: black\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## \u003cimg align=\"center\" height=\"20\" src=\"https://i.imgur.com/vAYeCzC.png\"/\u003e Introduction\n\n\u003cimg align=\"right\" src=\"https://i.imgur.com/o2LfbDq.gif\" width=\"25%\"/\u003e\n\n**[Crocoddyl](https://cmastalli.github.io/publications/crocoddyl20icra.html)** 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](https://github.com/stack-of-tasks/pinocchio)** for fast computation of robot dynamics and analytical derivatives.\n\nIf you want to learn more about **Crocoddyl** and its solvers, we suggest reading [[1]](#1) [[2]](#2) [[3]](#3) and visiting [PUBLICATIONS.md](https://github.com/loco-3d/crocoddyl/blob/master/PUBLICATIONS.md). If you want to follow the current developments and contribute, please directly refer to the [devel branch](https://github.com/loco-3d/cddp/tree/devel).\n\n\n## :crocodile: Crocoddyl features\n\u003ctable \u003e\n  \u003ctr\u003e\n    \u003ctd align=\"left\"\u003e\u003cimg src=\"https://cmastalli.github.io/assets/img/publications/highly_dynamic_maneuvers.png\" width=\"10000\"/\u003e\u003c/td\u003e\n    \u003ctd align=\"right\"\u003e\u003cimg src=\"https://i.imgur.com/RQR2Ovx.gif\"/\u003e \u003cimg src=\"https://i.imgur.com/kTW0ePh.gif\"/\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n**Crocoddyl** is versatile:\n * Various optimal control solvers (DDP, FDDP, BoxFDDP, Ipopt, etc)\n * Analytical and sparse derivatives via **[Pinocchio](https://github.com/stack-of-tasks/pinocchio)**\n * Differential geometry support leveraging **[Pinocchio](https://github.com/stack-of-tasks/pinocchio)**\n * Various integrators, dynamics, costs and constraints\n * Numerical differentiation support\n * Automatic differentiation support via **[CppAD](https://github.com/coin-or/CppAD)**\n\n**Crocoddyl** is efficient and flexible:\n * Cache friendly\n * Multi-threading support via **[OpenMP](https://www.openmp.org/)**\n * Python bindings (including abstractions) via **[Boost Python](https://wiki.python.org/moin/boost.python)**\n * C++11/14/17/20 compliant\n * Extensively tested\n * Code generation in both C++ and Python via **[CppADCoGen](https://github.com/joaoleal/CppADCodeGen)**\n\n## :penguin: Installation\n\n**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.\n\n### \u003cimg src=\"https://aur.archlinux.org/static/images/favicon.ico\" height=\"18\" /\u003e On ArchLinux\n\nWith your favorite AUR helper, eg. paru:\n```bash\n    paru -Syu crocoddyl\n```\n\n### :dragon: From \u003cimg src=\"https://s3.amazonaws.com/conda-dev/conda_logo.svg\" height=\"18\"\u003e\n\nJust run the following command in the terminal:\n```bash\n   conda install crocoddyl -c conda-forge\n```\nConda installation supports [![conda install](https://anaconda.org/conda-forge/crocoddyl/badges/platforms.svg)](https://anaconda.org/conda-forge/crocoddyl).\n\n### \u003cimg src=\"https://avatars.githubusercontent.com/u/487568\" height=\"18\" /\u003e From Nix\n\n`crocoddyl` \u0026 `python3Packages.crocoddyl` are available in [nixpkgs](https://github.com/NixOS/nixpkgs/).\n\nThis repository is also a flake, so you may:\n- run a python shell with crocoddyl: `nix run github:loco-3d/crocoddyl`\n- use it in your own flake: `crocoddyl.url = \"github:loco-3d/crocoddyl\";`\n\nThe build cache use by CI and developers is [gepetto.cachix.org](https://app.cachix.org/cache/gepetto)\n\n### :snake: From \u003cimg src=\"https://res.cloudinary.com/practicaldev/image/fetch/s--4-K6Sjm4--/c_imagga_scale,f_auto,fl_progressive,h_420,q_auto,w_1000/https://cdn-images-1.medium.com/max/1600/1%2A_Wkc-WkNu6GJAAQ26jXZOg.png\" height=\"22\"\u003e\n\nJust run the following command in the terminal:\n```bash\n  pip install --user crocoddyl\n```\n\n### :turtle: With ROS\n\nJust clone it (with `--recursive`) into a catkin workspace and compile it.\n\n### :package: From Debian / Ubuntu packages, with [robotpkg](http://robotpkg.openrobots.org)\n\n1. If you have never added robotpkg's software repository, [do it now](http://robotpkg.openrobots.org/debian.html):\n   ```bash\n   sudo tee /etc/apt/sources.list.d/robotpkg.list \u003c\u003cEOF\n   deb [arch=amd64] http://robotpkg.openrobots.org/packages/debian/pub $(lsb_release -sc) robotpkg\n   EOF\n\n   curl http://robotpkg.openrobots.org/packages/debian/robotpkg.key | sudo apt-key add -\n   sudo apt update\n   ```\n2. Install Crocoddyl and its Python bindings:\n   ```bash\n   sudo apt install robotpkg-py3\\*-crocoddyl\n   ```\n3. Configure your environment variables:\n   ```bash\n   export PATH=/opt/openrobots/bin:$PATH\n   export PKG_CONFIG_PATH=/opt/openrobots/lib/pkgconfig:$PKG_CONFIG_PATH\n   export LD_LIBRARY_PATH=/opt/openrobots/lib:$LD_LIBRARY_PATH\n   export PYTHONPATH=/opt/openrobots/lib/python3.10/site-packages:$PYTHONPATH\n   ```\n\n### :file_folder: From source\n\n1. Install Crocoddyl's mandatory dependencies:\n   * [pinocchio](https://github.com/stack-of-tasks/pinocchio)\n   * [Eigen](http://eigen.tuxfamily.org/index.php?title=Main_Page)\n   * [eigenpy](https://github.com/stack-of-tasks/eigenpy)\n   * [Boost](https://www.boost.org/)\n2. (optional) Install Crocoddyl's optional dependencies\n   * [OpenMP](https://www.openmp.org/) \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;(for multi-threading support)\n   * [CppADCoGen](https://github.com/joaoleal/CppADCodeGen) \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;(for code-generation support)\n   * [pycppad](https://github.com/Simple-Robotics/pycppad) \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;(for code-generation support)\n   * [Ipopt](https://github.com/coin-or/Ipopt) \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;(for Ipopt support)\n   * [example-robot-data](https://github.com/gepetto/example-robot-data) \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;(for robotic examples, install Python loaders)\n   * [gepetto-viewer-corba](https://github.com/Gepetto/gepetto-viewer-corba) \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;(for display in Gepetto viewer, i.e., `GepettoDisplay`)\n   * [meshcat-python](https://github.com/rdeits/meshcat-python) \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;(for display in Meshcat, i.e., `MeshcatDisplay`)\n   * [whole_body_state_rviz_plugin](https://github.com/loco-3d/whole_body_state_rviz_plugin) \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;(for display in ROS, i.e., `RvizDisplay`)\n   * [crocoddyl_msgs](https://github.com/RobotMotorIntelligence/crocoddyl_msgs) \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;(for display in ROS, i.e., `RvizDisplay`)\n   * [urdf_parser_py](https://github.com/ros/urdf_parser_py) \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;(for display in ROS, i.e., `RvizDisplay`)\n   * [jupyter](https://jupyter.org/) \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;(for notebooks)\n   * [matplotlib](https://matplotlib.org/) \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;(for plotting)\n3. Clone it (with --recursive), create a build directory inside, and:\n   ```bash\n   cmake .. \u0026\u0026 make \u0026\u0026 make install\n   ```\n\n## :mag: Documentation\n\nCrocoddyl's Doxygen documentation is available [here](https://gepettoweb.laas.fr/doc/loco-3d/crocoddyl/master/doxygen-html/). Alternatively, you can also check out the Jupyter notebooks. We suggest to explore at least these notebooks:\n- [notebooks/01_introduction_to_crocoddyl.ipynb](https://github.com/loco-3d/crocoddyl/blob/master/examples/notebooks/01_introduction_to_crocoddyl.ipynb)\n- [notebooks/02_optimizing_a_cartpole_swingup.ipynb](https://github.com/loco-3d/crocoddyl/blob/master/notebooks/02_optimizing_a_cartpole_swingup.ipynb)\n- [notebooks/03_optimizing_an_unicycle.ipynb](https://github.com/loco-3d/crocoddyl/blob/master/notebooks/03_optimizing_an_unicycle.py)\n- [notebooks/04_actuating_an_acrobot.ipynb](https://github.com/loco-3d/crocoddyl/blob/master/notebooks/04_actuating_an_acrobot.ipynb)\n- [notebooks/05_codegenerating_a_cartpole.ipynb](https://github.com/loco-3d/crocoddyl/blob/master/notebooks/05_codegenerating_a_cartpole.ipynb)\n- [notebooks/06_scaling_to_robotics.ipynb](https://github.com/loco-3d/crocoddyl/blob/master/notebooks/06_scaling_to_robotics.ipynb)\n\nMoreover, after installation, you could run the examples as follows:\n```bash\npython -m crocoddyl.examples.quadrupedal_gaits \"display\" \"plot\" # enable display and plot\n```\nor run examples, unit tests and benchmarks from your build directory as\n```bash\ncd build\nmake test\nmake -s examples-quadrupedal_gaits INPUT=\"display plot\" # enable display and plot\nmake -s benchmarks-cpp-quadrupedal_gaits INPUT=\"100 walk\" # number of trials ; type of gait\n```\nwhere it is possible to enable display and/or plots generated by our examples using the environment variables:\n```bash\nexport CROCODDYL_DISPLAY=1\nexport CROCODDYL_PLOT=1\n```\n\n## :telescope: Citing Crocoddyl\n\nTo cite **Crocoddyl** in your academic research, please use the following BibTeX lines:\n```bibtex\n@inproceedings{mastalli20crocoddyl,\n  author={Mastalli, Carlos and Budhiraja, Rohan and Merkt, Wolfgang and Saurel, Guilhem and Hammoud, Bilal\n  and Naveau, Maximilien and Carpentier, Justin and Righetti, Ludovic and Vijayakumar, Sethu and Mansard, Nicolas},\n  title={{Crocoddyl: An Efficient and Versatile Framework for Multi-Contact Optimal Control}},\n  booktitle = {IEEE International Conference on Robotics and Automation (ICRA)},\n  year={2020}\n}\n```\nPlease consider citing our selected publications and contributions described in [PUBLICATIONS.md](https://github.com/loco-3d/crocoddyl/blob/master/PUBLICATIONS.md).\n\n**Crocoddyl's** contributions extend beyond efficient software development. Please also consider citing the algorithm contributions of our different solvers and formulations:\n - Feasibility-driven solvers (FDDP and Box-FDDP): [[1]](#1), [[2]](#2)\n - Inverse-dynamics trajectory optimization and endpoint constrains: [[3]](#3) [[4]](#4)\n - Multi-Contact Inertial Parameters Estimation and Localization in Legged Robots: [[5]](#5)\n\n\nFinally, please also consider citing **[Pinocchio](https://github.com/stack-of-tasks/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](https://github.com/stack-of-tasks/pinocchio).\n\n\n### :open_book:  Selected publications\n\n\u003ca id=\"1\"\u003e[1]\u003c/a\u003e 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](https://cmastalli.github.io/publications/crocoddyl20icra.html), IEEE International Conference on Robotics and Automation (ICRA), 2020.\n\n\u003ca id=\"2\"\u003e[2]\u003c/a\u003e C. Mastalli, W. Merkt, J. Marti-Saumell, H. Ferrolho, J. Sola, N. Mansard and S. Vijayakumar. [A Feasibility-Driven Approach to Control-Limited DDP](https://arxiv.org/pdf/2010.00411.pdf), Autonomous Robots, 2022.\n\n\u003ca id=\"3\"\u003e[3]\u003c/a\u003e C. Mastalli, S. P. Chhatoi, T. Corbères, S. Tonneau and S. Vijayakumar. [Inverse-Dynamics MPC via Nullspace Resolution](https://arxiv.org/pdf/2209.05375.pdf), IEEE Transactions on Robotics, 2023.\n\n\u003ca id=\"4\"\u003e[4]\u003c/a\u003e M. Parilli, S. Martinez, and C.Mastall. [Endpoint-Explicit Differential Dynamic Programming via Exact Resolution](https://arxiv.org/pdf/2503.03897), IEEE International Conference on Robotics and Automation (ICRA), 2025.\n\n\u003ca id=\"5\"\u003e[5]\u003c/a\u003e S. Martinez, R. Griffin, and C.Mastalli. [Multi-Contact Inertial Parameters Estimation and Localization in Legged Robots](https://arxiv.org/pdf/2403.17161), IEEE Robotics and Automation Letters (RAL), 2025.\n\n## :computer:  Questions and Issues\n\nYou have a question or an issue? Please open a [new issue](https://github.com/loco-3d/crocoddyl/issues) or a [discussion](https://github.com/loco-3d/crocoddyl/discussions).\n\n\n## :copyright: Credits\n\n### :writing_hand: Written by\n\n- [Carlos Mastalli](https://cmastalli.github.io/), Heriot-Watt University :uk: (project manager)\n- [Nicolas Mansard](http://projects.laas.fr/gepetto/index.php/Members/NicolasMansard), LAAS-CNRS :fr:\n- [Rohan Budhiraja](https://scholar.google.com/citations?user=NW9Io9AAAAAJ), LAAS-CNRS :fr: (alumnus)\n\n### :construction_worker: With contributions from\n\n\n- [Guilhem Saurel](http://projects.laas.fr/gepetto/index.php/Members/GuilhemSaurel), LAAS-CNRS :fr:\n- [Wolfgang Merkt](http://www.wolfgangmerkt.com/research/), University of Oxford :uk:\n- [Justin Carpentier](https://jcarpent.github.io/), INRIA :fr:\n- [Andrea Del Prete](https://andreadelprete.github.io/), Università degli Studi di Trento :it:\n- [Wilson Jallet](https://manifoldfr.github.io), INRIA :fr:\n- [Maximilien Naveau](https://scholar.google.fr/citations?user=y_-cGlUAAAAJ\u0026hl=fr), MPI :de:\n- [Josep Martí Saumell](https://www.iri.upc.edu/staff/jmarti), IRI: CSIC-UPC :es:\n- [Bilal Hammoud](https://scholar.google.com/citations?hl=en\u0026user=h_4NKpsAAAAJ), MPI :de:\n- [Julian Eßer](https://github.com/julesser), Fraunhofer :de:\n\n\n## :trophy: Acknowledgments\n\n**Crocoddyl** development was supported by the [EU MEMMO project](http://www.memmo-project.eu/) and the [EU RoboCom++ project](http://robocomplusplus.eu/). It is maintained by the [Robot Motor Intelligence (RoMI) Lab](https://www.romilab.org) [@ Heriot-Watt University](https://www.edinburgh-robotics.org/), the [Gepetto team](http://projects.laas.fr/gepetto/) [@ LAAS-CNRS](http://www.laas.fr), and the [Willow team](https://www.di.ens.fr/willow/) [@ INRIA](https://www.inria.fr/fr/centre-inria-de-paris).\n","funding_links":[],"categories":["C++","Optimal Control and Trajectory Optimization :rocket:","[Libraries](#awesome-robotics-libraries)","Libraries \u0026 Frameworks","🦿 Humanoid \u0026 Legged Robots","Libraries and Frameworks"],"sub_categories":["Biomechanical Models","[Motion Planning and Control](#awesome-robotics-libraries)","Autopilots"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floco-3d%2Fcrocoddyl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floco-3d%2Fcrocoddyl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floco-3d%2Fcrocoddyl/lists"}