Cartographer는 Google에서 개발한 오픈소스 SLAM 알고리즘으로, 로봇이 주변 환경을 인식하며 자신의 위치를 실시간으로 파악하고 지도를 만들어 나가는 기술이다.
SLAM 알고리즘은 크게 두 가지 역할을 수행해야 한다.
일반적으로 SLAM을 수행할 때 가장 큰 문제는 센서 오차 누적으로 인해 로봇의 위치가 점차 부정확해지는 것이다.
Cartographer는 이 문제를 해결하기 위해 스캔 매칭(Scan Matching)과 포즈 그래프 최적화(Pose Graph Optimization)라는 기법을 활용하여 정밀한 맵을 생성하고 오차를 줄인다.
Cartographer SLAM 이전에도 여러 SLAM 알고리즘이 존재했으며, 대표적인 방식으로 Gmapping이 있다. 두 알고리즘의 차이를 이해하면 Cartographer가 어떻게 더 정밀한 맵을 구축할 수 있는지 쉽게 파악할 수 있다.
| 특징 | Gmapping | Cartographer |
|---|---|---|
| 사용 기법 | 입실론 필터 기반 파티클 필터 방식 | 스캔 매칭 + 포즈 그래프 최적화 |
| 지도 품질 | 중간 정도의 품질 | 매우 정밀함 |
| 누적 오차 | 시간이 지나면 점점 커짐 | 지속적인 보정으로 오차 최소화 |
| 연산 속도 | 비교적 빠름 | 연산량이 많음(고성능 CPU 필요) |
Gmapping은 확률론적 접근법을 사용하여 로봇의 위치를 추정한다.
입실론 필터(Epsilon Filter): 센서 데이터에서 작은 노이즈를 무시하는 필터링 기법. 이를 통해 지나치게 변동이 심한 데이터를 걸러낼 수 있다.
파티클 필터(Particle Filter): 로봇의 위치를 여러 개의 가상의 후보(파티클)로 두고, 센서 데이터를 활용해 가장 가능성이 높은 위치를 선택하는 방식.
하지만 Gmapping은 누적된 오차를 효과적으로 보정하지 못하기 때문에 오랜 시간 이동하면 지도에 왜곡이 생기는 단점이 있다.
Cartographer는 센서 데이터를 비교하여 로봇의 위치를 정확하게 보정하는 방식을 사용한다.
스캔 매칭(Scan Matching): 로봇이 이동할 때, 현재 측정한 센서 데이터를 이전 데이터와 비교하여 현재 위치를 추정하는 방식. 이를 통해 매 순간 로봇이 어디에 있는지를 정교하게 계산할 수 있다.
포즈 그래프 최적화(Pose Graph Optimization): 로봇이 이동하면서 생성한 위치 데이터를 그래프 형태로 구성한 뒤, 전체적인 위치 관계를 최적화하여 오차를 보정하는 방식.
즉, 단순히 센서 데이터를 쌓아가는 것이 아니라, 과거의 데이터까지 다시 수정하면서 지도와 로봇의 위치를 함께 보정한다.
스캔 매칭이란, 현재 측정한 센서 데이터를 이전에 기록된 지도와 비교하여 현재 위치를 결정하는 과정이다.
예시로 로봇이 1m 앞으로 이동했다고 가정해 보자.
포즈 그래프는 로봇이 특정 위치에 도달할 때마다 노드를 생성하고, 이 노드들을 연결한 그래프 형태의 지도이다.
이 그래프를 최적화하는 과정에서 센서 오차를 보정하여 전체적인 위치 관계를 더 정확하게 정리할 수 있다.
쉽게 말하면 "과거에 내가 여기 있었다"는 기록을 다시 수정하면서 오차가 최소화된 일관된 맵을 만든다는 의미이다.
로봇이 같은 장소를 다시 방문할 경우, 기존 지도와 현재 스캔 데이터를 비교하여 오차를 보정하는 과정이다.
즉, "같은 장소인데 데이터가 다르네?" → "그럼 전체 위치 데이터를 다시 보정하자!" 하는 과정이다.
(그래서 cpu의 수행 능력이 딸릴 때 잘 가다가도 오차가 쬐끔씩 쌓여가는 바람에 루프클로징에서 판단한 오차가 커서 맵이 아예 크게 어긋나는 현상이 생긴다.. 파라미터 조정해서 잘 타협해야 함. 이거 때문에 노트북에서 작업할 때 맵핑 다시한 게 10번이 넘음)
Cartographer SLAM은 기존의 Gmapping과 같은 방식보다 훨씬 정밀한 맵을 생성할 수 있는 알고리즘이다
이러한 특징 덕분에 실내 자율주행 로봇, 모바일 로봇 연구, 공장 자동화 등 다양한 분야에서 활용되고 있다. (현재로썬 안정성과 정확성이 우선이며 빠르게 움직이는 동적 객체가 적은 환경이라면 Cartographer가 최선이지 싶다)
향후에 이보다 더 효율적인 알고리즘이 개발된다면, 연산 속도를 개선하면서도 더욱 정밀한 맵핑이 가능해질 것으로 기대된다.