무엇을 알고 무엇을 추정하는지 먼저 나눈다
로봇이 얼마나 움직였는지, 지도 어디에 있는지, 주변 지도가 어떤지는 관련되지만 다른 질문이다. odometry는 연속 운동 관측을 누적해 상대 이동/궤적을 추정한다. localization은 주어진 기준/지도에서 현재 pose를 추정하는 위치 추정이다. mapping은 센서 관측을 공간에 연결해 환경 지도를 만드는 문제다. SLAM은 Simultaneous Localization and Mapping으로 위치/궤적과 지도를 함께 추정한다.
그림 M15.01-1. 각 칸은 서로 다른 역할/근거다. 나란히 비교할 항목이며 위아래가 시간 순서를 뜻하지 않는다. 직접 제작한 개념도이며 본문의 조건과 함께 읽는다.
문제 정의에서 '알고 있다'는 입력을 고정해 계산한다는 뜻이며 실제로 오차가 전혀 없다는 뜻은 아니다. mapping 설명에서 pose를 입력으로 주는 기본 경우와 pose도 미지인 SLAM을 구별한다. 실제 시스템은 odometry·위치/지도 추정 모듈을 결합할 수 있으므로 네 단어를 서로 배타적인 프로그램 종류라고 외우지 않는다. 어떤 모듈이 어떤 관측/기준을 사용해 무엇을 출력하는지 적는다.
지도는 점/랜드마크, 점유 격자나 여러 frame의 관계 등 다양한 표현이 가능하다. pose는 위치와 방향이고, 센서는 직접 전역 pose를 읽기보다 광선 거리/영상 특징·각속도 등 관측을 제공한다. 데이터 연관은 새 관측이 기존 지도/관측의 어느 물체/표면과 대응하는지 판단하는 과정이다. 같은 모양의 문이나 반복된 복도를 잘못 연결하면 기하 계산이 맞아도 잘못된 위치/지도를 만들 수 있다.
odometry는 이동을 이어 가지만 참 위치는 아니다
바퀴 각도·영상/IMU로 추정한 이동을 이전 상태에 더하면 새 위치/방향이 나온다. 각 단계의 오차/미끄럼·바이어스/보정·시간 정합 문제가 누적되어 drift가 생길 수 있다. 여기서 drift는 기준에 대한 추정의 누적적인 어긋남이다. 연속적이고 매끄러운 odom 궤적이 곧 전역 정확도라는 뜻은 아니다.
M09.04의 odom은 연속 로컬 운동의 기준이고 map은 장기 전역 보정을 담을 수 있는 기준이다. odom과 map을 연결하는 보정은 추정기의 출력이며 map 이름이 참값을 보장하지 않는다. simulator world pose를 odom 대신 주입한 경우와 실제 센서로 이동을 추정한 경우도 기록에서 구별한다. 지도/위치의 입력으로 무엇을 미리 제공했는지 공개해야 결과 범위를 판단할 수 있다.
알려진 지도에서 위치를 계산한다
기초 계산을 위해 1차원 +x 방향만 사용한다. 로봇 방향은 알려져 있고 정적 랜드마크는 로봇 앞의 +x에 있다. x_R은 로봇 위치(m), x_L은 랜드마크 위치(m), 거리 관측은 z=x_L−x_R≥0으로 정의한다. 동일 ID의 랜드마크와 같은 시각/축·오차 없는 거리라는 합성 가정이다. 실제 거리만 있고 방향/대응이 없으면 이렇게 유일하게 풀리지 않을 수 있다.
지도에 x_L=5 m가 알려져 있고 z=3.2 m를 관측하면 x_R=5−3.2=1.8 m다. odometry가 같은 시각의 x_R을 2.0 m로 추정했다면 두 추정 차이는 0.2 m다. 알려진 지도/관측으로 위치를 보정하는 localization의 작은 예다. 같은 축의 단순 병진으로 map pose=1.8/odom pose=2.0을 연결한다면 map→odom 이동은 −0.2 m다.
Nav2 AMCL Jazzy 공식 설명은 알려진 지도와 2D laser로 pose를 추정하는 확률적 localization 모듈이라고 설명한다. 위 뺄셈은 AMCL의 입자/확률 알고리즘을 실행한 것이 아니다. 실제 관측 오차·초기 모호성/가림과 지도 불일치에서는 후보/불확실성·현재 근거를 함께 관리한다.
알려진 위치로 환경을 연결한다
다른 mapping 입력에서 로봇의 알려진 위치가 첫 시각 1 m/다음 시각 2 m이고 같은 정적 랜드마크의 거리가 각각 4/3 m라면 지도 위치는 1+4=5와 2+3=5 m로 일치한다. 서로 다른 센서 관측을 공통 지도에 연결한 예다. pose를 입력으로 제공했기 때문에 위치를 동시에 미지로 풀었다는 SLAM 성과로 쓰지 않는다.
두 번째 거리가 3.3 m라면 지도 후보가 5.3 m로 달라진다. 센서 잡음/동적 물체·pose/시간/대응 오류 등 대안이 있다. 두 점의 평균 5.15 m를 적는 것만으로 원인이 사라지지는 않는다. 관측 모델/불확실성과 대응·기준을 확인하고 어떤 자료를 지도에 넣을지 정한다. 지도는 관측된 영역의 표현이며 가려진 구역을 자동으로 안다는 뜻도 아니다.
SLAM에서는 지도와 궤적이 함께 움직일 수 있다
이번에는 x_R0/x_R1과 x_L이 모두 미지라고 하자. 상대 이동 관측은 x_R1−x_R0=1 m이고 거리 관측은 첫 4 m/다음 3 m다. 관계식은 x_L−x_R0=4, x_L−x_R1=3이다. x_R0=0을 기준으로 정하면 (x_R0,x_R1,x_L)=(0,1,4)가 된다.
하지만 (100,101,104)도 같은 이동/거리 관계를 만족한다. 모든 위치에 같은 상수를 더해도 상대 관측이 같기 때문이다. 이런 전역 기준의 자유도를 gauge라고 부른다. 기준 원점을 정해 상대 지도/궤적을 만들 수 있고 그것 자체가 실패는 아니다. 외부 좌표에서의 절대 위치가 필요하면 추가 기준/정합·불확실성을 확인해야 한다. 2D/3D에서는 전역 회전 등의 자유도도 문제 설정에 따라 남는다.
SLAM은 이동/센서 관계를 결합해 일관된 궤적/지도를 추정한다. 과거 장소를 다시 보았다고 판단하는 loop closure가 전역 일관성의 근거를 줄 수 있지만 대응이 틀리면 지도를 잘못 보정할 수 있다. 이 단위는 고급 최적화를 가정하지 않고 어떤 미지를 연결하는지 이해하는 단계다. 평면 예를 모든 지형/센서·3D 문제로 일반화하지 않는다.
slam_toolbox Jazzy 공식 README는 2D SLAM과 pose graph, 기존 자료를 사용하는 localization 등 서로 다른 mode를 설명한다. 따라서 패키지 이름에 SLAM이 있다고 모든 실행이 미지 지도/위치의 동시 추정인 것은 아니다. 사용한 mode·초기 지도/궤적·센서/보정/clock과 실제 출력 범위를 기록한다. 이 교재 활동은 해당 패키지를 실행하지 않는다.
과업에 맞는 입력과 독립 근거를 선택한다
이미 검증된 지도를 두고 로봇 pose를 찾으려면 localization 문제로 시작할 수 있다. 센서 pose를 알고 환경을 기록하려면 mapping, 환경/궤적을 함께 모르면 SLAM의 전제를 검토한다. odometry는 각각에 이동 입력이나 로컬 제어 기준을 제공할 수 있다. 환경이 바뀌면 기존 지도의 유효성/동적 관측을 확인하고 자동으로 올바르게 갱신될 것이라 가정하지 않는다.
대칭 복도/무특징 벽·가림, 다른 물체를 같은 랜드마크로 연결함, 오래된 TF/시간·센서 외부 보정과 바퀴 미끄럼은 모호성/실패를 만들 수 있다. 현재 표본만으로 구분되지 않으면 한 pose를 참값처럼 발표하지 않고 여러 가능성/미상과 필요한 관측을 남긴다. 정지/다른 시점·시야의 추가 관측이나 별도 기준이 어떤 모호성을 줄이는지 설명한다.
평가에서는 지도의 보기 좋은 모양/토픽 존재와 실제 위치 정확도를 분리한다. frame/시각·전역 정합 기준을 고정하고 독립 위치/거리·재방문/새 조건의 잔차와 실패/분모를 기록한다. 알고 있는 pose/지도를 평가 입력에 넣었다면 그 사실을 공개한다. 기존 4.3 TF와 6.1 Reality Gap을 연결하자. 아래 활동의 완료는 실제 SLAM 지도 생성/실물 위치 추정의 성공과 별도다.