All Projects → artivis → Manif

artivis / Manif

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

Programming Languages

python3
1442 projects
cpp11
221 projects

Projects that are alternatives of or similar to Manif

Sophus
C++ implementation of Lie Groups using Eigen.
Stars: ✭ 1,048 (+112.15%)
Mutual labels:  robotics, 3d, 2d, geometry
Mathnet Spatial
Math.NET Spatial
Stars: ✭ 246 (-50.2%)
Mutual labels:  3d, 2d, geometry
Intrinsic3d
Intrinsic3D - High-Quality 3D Reconstruction by Joint Appearance and Geometry Optimization with Spatially-Varying Lighting (ICCV 2017)
Stars: ✭ 297 (-39.88%)
Mutual labels:  3d, geometry
Medpy
Medical image processing in Python
Stars: ✭ 321 (-35.02%)
Mutual labels:  3d, 2d
Von Grid
Hexagonal & square tile grid system with three.js
Stars: ✭ 336 (-31.98%)
Mutual labels:  3d, 2d
Se2lam
(ICRA 2019) Visual-Odometric On-SE(2) Localization and Mapping
Stars: ✭ 285 (-42.31%)
Mutual labels:  robotics, slam
Orb slam 2 ros
A ROS implementation of ORB_SLAM2
Stars: ✭ 294 (-40.49%)
Mutual labels:  robotics, slam
React Particles Webgl
🔆 A 2D/3D particle library built on React, Three.js and WebGL
Stars: ✭ 330 (-33.2%)
Mutual labels:  3d, 2d
Intersects
a simple collection of 2d collision/intersects functions. Supports points, circles, ellipses, lines, axis-aligned boxes, and polygons
Stars: ✭ 270 (-45.34%)
Mutual labels:  2d, geometry
Libgdx
Desktop/Android/HTML5/iOS Java game development framework
Stars: ✭ 19,420 (+3831.17%)
Mutual labels:  3d, 2d
Software
DeepValueNetwork is a peer-to-peer database network managed and hosted by its community. It contains a browser to render 2D/3D content and allow the creation of scripted applications built on top of the p2p database network and managed by its creators, without intermediary platform.
Stars: ✭ 357 (-27.73%)
Mutual labels:  3d, 2d
Recent Stars 2021
🔥🔥🔥SLAM, Pose/Object tracking, Depth/Disparity/Flow Estimation, 3D-graphic, etc. related papers and code
Stars: ✭ 393 (-20.45%)
Mutual labels:  slam, 3d
Openvslam
OpenVSLAM: A Versatile Visual SLAM Framework
Stars: ✭ 2,945 (+496.15%)
Mutual labels:  robotics, slam
Visual Slam Roadmap
Roadmap to becoming a Visual-SLAM developer in 2021
Stars: ✭ 277 (-43.93%)
Mutual labels:  robotics, slam
Go Geom
Package geom implements efficient geometry types for geospatial applications.
Stars: ✭ 456 (-7.69%)
Mutual labels:  3d, 2d
Camlasercalibratool
Extrinsic Calibration of a Camera and 2d Laser
Stars: ✭ 277 (-43.93%)
Mutual labels:  robotics, slam
Floam
Fast LOAM: Fast and Optimized Lidar Odometry And Mapping for indoor/outdoor localization (Lidar SLAM)
Stars: ✭ 326 (-34.01%)
Mutual labels:  robotics, slam
Pytorch Dense Correspondence
Code for "Dense Object Nets: Learning Dense Visual Object Descriptors By and For Robotic Manipulation"
Stars: ✭ 445 (-9.92%)
Mutual labels:  robotics, 3d
ROS Basic SLAM
BUILDING AN AUTOMATIC VEHICLE BASED ON STEREO CAMERA
Stars: ✭ 16 (-96.76%)
Mutual labels:  robotics, slam
Godot goodies
Collection of nice stuff for Godot
Stars: ✭ 263 (-46.76%)
Mutual labels:  3d, 2d

manif

A small header-only library for Lie theory

GHA appveyor Documentation codecov GitHub JOSS

Package Summary

manif is a Lie theory library for state-estimation targeted at robotics applications. It is developed as a header-only C++11 library with Python 3 wrappers.

