본문으로 바로가기

SLAM 기본 개념, Gazebo 기반 SLAM 실행

category 강좌/ROS2 2026. 5. 24. 09:27

모바일 로봇이 “내 위치”와 “지도”를 동시에 알아내는 방법

 

모바일 로봇이 실내에서 자율주행을 하려면 두 가지를 알아야 합니다.

 

첫째, 내가 지금 어디에 있는가?

둘째, 주변 환경이 어떻게 생겼는가?

 

문제는 처음 들어간 공간에서는 로봇이 지도를 모릅니다. 지도도 없는데 위치를 알아야 하고, 위치도 정확히 모르는데 지도를 만들어야 합니다. 이 닭과 달걀 같은 문제를 푸는 기술이 바로 SLAM, 즉 Simultaneous Localization and Mapping입니다.

 

SLAM은 “동시적 위치추정 및 지도작성”이라는 뜻입니다. 모바일 로봇 분야에서는 주로 라이다, 카메라, 휠 오도메트리, IMU 같은 센서 데이터를 이용해 로봇의 이동 경로와 주변 지도를 동시에 추정합니다.

ROS 2에서 2D 모바일 로봇 SLAM을 학습할 때는 slam_toolbox, Cartographer, RTAB-Map 같은 패키지가 자주 사용됩니다.

 

특히 Nav2 공식 문서에서는 ROS 2 기반 2D SLAM 패키지로 slam_toolbox를 소개하고, Nav2와 함께 사용하는 튜토리얼을 제공합니다.

 

 

1. SLAM이 필요한 이유

모바일 로봇이 복도, 강의실, 사무실, 창고 같은 공간을 자율주행한다고 가정해 보겠습니다. 사람이 보기에는 단순한 공간이어도 로봇 입장에서는 다음 문제가 있습니다.

 

로봇은 바퀴 엔코더로 자신이 얼마나 움직였는지 계산할 수 있습니다. 이것을 오도메트리라고 합니다. 하지만 바퀴가 미끄러지거나 바닥 상태가 달라지면 오도메트리는 조금씩 틀어집니다. 처음에는 1cm 오차였던 것이 시간이 지나면 10cm, 1m 이상으로 커질 수 있습니다.

 

라이다는 벽, 기둥, 물체까지의 거리를 측정할 수 있습니다. 하지만 라이다만 보고는 “이 벽이 지도상의 어느 벽인지” 바로 알 수 없습니다.

 

그래서 SLAM은 다음 정보를 함께 사용합니다.


휠 오도메트리 로봇이 대략 얼마나 이동했는지 추정
라이다 /scan 주변 장애물과 벽 구조 측정
IMU 회전, 기울기, 각속도 보조
TF 센서와 로봇 좌표계 관계 표현
SLAM 알고리즘 위치와 지도를 동시에 보정

 

오도메트리로 대략 이동을 예측하고, 라이다로 주변 구조를 맞춰 보면서, 전체 지도를 계속 보정한다.

 

 

 

2. SLAM의 기본 구조

SLAM은 크게 세 단계로 이해하면 됩니다.

 

1) 예측: 로봇이 어디로 움직였는가?

 

로봇이 앞으로 1m 이동하고 왼쪽으로 30도 회전했다고 해보겠습니다. 휠 엔코더나 IMU를 이용하면 로봇의 이동량을 추정할 수 있습니다.

 

하지만 이 값은 완벽하지 않습니다. 바퀴 미끄러짐, 엔코더 해상도, 기구부 오차 때문에 항상 오차가 들어갑니다.

 

그래서 SLAM에서는 이 값을 “정답”이 아니라 예측값으로 봅니다.

이전 위치 + 오도메트리 변화량 = 현재 위치 예측
 
 
 

2) 관측: 센서가 무엇을 보았는가?

 

라이다가 주변을 360도 또는 일정 각도로 스캔하면 각 방향마다 장애물까지의 거리를 알 수 있습니다.

 

예를 들어 라이다 데이터는 ROS 2에서 보통 다음 토픽으로 들어옵니다.

 
/scan
 

 

메시지 타입은 일반적으로 다음과 같습니다.

 
sensor_msgs/msg/LaserScan
 

 

이 라이다 데이터로 벽, 모서리, 장애물의 형태를 파악합니다.

 

 

3) 보정: 예측한 위치와 실제 관측을 맞춘다

 

