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) を実装し、合成、逆元、指数・対数写像、随伴表現、そして多様体上の最適化の中心となる plus/minus 演算を一貫した API で提供します。

manif の特長は、サポートするすべての演算について解析的なヤコビアン計算に重点を置いていることです。そのため、正しい微分が不可欠な拡張カルマンフィルタ、ファクターグラフ最適化器、その他の推定フレームワークでそのまま使えます。また、複数のリー群を組み合わせて単一の状態表現にする Bundle<> テンプレートにも対応しています。

manif には Joan Solà らによる論文「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 や最適化ベースの推定に不可欠
  • Python 3 バインディング付きのヘッダオンリー C++11 で、Eigen 以外の実行時依存なし
  • 付随論文「A micro Lie theory for state estimation in robotics」は広く引用される教育用リファレンス
  • Bundle<> により複数の群を組み合わせて複雑な状態表現を構成できる

対象

  • EKF、UKF、または最適化ベースの状態推定を実装するロボットエンジニア
  • ヤコビアン付きの正しいリー群演算を必要とする SLAM 研究者
  • ロボティクス応用のためにリー理論を学ぶ大学院生
  • 3D 姿勢推定に取り組むコンピュータビジョン開発者

制限事項

  • リー群演算に特化しており、完全な状態推定フレームワークではない
  • 効果的に使うにはリー理論の概念に慣れている必要がある(付随論文が助けになる)
  • テンプレートを多用した C++ コードのため、コンパイラのエラーメッセージが冗長になりがち
  • 実装済みの群に限られ、独自の群を追加するには内部のテンプレート構造を理解する必要がある

このウェブサイトにはJavaScriptが必要です。オープンソースロボティクスプロジェクトを閲覧するにはJavaScriptを有効にしてください。