SLAM이란? 뜻과 원리, 라이다 SLAM과 비주얼 SLAM의 차이

SLAM(Simultaneous Localization and Mapping, 동시적 위치 추정 및 지도 작성)은 로봇이 처음 가 본 공간의 지도를 만들면서, 동시에 그 지도 안에서 자기 위치를 찾는 기술입니다. 지도가 있어야 위치를 알 수 있고, 위치를 알아야 지도를 그릴 수 있는 문제를 한꺼번에 풉니다. 센서에 따라 레이저로 거리를 재는 라이다 SLAM과 카메라 영상을 쓰는 비주얼 SLAM으로 크게 나뉩니다. 로봇청소기의 집 지도, 물류창고 로봇의 이동, 드론과 AR 기기의 공간 인식이 모두 SLAM입니다.

SLAM은 어떤 순서로 돌아가나

매스웍스는 SLAM을 앞단(front end)과 뒷단(back end) 두 부분으로 설명합니다(MathWorks, What Is SLAM?).

  1. 센서 읽기(앞단): 라이다 점군이나 카메라 영상에서 벽 모서리, 물체 윤곽 같은 특징을 뽑습니다. 이 부분은 어떤 센서를 쓰느냐에 따라 크게 달라집니다.
  2. 움직임 추정: 바로 전 순간과 지금 본 특징을 맞춰 로봇이 얼마나, 어느 방향으로 움직였는지 계산합니다. 바퀴 엔코더나 IMU 값을 함께 쓰면 더 안정적입니다.
  3. 지도 쌓기: 계산한 위치에 지금 본 것을 붙여 지도를 넓힙니다.
  4. 오차 바로잡기(뒷단): 쌓인 위치들을 그래프로 묶어 전체가 가장 잘 맞도록 다시 계산합니다. 이것을 포즈 그래프 최적화라고 하며, 센서 종류와 상관없이 같은 방식으로 씁니다.

루프 클로저가 지도를 바로 펴 준다

SLAM의 가장 큰 문제는 작은 오차가 계속 쌓인다는 점입니다. 한 걸음마다 1°씩 틀리면 복도를 한 바퀴 돌아 출발점에 왔을 때 지도상으로는 출발점과 어긋난 곳에 서 있게 됩니다. 지도가 휘거나 같은 방이 두 번 그려지는 것도 이 때문입니다.

이를 바로잡는 장치가 루프 클로저(loop closure)입니다. 로봇이 예전에 왔던 곳을 다시 알아보면 “여기는 출발점과 같은 곳”이라는 조건을 추가하고, 포즈 그래프 최적화로 그 사이 경로 전체의 오차를 나눠 고칩니다. 비주얼 SLAM에서는 같은 작업을 번들 조정(bundle adjustment)이라 부릅니다. 반대로 같은 모양의 복도가 여러 개 있는 건물처럼 서로 다른 곳을 같은 곳으로 착각하면 지도가 크게 망가지므로, 실제 제품은 루프 클로저를 받아들이는 기준을 엄격하게 둡니다.

라이다 SLAM과 비주얼 SLAM은 무엇이 다른가

라이다 SLAM – 레이저로 거리를 직접 재서 정확합니다. 조명이 어둡거나 바뀌어도 성능이 거의 같습니다. – 빠르게 움직이는 자율주행차와 드론에도 맞습니다. – 유리, 거울, 검은 물체처럼 레이저가 잘 돌아오지 않는 표면에 약합니다. 긴 빈 복도처럼 특징이 없는 곳에서도 위치를 놓치기 쉬워, 바퀴 엔코더·IMU·GPS를 섞어 씁니다. – 실내 로봇은 주로 바닥과 평행하게 한 줄을 스캔하는 2D 라이다로 평면 지도를, 자율주행차와 드론은 3D 라이다로 입체 지도를 만듭니다. 라이다 자체의 원리와 종류는 라이다 센서 원리 글에 정리했습니다.