로봇이 “나는 여기쯤 있을 것 같다”고 예측한 위치에서 라이다 스캔을 지도와 비교합니다. 잘 맞으면 위치 추정이 유지되고, 안 맞으면 위치와 지도를 함께 보정합니다.

 

이 과정에서 중요한 개념이 스캔 매칭입니다.

 

스캔 매칭은 현재 라이다 스캔이 기존 지도 또는 이전 스캔과 가장 잘 겹치는 위치를 찾는 과정입니다.

현재 라이다 스캔 + 기존 지도
→ 가장 잘 맞는 로봇 위치 계산
→ 지도와 위치 보정
 
 
 
 
 

3. SLAM에서 만드는 지도: Occupancy Grid Map

ROS 2 모바일 로봇에서 가장 많이 쓰는 2D 지도는 Occupancy Grid Map입니다.

 

Occupancy Grid Map은 공간을 작은 격자로 나누고, 각 칸이 다음 중 하나인지 표현합니다.


빈 공간 로봇이 지나갈 수 있음(흰색)
장애물 벽, 물체, 기둥 등(검정색)
미확인 영역 아직 센서가 관측하지 못함(회색)

 

SLAM Toolbox와 Nav2에서 일반적으로 사용하는 지도도 이런 2D 점유 격자 지도입니다.

Nav2 문서에서는 SLAM을 이용해 occupancy grid map을 생성하고, 이 지도를 바탕으로 로봇을 이동시키는 과정을 설명합니다.

 

예시 구조는 다음과 같습니다.

? ? ? ? ? ? ? ? ?
? # # # # # # ? ?
? # . . . . # ? ?
? # . R . . # ? ?
? # . . . . # ? ?
? # # # # # # ? ?
? ? ? ? ? ? ? ? ?
 

 

기호 의미:

? : 미확인 영역
# : 장애물
. : 빈 공간
R : 로봇 위치
 

 

이런 지도는 보통 .pgm 이미지 파일과 .yaml 메타데이터 파일로 저장합니다.

 

예:

map.pgm
map.yaml
 

 

map.yaml에는 해상도, 원점, 이미지 파일 이름 등이 들어갑니다.

 

 

 

4. ROS 2에서 SLAM을 이해할 때 꼭 알아야 하는 좌표계

ROS 2 SLAM에서 초보자가 가장 많이 막히는 부분이 TF 좌표계입니다.

 

Nav2 공식 문서에서는 Navigation2가 동작하기 위해 대표적으로 다음 변환이 필요하다고 설명합니다.

map → odom → base_link
 

 

각 좌표계의 의미는 다음과 같습니다.


map 전역 지도 좌표계
odom 오도메트리 기준 좌표계
base_link 로봇 본체 기준 좌표계
laser 또는 base_scan 라이다 센서 좌표계

 

 

1) base_link

base_link는 로봇 몸체 중심입니다. 로봇이 움직이면 base_link도 같이 움직입니다.

 

 

2) odom

odom은 오도메트리 기준 좌표계입니다. 바퀴 엔코더나 로봇 제어기에서 계산한 이동량을 기준으로 합니다. 짧은 시간에는 부드럽지만, 시간이 지나면 오차가 누적됩니다.

 

 

3) map

map은 SLAM 또는 localization이 보정한 전역 지도 좌표계입니다. 루프 클로저나 스캔 매칭으로 보정되기 때문에 odom보다 전역적으로 더 안정적인 위치 기준이 됩니다.

 

 

4) 핵심 관계

map → odom
 

 

이 변환은 SLAM 또는 Localization 노드가 제공합니다.

odom → base_link
 

 

이 변환은 보통 오도메트리 노드, 로봇 베이스 드라이버, 또는 시뮬레이터가 제공합니다.

base_link → laser
 

 

이 변환은 라이다가 로봇 어디에 장착되어 있는지 나타내는 정적 변환입니다.

 

 

 

5. SLAM 알고리즘의 대표 종류

SLAM 알고리즘은 여러 방식이 있지만, 강의 초반에는 다음 세 가지 흐름만 잡으면 됩니다.

 

 

1) 필터 기반 SLAM

대표적으로 EKF SLAM, FastSLAM이 있습니다.

 

필터 기반 SLAM은 로봇 위치와 지도 상태를 확률적으로 추정합니다. EKF SLAM은 가우시안 기반 추정을 사용하고, FastSLAM은 파티클 필터 계열 접근을 사용합니다. 확률 로보틱스 분야에서는 SLAM을 베이즈 추정 문제로 다루는 방식이 전통적인 기본 틀입니다.

 

