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) — 을 구현하며, 합성, 역원, 지수/로그 사상, 수반(adjoint) 표현, 그리고 매니폴드 위 최적화의 핵심인 plus/minus 연산을 일관된 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와 최적화 기반 추정에 필수
  • Python 3 바인딩을 갖춘 헤더 전용 C++11, Eigen 외에는 런타임 의존성 없음
  • 동반 논문 'A micro Lie theory for state estimation in robotics'는 널리 인용되는 교육용 참고 자료
  • 복잡한 상태 표현을 위해 Bundle<>로 여러 군의 합성 지원

대상

  • EKF, UKF 또는 최적화 기반 상태 추정을 구현하는 로보틱스 엔지니어
  • 야코비안을 포함한 올바른 리 군 연산이 필요한 SLAM 연구자
  • 로보틱스 응용을 위해 리 이론을 배우는 대학원생
  • 3D 자세 추정을 다루는 컴퓨터 비전 개발자

한계

  • 리 군 연산에 집중 — 완전한 상태 추정 프레임워크는 아님
  • 효과적으로 쓰려면 리 이론 개념에 익숙해야 함(동반 논문이 도움이 됨)
  • 템플릿을 많이 쓰는 C++ 코드라 컴파일러 오류 메시지가 장황할 수 있음
  • 구현된 군으로 한정 — 사용자 정의 군을 추가하려면 내부 템플릿 구조를 이해해야 함

이 웹사이트는 JavaScript가 필요합니다. 오픈소스 로봇 프로젝트를 탐색하려면 JavaScript를 활성화하세요.