Quick start
manif has been designed for an easy integration to larger projects:
- A single dependency on Eigen,
- header-only for easy integration,
- templated on the underlying scalar type so that one can use its own,
- and C++11, since not everyone gets to enjoy the latest C++ features, especially in industry.
All Lie group classes defined in manif have in common that they inherit from a templated base class (CRTP). It allows one to write generic code abstracting the Lie group details. Please find more information in the related [documentation page](Writing-generic-code).
The library supports template scalar types. In particular, it can work with the ceres::Jet
type, allowing for automatic Jacobian computation – see related paragraph on Jacobians below.
Installation
Dependencies
- Eigen 3 :
Linux ( Ubuntu and similar )
``` apt-get install libeigen3-dev ```
OS X
``` brew install eigen ```
- lt::
optional : included in the external
folder
From source
git clone https://github.com/artivis/manif.git cd manif && mkdir build && cd build cmake .. make install
Use manif in your project
In your project CMakeLists.txt
:
project(foo) # Find the Eigen library find_package(Eigen3 REQUIRED) target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${EIGEN3_INCLUDE_DIRS}) # Find the manif library find_package(manif REQUIRED) add_executable(${PROJECT_NAME} src/foo.cpp) # Add manif include directories to the target target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${manif_INCLUDE_DIRS})
In your code:
#include <manif/manif.h> ... auto state = manif::SE3d::Identity(); ...
Tutorials and application demos
We provide some self-contained and self-explained executables implementing some real problems. Their source code is located in manif/examples/
. These demos are:
se2_localization.cpp
: 2D robot localization based on fixed landmarks using SE2 as robot poses. This implements the example V.A in the paper.se2_localization_ukfm.cpp
: 2D robot localization based on fixed landmarks using SE2 as robot poses. This implements the filter described in ['A Code for Unscented Kalman Filtering on Manifolds (UKF-M)'](brossard-ukfm), M. Brossard, A. Barrau and S. Bonnabel.se3_localization.cpp
: 3D robot localization based on fixed landmarks using SE3 as robot poses. This re-implements the example above but in 3D.se2_sam.cpp
: 2D smoothing and mapping (SAM) with simultaneous estimation of robot poses and landmark locations, based on SE2 robot poses. This implements a the example V.B in the paper.se3_sam.cpp
: 3D smoothing and mapping (SAM) with simultaneous estimation of robot poses and landmark locations, based on SE3 robot poses. This implements a 3D version of the example V.B in the paper.se3_sam_selfcalib.cpp
: 3D smoothing and mapping (SAM) with self-calibration, with simultaneous estimation of robot poses, landmark locations and sensor parameters, based on SE3 robot poses. This implements a 3D version of the example V.C in the paper.se_2_3_localization.cpp
: A strap down IMU model based 3D robot localization, with measurements of fixed landmarks, using SE_2_3 as extended robot poses (translation, rotation and linear velocity).
To build the demos, simply pass the related flag to CMake,
cmake -DBUILD_EXAMPLES=ON .. make cd examples ./se2_localization