Rigid Body Dynamics Library
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages

This is the documentation of RBDL, the Rigid Body Dynamics Library. The library contains highly efficient code for both forward and inverse dynamics for kinematic chains and branched models. It includes:

  • Recursive Newton Euler Algorithm (RNEA)
  • Composite Rigid Body Algorithm (CRBA)
  • Articulated Body Algorithm (ABA).

Furthermore it contains code for forward and inverse kinematics, computations of Jacobians, contact handling. Models can be loaded from Lua scripts or URDF files.

The code is developed by Martin Felis martin.felis@iwr.uni-heidelberg.de at the research group Optimization in Robotics and Biomechanics (ORB) of the Interdisciplinary Center for Scientific Computing (IWR) at Heidelberg University. The code is heavily inspired by the pseudo code of the book "Rigid Body Dynamics Algorithms" of Roy Featherstone.

The code has no external dependencies but for optimal performance it is advised to use version 3 of the Eigen math library. More information about it can be found here: http://eigen.tuxfamily.org/. The Eigen3 library must be obtained and installed separately.


You can download the most recent stable version as zip file from here:

All development takes place on Bitbucket and you can follow RBDL's development here:

Recent Changes

  • 23 February 2015: New version 2.4.0:
  • 21 October 2014: New version 2.3.3:
    • critical: fixed ForwardDynamicsContacts with constraints on a body that is attached with a fixed joint. Previous versions simply crashed. Thanks to Yue Hu for reporting!
    • rbdl_print_version() now properly prints whether URDFReader was enabled at build time
    • build system: fixed roblems especially building of the URDFreader
    • build system: all CMake variables for RBDL are now prefixed with RBDL_
    • FindRBDL.cmake now can use components to search for the LuaModel or URDFReader addon
  • 29 August 2014: New version 2.3.2:
    • critical: fixed ForwardDynamicsLagrangian which used uninitialized values for the joint space inertia matrix (thanks to Benjamin Michaud)
    • critical: fixed ForwardDynamicsContacts when using 3-dof joints
    • critical: fixed CalcBodyWorldOrientation for fixed joints (thanks to Hilaro Tome!)
    • critical: fixed CompositeRigidBodyDynamics when using 3-dof joints (thanks to Henning Koch!)
  • 13 July 2014: New version: 2.3.1:
    • critical: fixed angular momentum computation. Version 2.3.0 produced wrong results. (Thanks to Hilario Tome and Benjamin Michaud for reporting!)
    • critical: fixed JointTypeEulerZYX. Previous versions produce wrong results!
    • fixed library version number for the LuaModel addon.
  • 17 March 2014: New version: 2.3.0:
  • 06 November 2013: New version 2.2.2: adjusted Body default constructor (inertia matrix now 3x3 identity instead of zero matrix)
  • 4 November 2013: New version 2.2.1: fixed exported library version
  • 28 October 2013: New version 2.2.0: added support for spherical joints that do not suffer from Singularities
  • 29 September 2013: New version 2.1.0: adjusted build settings and symbol export to be debian compatible. Removed vendor code such as Lua 5.2 and UnitTest++. Must be pre-installed if tests or LuaModel Addon is enabled.
  • 05 September 2013: New version 2.0.1: fixed some errors on older compilers and CMake configuration of examples. No changes required when migrating from 2.0.0.
  • 18. July 2013: new API version 2.0.0 for details see (API Changes)
  • 20. February 2013: removed too specialized RigidBodyDynamics::Body constructor (API version 1.1.0)
  • 29. January 2013: added code for API Changes. Current is 1.0.0.
  • 18. June 2012: added support of Lua Models
  • 01. June 2012: added support of Fixed Joints
  • 14. May 2012: fixed Body constructor as reported by Maxime Reis
  • 04. April 2012: added benchmark tool for CRBA
  • 01. March 2012: added multi degree of freedom Joint Modeling
  • 06. Februry 2012: restructured constraint handling using RigidBodyDynamics::ConstraintSet
  • 24. January 2012: implemented compact and fast representation of RigidBodyDynamics::Math::SpatialTransform


A simple example for creation of a model and computation of the forward dynamics using the C++ API can be found here.

Another example that uses the LuaModel Addon can be found here.

API reference separated by functional modules

The page API Changes contains information about incompatibilities of the existing versions and how to migrate.


The library is published under the very permissive zlib free software license which should allow you to use the software wherever you need. Here is the full license text:

RBDL - Rigid Body Dynamics Library
Copyright (c) 2011-2014 Martin Felis <martin.felis@iwr.uni-heidelberg.de>

This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.

Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:

   1. The origin of this software must not be misrepresented; you must not
   claim that you wrote the original software. If you use this software
   in a product, an acknowledgment in the product documentation would be
   appreciated but is not required.

   2. Altered source versions must be plainly marked as such, and must not be
   misrepresented as being the original software.

   3. This notice may not be removed or altered from any source


Work on this library was funded by the Heidelberg Graduate School of Mathematical and Computational Methods for the Sciences (HGS) and the European FP7 projects ECHORD (grant number 231143) and Koroibot (grant number 611909).