Rigid Body Dynamics Library
A simple example

Here is a simple example how one can create a meaningless model and compute the forward dynamics for it:

/*
* RBDL - Rigid Body Dynamics Library
* Copyright (c) 2011-2016 Martin Felis <martin.felis@iwr.uni-heidelberg.de>
*
* Licensed under the zlib license. See LICENSE for more details.
*/
#include <iostream>
#include <rbdl/rbdl.h>
using namespace RigidBodyDynamics;
using namespace RigidBodyDynamics::Math;
int main (int argc, char* argv[]) {
rbdl_check_api_version (RBDL_API_VERSION);
Model* model = NULL;
unsigned int body_a_id, body_b_id, body_c_id;
Body body_a, body_b, body_c;
Joint joint_a, joint_b, joint_c;
model = new Model();
model->gravity = Vector3d (0., -9.81, 0.);
body_a = Body (1., Vector3d (0.5, 0., 0.0), Vector3d (1., 1., 1.));
joint_a = Joint(
Vector3d (0., 0., 1.)
);
body_a_id = model->AddBody(0, Xtrans(Vector3d(0., 0., 0.)), joint_a, body_a);
body_b = Body (1., Vector3d (0., 0.5, 0.), Vector3d (1., 1., 1.));
joint_b = Joint (
Vector3d (0., 0., 1.)
);
body_b_id = model->AddBody(body_a_id, Xtrans(Vector3d(1., 0., 0.)), joint_b, body_b);
body_c = Body (0., Vector3d (0.5, 0., 0.), Vector3d (1., 1., 1.));
joint_c = Joint (
Vector3d (0., 0., 1.)
);
body_c_id = model->AddBody(body_b_id, Xtrans(Vector3d(0., 1., 0.)), joint_c, body_c);
VectorNd Q = VectorNd::Zero (model->dof_count);
VectorNd QDot = VectorNd::Zero (model->dof_count);
VectorNd Tau = VectorNd::Zero (model->dof_count);
VectorNd QDDot = VectorNd::Zero (model->dof_count);
ForwardDynamics (*model, Q, QDot, Tau, QDDot);
std::cout << QDDot.transpose() << std::endl;
delete model;
return 0;
}

If the library itself is already created, one can compile this example with CMake. In the example folder is a CMakeLists.txt file, that can be used to automatically create the makefiles by using CMake. It uses the script FindRBDL.cmake which can be used to find the library and include directory of the headers.

The FindRBDL.cmake script can use the environment variables RBDL_PATH, RBDL_INCLUDE_PATH, and RBDL_LIBRARY_PATH to find the required files.

To build it manually you have to specify the following compiler and linking switches:

g++ example.cc -I<path to build folder>/src -I<path to src folder> -lrbdl -L<path to librbdl.a> -o example