Kinematics and Dynamics for Robotics

This library defines a interface for a vector. It is possible to assign a certain physical type to the vector, such as position or velocity. The section Interface describes the functionalities, whereas the section Implementation shows some examples.


The class kindr::VectorBase serves as an interface for a vector. Vectors of all physical types are derived from this base class.

Physical quantities:

The following representations are currently provided by the library:

  • Typeless
  • Time
  • Mass
  • Inertia
  • Power
  • Energy
  • Jerk
  • Acceleration
  • Velocity
  • Position
  • Force
  • Momentum
  • AngularJerk
  • AngularAcceleration
  • AngularVelocity
  • Angle
  • Torque
  • AngularMomentum


The default constructor always initializes all coordinates equal to zero. Other (explicit) constructors use another vector or the implementation type. If the dimension of the vector is three, there is a constructor which accepts x, y and z as arguments.


All possible operators (+, -, *, /, +=, -=, *=, /=, (), <<) can be used for a vector object. However it is not possible to add or subtract vectors of different physical types. Elementwise multiplication and division is only possible for predefined triples of physical types. The dot product can be used, as well as the cross product (for vectors of dimension three).

Other methods

All coordinates can be set to zero by the function setZero(). The vector can be normalized with normalize(). There are methods which return the biggest or the smallest element, the sum or the mean of the entries. If the dimension of the vector is three, the coordinates can be accessed by x(), y() and z().


All types can be included by

#include <kindr/Core>

and lie within the namespace kindr.