비주얼 SLAM(vSLAM) – 값싼 카메라로 됩니다. 카메라 1대(단안), 2대(스테레오), 깊이 카메라(RGB-D) 모두 씁니다. – 영상에 정보가 많아 장소를 알아보는 루프 클로저에 유리합니다. – 카메라 1대만으로는 실제 거리(크기)를 알기 어려워 IMU나 크기를 아는 표식이 필요합니다. – 어두운 곳, 흰 벽처럼 무늬 없는 곳, 빠른 움직임으로 영상이 흐려질 때 약합니다.

IMU를 함께 쓰는 비주얼 SLAM은 비주얼-관성(visual-inertial) SLAM이라 부르며, 드론·AR 기기·휴대 로봇에서 흔합니다. IMU가 무엇을 재고 왜 혼자서는 위치가 흘러가는지는 IMU 센서 글에서 다뤘습니다.

지도는 어떤 모양으로 저장되나

  • 점유 격자 지도(occupancy grid): 바닥을 바둑판처럼 나눠 칸마다 “비었음, 막힘, 모름”을 표시합니다. 2D 라이다 SLAM의 기본 결과물이고, 로봇청소기 앱에 보이는 집 지도가 이 형태입니다.
  • 점군 지도: 3D 라이다가 찍은 점을 모은 입체 지도입니다. 자율주행차의 정밀 지도 작업에 씁니다.
  • 특징점 지도: 비주얼 SLAM이 영상에서 뽑은 특징점의 3D 위치를 저장합니다. 사람이 보기에는 점 구름일 뿐이지만 위치를 다시 찾는 데 씁니다.

대표 오픈소스로 직접 해 보려면

  • SLAM Toolbox: ROS 2 내비게이션 스택 Nav2의 공식 튜토리얼이 쓰는 2D 라이다 SLAM 패키지입니다. 튜토리얼은 TurtleBot3 시뮬레이션에서 ros2 launch slam_toolbox online_async_launch.py로 SLAM을 켜고, 다 그린 지도를 map_saver_cli로 저장하는 순서를 보여 줍니다(Nav2, Navigating while Mapping (SLAM)). ROS 2 설치와 버전 고르기는 ROS 2 입문 글을 보세요.
  • ORB-SLAM3: 연구에서 많이 쓰는 비주얼 SLAM입니다. 단안·스테레오·RGB-D 카메라, IMU 결합, 어안 렌즈를 지원합니다. 라이선스가 GPLv3라 상업 제품에 넣으려면 저자에게 별도 라이선스를 문의해야 하고, 공개 버전은 2021년 12월 22일 V1.0 이후 새 버전이 없으며 시험 환경도 Ubuntu 16.04/18.04 기준이라 최신 환경에서는 손볼 곳이 있습니다(ORB-SLAM3 GitHub).

생활 속 SLAM: 로봇청소기

SLAM을 가장 가깝게 볼 수 있는 기계가 로봇청소기입니다. 라이다형은 첫 청소 때 방을 돌며 점유 격자 지도를 그리고, 이후에는 그 지도 위에서 자기 위치를 찾으며 구역별로 청소합니다. 카메라형은 천장이나 가구의 특징을 보고 위치를 잡습니다. 어두운 방에서 카메라형이 길을 잃거나, 거울과 유리 앞에서 라이다형 지도가 이상해지는 것이 위에서 본 약점이 실제로 드러나는 장면입니다. 자세한 작동 방식은 로봇청소기 원리 글에 정리했습니다.

SLAM으로 안 되는 것

SLAM은 “지금 어디에 있고 주변이 어떻게 생겼는지”까지만 답합니다. 어디로 갈지 경로를 짜는 것(경로 계획), 사람·물체가 무엇인지 알아보는 것(인식)은 별도 기능입니다. 사람이 오가거나 의자가 자주 옮겨지는 곳에서는 지도와 현실이 어긋나므로, 실제 제품은 움직이는 물체를 지도에서 빼거나 지도를 계속 새로 고치는 기능을 따로 둡니다.