Open Source Robotics

精选高质量开源机器人项目、工具和软件,推动机器人社区发展。

manif

用于机器人状态估计的仅头文件 C++ 李理论库

许可证

MIT

概述

manif 是一个仅头文件的 C++11 库,实现了用于机器人状态估计的李理论。它提供了机器人领域常用李群——SO(2)、SE(2)、SO(3)、SE(3)、SE_2(3)——及其切空间的具体实现,并以统一的 API 提供指数/对数映射、群运算和雅可比计算。对于实现基于 EKF 的 SLAM、视觉惯性里程计或位姿图优化的人来说必不可少。附带 Python 绑定,以及一篇阐述其数学基础的配套论文。

manif 是一个仅头文件的 C++11 库,让李理论在机器人状态估计中真正变得实用。它实现了最常用的李群——SO(2)、SE(2)、SO(3)、SE(3) 以及扩展位姿群 SE_2(3)——为复合、求逆、指数/对数映射、伴随表示,以及流形优化中核心的加/减运算提供一致的 API。

manif 的独特之处在于为每一种支持的运算提供解析雅可比计算。这使它可以直接用于扩展卡尔曼滤波器、因子图优化器以及其他对导数正确性要求极高的估计框架。该库还支持 Bundle<> 模板,可将多个李群组合成单一的状态表示。

manif 配有 Joan Sola 等人的论文《A micro Lie theory for state estimation in robotics》,该论文已成为面向机器人工程师的李理论入门资料中被引用最多的之一。该库仅依赖 Eigen,并提供 Python 3 绑定以便快速原型开发。

为何重要

李群是机器人学中处理旋转和刚体变换的数学严谨方法,但其实现容易出错,且常常散落在各种临时代码中。manif 提供了一个简洁、文档完善且经过同行评审的实现,让机器人从业者能够上手李理论;其配套论文也是被广泛引用的教学资料。

解决的问题

机器人状态估计算法需要在旋转和变换群(SO(3)、SE(3) 等)上进行运算,并正确计算雅可比。从零实现这些既繁琐又容易出错。manif 为多种李群提供统一的模板化接口和解析雅可比,让开发者无需重新推导群运算,就能写出数学上正确的估计代码。

要点

  • 实现 SO(2)、SE(2)、SO(3)、SE(3)、SE_2(3)、SGal(3) 以及可组合的 Bundle 群
  • 为所有运算提供解析雅可比——这对 EKF 和基于优化的估计至关重要
  • 仅头文件的 C++11 库,提供 Python 3 绑定,除 Eigen 外无运行时依赖
  • 配套论文《A micro Lie theory for state estimation in robotics》是被广泛引用的教学参考
  • 支持通过 Bundle<> 组合多个群,以表示复杂状态

适用人群

  • 实现 EKF、UKF 或基于优化的状态估计的机器人工程师
  • 需要带雅可比的正确李群运算的 SLAM 研究人员
  • 学习面向机器人应用的李理论的研究生
  • 从事三维位姿估计的计算机视觉开发者

局限

  • 专注于李群运算——并非完整的状态估计框架
  • 需要熟悉李理论概念才能有效使用(配套论文有帮助)
  • 大量使用模板的 C++ 代码可能产生冗长的编译错误
  • 仅限已实现的群——添加自定义群需要理解内部模板结构

本网站需要 JavaScript 才能正常运行。请启用 JavaScript 以浏览我们的开源机器人项目。