
자동화된 물류 센터에서 무인운반차가 안전하고 정확하게 목표 지점에 도달하려면 자신의 위치를 정확히 알아야 합니다. GPS는 실내 환경에서 작동하지 않으므로 로봇은 주변 환경 정보만을 이용하여 자신의 위치를 파악해야 합니다.
초기에는 직진과 회전 거리로 위치를 계산하는 방식(주행 거리 기반 위치 추정)을 사용했습니다. 바퀴의 회전 수를 세어 이동 거리를 계산하고, 자이로스코프로 회전을 기록하는 방식이었습니다. 그러나 바퀴 미끄러짐, 바닥의 울퉁불퉁한 표면, 센서 오차 같은 현실의 요인들로 인해 시간이 지나면서 오차가 계속 누적됩니다. 몇 시간만 지나도 실제 위치와 계산된 위치 간의 차이가 수 미터에 달할 수 있습니다.
이러한 문제를 해결하기 위해 동시 위치 파악과 지도 작성(SLAM)이 등장했습니다. 로봇이 센서로 주변 환경을 관찰하면서 그 정보를 통해 자신의 위치를 지속적으로 수정하는 방식입니다. 같은 장소를 다시 방문할 때 "이 모양은 전에 본 적이 있는데?"라고 인식하면서 위치 오차를 보정할 수 있는 원리입니다.
SLAM은 일반적으로 위치 추정 문제와 지도 작성 문제로 나뉩니다. 이 두 문제는 서로 밀접하게 연결되어 있어 함께 해결되어야 합니다.
위치 추정 문제는 "현재 내가 어디에 있는가?"라는 질문입니다. 로봇이 센서로 주변을 관찰했을 때 그 정보가 지도의 어느 위치와 일치하는가를 찾아야 합니다. 예를 들어 "오른쪽에 벽이 있고 앞에 기둥이 있다"는 관찰이 지도의 어느 부분과 맞는가를 파악하는 것입니다.
지도 작성 문제는 "내 주변에 무엇이 있는가?"라는 질문입니다. 로봇이 여행하면서 벽, 기둥, 물품 배치 같은 환경 정보를 수집하여 지도를 만들어야 합니다. 처음에는 지도가 없으므로 첫 번째 관찰부터 시작하여 점진적으로 지도를 만들어갑니다.
이 두 문제의 딜레마는 "정확한 위치가 없으면 정확한 지도를 만들 수 없고, 정확한 지도가 없으면 위치를 정확히 파악할 수 없다"는 것입니다. 따라서 두 가지를 동시에 반복적으로 개선하면서 수렴시켜야 합니다.

SLAM 시스템은 센서로부터 얻은 원시 데이터를 의미 있는 정보로 변환해야 합니다. 이 과정이 SLAM 성능을 크게 좌우합니다.
LiDAR는 레이저로 주변 거리를 측정하여 점 구름(여러 점으로 이루어진 3차원 정보)을 생성합니다. 한 번의 스캔에 수백 개에서 수천 개의 거리 데이터가 포함됩니다. 이 방대한 점 구름 모두를 저장하면 데이터가 너무 커져 처리가 어려워집니다. 따라서 점 구름에서 특징점(코너, 모서리 같이 눈에 띄는 부분)을 추출하여 수십 개에서 수백 개 정도로 압축합니다.
카메라 영상도 마찬가지입니다. 해상도가 높은 이미지 전체를 저장하면 방대한 양의 데이터가 됩니다. 대신 특징점 검출 알고리즘(SIFT, ORB 같은 방법)을 사용하여 영상에서 특징점을 찾고 그 특징 주변의 작은 영역 정보만 저장합니다.
이러한 특징점 추출은 효율성과 견고성의 균형을 제공합니다. 조명이 바뀌거나 물품이 약간 이동해도 특징점(예: 기둥의 모서리)은 남아있기 때문입니다.
로봇이 이동하면서 새로운 센서 데이터(새로운 스캔)를 얻을 때마다 이전 스캔과 비교하여 로봇이 얼마나 이동했는가를 파악합니다. 이를 스캔 매칭이라 부릅니다.
ICP(Iterative Closest Point) 알고리즘은 두 점 구름 간의 가장 좋은 정렬 방식을 찾습니다. 방법은 직관적입니다: 첫 번째 스캔의 각 점에 대해 두 번째 스캔에서 가장 가까운 점을 찾고, 이 대응 관계로부터 로봇의 이동(회전과 평행이동)을 계산합니다. 계산된 이동을 적용한 후 다시 가까운 점들을 찾고 이동을 재계산하는 식으로 반복하면서 정렬 오차를 줄여갑니다.
특징점 매칭은 특징점들의 설명자(주변 이웃의 특성을 수치로 나타낸 정보)를 비교하여 서로 다른 스캔에서 같은 특징점을 찾습니다. 일단 대응되는 특징점들을 찾으면 ICP와 유사한 방식으로 로봇의 이동을 계산합니다.


