RAISIM, A PHYSICS ENGINE FOR ROBOTICS AND AI RESEARCH ( NN learned robotic simulation for any real robot)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Jemin Hwangbo 90ca760e71
Update README.md
3 weeks ago
examples cleanup raisimlib example files 10 months ago
img modified readme news 1 year ago
include prolonged the license. includes a few methods from raisim v1.0 1 month ago
lib prolonged the license. includes a few methods from raisim v1.0 1 month ago
.gitignore initial commit 1 year ago
.travis.yml Travis CI file 10 months ago
CHANGE_LOG.md getCollisionBody method in AS. collision body name convention changed (always linkName/id). change log added 1 year ago
CMakeLists.txt version++ 8 months ago
COPYING initial commit 1 year ago
LICENSE.md prolonged the license. includes a few methods from raisim v1.0 1 month ago
README.md Update README.md 3 weeks ago
package.xml Fixes package dependency in the package.xml 11 months ago



travis ci


You must read the LICENSE before using this software


  • The latest version is available at github.com/raisimTech/raisimlib. It is currently only for academic use but we will provide a commercial license soon.
  • The old license is expired so I prolonged it for 3 more months. You have to pull to continue using raisim. I will soon release v1.0!
  • I am preparing RaiSim v1.0! updates are slow now but big improvements are coming! (around June)
  • As of 19/12/22, joint/dynamics element in a URDF can have “damping”, “stiffness”, “spring_mount”, and “rotor_inertia”
  • As of 19/12/21, Joint and frame methods are modified. Now parent of a movable joint is itself.
  • As of 19/11/12, you can perform a ray collision test (e.g., to emulate laser sensor). It returns position, normal and the object ID.
  • v0.6.0 introduces new api that lets users create an ArticulatedSystem programatically. Check out the example in raisimOgre!
  • In v0.5.0, the error reduction mechanisam of Raisim is significantly improved! Please pull. No API change
  • As of v0.4.0, RAISIM can simulate any trimesh (including non-convex ones). alt-text-2
  • As of v0.3.0, all “_W” prefixes in method names are gone. For example, getPosition_W() is now getPosition()


Feel free to use the github issues as a forum. Raisim does not have a dedicated forum now.


  • Linux only. support ubuntu 16.04 and 18.04 but might work on other distributions
  • g++, gcc > 6 (how to install?)
  • cmake > 3.10 (how to install?)
  • The binaries contain avx2 instructions. If your CPU is 6-year-old or older, it is likely that raisimLib does not work on your machine.

What is raisim/raisimLib?

Raisim is a physics engine for rigid-body dynamics simulation. Although it is a general physics engine, it has been mainly used/tested for robotics and reinforcement learning so far. It features an efficient implementation of recursive algorithms for articulated system dynamics (Recursive Newton-Euler and Composite Rigid Body Algorithm). RaisimLib is an exported cmake package of raisim.

  • raisimOgre: a visualizer for RAISIM
  • raisimGym: a few gym environments using RAISIM
  • raisimPy: a (third-party) python wrapper of RAISIM


Please install/save everything locally to prevent any conflicts with other libraries. We will assume that you have a single workspace where you save all repos related to raisim. Here we introduce two variables

  • WORKSPACE: workspace where you clone your git repos (e.g., ~/raisim_workspace)
  • LOCAL_BUILD: build directory where you install exported cmake libraries (e.g., ~/raisim_build)


raisim depends on the two open-source libraries

  • eigen (sudo apt-get install libeigen3-dev)
  • png (included in raisim. Automatically installed if you install raisim)


Installing raisim is trivial. Just copy paste lib and include to LOCAL_BUILD, or you can use cmake. Assuming that you have cloned this repo,

cd $WORKSPACE/raisimLib
mkdir build && cd build && cmake .. -DCMAKE_INSTALL_PREFIX=$LOCAL_BUILD && make install


A short manual can be found here

Watch the video

I am working on a new manual here but it is not complete.

raisimLib is a cmake package. In your project CMakeList.txt,

find_package(raisim CONFIG REQUIRED)
target_link_library(YOUR_APP raisim::raisim)

When you run cmake of your project, let cmake know where raisim is installed, e.g.,


Performance benchmark

please refer to https://leggedrobotics.github.io/SimBenchmark/

Short example

The following code creates raisim::World and simulates a robot, a ball and a flat terrain.

#include “raisim/World.hpp”

int main() {
    raisim::World world;
    auto anymal = world.addArticulatedSystem(“pathToURDF”); // initialized to zero angles and identity orientation. Use setState() for a specific initial condition
    auto ball = world.addSphere(1, 1); // radius and mass
    auto ground = world.addGround();


Simulation examples

These example videos are generated with raisimOgre (https://github.com/leggedrobotics/raisimOgre)

alt-text-1 alt-text-1 alt-text-1 alt-text-1

Reinforcement learning examples

The policy is trained with raisimGym (https://github.com/leggedrobotics/raisimGym)


Who made raisim?

Jemin Hwangbo (Robotic Systems Lab, ETH Zurich) is developing and managing raisim with the help from the following contributors:

  • Donho Kang, Robotic Systems Lab, ETH Zurich
  • Joonho Lee, Robotic Systems Lab, ETH Zurich

Contact us

For bug reports/feature requests/instructions, use github issues. For private inquiries, please contact us at jemin.hwangbo {at} gmail {dot} com.


Frequently asked questions and their corresponding answers are listed here.

How to post github issue

Please, whenever possible, include a standalone executable (which depends only on raisim and raisimOgre) reproducing the issue.

Modeling tips


  • Ensure that your URDF file does not have unrealistic internal collisions.
  • Use raisimOgre to visually inspect your URDF before simulating it (setting the simulation to the manual stepping mode helps). Check if the number of internal collisions in the nominal configuration is zero.


  • Raisim adds a spring element to mitigate numerical errors. If your system becomes unstable, it is most likely that it is due to the Error Reduction Parameter (ERP). You can set it using raisim::World::setERP()

How to cite

The contact related algorithms are published in the below article

  title={Per-contact iteration method for solving contact dynamics},
  author={Hwangbo, Jemin and Lee, Joonho and Hutter, Marco},
  journal={IEEE Robotics and Automation Letters},

Created by

rsl rsl eth