• Stars
    star
    337
  • Rank 125,272 (Top 3 %)
  • Language
    C++
  • License
    MIT License
  • Created almost 4 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A small collection of Kalman Filters on Lie groups

kalmanif

A small collection of Kalman Filters on Lie groups

GHA

GitHub

Package Summary

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.

Details

Quick Start

Checkout the installation guide over here.

Note

Both the IEKF and UKFM filters are implemented in their 'right invariant' flavor. However they are able to handle both 'right' and 'left' measurements.

Tutorials and application demos

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.

References

kalmanif is based on several publications, some of which are referenced here.

Contributing

Want to contribute? Great! Check out our contribution guidelines.

More Repositories

1

manif

A small C++11 header-only library for Lie theory.
C++
1,455
star
2

laser_odometry

A pluginlib-based package for laser-odometry
C++
67
star
3

distance_map

A ROS package for converting OccupancyGrid/Costmap2D to 2D distance map.
C++
59
star
4

pointcloud_to_rangeimage

[ROS][C++] Convert a pointcloud to rangeimage and back to pointcloud
C++
58
star
5

MOSSE_tracker

C++ implementation of the MOSSE tracker
C++
32
star
6

epnp

Catkinization of epnp
C++
27
star
7

ros2_best_practices

23
star
8

rpipress-downloader

Download Raspberry Pi Press issues
Python
16
star
9

carmen_publisher

[python][ROS] convert CARMEN log files to ROS msgs
Python
15
star
10

boost_serialization_helper

C++
8
star
11

laser_odometry_csm

A laser_odometry wrapper for csm.
C++
6
star
12

metacol

A collection of meta-programming tools & tricks
C++
6
star
13

calibration_2_relative_pose

Calibration of a SpheriCam (2 fisheye cameras back-to-back) *Matlab*
MATLAB
5
star
14

mico_ros

A micro-ROS on Raspberry Pi Pico playground.
C
5
star
15

lspdlog

Lazy spdlog
CMake
5
star
16

build-catkin-tools

catkin_tools build system for Atom
JavaScript
4
star
17

ros2hellocli

A minimal plugin example for ROS 2 command line tools.
Python
4
star
18

ros_imresize

[ROS] Resize an image and update its camera info
C++
4
star
19

soft20

my catkinization of SOFT package 2.0
C
4
star
20

laser_odometry_libpointmatcher

A laser_odometry wrapper for libpointmatcher.
C++
4
star
21

ansible-role-ros

An Ansible role to set up a ROS environment
3
star
22

laser_odometry_rf2o

A laser_odometry wrapper for rf2o.
Python
2
star
23

laser_odometry_polar

A laser_odometry wrapper for the polar scan matcher.
C++
2
star
24

ros_fuse_point_cloud

[ROS] provide node to subscribe to multiple point cloud and fuse them into a single one
C++
2
star
25

benchmark_2d_laser_odom

C++
2
star
26

laser_odometry_srf

A laser_odometry wrapper for srf.
C++
1
star
27

omnidirectional_rig

C++
1
star
28

dotfiles

Because there is no place like $HOME
Vim Script
1
star
29

laser_odometry-release

Release track for laser_odometry package
1
star
30

ros_msgs_sync

[ROS] synchronises msgs
C++
1
star
31

ros2_playground

C++
1
star
32

lambt

a simple time profiler utility
C++
1
star