1. 개요[편집]
| 오도메트리 Odometry | |
|---|---|
| 정의 | 증분 운동을 누적 적분해 자기 위치를 추정하는 방법의 총칭 |
| 옛 이름 | 추측항법(dead reckoning) — 바다에서 쓰던 그 방법 |
| 센서별 | 휠 · 시각(VO) · 시각-관성(VIO) · 라이다(LO) · 레이더 |
| 숙명 | 오차가 단조 누적된다. 되돌릴 장치가 없다 |
| SLAM과의 차이 | 루프 클로징도, 전역 지도도 없다 |
| 평가 방식 | 구간별 상대 오차(%, °/m) — 절대 오차는 무한히 커지므로 |
눈을 감고 걸음 수를 세면서 방을 가로지르는 것. 그게 오도메트리다. 열 걸음쯤은 맞고, 백 걸음이면 벽에 부딪힌다.
오도메트리(odometry)는 이동체의 증분 운동을 센서로 측정해 시간에 따라 누적 적분함으로써 초기 위치 대비 현재 위치와 자세를 추정하는 방법의 총칭이다. 어원은 「길」과 「측정」을 뜻하는 그리스어이고, 자동차 계기판의 주행거리계(odometer)와 같은 뿌리다. 항해에서 속력과 방향을 적분해 위치를 추측하던 추측항법(dead reckoning)이 그 조상이며, 오도메트리는 그것을 로봇에 옮겨 놓은 것이다.
정의에서 이미 강점과 약점이 동시에 나온다. 외부 기준이 전혀 필요 없다. 위성이 안 보이는 실내·지하·수중·행성 표면에서도 돌아가고, 지도도 필요 없고, 지연도 거의 없다. 대가는 하나뿐인데 그것이 치명적이다 — 적분한 오차는 절대 사라지지 않는다. 매 스텝의 작은 오차가 이후 모든 시각에 그대로 남아 위치 추정이 서서히, 그러나 되돌릴 수 없이 표류한다. 이 표류를 잡으려면 「여기는 아까 왔던 곳이다」 같은 외부 정보가 필요하고, 그것을 넣는 순간 문제는 SLAM이 된다.
2. 휠 오도메트리 — 가장 싸고 가장 잘 틀린다[편집]
바퀴 두 개로 구동하는 차동 구동 로봇에서 좌우 바퀴가 각각 만큼 굴렀다면, 축간거리 에 대해
이고, 자세는 구간 중간 방향을 쓰는 형태로 갱신한다.
엔코더는 매우 정확하다(회전당 수천 카운트). 그런데도 휠 오도메트리가 악명 높은 이유는 오차가 엔코더에서 오지 않기 때문이다.
계통 오차가 지배적이다. 좌우 바퀴 지름이 0.1%만 달라도 로봇은 직진 명령에서 아주 완만한 원호를 그리고, 그 각도 오차가 거리에 비례해 쌓인다. 축간거리 의 명목값이 실제와 다르면 회전각이 일정 비율로 틀린다. 타이어가 눌리면서 유효 반지름이 하중에 따라 변하는 것도 여기에 들어간다. 이 두 인자(바퀴 지름 비, 유효 축간거리)를 분리해 보정하는 표준 절차가 정사각 경로를 시계·반시계 양방향으로 돌려 종점 오차를 비교하는 방식이다 — 두 방향에서 오차가 같은 쪽으로 나오는 성분과 반대로 나오는 성분이 각각 다른 인자에 대응하기 때문에 두 미지수가 깔끔하게 분리된다.1
비계통 오차는 보정으로 없앨 수 없다. 바퀴 미끄러짐, 문턱 넘기, 카펫, 제자리 회전 중의 미끄러짐, 모래 위 공전. 특히 제자리 회전이 최악이다. 바퀴가 옆으로 끌리면서 굴러 엔코더는 정직하게 돌았다고 보고하는데 실제 회전각은 다르다. 그래서 휠 오도메트리만으로 회전을 믿는 구현은 없고, 자이로의 각속도를 방위각에, 엔코더를 이동거리에 쓰는 조합(자이로도메트리)이 최소한의 상식이다. 이 조합을 확장 칼만 필터로 묶으면 실내 로봇의 표준 항법 스택이 된다.
3. 오차는 왜 그런 식으로 자라는가[편집]
오도메트리 오차의 성장률에는 구조가 있다. 매 스텝의 방위각 오차가 서로 독립인 작은 잡음이라면 방위각 자체는 무작위 보행이 되어 표준편차가 으로 자란다. 그런데 위치는 방위각을 다시 적분한 결과이므로, 스텝 의 방위각 오차가 이후 모든 스텝의 진행 방향을 함께 틀어 놓는다. 누적 위치 오차의 분산을 계산하면 에 비례하고, 따라서
이동거리의 1.5제곱으로 자란다. 거리에 비례(선형)하는 것보다 나쁘다는 것이 요점이다. 100 m에서 1 m 틀렸다면 400 m에서는 4 m가 아니라 8 m를 예상해야 한다. 계통 오차가 남아 있으면 상황이 더 나빠져 방위각 오차 자체가 거리에 비례하고 위치 오차는 로 자란다.
이 성장 구조가 오도메트리 설계의 모든 것을 지배한다. 위치 오차의 압도적 부분은 위치 측정의 오차가 아니라 방위각 오차의 적분이므로, 자원을 투입할 곳은 언제나 회전 추정이다. 저가 자이로 하나를 붙이는 것이 엔코더 분해능을 열 배 올리는 것보다 훨씬 효과적인 이유다.
4. 시각 오도메트리[편집]
시각 오도메트리(visual odometry, VO)는 카메라 영상만으로 프레임 사이 상대 운동을 추정해 누적한다. 바퀴가 미끄러져도 상관없고 지형이 험해도 되기 때문에 행성 탐사 로버에서 실전 검증을 거쳤다. 두 갈래가 있다.
| 특징 기반(indirect) | 직접법(direct) | |
|---|---|---|
| 최소화 대상 | 재투영 오차 — 화소 좌표의 차이 | 광도 오차 — 밝기값의 차이 |
| 앞단 | 특징점 검출 + 기술자 매칭 또는 추적 | 없음. 밝기 기울기가 있는 화소를 바로 씀 |
| 이상치 처리 | RANSAC으로 명시적 제거 | 강건 손실 가중치로 암묵적 처리 |
| 강한 상황 | 무늬가 뚜렷하고 조명이 변하는 환경 | 무늬가 약한 벽·반복 텍스처 |
| 약한 상황 | 무늬 없는 장면에서 특징이 안 뽑힘 | 자동노출·롤링 셔터·큰 이동 |
| 부산물 | 희소 점군 | 반밀집 깊이 지도 |
특징 기반 VO의 골격은 Structure from Motion의 두 프레임짜리 축소판이다. 단안이면 에피폴라 기하의 5점 알고리즘으로 본질행렬을 뽑아 상대자세를 얻고, 스테레오나 RGB-D면 3차원 점이 이미 있으므로 3D-2D 자세 추정(PnP)을 RANSAC 안에서 푼다. 그리고 마지막에 최근 몇 프레임만 미지수로 두는 **슬라이딩 윈도 번들 조정**으로 정련한다. 이 국소 BA가 프레임 대 프레임 누적보다 표류를 크게 줄이는데, 줄이는 것은 표류의 속도이지 표류 자체가 아니다.
직접법은 밝기 항상성 가정 위에서 광도 잔차를 최소화한다. 특징점을 뽑지 않으므로 기울기가 조금이라도 있는 화소는 전부 정보가 되고, 그래서 무늬가 약한 실내에서도 버틴다. 대신 자동노출·비네팅·감마가 변하면 가정이 깨지므로, 성숙한 구현은 노출과 응답 곡선까지 광도 보정 대상으로 함께 추정한다. 문제의식과 미분 구조는 광류와 사실상 같다.
5. 시각-관성 오도메트리와 IMU 사전적분[편집]
관성센서 단독 항법의 처참함을 먼저 봐 두면 융합의 동기가 명확해진다. 자세 추정이 1° 기울면 중력 의 성분 이 가속도로 새어 들어오고, 이걸 두 번 적분하면 10초에 8 m 넘게 밀린다. 즉 관성항법의 실질적 적은 가속도계 잡음이 아니라 자세 오차가 중력을 유출시키는 경로다. 이 자세를 카메라가 붙잡아 주면 관성센서는 갑자기 쓸 만해진다.
거꾸로 카메라가 관성센서에서 얻는 것도 결정적이다. 중력 방향으로 롤·피치가 관측 가능해지고, 가속도의 절대 크기가 미터 단위 스케일을 준다. 단안 카메라의 원리적 결함이 관성센서 하나로 메워지는 것이다. 그래서 시각-관성 오도메트리(VIO)는 지난 10여 년 이 분야의 사실상 표준이 됐다.
구현의 난점은 주기 차이다. 관성센서는 2001000 Hz, 카메라는 2030 Hz. 최적화 중에 자세 추정이 갱신될 때마다 그 사이의 관성 측정 수백 개를 다시 적분하면 실시간이 불가능하다. 해법이 IMU 사전적분(preintegration)이다. 두 프레임 사이의 관성 측정을 초기 자세·속도와 무관한 상대 증분(회전·속도·위치 증분)으로 미리 압축해 두면, 최적화가 자세를 바꿔도 그 증분을 재사용할 수 있고 바이어스가 갱신될 때만 1차 보정을 얹으면 된다. 회전 증분을 다양체 위에서 다루는 정식화가 정착한 뒤부터 이 항은 그냥 「간선 하나」처럼 최적화에 꽂아 넣는 부품이 됐다.
풀이 방식은 두 진영이다. 오래된 상태를 확률적으로 걷어내며 필터로 가는 계열(특징점을 상태에 넣지 않고 관측을 영공간에 투영해 소거하는 방식이 대표적)과, 최근 몇 프레임을 창으로 잡아 비선형 최소자승으로 푸는 계열이다. 후자가 정확하고 전자가 가볍다 — 그리고 창 밖의 오래된 상태를 한계화(marginalization)하는 순간 둘의 경계는 흐려진다. 이 스펙트럼 이야기는 SLAM과 센서 융합 문서에서 더 다룬다.
VIO에서 초심자를 가장 많이 잡는 것은 알고리즘이 아니라 보정과 동기다. 카메라-관성센서 사이의 상대 자세, 시간 오프셋, 관성센서 바이어스와 스케일까지 함께 추정해야 하고, 타임스탬프가 5 ms만 어긋나도 빠른 회전 구간에서 궤적이 통째로 휜다. 이 부분은 카메라 보정 문서의 연장선이다.
6. 라이다 오도메트리[편집]
라이다는 거리를 직접 재고 조명에 무관하므로, 스캔 사이의 상대 변환을 구하는 문제가 곧 점군 정합이 된다. 기본은 ICP 계열이고, 점-평면 대응이 점-점보다 압도적으로 잘 수렴한다는 것이 실무의 상식이다.
전 점군을 정합하면 무거우므로, 실용적 구현은 기하 특징을 골라낸다. 국소 곡률로 각 점을 에지점과 평면점으로 분류하고, 에지는 직선에, 평면은 평면에 맞추는 잔차를 세운다. 여기에 「빠른 오도메트리 + 느린 지도 정합」의 이중 주기 구조를 얹은 형태가 3차원 실외 라이다 오도메트리의 골격이 됐고, 이후 관성센서를 결합해 반복 갱신형 필터나 슬라이딩 윈도로 푸는 구현들이 그 위에 올라섰다.
라이다 오도메트리 특유의 함정이 둘 있다.
- 운동 왜곡. 회전형 라이다는 한 바퀴 도는 동안(10 Hz면 100 ms) 차량이 이미 움직였으므로, 한 「스캔」의 점들이 서로 다른 좌표계에서 측정된 것이다. 관성센서나 직전 속도 추정으로 점마다 시각 보간해 펴 주는 처리(deskewing)를 빼면 고속 주행에서 정합이 무너진다.
- 기하 축퇴. 긴 터널, 무늬 없는 복도, 넓은 평지에서는 진행 방향으로 구속이 없다. 정합이 「어디에 놓아도 잔차가 같은」 상태가 되어 조용히 미끄러진다. 헤세 행렬의 최소 고윳값을 감시해 축퇴를 검출하고 그 방향은 관성센서나 휠에 맡기는 처리가 필요하다.2
7. 스케일 — 단안의 원죄[편집]
단안 카메라로는 절대 스케일을 원리적으로 알 수 없다. 장면 전체를 두 배로 키우고 카메라 이동량도 두 배로 하면 영상이 정확히 같기 때문이다. 그래서 단안 VO의 궤적은 「모양은 맞는데 크기가 미정」인 상태로 나오고, 더 나쁜 것은 그 스케일이 시간에 따라 서서히 변한다는 것이다(스케일 드리프트). 궤적 오차를 재려면 스케일을 맞춰 정렬한 뒤에 재야 하고, 그래서 단안 논문의 오차 수치를 다른 논문과 직접 비교하면 안 된다.3
스케일을 고정하는 방법은 결국 외부 정보를 넣는 것뿐이다.
- 스테레오 — 기선이 미터 단위 스케일을 준다. 다만 거리가 기선의 수십 배를 넘으면 시차가 잡음에 묻혀 사실상 단안으로 퇴화한다(스테레오 비전의 저주).
- 관성센서 — 가속도의 절대 크기. 다만 등속 구간이 길면 스케일이 다시 관측 불가능에 가까워진다.
- 휠 엔코더 — 지상 로봇에서 가장 값싼 스케일 공급원.
- 기하 가정 — 카메라 장착 높이를 알면 지면 평면을 검출해 스케일을 복원할 수 있다. 차량용 단안 VO의 고전적 수법이며, 노면이 평평하다는 가정이 깨지는 순간(과속방지턱) 같이 깨진다.
8. SLAM과의 차이 — 이것만은 분명히[편집]
용어가 자주 뒤섞이므로 경계를 못 박아 둘 필요가 있다.
| 오도메트리 | SLAM | |
|---|---|---|
| 유지하는 것 | 현재 자세(+ 최근 몇 프레임) | 궤적 전체 + 전역 지도 |
| 과거를 다시 만나면 | 모른다. 그냥 새 장소로 취급 | 장소 인식으로 알아채고 루프 클로저를 추가 |
| 오차 | 단조 누적. 상한이 없다 | 루프를 닫는 순간 전역적으로 재분배되어 줄어든다 |
| 계산량 | 시간에 대해 상수 | 지도 크기에 따라 증가(그래서 온갖 근사가 필요) |
| 실패 양상 | 서서히 휜다 — 예측 가능 | 잘못된 루프 클로저 하나로 지도가 찢어진다 |
| 재방문 가치 | 없음 | 있음 — 지도를 저장해 다시 쓸 수 있다 |
핵심은 오도메트리에는 오차를 되돌리는 메커니즘이 원리적으로 존재하지 않는다는 것이다. 국소 BA를 촘촘히 돌려도, 관성센서를 붙여도, 라이다를 얹어도 표류 속도가 느려질 뿐이고 궤적은 여전히 무한히 멀어진다. 오도메트리를 SLAM으로 바꾸는 단 하나의 부품은 재방문 인식이며, 그것이 왜 SLAM 논문의 절반이 데이터 연관에 관한 것인지를 설명한다.
거꾸로 오도메트리는 SLAM에 필수 부품이기도 하다. 포즈 그래프의 연속 간선이 곧 오도메트리 구속이고, 몬테카를로 위치추정 같은 위치추정에서는 오도메트리가 운동 모형(제어 입력)으로 들어간다. 국소적으로 정확하고 전역적으로 표류하는 추정량이라는 성질이, 전역 정보를 가진 다른 모듈과 상보적으로 맞물리는 구조다.
9. 어떻게 평가하나[편집]
절대 오차는 시간이 지나면 무한히 커지므로, 오도메트리 평가는 구간별 상대 오차를 쓴다. 궤적을 100 m, 200 m, …, 800 m 같은 여러 길이의 부분 궤적으로 잘라 각 구간의 상대 자세 오차를 재고, 이동거리로 나눠 이동 오차 %와 회전 오차 °/m 로 보고한다. 자율주행 벤치마크의 순위표가 이 형식인 것은 취향이 아니라 필연이다. 반면 SLAM 평가에 쓰는 절대 궤적오차(ATE)는 궤적 전체를 직교 프로크루스테스 문제로 정렬한 뒤 재는 값이고, 오도메트리에 적용하면 「얼마나 오래 달렸는지」를 재는 지표가 되어 버린다.
10. 현업에서의 현실[편집]
- 오도메트리는 실패해도 조용히 실패한다. 궤적이 매끄럽게 나오고 잔차도 작은데 지도가 완만하게 휘어 있다. 그래서 육안으로 궤적 그림만 보고 판단하면 안 되고, 시작점으로 돌아와 종점 오차를 재는 폐루프 시험이 가장 정직한 검사다.
- 저가 부품으로 만든 시스템에서 가장 효과가 큰 투자는 시간 동기다. 하드웨어 트리거로 카메라와 관성센서를 묶는 것이 알고리즘 개선 몇 편보다 낫다.
- 회전이 빠른 구간에서 궤적이 무너지면 알고리즘보다 노출 시간을 먼저 본다. 모션 블러가 특징점을 지우면 어떤 방법도 못 버틴다.
- 정지 구간 검출은 공짜로 얻는 정확도다. 로봇이 멈춰 있음을 알면 속도를 0으로 강제하고 관성센서 바이어스를 재추정할 수 있다. 보행 로봇의 발 접지 구간을 이용하는 것도 같은 발상이다.
- 「오도메트리가 정확하면 SLAM은 쉽다」는 말은 반쯤 맞다. 나머지 반은 오도메트리가 정확하면 잘못된 루프 클로저를 걸러내기도 쉬워진다는 것이다. 좋은 오도메트리는 정확도가 아니라 신뢰성 측면에서도 SLAM을 떠받친다.
11. 관련 문서[편집]
- SLAM · 몬테카를로 위치추정 · 센서 융합 · 관성항법
- 번들 조정 · Structure from Motion · 카메라 보정 · 스테레오 비전
- 에피폴라 기하 · 특징점 검출 · 광류 · 점군 정합
- 칼만 필터 · 확장 칼만 필터 · 입자 필터 · RANSAC
- 직교 프로크루스테스 문제 · 리 군 · 경로 계획 · 라이다
12. Footnotes[편집]
-
정사각 경로를 양방향으로 도는 이 시험은 두 계통 인자를 분리하는 아주 우아한 실험 설계다. 문제는 이 절차를 아는 사람이 드물고, 대신 현장에서는 「로봇이 왼쪽으로 휘니까 오른쪽 바퀴 계수를 1.003으로 올려 보자」는 손튜닝이 압도적으로 많다는 것이다. 그렇게 맞춘 값은 그 바닥재, 그 하중에서만 맞는다. ↩
-
터널에서 라이다가 미끄러지는 현상은 처음 보면 소름이 돋는다. 정합 잔차는 완벽하게 작고 알고리즘은 아주 만족스럽게 수렴하는데, 차량이 30 m를 달렸는데도 추정 위치는 제자리다. 「잔차가 작다」와 「해가 결정됐다」가 다른 말이라는 것을 이보다 잘 보여 주는 예가 없다. ↩
-
단안 VO의 스케일 드리프트는 데모 영상에서 특히 얄궂게 나타난다. 궤적이 예쁘게 나오는데 후반부만 전체적으로 축소되어, 결과 그림을 보면 로봇이 갑자기 소인국에 들어간 것처럼 보인다. 발표장에서 “스케일 정렬했습니다”라는 한 줄이 조용히 붙는 이유다. ↩