kalmanif
is a Kalman filter(s) on Lie groups library for state-estimation
targeted at robotics applications.
It is developed as a header-only C++17 library based on manif.
At the moment, it implements:
- Extended Kalman Filter (EKF)
- Square Root Extended Kalman Filter (SEKF)
- Invariant Extended Kalman Filter (IEKF)
- Unscented Kalman Filter on manifolds (UKFM)
- Rauch-Tung-Striebel Smoother*
(*the RTS Smoother is compatible with all filters - ERTS / SERTS / IERTS/ URTS-M)
Together with a few system and measurement models mostly for demo purpose. Other filters/models can and will be added, contributions are welcome.
kalmanif
started has a rework of the excellent kalman library by Markus Herb to turn the filtering-based examples in manif into reusable code.
The main difference from the kalman library is its integration with the manif library to handle the Lie theory aspects.
There are also numerous implementation details that differ and which can't be summarized here.
kalmanif
is distributed under the same permissive license as it's inspirational model.
❗ kalmanif is very much a work in progress. As such, do not expect it to work out of the box, nor support your application. Do expect its API to change. Headache possible. ❗
- Maintainer status: maintained
- Maintainer: Jeremie Deray
- Authors: Jeremie Deray
- License: MIT
- Bug / feature tracker: github.com/artivis/kalmanif/issues
- Source: github.com/artivis/kalmanif.git (branch: devel)
Checkout the installation guide over here.
Both the IEKF
and UKFM
filters are implemented in their 'right invariant' flavor.
However they are able to handle both 'right' and 'left' measurements.
We provide some self-contained and self-explained executables implementing some real problems.
Their source code is located in kalmanif/examples/
.
These demos are:
demo_se2.cpp
: 2D robot localization based on fixed landmarks using SE2 as robot poses. This implements the example V.A in SOLA-18-Lie.demo_se3.cpp
: 3D robot localization based on fixed landmarks using SE3 as robot poses. This re-implements the example above but in 3D.demo_se_2_3.cpp
: 3D robot localization and linear velocity estimation based on strap-down IMU model and fixed beacons.
Check out the documentation to see how to build them and what are their options.
kalmanif
is based on several publications, some of which are referenced here.
Want to contribute? Great! Check out our contribution guidelines.