At the moment, it provides the groups:

  • ℝ(n): Euclidean space with addition.
  • SO(2): rotations in the plane.
  • SE(2): rigid motion (rotation and translation) in the plane.
  • SO(3): rotations in 3D space.
  • SE(3): rigid motion (rotation and translation) in 3D space.
  • SE_2(3): extended pose (rotation, translation and velocity) in 3D space, introduced (to the best of knowledge) in this paper. NOTE: The implementation here differs slightly from the developments in the paper.

Other Lie groups can and will be added, contributions are welcome.

manif is based on the mathematical presentation of the Lie theory available in this paper. We recommend every user of manif to read the paper (17 pages) before starting to use the library. The paper provides a thorough introduction to Lie theory, in a simplified way so as to make the entrance to Lie theory easy for the average roboticist who is interested in designing rigorous and elegant state estimation algorithms. In a rush? Check out our Lie group cheat sheet.

It provides analytic computation of Jacobians for all the operations listed below.

Details

Quick Start

Get quickly started with manif following our 'quick start' guides for both C++ and Python.

Features

Available Operations

Operation Code
Base Operation
Inverse \mathbf\Phi^{-1} X.inverse()
Composition \mathbf\mathcal{X}\circ\mathbf\mathcal{Y} X * Y
X.compose(Y)
Hat \varphi^\wedge w.hat()
Act on vector \mathbf\mathcal{X}\circ\mathbf v X.act(v)
Retract to group element \exp(\mathbf\varphi^\wedge w.exp()
Lift to tangent space \log(\mathbf\mathcal{X})^\vee X.log()
Manifold Adjoint \operatorname{Adj}(\mathbf\mathcal{X}) X.adj()
Tangent adjoint \operatorname{adj}(\mathbf\varphi^\wedge w.smallAdj()
Composed Operation
Manifold right plus \mathbf\mathcal{X}\circ\exp(\mathbf\varphi^\wedge) X + w
X.plus(w)
X.rplus(w)
Manifold left plus \exp(\mathbf\varphi^\wedge)\circ\mathbf\mathcal{X} w + X
w.plus(X)
w.lplus(X)
Manifold right minus \log(\mathbf\mathcal{Y}^{-1}\circ\mathbf\mathcal{X})^\vee X - Y
X.minus(Y)
X.rminus(Y)
Manifold left minus \log(\mathbf\mathcal{X}\circ\mathbf\mathcal{Y}^{-1})^\vee X.lminus(Y)
Between \mathbf\mathcal{X}^{-1}\circ\mathbf\mathcal{Y} X.between(Y)
Inner Product \langle\varphi,\tau\rangle w.inner(t)
Norm \left\lVert\varphi\right\rVert w.weightedNorm()
w.squaredWeightedNorm()

Above, \mathbf\mathcal{X},\mathbf\mathcal{Y} represent group elements, \mathbf\varphi^\wedge,\tau^\wedge represent elements in the Lie algebra of the Lie group, \mathbf\varphi,\tau or w,t represent the same elements of the tangent space but expressed in Cartesian coordinates in \mathbb{R}^n, and \mathbf{v} or v represents any element of \mathbb{R}^n.

Jacobians

All operations come with their respective analytical Jacobian matrices. Throughout manif, Jacobians are differentiated with respect to a local perturbation on the tangent space. These Jacobians map tangent spaces, as described in this paper.

Currently, manif implements the right Jacobian, whose definition reads:

\frac{\delta f(\mathbf\mathcal{X})}{\delta\mathbf\mathcal{X}}

The Jacobians of any of the aforementionned operations can then be evaluated:

in C++,

  SE3d X = SE3d::Random();
  SE3Tangentd w = SE3Tangentd::Random();

  SE3d::Jacobian J_o_x, J_o_w;

  auto X_plus_w = X.plus(w, J_o_x, J_o_w);

in Python,

  X = SE3.Random()
  w = SE3Tangentd.Random()

  J_o_x = np.zeros((SE3.DoF, SE3.DoF))
  J_o_w = np.zeros((SE3.DoF, SE3.DoF))

  X_plus_w = X.plus(w, J_o_x, J_o_w)

Documentation

The documentation is available online at the accompanying website. Both the C++ and the Python APIs are documented.

Do you want to build it locally? Find out how on the dedicated page.

Note: throughout the code documentation we refer to 'the paper' which you can find on the dedicated page.

Tutorials and application demos

We provide some self-contained and self-explained C++ examples to help you get started.

You prefer Python? The same examples are also available in Python.

Publications

Check out our related publications and how to cite them.

They use manif

Find out who's already using manif.

Contributing

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].