쉽게 말하면 다음과 같습니다.

센서값은 항상 불확실하다.
따라서 위치와 지도를 확률로 관리하면서 계속 업데이트한다.
 

 

장점:

수학적으로 명확하다.
초기 SLAM 이론 학습에 좋다.
 

 

단점:

큰 지도에서는 계산량이 커질 수 있다.
현대 ROS 2 실습에서는 그래프 기반 SLAM을 더 자주 접한다.

 

 

2) 그래프 기반 SLAM

현대 SLAM에서 매우 중요한 방식입니다.

 

그래프 기반 SLAM은 로봇의 여러 시점 위치를 노드로 보고, 위치 사이의 관계를 엣지로 봅니다.

노드: 로봇이 지나간 위치
엣지: 오도메트리, 스캔 매칭, 루프 클로저 제약
 

 

예:

Pose1 ---- Pose2 ---- Pose3 ---- Pose4
  |                              |
  +---------- Loop Closure -------+
 

 

로봇이 한 바퀴 돌아서 예전에 봤던 장소를 다시 만나면 “여기 전에 온 곳이다”라고 판단합니다. 이것이 루프 클로저입니다.

 

루프 클로저가 발생하면 누적된 오차를 전체 경로에 분산시켜 지도를 보정합니다.

RTAB-Map은 RGB-D, 스테레오, 라이다 기반 그래프 SLAM 접근을 사용하며, 루프 클로저 가설이 받아들여지면 그래프에 새로운 제약을 추가하고 그래프 최적화로 오차를 줄입니다.

 

 

더보기

그래프 기반 SLAM은 로봇이 이동하면서 지나간 위치들을 , 위치 사이의 관계를 으로 표현하는 SLAM 방식입니다.

점 = 노드 = 로봇이 지나간 위치
선 = 엣지 = 위치와 위치 사이의 관계
 

 

예를 들어 로봇이 이동하면 다음처럼 위치들이 저장됩니다.

Pose1 ---- Pose2 ---- Pose3 ---- Pose4
 

 

여기서 Pose1, Pose2 같은 것들이 로봇의 위치입니다.

 

 

엣지는 두 위치 사이의 관계입니다.

 

예를 들어 로봇이 Pose1에서 Pose2로 이동했다면, 시스템은 이렇게 기록합니다.

Pose1에서 Pose2까지 약 1m 이동했다.
 

 

이런 정보가 엣지가 됩니다.

 

엣지는 보통 다음 정보로 만들어집니다.

오도메트리
라이다 스캔 매칭
카메라 이미지 매칭
루프 클로저
 
 
 

루프 클로저는 로봇이 예전에 갔던 장소를 다시 만났을 때 발생합니다.

 

예를 들어 로봇이 한 바퀴 돌아서 처음 장소 근처로 돌아오면, SLAM은 이렇게 판단합니다.

여기 전에 왔던 곳이다.
 

 

그림으로 보면 다음과 같습니다.

Pose1 ---- Pose2 ---- Pose3 ---- Pose4
  |                              |
  +---------- Loop Closure -------+
 

 

즉, Pose4가 Pose1과 같은 장소 근처라는 새로운 연결이 생깁니다.

 

 

왜 루프 클로저가 중요한가요?

 

로봇은 이동하면서 오차가 계속 쌓입니다.

바퀴가 미끄러지거나 센서가 흔들리면 실제 위치와 계산된 위치가 점점 달라집니다.

 

하지만 루프 클로저가 발생하면 SLAM은 이렇게 보정합니다.

시작점과 끝점이 사실 같은 곳이니,
전체 경로를 다시 맞추자.
 

 

이때 마지막 위치만 억지로 고치는 것이 아니라, 전체 경로의 오차를 조금씩 나누어 보정합니다.

 

 

RTAB-Map은 그래프 기반 SLAM을 사용하는 대표적인 시스템입니다.

 

RTAB-Map은 다음 센서를 사용할 수 있습니다.

RGB-D 카메라
스테레오 카메라
라이다
오도메트리
IMU
 

 

RTAB-Map은 로봇이 이동하면서 위치를 노드로 저장하고, 위치 사이의 관계를 엣지로 연결합니다.

