artivis/manif

A small C++11 header-only library for Lie theory.

What it solves

manif is a Lie theory library designed for state-estimation in robotics. It provides a mathematically rigorous way to handle rotations, translations, and velocities in 2D and 3D space, which are essential for calculating the pose and movement of robots.

How it works

The library implements several Lie groups to represent different types of motion and space:

  • Euclidean space (ℝ(n)): Basic addition in n-dimensional space.
  • SO(2) and SO(3): Rotations in 2D and 3D space.
  • SE(2) and SE(3): Rigid motion (rotation and translation) in 2D and 3D.
  • SE_2(3): Extended pose including rotation, translation, and velocity in 3D.
  • SGal(3): The Special Galilean group (rotation, translation, velocity, and time) in 3D.
  • Bundle<>: A way to treat a manifold bundle as a single Lie group.

It uses Cartesian representations for tangent spaces, meaning tangent elements are treated as regular vectors in $\mathbb{R}^n$. The library also provides analytic computation of Jacobians (specifically the right Jacobian) differentiated with respect to a perturbation on the local tangent space.

Who it’s for

Roboticists and developers working on state estimation, control, and learning algorithms that require precise mathematical representations of 3D motion and geometry.

Highlights

  • Header-only C++11 library with Python 3 wrappers.
  • Comprehensive Lie group support: Covers everything from simple rotations to complex Galilean groups.
  • Analytical Jacobians: Provides built-in computation of Jacobians for all core operations.
  • Auto-diff compatible: Works with ceres::Jet, autodiff::Dual, and autodiff::Real for non-linear solvers.
  • Rigorous mathematical foundation: Based on a specific academic paper tailored for roboticists.