/kindr

Kinematics and Dynamics for Robotics

Primary LanguageC++BSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

Kindr - Kinematics and Dynamics for Robotics

Authors: Christian Gehring, C. Dario Bellicoso, Michael Bloesch, Remo Diethelm, Peter Fankhauser, Paul Furgale, Michael Neunert, Hannes Sommer
Maintainer: Remo Diethelm, rdiethelm@anybotics.com
Affiliation: ANYbotics

This projected was initially developed at ETH Zurich (Autonomous Systems Lab & Robotic Systems Lab).

This work is conducted as part of ANYmal Research, a community to advance legged robotics.

The source code is released under a BSD 3-Clause license.

Documentation

Online

Impatient individuals can directly download the cheat sheet.

See also section 'Building the documentation' below.

Changelog

Kindr 1.0.0

  • Simplified header include #include <kindr/Core> is provided.
  • Kindr is now strongly dependent on Eigen.
  • All sub namespaces have been removed. (e.g. kindr::rotations::eigen_impl -> kindr::)
  • The implementations of rotations and time derivatives have been simplified (Passive, Hamiltonian).
    • Active typedefs (e.g. RotationQuaternionAD) have been removed and simpler ones (e.g. RotationQuaternionD) have been introduced.
    • Note that the functionality of some operators changed! Please check the cheat sheet to understand what is implemented.
    • Some hints on what needs to be changed from kindr 0.0.1:
      • rotation.setFromVectors(v1, v2) -> rotation.setFromVectors(v2, v1)
      • C_BI.boxPlus(dt * B_w_IB) -> C_BI.boxPlus(dt * C_IB * B_w_IB)
      • C_BI.boxMinus(dt * B_w_IB) -> -C_BI.boxMinus(dt * B_w_IB)
      • Euler angles probably have to be negated.
  • Conversion methods between ROS and kindr have been moved to the package kindr_ros.
  • Concatenation of Homogeneous Transformation is now implemented.
  • Short typedefs are provided for Homogeneous Transformation: HomTransformQuatD, HomTransformMatrixD.
  • Jacobian of exponential map is implemented.
  • Unit tests based on gtest are provided to test the convention of other software packages.
    • Gazebo (gazebo::math::Quaternion) uses the same convention as kindr.
    • ROS TF (tf::Quaternion and tf::Matrix3x3) uses the same convention as kindr.
    • RBDL's RigidBodyDynamics::Math::SpatialTransform uses the same convention as kindr, whereas RBDL's RigidBodyDynamics::Math::Quaternion concatenates differently and its conversion to a rotation matrix is inverted.

Requirements

  • Eigen 3.2.0 (Older versions might also work)
  • GCC 4.7 is required at the minimum.
  • CMake 2.8.3 is required at the minimum.

Building

Building with cmake

Install the library with CMake:

mkdir build
cd build
cmake .. -DUSE_CMAKE=true
sudo make install

Note that USE_CMAKE defaults to true if catkin is not installed.

Uninstall the library with:

cd build
sudo make uninstall

Kindr can be included in your cmake project. Add the following to your CmakeLists.txt:

find_package(kindr)
include_directories(${kindr_INCLUDE_DIRS})

Building with catkin

Build kindr with catkin:

cd ~/catkin_ws/src
git clone git@github.com:anybotics/kindr.git
catkin_make_isolated -C ~/catkin_ws

or with catkin command line tools:

cd ~/catkin_ws/src
git clone git@github.com:anybotics/kindr.git
catkin build -w ~/catkin_ws kindr

Kindr can be included in your catkin project with: Add the following to your CMakeLists.txt:

find_package(catkin COMPONENTS kindr)
include_directories(${catkin_INCLUDE_DIRS})

And to your package.xml:

<package>
  <build_depend>kindr</build_depend>
</package>

Building the documentation

Build the documentation with Doxygen:

mkdir build
cd build
cmake ..
make kindr_doc

The doxygen documentation can be found here:

build/doc/html/index.html

Building unit tests with gtest

GTests are only built if the folder gtest exists in the root folder.

Download and use GTest:

wget https://github.com/google/googletest/archive/release-1.7.0.zip
unzip release-1.7.0.zip
ln -s googletest-release-1.7.0 gtest
mkdir build
cd build
cmake .. -DUSE_CMAKE=true -DBUILD_TEST=true
make

Note that USE_CMAKE defaults to true if catkin is not installed.