그리고 예전에 본 장소를 다시 찾으면 루프 클로저를 추가합니다.

그 후 그래프 최적화를 통해 전체 지도와 경로의 오차를 줄입니다.

 

 

그래프 기반 SLAM은 로봇이 지나간 위치들을 점으로 저장하고, 위치 사이의 관계를 선으로 연결한 뒤, 예전 장소를 다시 만나면 전체 지도를 보정하는 방식입니다.

 

 

3) 스캔 매칭 기반 2D SLAM

모바일 로봇에서 라이다 기반 2D SLAM을 할 때 가장 직관적인 방식입니다.

 

라이다 스캔을 기존 지도와 맞추면서 로봇 위치를 보정합니다.

라이다 스캔 → 기존 지도와 비교 → 가장 잘 맞는 위치 계산
 

 

ROS 2에서 slam_toolbox는 2D SLAM을 위한 대표 패키지입니다. 공식 GitHub와 ROS Index 설명에 따르면 slam_toolbox는 ROS 2에서 사용할 수 있는 2D SLAM 도구 모음이며, 큰 지도와 장기 운용을 고려한 기능을 제공합니다.

 

 

 

6. ROS 2에서 자주 쓰는 SLAM 패키지 비교

 

slam_toolbox 2D 라이다 SLAM ROS 2/Nav2와 궁합 좋음
Cartographer 2D/3D SLAM Google에서 공개한 실시간 SLAM 라이브러리
RTAB-Map RGB-D, Stereo, Lidar SLAM 3D 지도, 비전 기반 SLAM에 강함
GMapping ROS 1 2D SLAM 전통적인 2D 라이다 SLAM, ROS 2에서는 덜 사용

 

Cartographer는 2D 및 3D 실시간 SLAM을 제공하는 시스템으로 소개되어 있으며, ROS 통합 문서도 별도로 제공됩니다.

 

RTAB-Map은 RGB-D, 스테레오, 라이다를 사용할 수 있는 그래프 기반 SLAM 접근이며, appearance-based loop closure를 핵심 개념으로 사용합니다.

 

ROS 2 Navigation2 문서에서는 2D SLAM과 Nav2 연동 상황에서 slam_toolbox 사용을 권장하는 흐름을 제공합니다.

 

 

1단계: 2D 라이다 + slam_toolbox
2단계: 저장된 지도 + Nav2 localization
3단계: 자율주행
4단계: RTAB-Map 또는 3D SLAM 확장
 
 
 
 
 

7. SLAM 전체 데이터 흐름

 

ROS 2 모바일 로봇에서 SLAM 데이터 흐름은 보통 다음과 같습니다.

[Wheel Encoder] ─┐
                 ├→ /odom ──────────────┐
[IMU] ───────────┘                       │
                                         ↓
[LiDAR] → /scan → SLAM Toolbox → /map, map→odom TF
                                         ↓
                                  RViz2 지도 시각화
 

 

SLAM 노드는 보통 다음을 입력으로 받습니다.

/scan
/tf
/tf_static
/odom
 

 

출력은 보통 다음과 같습니다.

/map
/map_metadata
map → odom TF
 
 
 
 
 
8. 실습 내용

 

이번 실습의 내용은 다음과 같습니다.

ROS 2에서 TurtleBot3 시뮬레이션을 실행한다.
라이다 데이터를 이용해 2D SLAM 지도를 만든다.
RViz2에서 지도가 생성되는 과정을 본다.
완성된 지도를 저장한다.
 
 
 
 

9. 패키지 설치

아래의 패키지를 설치할 대 이미 설치되어 있으면 자동으로 설치과정을 생략합니다.
 
sudo apt update
sudo apt install ros-humble-navigation2
sudo apt install ros-humble-nav2-bringup
sudo apt install ros-humble-slam-toolbox
sudo apt install ros-humble-turtlebot3*
 

 

환경 변수 설정:

 
echo 'export TURTLEBOT3_MODEL=burger' >> ~/.bashrc
source ~/.bashrc
 

 

현재 터미널에서 바로 적용하려면:

 
export TURTLEBOT3_MODEL=burger
 

 

 

 

10. TurtleBot3 Gazebo 실행

 

첫 번째 터미널:

 
source /opt/ros/humble/setup.bash
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
 

 

실행하면 Gazebo에 TurtleBot3 모바일 로봇과 월드가 나타납니다.

 

 