SLAM 시스템은 로봇의 모든 이전 위치들을 노드(마디)로 표현합니다. 예를 들어 로봇이 10번 스캔했다면 10개의 노드가 존재합니다. 이 노드들을 간선(연결)으로 연결하는데, 간선에는 "노드 A에서 노드 B로 이동할 때 전진 0.5미터, 왼쪽으로 10도 회전했다"는 정보(상대 이동)를 저장합니다. 이렇게 형성된 노드와 간선의 집합이 위치 그래프입니다.
로봇이 같은 장소를 다시 방문할 때 그것을 감지하는 것이 SLAM의 핵심입니다. 예를 들어 로봇이 1시간 후 출발점 근처로 다시 돌아왔을 때, "이 센서 데이터는 출발점에서 본 데이터와 유사하다"는 것을 인식합니다. 이를 루프 폐쇄(Loop Closure)라 부르고, 이 정보를 그래프에 추가하면 누적된 위치 오차를 한 번에 보정할 수 있습니다.
최적화 알고리즘은 전체 그래프의 모든 노드들의 위치를 미세 조정하여 모든 간선의 오차를 최소화합니다.
SLAM에서 생성되는 지도는 여러 방식으로 표현될 수 있으며, 각각 다른 용도와 효율성을 가집니다.
포인트 클라우드 지도는 3차원 점들의 집합으로 환경을 표현합니다. 모든 센서 데이터를 축적하면 매우 상세하고 풍부한 정보를 가진 지도가 됩니다. 그러나 저장 용량이 크고 처리가 느리다는 단점이 있습니다.
격자 지도는 실내 환경을 정사각형 칸(그리드)들로 나누고, 각 칸을 "통행 가능", "장애물", "미탐사" 같은 상태로 표시합니다. 이는 로봇의 경로 계획에 매우 효과적이고, 저장 공간도 포인트 클라우드보다 훨씬 적습니다.
위상 지도는 공간을 "지점"과 "경로"로 단순화합니다. 예를 들어 "구역 A에서 출발하여 복도를 통해 구역 B에 도달할 수 있다" 식으로 표현합니다. 이는 고수준의 경로 계획에는 효과적이지만 세밀한 장애물 회피에는 부족합니다.
SLAM이 정확하게 작동하려면 로봇의 움직임과 센서 측정을 수학적으로 모델링해야 합니다.
모션 모델은 로봇이 어떤 명령을 받았을 때 실제로 어떻게 이동하는가를 설명합니다. 이상적으로는 "50cm 전진하라는 명령에 정확히 50cm 전진"하겠지만, 현실은 바퀴 미끄러짐, 비균등한 가속, 불규칙한 바닥 때문에 매번 조금씩 다르게 이동합니다. 모션 모델은 이러한 불확실성을 확률로 표현하여, "50cm 전진은 평균적으로 정확하지만 표준편차 1cm의 변동이 있을 수 있다" 식으로 나타냅니다.
측정 모델은 센서가 실제 환경에서 어떻게 측정하는가를 설명합니다. LiDAR가 벽까지 정확히 1미터라고 측정하지만 실제로는 측정값이 0.95~1.05미터 사이로 변동할 수 있습니다. 측정 모델은 이러한 센서의 오차 특성을 모델링합니다.
많은 SLAM 시스템은 칼만 필터라는 수학적 기법을 사용하여 위치를 추정합니다. 칼만 필터의 아이디어는 간단합니다: 예측과 관측을 반복적으로 융합합니다. 예측 단계에서는 모션 모델을 사용하여 "로봇의 다음 위치가 어디일 것 같은가"를 예측합니다. 로봇이 "1초에 10cm 전진한다"는 명령을 받으면 다음 위치는 현재 위치에서 10cm 앞이 될 것으로 예측합니다.
관측 단계에서는 새로운 센서 데이터를 받아서 "실제로 센서가 감지한 환경은 어디와 일치하는가"를 파악합니다. 예를 들어 센서가 "오른쪽 2미터에 벽이 있다"고 감지했으면, 이 정보로부터 로봇의 현재 위치를 역추론합니다. 또한 융합 단계에서는 예측값과 관측값을 종합합니다. 만약 예측이 매우 정확한 센서(낮은 불확실성)라면 관측값을 더 신뢰하고, 관측이 노이즈가 많은 센서라면 예측값을 더 신뢰합니다.

