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 研究人員
- 為機器人應用學習李理論的研究生
- 從事 3D 位姿估測的電腦視覺開發者
限制
- 專注於李群運算:不是完整的狀態估測框架
- 需要熟悉李理論的概念才能有效使用(配套論文有所幫助)
- 大量使用樣板的 C++ 程式碼,可能產生冗長的編譯器錯誤訊息
- 僅限於已實作的群:新增自訂群需要理解內部的樣板結構