This software provides robot dynamics algorithms. It uses a combination of a specific representation of robot models and C++ templates, such that each algorithm remains model-independant, yet is optimized for a particular robot at compile-time. It makes use of R. Featherstone's Spatial Algebra to describe forces, motions and inertias (cf. Rigid Body Dynamics Algorithms, Roy Featherstone).
include/metapod/spatial: header-only spatial algebra library.
include/metapod: header-only library of robot dynamics algorithms. Algorithms consist of the combination of compile-time traversal algorithms and visitors. They can be applied to a robot model which is a class with a specific structure.
robotbuilder: a library to help generating the source code of robot model classes.
embedfile: an utility executable used to embed templates in the robotbuilder library.
metapodfromurdf: an utility executable based on robotbuilder and liburdf which generates the source code of robot model classes from an URDF description.
binarytreemodel: an utility executable based on robotbuilder which generates the source code of robot model classes with a binary kinematic tree. Those models are named sample_[1-4]and are used for benckmarks.
data: URDF definition of the simple_arm and simple_humanoid models which are used for examples, tests and benchmarks.
tests: some tests for metapod and metapod::Spatial
timer: a portable timer library used for the benchmarks.
benchmark: some benchmarks
doc: some doc.
The package depends on several packages which have to be available on your machine.
To compile this package, it is recommended to create a separate build directory:
mkdir _build
cd _build
cmake -DBUILD_METAPODFROMURDF=OFF ..
make install
Please note that CMake produces a CMakeCache.txt
file which should
be deleted to reconfigure a package from scratch.
In order to build the urdf converter, you'll need to install liburdfdom or liburdf. There are several options:
Install urdfdom alone
git clone git://github.com/ros/console_bridge.git && cd console_bridge git checkout 0.1.5 mkdir build && cd build cmake .. make sudo make install
git clone git://github.com/ros/urdfdom_headers && cd urdfdom_headers git checkout 0.2.2 mkdir build && cd build cmake .. make sudo make install
git clone git://github.com/ros/urdfdom && cd urdfdom git checkout 0.2.7 mkdir build && cd build cmake .. make sudo make install
Or install ROS groovy using the ubuntu packages and just do
source /opt/ros/groovy/setup.bash
before running cmake.
Or install ROS fuerte using the ubuntu packages and just do
source /opt/ros/fuerte/setup.bash
before running cmake.
Development branch documentation is available online.
Benchmark times different with different combination of outer and inner loop.
Please do not use benchmark/benchmark to make performances comparisons. The programs benchmark/benchmark_metapod_simple_humanoid_CRBA and benchmark/benchmark_metapod_simple_humanoid_RNEA are more coherent.
NP is mandatory
Benjamin Chretien pointed out that a dummy root link is necessary as a Galilean Frame for the urdf file parser of metapod.