manif
Bibliothèque C++ header-only de théorie de Lie pour l'estimation d'état en robotique
Licence
MIT
Aperçu
manif est une bibliothèque C++11 header-only qui implémente la théorie de Lie pour l'estimation d'état en robotique. Elle fournit des implémentations concrètes des groupes de Lie couramment utilisés en robotique — SO(2), SE(2), SO(3), SE(3), SE_2(3) et leurs espaces tangents — avec une API unifiée pour les applications exponentielle/logarithme, les opérations de groupe et le calcul des jacobiennes. Indispensable pour quiconque implémente un SLAM par EKF, une odométrie visuelle-inertielle ou une optimisation de graphe de poses. Inclut des liaisons Python et un article d'accompagnement qui expose les fondements mathématiques.
manif est une bibliothèque C++11 header-only qui met la théorie de Lie à la portée pratique de l'estimation d'état en robotique. Elle implémente les groupes de Lie les plus souvent nécessaires — SO(2), SE(2), SO(3), SE(3) et le groupe de poses étendu SE_2(3) — avec une API cohérente pour la composition, l'inversion, les applications exponentielle/logarithme, les représentations adjointes et les opérations plus/moins, centrales pour l'optimisation sur variétés.
Ce qui distingue manif, c'est l'accent mis sur le calcul analytique des jacobiennes pour chaque opération prise en charge. Elle est ainsi directement utilisable dans les filtres de Kalman étendus, les optimiseurs de graphes de facteurs et d'autres cadres d'estimation où des dérivées correctes sont essentielles. La bibliothèque prend aussi en charge le template Bundle<> pour composer plusieurs groupes de Lie en une seule représentation d'état.
manif est accompagnée de l'article « A micro Lie theory for state estimation in robotics » de Joan Solà et al., devenu l'une des ressources d'introduction à la théorie de Lie les plus citées par les roboticiens. La bibliothèque ne dépend que d'Eigen et fournit des liaisons Python 3 pour le prototypage.
Pourquoi c'est important
Les groupes de Lie sont la manière mathématiquement rigoureuse de traiter les rotations et les transformations de corps rigides en robotique, mais leur implémentation est sujette aux erreurs et souvent éparpillée dans du code ad hoc. manif fournit une implémentation propre, bien documentée et évaluée par les pairs qui rend la théorie de Lie accessible aux praticiens de la robotique, appuyée par un article d'accompagnement qui sert de ressource pédagogique largement citée.
Le problème résolu
Les algorithmes d'estimation d'état en robotique exigent des opérations sur les groupes de rotations et de transformations (SO(3), SE(3), etc.) avec un calcul correct des jacobiennes. Les implémenter de zéro est fastidieux et source d'erreurs. manif fournit une interface unifiée, à base de templates, pour plusieurs groupes de Lie avec jacobiennes analytiques, afin que les développeurs puissent écrire un code d'estimation mathématiquement correct sans redériver les opérations de groupe.
Points clés
- Implémente SO(2), SE(2), SO(3), SE(3), SE_2(3), SGal(3) et des groupes Bundle composables
- Fournit des jacobiennes analytiques pour toutes les opérations — indispensables pour l'EKF et l'estimation par optimisation
- C++11 header-only avec liaisons Python 3, sans aucune dépendance d'exécution au-delà d'Eigen
- L'article d'accompagnement « A micro Lie theory for state estimation in robotics » est une référence pédagogique largement citée
- Permet de composer plusieurs groupes via Bundle<> pour des représentations d'état complexes
Pour qui
- Ingénieurs en robotique qui implémentent une estimation d'état par EKF, UKF ou optimisation
- Chercheurs en SLAM qui ont besoin d'opérations correctes sur les groupes de Lie avec leurs jacobiennes
- Étudiants de cycles supérieurs qui apprennent la théorie de Lie pour la robotique
- Développeurs en vision par ordinateur qui travaillent sur l'estimation de pose 3D
Limites
- Centrée sur les opérations de groupes de Lie — ce n'est pas un cadre complet d'estimation d'état
- Nécessite une familiarité avec la théorie de Lie pour être utilisée efficacement (l'article d'accompagnement aide)
- Le code C++ riche en templates peut produire des erreurs de compilation verbeuses
- Limitée aux groupes implémentés — ajouter des groupes personnalisés exige de comprendre la structure interne des templates