The OCS2 library is written in C++11. It is tested under Ubuntu 20.04 with library versions as provided in the package sources.

Source code

The source code is hosted on GitHub: leggedrobotics/ocs2.

# Clone OCS2
git clone


  • C++ compiler with C++11 support

  • Eigen (v3.3)

  • Boost C++ (v1.71)

  • GLPK sudo apt install libglpk-dev

  • catkin sudo apt-get install catkin

  • pybind11_catkin, ROS package, installable via sudo apt install ros-noetic-pybind11-catkin

  • catkin-pkg package for python3. Install with sudo apt install python3-catkin-tools

  • Doxygen for documentation. Install with sudo apt install doxygen doxygen-latex

Optional Dependencies

  • For rigid multi-body dynamics library and self collision support clone Pinocchio and HPP-FCL into your workspace

# Clone pinocchio
git clone --recurse-submodules
# Clone hpp-fcl
git clone --recurse-submodules
# install dependencies
sudo apt install liburdfdom-dev liboctomap-dev libassimp-dev
  • rqt_multiplot package can be used for visualizing the solver’s performance indices and other optimization outputs

sudo apt-get install ros-noetic-rqt-multiplot
  • RaiSim simulator can be used as a provider for rollouts. The corresponding ocs2_raisim package has additional requirements:

    RaiSim package, which needs to be installed from source by cloning it into your workspace:

    git clone --depth 1

    For installation, follow the instructions of the RaiSim webpage. Alternatively, in order to make the installation easy to find for catkin and easy to uninstall in the future, consider using CheckInstall which will install RaiSim as a debian package. For this, replace the original commands:

    cmake .. -DCMAKE_INSTALL_PREFIX=$LOCAL_INSTALL <other options>
    make install -j4


    cmake .. <other options>     (Without INSTALL_PREFIX)
    make -j4 && sudo checkinstall

    This will install RaiSim at the default location of /usr/local/lib which will also be automatically detected by catkin. When asked by checkinstall, change the package name to something appropriate (e.g. “raisim”) to it find later for package management, such as for uninstallation (dpkg -r <package_name>).

  • Grid Map catkin package, which may be installed with sudo apt install ros-noetic-grid-map-msgs.

  • RaisimOgre Visualizer for Raisim. Can be used for debugging purposes to see if conversions between OCS2 and Raisim are correct.


Build the library

Create a new catkin workspace:

# Create the directories
# Do not forget to change <...> parts
mkdir -p <directory_to_ws>/<catkin_ws_name>/src
cd <directory_to_ws>/<catkin_ws_name>/

# Initialize the catkin workspace
catkin init
catkin config --extend /opt/ros/noetic
catkin config -DCMAKE_BUILD_TYPE=RelWithDebInfo

Clone the OCS2 library:

# Navigate to the directory of src
# Do not forget to change <...> parts
cd <directory_to_ws>/<catkin_ws_name>/src
git clone

Build and run the unit tests:

# Build it
catkin build ocs2

# Source it
source <directory_to_ws>/<catkin_ws_name>/devel/setup.bash

# run tests
catkin run_tests ocs2

Build this Documentation

Assuming python catkin tools are installed, run the following command:

# Navigate to the directory of ocs2_doc
# Do not forget to change <...> parts
cd <directory_to_ws>/<catkin_ws_name>/src/ocs2/ocs2_doc

# make build directory
mkdir -p build
# Navigate to the build folder
cd build

# build docs
cmake ..

This will build the documentation and place it in the build/output/sphinx folder. Open the index.html in your web browser.