현대의 AGV는 LiDAR, 카메라, IMU(가속도계와 자이로스코프), 휠 엔코더 같은 여러 센서를 탑재하고, 각각의 강점을 활용하는 통합 SLAM을 구현합니다. LiDAR 기반 SLAM은 거리 측정의 높은 정확도 때문에 실내 산업 환경에 가장 널리 사용됩니다. 특히 빠른 처리 속도와 견고성이 장점입니다.
시각 기반 SLAM은 카메라로부터의 특징점 매칭을 기반으로 하며, 색상 정보와 텍스처를 활용하여 LiDAR 만으로는 구분하기 어려운 물체들을 구분할 수 있습니다. 그러나 조명 변화에 민감하다는 단점이 있습니다. IMU는 회전 움직임을 매우 정확하게 감지하여 로봇의 방향 추정에 특히 유용합니다. 카메라나 LiDAR만으로는 회전을 파악하기 어려운 상황(예: 칙칙한 환경에서)에서 IMU가 핵심적인 역할을 합니다.
휠 엔코더는 바퀴의 회전 수를 세어 이동 거리를 계산하는데, 단기적으로 매우 정확하지만 누적 오차가 크다는 특징이 있어 다른 센서들과의 융합이 필수적입니다.
동일한 SLAM 알고리즘도 환경의 특성에 따라 성능이 크게 달라집니다.
실내 창고 환경은 SLAM에 이상적인 조건을 제공합니다. 벽, 기둥, 선반 같은 뚜렷한 특징점이 많고, 일정한 조명이 유지되며, 복잡한 3차원 구조가 아닌 비교적 평면적 환경이기 때문입니다. 따라서 높은 정확도의 SLAM이 가능합니다.
반면 매우 단순한 환경(예: 흰색 빈 방) 은 SLAM에 어려움을 줍니다. 특징점이 거의 없어서 센서가 로봇의 위치 변화를 파악하기 어렵기 때문입니다. 이 경우 고의적으로 마커를 설치하거나 다양한 센서를 사용하는 보완책이 필요합니다.
야외 환경에서의 SLAM은 동적 객체(사람, 자동차), 반사 표면, 조명 변화 때문에 훨씬 더 복잡합니다. 산업 물류에서는 주로 실내에 제한되므로 이 문제는 덜 중요하지만, 대형 창고의 야외 적재 공간에서는 고려할 필요가 있습니다.
