manif
Biblioteca C++ header-only de teoria de Lie para estimação de estado em robótica
Licença
MIT
Visão geral
O manif é uma biblioteca C++11 header-only que implementa a teoria de Lie para estimação de estado em robótica. Ela oferece implementações concretas dos grupos de Lie mais usados em robótica — SO(2), SE(2), SO(3), SE(3), SE_2(3) e seus espaços tangentes — com uma API unificada para mapas exponencial/logarítmico, operações de grupo e cálculo de jacobianas. É essencial para quem implementa SLAM baseado em EKF, odometria visual-inercial ou otimização de grafos de poses. Inclui bindings Python e um artigo complementar que explica os fundamentos matemáticos.
O manif é uma biblioteca C++11 header-only que coloca a teoria de Lie ao alcance prático da estimação de estado em robótica. Ela implementa os grupos de Lie mais necessários — SO(2), SE(2), SO(3), SE(3) e o grupo de pose estendida SE_2(3) — com uma API consistente para composição, inversão, mapas exponencial/logarítmico, representações adjuntas e as operações plus/minus, centrais para a otimização em variedades.
O que diferencia o manif é o foco no cálculo analítico das jacobianas de todas as operações suportadas. Isso o torna diretamente utilizável em filtros de Kalman estendidos, otimizadores de grafos de fatores e outros frameworks de estimação em que derivadas corretas são essenciais. A biblioteca também suporta o template Bundle<> para compor vários grupos de Lie em uma única representação de estado.
O manif é acompanhado pelo artigo 'A micro Lie theory for state estimation in robotics', de Joan Solà et al., que se tornou um dos recursos introdutórios sobre teoria de Lie mais citados entre roboticistas. A biblioteca depende apenas do Eigen e oferece bindings Python 3 para prototipagem.
Por que importa
Os grupos de Lie são a forma matematicamente rigorosa de lidar com rotações e transformações de corpos rígidos em robótica, mas sua implementação é propensa a erros e costuma ficar espalhada em código improvisado. O manif oferece uma implementação limpa, bem documentada e revisada por pares que torna a teoria de Lie acessível a quem trabalha com robótica, apoiada por um artigo complementar que é um recurso didático amplamente citado.
Problema que resolve
Algoritmos de estimação de estado em robótica exigem operações em grupos de rotação e transformação (SO(3), SE(3) etc.) com cálculo correto das jacobianas. Implementá-las do zero é tedioso e propenso a erros. O manif oferece uma interface unificada e baseada em templates para vários grupos de Lie com jacobianas analíticas, para que os desenvolvedores escrevam código de estimação matematicamente correto sem precisar derivar novamente as operações de grupo.
Pontos principais
- Implementa SO(2), SE(2), SO(3), SE(3), SE_2(3), SGal(3) e grupos Bundle componíveis
- Fornece jacobianas analíticas para todas as operações — essenciais para EKF e estimação baseada em otimização
- C++11 header-only com bindings Python 3, sem dependências em tempo de execução além do Eigen
- O artigo complementar 'A micro Lie theory for state estimation in robotics' é uma referência didática amplamente citada
- Permite compor vários grupos via Bundle<> para representações de estado complexas
Para quem é
- Engenheiros de robótica que implementam EKF, UKF ou estimação de estado baseada em otimização
- Pesquisadores de SLAM que precisam de operações corretas em grupos de Lie com jacobianas
- Estudantes de pós-graduação que aprendem teoria de Lie para aplicações em robótica
- Desenvolvedores de visão computacional que trabalham com estimação de pose 3D
Limitações
- Focada em operações de grupos de Lie — não é um framework completo de estimação de estado
- Exige familiaridade com conceitos de teoria de Lie para ser usada com eficácia (o artigo complementar ajuda)
- O código C++ cheio de templates pode gerar erros de compilação verbosos
- Limitada aos grupos implementados — adicionar grupos personalizados exige entender a estrutura interna de templates