다른 환경을 쓰고 싶다면 TurtleBot3 House도 사용할 수 있습니다.

 
ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
 
 

TurtleBot3 공식 문서도 SLAM 시뮬레이션에서 TurtleBot3 World와 House 환경 사용을 안내합니다.

 

 

 

 

 

11. SLAM Toolbox 실행

 

두 번째 터미널:

 
source /opt/ros/humble/setup.bash
export TURTLEBOT3_MODEL=burger
echo $TURTLEBOT3_MODEL
ros2 launch slam_toolbox online_async_launch.py use_sim_time:=true
 

 

여기서 use_sim_time:=true는 Gazebo 시뮬레이션 시간을 사용한다는 의미입니다.

 

 

SLAM Toolbox 실행 후 다음 토픽을 확인합니다.

 
ros2 topic list
 

 

확인해야 할 주요 토픽:

/scan
/map
/map_metadata
/tf
/tf_static
/odom
 

 

 

 

 

12. RViz2 실행

 

세 번째 터미널:

 
source /opt/ros/humble/setup.bash
rviz2

 

 

RViz2에서 다음 설정을 합니다.

 

 

1) Fixed Frame 설정

 

왼쪽 Global Options에서:

Fixed Frame: map
 
 
 

2) Map 추가

 

왼쪽 아래 Add 클릭:

By topic → /map → nav_msgs/msg/OccupancyGrid
 
 
 
 

3) LaserScan 추가

By topic → /scan → sensor_msgs/msg/LaserScan
 
 
 
 

4) TF 추가

Add → TF
 

 

정상이라면 RViz2에서 로봇 주변에 라이다 점들이 보이고, 로봇이 이동하면서 지도가 점점 생성됩니다.

 

 

 

 

 

13. SLAM이 동작하는 원리

 

SLAM Toolbox는 대략 다음 흐름으로 동작합니다.

1. 로봇이 이동한다.
2. 바퀴 Odometry로 대략적인 이동량을 추정한다.
3. LiDAR scan으로 주변 장애물 거리 데이터를 얻는다.
4. 이전 scan과 현재 scan을 비교한다.
5. 로봇 위치를 보정한다.
6. Occupancy Grid Map을 갱신한다.
7. 같은 장소를 다시 보면 loop closure로 지도 왜곡을 줄인다.
 

 

간단히 말하면:

Odometry = 로봇이 대충 어디로 갔는지 알려줌
LiDAR    = 주변 벽과 장애물을 알려줌
SLAM     = 둘을 합쳐서 지도와 위치를 동시에 계산함
 

 

 

14. 로봇 조종하기

네 번째 터미널에서 키보드 조종 노드를 실행합니다.

 
source /opt/ros/humble/setup.bash
export TURTLEBOT3_MODEL=burger
ros2 run turtlebot3_teleop teleop_keyboard
 

 

 

조종 키는 보통 다음과 같습니다.

w: 전진
x: 후진
a: 좌회전
d: 우회전
s: 정지
 

 

천천히 움직이면서 벽을 따라 주행합니다.

 

중요한 점:

너무 빠르게 움직이면 스캔 매칭이 불안정해질 수 있습니다.
복도를 한쪽 방향으로만 가지 말고, 되돌아오면서 루프 클로저가 생기게 합니다.
좁은 곳에서 급회전하면 지도 품질이 나빠질 수 있습니다.
라이다가 벽을 충분히 볼 수 있게 이동합니다.
 

 

 

 

 

 

 

15. 지도 저장하기

지도가 어느 정도 완성되면 저장합니다.

 

새 터미널:

 
source /opt/ros/humble/setup.bash
ros2 run nav2_map_server map_saver_cli -f ~/maps/my_map
 

 

 

저장 결과:

~/my_map.pgm
~/my_map.yaml
 

 

확인:

 
ls ~ | grep my_map
 

 

출력 예:

my_map.pgm
my_map.yaml
 
 
 
 
 
 

16. 저장된 지도 파일 이해하기

my_map.yaml을 열어봅니다.

 
cat ~/my_map.yaml
 
 

 

예시:

 
image: my_map.pgm
mode: trinary
resolution: 0.05
origin: [-2.5, -2.5, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25
 

 

 

각 항목의 의미:

 

image 지도 이미지 파일
resolution 픽셀 하나가 실제 몇 m인지
origin 지도 원점 위치
occupied_thresh 장애물로 판단할 확률 임계값
free_thresh 빈 공간으로 판단할 확률 임계값

 

예를 들어:

 
resolution: 0.05
 

 

이면 지도 이미지의 픽셀 1개가 실제 공간의 5cm를 의미합니다.

 

 

 

17. 점검 명령어

1) 라이다 데이터 확인

 
ros2 topic echo /scan
 

 

