Arboris is a rigid body dynamics and contacts simulator written in python.

Arboris includes a generic and easily extensible set of joints (singularity-free multi-dof joints, non-honolomic joints, etc.) which are used to model open rigid mechanisms with a minimal set of state variables.

The dynamics of these systems are computed in a form similar to the Boltzmann-Hamel equations.

Using time-stepping and a semi-implicit Euler integration scheme, a first-order approximation of the model is also computed. This allows for additional constraints such as contacts and kinematic loops to be solved using a Gauss-Seidel algorithm.

Arboris is mostly useful for robotic applications and human motion studies. The python language makes it particularly suited for fast-paced development (prototyping) and education.


In 2005, Alain Micaelli, a researcher from CEA LIST, wrote a first version of the simulator in the matlab language. It was an implementation (and often an extension) of the algorithms described in [Park2005], [Murray1994] and [Liu2003]. He was later joined by Sébastien Barthélemy, from ISIR/UPMC, who reorganized the code to take advantage of the early object-oriented features of matlab. It eventually became clear that the language was ill-designed, and that a full rewrite was necessary. With the help of Joseph Salini, also from ISIR/UPMC, Arboris-python was born. The resulting framework is now quite similar to what is presented in [Duindam2006].

The matlab version of the simulator is now deprecated.

[Murray1994]Richard M. Murray, Zexiang Li and S. Shankar Sastry, “A Mathematical Introduction to Robotic Manipulation”, CRC Press, 1994.
[Park2005]Jonghoon Park, “Principle of Dynamical Balance for Multibody Systems”, Multibody System Dynamics, vol. 14, number 3-4, pp. 269-299, 2005.
[Liu2003]T. Liu and M. Y. Wang, “Computation of three dimensional rigid body dynamics of multiple contacts using time-stepping and Gauss-Seidel method”, IEEE Transaction on Automation Science and Engineering, submitted, November 2003.
[Duindam2006]V. Duindam, “Port-Based Modelling and Control for Efficent Bipedal Walking Robots”, University of Twente, 2006.

Comparison to arboris-matlab

I believe this version of arboris, written in python, is much better than the one written in matlab, and I’ll try here to explain why.

  • python is better than matlab for what we do
    • arboris-matlab is written in the first (pre r2008a) matlab objet-oriented language, which is a really bad language. So bad that an entire book has been written about various tricks to circumvent its flaws (serious flaws as: no reference, no namespace, everything-is-matrix-philosophy-but-not-always, arrays cannot be subclassed...). I do think that if the matlab version is to be kept, it should be rewritten in the new matlab object-oriented language.
    • python is cheaper than matlab,
    • python has lots useful development tools such as docutils, doctest, sphinx. (Well, matlab has an integrated debugger which python still misses).
    • More good (free) libraries are available for python than for matlab (in particular thanks to swig, sage). (Matlab has really good toolboxes too, but the price tag is not the same).
    • Python, as a scripting language, is embedded in blender and maya, which opens up great visualisation possibilities.
    • its easier to wrap C/C++ code to python than to matlab.
  • arboris-python design is better, because it has been written from the ground up, keeping the good ideas from the matlab version, but not the historical mess of code. Here are some more specific reasons:
    • the tree of bodies and joints is described in a tree datastructure, not as a combination of serial chains.
    • generic joints handling is better. It know possible to have planar models, anchored robots and singularity-free ball and socket joints.
    • the visualisation is clearly separated from the core.
    • the controllers model is first order, without modifying the whole robot/world.
    • the simulation is faster, because the design is better and because in arboris-python we do not integrate a second time after the constraints computation.
  • misc
    • the arboris-python version has a much better documentation.
    • there is no more error('coucou') messages
    • the arboris-python version has automated unit tests.

There are still areas where arboris-python is behind:

  • python as no integrated debugger,
  • fewer collisions are implemented (it’s easy to fix),
  • fewer contact models are implemented (it’s not hard to fix),
  • there is no visco-elastic constraint,
  • there is no kinematic (or 0-degree) robot,
  • the python version has been less tested by real users,
  • the python version has no gui to set the posture.
  • there is no more error('coucou') messages

Table Of Contents

Previous topic

Welcome to arboris-python’s documentation!

Next topic

Quick start

This Page