입력을 받아 지도를 내기까지의 연결을 본다
SLAM은 센서 이름만 선택하면 끝나는 기능이 아니다. 관측을 받아 사용할 자료를 고르고, 이전 관측과의 대응을 찾고, 이동과 지도를 추정하며, 과거 자료와의 일관성을 다시 점검한다. 이 연결을 파이프라인이라고 한다. 중간 단계가 잘못되면 마지막 지도 모양만으로 원인을 찾기 어렵다. 먼저 입력의 단위·좌표·취득 시각, 각 단계의 출력과 실패 신호를 적는다.
LiDAR는 여러 방향의 거리 표본을 제공한다. Visual SLAM은 카메라 영상의 모양과 밝기 정보를 사용한다. 카메라가 직접 로봇의 전역 위치를 출력하는 것은 아니며, LiDAR의 거리도 곧 지도 좌표가 아니다. 센서가 로봇의 어느 위치·방향에 달렸는지 나타내는 외부 보정과 시각의 관계가 필요하다. 이 기본 계약은 기존 4.1 핀홀 카메라와 좌표 프레임 및 4.4 멀티레이트 센서 시간 정합에 연결된다.
LiDAR는 거리의 공간 배치를 맞춘다
거리 표본은 광선 방향과 결합해 센서 기준의 점이 된다. 유효 범위 밖 값과 가려진 로봇 몸체의 반사 등을 구별하고 필요한 필터를 적용한다. 한 스캔의 모든 광선이 동시에 취득된 것은 아닐 수 있다. 이동 중에 차례로 얻은 표본을 한 시점처럼 놓으면 벽이 휘어 보일 수 있다. deskew는 각 표본의 취득 시각과 추정 운동으로 이런 운동 왜곡을 보정하는 과정이다. 단순 필터링과 같은 작업은 아니며 필요한 시간·운동 근거가 없으면 정확한 보정을 보장할 수 없다.
그림 M15.03-1. 각 칸은 서로 다른 역할/근거다. 아래 방향은 자료/처리의 연결이며 실제 성공을 자동으로 보장하지 않는다. 직접 제작한 개념도이며 본문의 조건과 함께 읽는다.
다음은 회전이 없는 1차원 합성 예다. 과거 센서 축에서 정적 표면 점의 좌표 a는 [2,3,4] m이고, 현재 센서 축의 대응점 b는 [1.5,2.5,3.5] m다. 두 축은 +x 방향이 같고 각 쌍은 같은 물리점을 뜻한다고 제공한다. 현재 좌표를 과거 축으로 옮기는 식은 a=b+t다. 세 쌍 모두 t=0.5 m를 준다. 센서가 앞으로 0.5 m 이동했기 때문에 같은 물체가 현재 축에서는 0.5 m 가까워 보인 것이다.
물체 좌표가 줄었으니 로봇도 뒤로 갔다고 답하면 좌표 변환과 운동 방향을 혼동한 것이다. 현재 점 b에 +0.5 m를 더하면 과거의 세 점 a가 복원되는지 확인한다. 만약 관측 순서를 바꾸어 과거 점을 현재 축으로 옮기면 이동은 −0.5 m다. 어느 시점에서 어느 시점으로 보내는 변환인지 먼저 써야 부호를 해석할 수 있다.
실제 scan matching은 대응이나 초기 이동이 이렇게 주어지지 않은 상태에서 스캔 또는 지도와 잘 맞는 변환을 찾는다. 회전도 포함하고 잡음·이상치를 처리하며 최적화가 필요할 수 있다. 이 세 점의 뺄셈은 알고리즘 전체나 실제 LiDAR 정밀도를 재현하지 않는다. 반복되는 기둥을 한 칸씩 잘못 대응해도 겉보기 잔차가 작을 수 있다는 한계가 남는다.
Visual SLAM은 영상의 대응을 기하에 연결한다
영상에서 특징점은 모서리처럼 다시 찾기 쉬운 국소 위치다. descriptor는 그 주변 모양을 비교 가능한 수치로 요약한 표현이다. 여러 영상에서 비슷한 표현을 찾는 것은 대응 후보를 만드는 과정이고 같은 물리점이라는 확정은 아니다. 기하 검사와 이상치 배제, 시간에 따른 추적이 뒤따른다. 모든 Visual SLAM이 특징점만 쓰는 것은 아니다. 영상 밝기를 직접 비교하는 방식 등도 있으므로 여기서는 특징 기반 흐름을 대표 예로 사용한다.
단안 카메라는 한 시점의 영상만으로 모든 점의 미터 단위 깊이를 알 수 없다. 왜곡을 제거한 pinhole 예에서 optical 축의 X는 오른쪽 위치(m), Z는 앞쪽 깊이(m), u는 가로 픽셀, c_x는 주점(pixel), f_x는 픽셀 단위 초점거리다. 관계는 다음과 같다.
f_x=400 pixel에서 X=0.1 m, Z=2 m이면 u−c_x=20 pixel이다. X=0.2 m, Z=4 m도 20 pixel이다. 순수 단안 기하에서 장면과 병진 이동을 함께 같은 배수로 바꾸면 영상 대응이 유지될 수 있다. 이것이 미터 척도의 모호성이다. 방향과 상대 구조를 추정하는 것과 절대 미터 크기를 아는 것을 구별한다. 이미 알려진 크기나 별도 센서·운동 조건 등 추가 근거를 쓰면 문제가 달라지므로 그 입력을 공개한다.
보정되고 수평으로 정렬된 평행 스테레오 카메라는 알려진 두 카메라 간격 B를 이용한다. 두 영상에서 같은 점의 가로 좌표 차이 d를 disparity, 즉 시차라고 하자. 두 주점의 가로 좌표가 같은 간단한 규약에서 d=u_L−u_R>0이고 Z=f_xB/d다. B=0.1 m, f_x=400 pixel, d=20 pixel이면 Z=2 m다. d=10 pixel로 줄면 Z=4 m가 된다. d=0이나 잘못 대응한 점을 임의의 유한 깊이로 바꾸면 안 된다. 실제 왜곡·정렬·시각 오차와 가림, 시차 부호 및 출력 단위는 사용한 모델과 구현에서 확인한다.
가까운 이동 추정과 전체 일관성 수정을 구별한다
전방 추정(frontend)은 가까운 관측의 대응과 이동, 지역 지도의 일관성을 만드는 역할로 이해할 수 있다. 후방 수정(backend)은 여러 pose와 관측 사이의 관계를 모아 전체 일관성을 개선하는 역할이다. pose graph는 pose를 점에, 상대 관계를 연결선에 담은 표현이다. submap은 전체 환경을 부분별 지도로 나눈 것이다. 이 구분은 역할 설명이며 모든 구현의 내부 구조와 스레드 구성이 같다는 뜻은 아니다.
Cartographer 저자 문서는 지역 submap 생성과 전역 제약·최적화를 나누어 설명한다. SLAM Toolbox Jazzy는 스캔과 odometry에서 pose graph를 만들고 스캔 매칭과 루프 폐쇄를 통해 pose를 수정하는 흐름을 설명한다. 루프 폐쇄는 과거 장소와 새 관측이 같은 곳이라는 제약을 추가하는 과정이다. 단지 영상이 비슷하다는 이유만으로 연결하면 전역 지도를 오히려 망가뜨릴 수 있다.
ORB-SLAM3 저자 저장소는 단안·스테레오·RGB-D 및 관성 센서를 결합한 구성을 구분한다. RGB-D는 색 영상과 깊이를 제공하는 구성이다. 이 자료의 기존 ROS 예시는 Melodic/Ubuntu 18.04 시험 범위이므로 Jazzy에서 실행했다고 바꾸어 말하지 않는다. 여기서는 입력과 알고리즘 역할의 사례로만 사용하며 설치나 다운로드는 기본 활동에 필요하지 않다.
실패를 센서 이름이 아니라 단계와 근거로 기록한다
LiDAR가 긴 평행 벽만 보면 벽을 따라 움직이는 방향의 제약이 약할 수 있고, 영상이 무텍스처 벽·어둠·흔들림으로 가려지면 대응을 잃기 쉽다. 움직이는 사람을 정적 환경으로 연결하거나 시계·외부 보정이 틀려도 추정이 흔들린다. LiDAR는 항상 정확하고 카메라는 항상 실패한다는 식의 선택은 근거가 없다. 범위와 시야, 반복 구조, 관측 밀도, 계산 지연과 필요한 차원을 함께 본다.
평가에는 취득 자료, 대응 수와 이상치, 지역 잔차, 루프 후보와 검증 결과, 전역 정합 기준과 독립 궤적 오차를 남긴다. 지연으로 오래된 pose가 출력되는 문제와 기하 오차도 구분한다. 스캔 정렬 하나가 맞거나 스테레오 깊이 하나를 계산했다고 실제 SLAM 전체가 통과한 것은 아니다. 아래 활동은 단계와 관측 근거를 이해하는 종이 계산이며 지도 생성·센서 실증을 수행하지 않는다.