Odometry
**오도메트리(odometry)**는 시간에 따라 누적되는 증분 운동 측정값을 적분하여 로봇의 자세를 추정하는 것입니다 — 데드 레코닝(dead reckoning)입니다. 알려진 초기 자세에서 시작하여, 새로운 측정값마다 작은 상대 운동 를 얻고, 현재 자세는 모든 증분의 합성으로 구해집니다.
“오도메트리”라는 단어는 원래 **휠 오도메트리(wheel odometry)**를 가리켰습니다: 인코더가 바퀴 회전수를 세고, 기구학적 모델(차동 구동, 아커만)이 이를 선속도와 각속도로 변환합니다. 같은 아이디어는 상대 운동을 측정할 수 있는 어떤 센서로도 일반화됩니다.
- 휠 오도메트리 — 바퀴 달린 로봇에서 저렴하고 항상 사용 가능하지만, 특히 야외에서 휠 슬립에 의해 오염됩니다.
- 관성 오도메트리(inertial odometry) — IMU의 가속도와 각속도를 적분합니다. 가속도가 두 번 적분되기 때문에 단독으로는 매우 빠르게 드리프트합니다.
- 시각적 오도메트리(Visual odometry, VO) — 이미지 대응점으로부터 프레임 간 카메라 운동을 추정합니다.
- LiDAR 오도메트리 — 연속된 포인트 클라우드를 정렬합니다 (예: ICP 또는 특징 기반 정합).
오도메트리를 특징짓는 성질은 **드리프트(drift)**입니다: 모든 증분은 작은 오차를 가지고 있으며, 증분이 곱셈적으로 연결되기 때문에 오차는 한없이 누적됩니다. 미터당 0.5%의 병진 오차는 책상 크기 정도의 움직임에서는 보이지 않지만, 1킬로미터에 걸쳐서는 치명적입니다. 따라서 오도메트리만으로는 전역적으로 일관된 지도를 절대 만들 수 없습니다 — 그러려면 루프 클로저와 전역 최적화가 필요하며, 이것이 바로 오도메트리와 SLAM을 구분하는 지점입니다.
현대 SLAM 백엔드에서는 오도메트리가 상대 자세 제약으로 나타납니다: 포즈 그래프에서 연속된 자세 노드 사이의 에지, 또는 팩터 그래프의 운동 모델 팩터로,
여기서 제어/측정값 는 인코더, IMU, 또는 VO 프론트엔드에서 오며, 는 그 불확실성을 모델링합니다.
예제: 차동 구동 오도메트리
바퀴 반지름 , 인코더로 측정한 바퀴 각속도 , 바퀴 간 거리 을 가진 두 바퀴 차동 구동 로봇의 경우, 몸체 속도는 다음과 같습니다.
시간 단계 에 대해 평면 자세 를 적분하면 (가장 단순한 오일러 형태):
이 열 줄짜리 적분기는 완전한 오도메트리 시스템이며 — 모든 전형적인 실패 모드를 다 보여줍니다. 위치 업데이트가 에 의존한다는 점에 주목하십시오: 헤딩 오차는 그 이후의 모든 병진 이동을 잘못된 방향으로 회전시킵니다. 헤딩 오차 를 가진 채로 거리 를 이동하면, 측방향 위치 오차는 대략 입니다 — 이것이 헤딩(자이로 품질, 휠베이스 캘리브레이션)이 오도메트리 정확도를 좌우하는 이유이며, 저렴한 자이로 하나를 휠 오도메트리에 추가하는 것만으로도 큰 도움이 되는 이유입니다.
드리프트가 나타나는 방식
- 무작위 오차는 랜덤워크로 누적됩니다: 각 증분이 독립적인 잡음을 가지면, 적분된 자세의 분산은 이동한 거리에 따라 증가합니다 — 불확실성 타원은 외부 보정 없이는 꾸준히 커지고 절대 줄어들지 않습니다.
- 계통 오차는 선형적으로 커집니다: (타이어 압력 등으로 인한) 잘못 캘리브레이션된 바퀴 반지름이나 휠베이스는 모든 증분을 같은 방향으로 편향시킵니다 — 곧은 복도가 매번 조금씩 휘어진 채로 돌아옵니다. 계통 오차는 캘리브레이션으로 제거할 수 있고 그렇게 해야 하는 오차입니다.
- 헤딩 오차가 지배적입니다: 위의 예에서 보였듯, 각도 오차는 이동한 거리에 비례하는 위치 오차로 변환됩니다. 병진 오차만으로는 그냥 더해질 뿐입니다.
- 오차 합성은 위에서 곱셈적입니다: 증분들은 변환으로 합성되므로 오차는 단순히 더해지지 않습니다 — 이것이 오도메트리의 공분산 전파가 합성의 야코비안(또는 더 깔끔하게는 리 군 기법)을 사용하는 이유입니다.
실무적으로 오도메트리 품질은 상대 오차로 인용됩니다 — 이동 거리당 백분율과 미터당 도 — 이는 정확히 KITTI odometry 벤치마크와 상대 자세 오차(RPE) 지표가 측정하는 것입니다. 절대 궤적 오차(ATE)는 오도메트리 시스템을 평가하는 데 적합한 척도가 아닙니다. 절대 오차는 설계상 무한히 커질 수 있기 때문입니다.
흔한 함정들
- 오도메트리 출력을 다운스트림에서 그라운드 트루스로 취급하기 — 항상 그 공분산을 전파해야 합니다. 오도메트리의 불확실성을 무시하는 계획기나 융합 스택은 확신에 차서 틀리게 됩니다.
- 잘못된 프레임 시맨틱스(ROS) — 오도메트리는 연속적으로 드리프트하는
odom -> base_link변환으로 발행되어야 하며, 루프를 닫는 SLAM 보정은map -> odom에 있어야 합니다. 보정이 도착할 때 오도메트리가 튀도록 만들면 이를 사용하는 모든 컨트롤러가 망가집니다. - 타임스탬프 부주의 — 잘못된 로 인코더 틱을 적분하거나, 속도를 잘못된 이미지와 짝지으면 센서 잡음처럼 보이지만 실제로는 순수한 관리상의 버그인 오차가 유입됩니다.
- 슬립과 기구학적 불일치 무시하기 — 차동 구동 방정식은 미끄러짐 없는 순수 회전을 가정합니다. 카펫, 자갈, 또는 급격한 선회 중에는 이것이 조용히 실패합니다. 평균을 내기보다는 이를 감지하십시오(예: 자이로와 인코더가 암시하는 요(yaw) 값의 불일치).
SLAM에서의 의미
오도메트리는 모든 SLAM 시스템의 근간입니다: 추적, 매핑, 루프 클로저 모듈이 그 위에 구축되는 고속의 국소적으로 정확한 운동 추정치를 제공합니다. 그 오차 특성 — 국소적으로는 매끄럽지만 전역적으로는 드리프트한다 — 을 이해하면 현대 SLAM의 아키텍처가 설명됩니다: 짧은 구간 동안은 오도메트리를 신뢰하고, 루프 클로저나 절대 측정값이 얻어질 때마다 전역적으로 이를 보정하는 것입니다.