데이터가 계속 출력되면 라이다 토픽이 살아 있는 것입니다.

 

 

2) 지도 토픽 확인

 
ros2 topic echo /map
 
 
 

3) TF 확인

 
ros2 run tf2_tools view_frames
 

 

명령 실행 후 PDF 파일이 생성됩니다.

 
ls
 

 

보통 다음 파일이 생성됩니다.

frames.pdf
 

 

TF 구조에서 최소한 다음 흐름이 보여야 합니다.

map → odom → base_link → base_scan
 

 

Nav2 공식 문서에서도 Nav2 사용을 위해 map => odom, odom => base_link 변환이 필요하다고 설명합니다.

 

 

 

 

18. SLAM이 잘 안 될 때 체크리스트

1) /scan이 안 나오는 경우

 

확인:

 
ros2 topic list | grep scan
 

 

없다면 라이다 또는 시뮬레이션 센서가 실행되지 않은 것입니다.

 

 

2) /map이 안 나오는 경우

 

확인:

 
ros2 topic list | grep map
 

 

SLAM Toolbox가 실행 중인지 확인합니다.

 
ros2 node list
 
 
 

3) RViz2에서 지도 안 보이는 경우

 

대부분 Fixed Frame 문제입니다.

 

RViz2의 Fixed Frame을 다음으로 설정합니다.

map
 
 
 

4) TF 에러가 나는 경우

 

자주 나오는 문제:

No transform from [base_link] to [map]
No transform from [laser] to [base_link]
 

 

해결 방향:

odom → base_link가 있는지 확인
base_link → laser 또는 base_scan 정적 TF가 있는지 확인
SLAM 노드가 map → odom을 publish하는지 확인
프레임 이름이 URDF, SLAM 설정, RViz에서 서로 일치하는지 확인
 
 
 

5) 지도가 삐뚤어지는 경우

 

가능한 원인:

라이다 위치 TF가 틀림
바퀴 오도메트리가 부정확함
로봇을 너무 빠르게 움직임
라이다 range 설정이 부적절함
반복 구조가 많은 환경에서 스캔 매칭이 헷갈림
루프 클로저가 충분히 발생하지 않음
 

 

 

 

19. 실습 과제

1) 과제 1: 지도 만들기

 

다음 조건을 만족하는 지도를 생성합니다.

TurtleBot3 House 사용
slam_toolbox 사용
RViz2에서 /map 확인
my_map2.pgm, my_map2.yaml 저장
 

 

 

2) 과제 2: TF 트리 확인

 

다음 명령으로 TF 트리를 생성합니다.

 
ros2 run tf2_tools view_frames
 

 

확인할 것:

map → odom
odom → base_link
base_link → base_scan 또는 laser
 
 

3) 과제 3: 지도 품질 비교

 

다음 두 가지 방식으로 지도를 만들어 비교합니다.

A: 빠르게 주행하면서 생성한 지도
B: 천천히 벽을 따라 주행하면서 생성한 지도
 

 

비교 항목:

벽이 곧게 나오는가?
복도 폭이 일정한가?
장애물이 번져 보이지 않는가?
루프 클로저 후 지도가 보정되는가?
 
 
 
 
 

20. 정리

 

SLAM은 모바일 로봇 자율주행의 출발점입니다.

SLAM = 위치추정 + 지도작성
 

 

모바일 로봇은 오도메트리만 믿으면 오차가 누적됩니다. 라이다만 봐서는 자신이 지도 어디에 있는지 알기 어렵습니다. SLAM은 이 두 문제를 동시에 해결합니다.

 

ROS 2에서는 2D 모바일 로봇 SLAM 입문용으로 slam_toolbox가 가장 실용적입니다. Nav2와 연동하기 쉽고, /scan, /odom, /tf 구조를 이해하기 좋습니다. 공식 Nav2 문서에서도 slam_toolbox를 ROS 2에서 사용할 수 있는 2D SLAM 도구로 설명하고, SLAM을 이용해 occupancy grid map을 만들고 주행하는 절차를 제공합니다.

 

 

 

 

728x90
728x90