Skip to content
Evan Drumwright edited this page Feb 26, 2016 · 16 revisions

A Ravelin

[Installation instructions](Installation instructions)

Examples

Documentation

What is Ravelin?

Ravelin is a C++ library for rigid body and multi-rigid body kinematics and dynamics.

Kinematics and dynamics specifics

  • Reference points for rigid bodies need not be collocated with centers-of-mass
  • Composite Rigid Body Algorithm and Featherstone Articulated Body Algorithm implementations
  • Rigid body and multi-rigid body kinematics and dynamics computation, including poses, velocities, accelerations, inertias, momenta, forces, and Jacobians
  • Both explicit and implicit joint constraints supported: dynamics computable in minimal coordinates and absolute coordinates
  • Floating bases, tree-like kinematic topologies, and mechanisms with kinematic loops supported
  • Frame checking: operations on kinematic and dynamic quantities defined in different frames throw exceptions
  • Supports reading in multi-rigid body kinematics and dynamics from URDF
  • Results from all dynamics algorithms have been verified against Featherstone's MATLAB-based code

Matrix/vector arithmetic and linear algebra specifics

Ravelin wraps BLAS and LAPACK in place of Eigen.

  • Arithmetic with zero-dimensional matrices/vectors supported
  • Matrix/vector arithmetic and linear algebra through very reliable BLAS and LAPACK libraries
  • Efficient block operations on matrices and vectors (similar to Eigen's segment() and block() functions)
  • Minimum templated C++ code for fast compilation
  • Iterators, which provides compatibility with STL and Boost algorithms
  • Straightforward semantics on memory allocation toward programming for real-time systems

Why should you use Ravelin?

You should use Ravelin if one or more of the following applies to you:

  • You are computing robot kinematics or dynamics
  • You want to reduce programming errors by catching frame (pose) mismatches
  • You want to use the most robust matrix/vector arithmetic and linear algebraic implementation available
  • You are programming for real-time systems (like control loops) and need to ensure that memory is not allocated during your real-time code

How does Ravelin compare to KDL?

  • Ravelin supports floating bases and kinematic loops (KDL does not)
  • Ravelin's dynamics computations are complete (KDL's are not)
  • KDL contains methods for trajectory formation (Ravelin does not)
  • KDL contains various methods for inverse kinematics using resolved motion rate control (Ravelin does not implement IK, though it provides the Jacobians necessary to do so)
  • KDL uses Eigen (Ravelin wraps BLAS/LAPACK)