ROS 2 TurtleBot3 SLAM 실습: Cartographer로 실내 지도 만들기

1. TurtleBot3 Bringup 실행

먼저 Remote PC에서 터미널을 열고 TurtleBot3의 Raspberry Pi에 SSH로 접속합니다.

ssh ubuntu@{IP_ADDRESS_OF_RASPBERRY_PI}

기본 비밀번호는 다음과 같습니다.

ubuntu

접속 후 TurtleBot3 모델을 설정합니다.

Burger 모델을 사용하는 경우 다음과 같이 입력합니다.

export TURTLEBOT3_MODEL=burger

그리고 Bringup을 실행합니다.

ros2 launch turtlebot3_bringup robot.launch.py

정상적으로 실행되면 TurtleBot3의 센서, 모터, TF, Odometry 관련 노드들이 동작하기 시작합니다.

2. SLAM 노드 실행

이제 Remote PC에서 새 터미널을 열고 SLAM 노드를 실행합니다.

먼저 TurtleBot3 모델을 설정합니다.

export TURTLEBOT3_MODEL=burger

그다음 Cartographer SLAM 노드를 실행합니다.

ros2 launch turtlebot3_cartographer cartographer.launch.py

이 명령을 실행하면 Cartographer와 RViz2가 함께 실행됩니다.

RViz2 화면에서 /map, /scan, /tf, /odom 정보가 정상적으로 표시되면 SLAM 준비가 완료된 것입니다.

3. TURTLEBOT3_MODEL 환경변수 저장하기

매번 터미널을 열 때마다 다음 명령을 입력하는 것은 번거롭습니다.

export TURTLEBOT3_MODEL=burger

따라서 .bashrc 파일에 환경변수를 저장해 두는 것이 좋습니다.

터미널에서 다음 명령을 실행합니다.

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

이제 새 터미널을 열 때마다 자동으로 TurtleBot3 모델이 설정됩니다.

모델에 따라 다음 중 하나를 사용하면 됩니다.

export TURTLEBOT3_MODEL=burger
export TURTLEBOT3_MODEL=waffle
export TURTLEBOT3_MODEL=waffle_pi

실습 장비가 Burger 모델이면 burger를 사용하면 됩니다.

4. 키보드 조작 노드 실행

SLAM 노드가 정상적으로 실행되었다면, 이제 TurtleBot3를 키보드로 조작하면서 지도를 생성합니다.

Remote PC에서 새 터미널을 열고 다음 명령을 실행합니다.

ros2 run turtlebot3_teleop teleop_keyboard

실행하면 다음과 같은 조작 안내가 출력됩니다.

Control Your TurtleBot3!
---------------------------
Moving around:
       w
  a    s    d
       x

w/x : increase/decrease linear velocity
a/d : increase/decrease angular velocity
space key, s : force stop

CTRL-C to quit

키보드 조작 방법은 다음과 같습니다.

동작
w전진 속도 증가
x전진 속도 감소 또는 후진
a반시계 방향 회전 속도 증가
d시계 방향 회전 속도 증가
s정지
Space강제 정지
Ctrl + C종료

5. SLAM 주행 시 주의사항

지도를 만들 때는 빠르게 움직이는 것보다 천천히 안정적으로 움직이는 것이 중요합니다.

특히 다음 사항을 지키는 것이 좋습니다.

  1. 급가속, 급회전을 피합니다.
  2. 벽과 장애물 주변을 천천히 이동합니다.
  3. 방의 모서리와 코너를 충분히 스캔합니다.
  4. 같은 구역을 여러 방향에서 확인합니다.
  5. 로봇이 미끄러지거나 충돌하지 않도록 주의합니다.

SLAM은 LiDAR 데이터와 로봇의 이동 정보를 함께 사용합니다. 너무 빠르게 움직이면 스캔 데이터가 불안정해지고, 지도 품질이 떨어질 수 있습니다.

좋은 지도를 만들려면 로봇이 공간 전체를 균일하게 스캔하도록 주행해야 합니다.

6. RViz2에서 확인할 내용

SLAM 실행 후 RViz2에서는 다음 항목을 확인합니다.

항목설명
Map생성 중인 2D 지도
LaserScanLiDAR 스캔 데이터
TF로봇 좌표계 관계
Odometry로봇 이동 정보
RobotModelTurtleBot3 모델 표시

지도는 로봇이 이동하면서 점점 확장됩니다.

RViz2에서 흰색 영역은 이동 가능한 공간, 검은색 영역은 벽이나 장애물, 회색 영역은 아직 확인되지 않은 미지 영역을 의미합니다.

7. Cartographer 설정 파일

TurtleBot3 SLAM은 Cartographer 설정 파일을 사용합니다.

주요 설정 파일은 다음 경로에 있습니다.

turtlebot3_cartographer/config/turtlebot3_lds_2d.lua

이 Lua 파일에서 SLAM 관련 파라미터를 조정할 수 있습니다.

대표적인 설정 항목은 다음과 같습니다.

설정 항목설명
MAP_BUILDER.use_trajectory_builder_2d2D SLAM 사용 여부
TRAJECTORY_BUILDER_2D.min_rangeLiDAR 최소 사용 거리(–>0.05)
TRAJECTORY_BUILDER_2D.max_rangeLiDAR 최대 사용 거리(–>12.0)
TRAJECTORY_BUILDER_2D.missing_data_ray_length최대 거리 초과 시 처리 거리
TRAJECTORY_BUILDER_2D.use_imu_dataIMU 데이터 사용 여부
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching실시간 스캔 매칭 사용 여부
TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians스캔 삽입 기준 각도
POSE_GRAPH.optimize_every_n_nodesPose Graph 최적화 주기
POSE_GRAPH.constraint_builder.min_score스캔 매칭 최소 점수
POSE_GRAPH.constraint_builder.global_localization_min_score전역 위치 추정 최소 점수

처음 실습할 때는 기본값을 그대로 사용하는 것이 좋습니다.

지도 품질이 좋지 않거나 특정 환경에서 위치 추정이 흔들릴 경우, 위 설정값을 조정하면서 튜닝할 수 있습니다.

8. 지도 저장하기

원하는 공간의 지도가 충분히 완성되었다면 지도를 저장합니다.

Remote PC에서 새 터미널을 열고 다음 명령을 실행합니다.

mkdir maps
ros2 run nav2_map_server map_saver_cli -f ~/maps/map

위 명령을 실행하면 홈 디렉터리에 다음 두 개의 파일이 생성됩니다.

map.pgm
map.yaml

각 파일의 역할은 다음과 같습니다.

파일설명
map.pgm실제 2D 지도 이미지
map.yaml지도 해상도, 원점, 점유 임계값 등 메타데이터

-f 옵션은 저장할 파일 이름과 경로를 지정합니다.

예를 들어 다음 명령을 사용하면 my_room_map.pgm, my_room_map.yaml 파일이 생성됩니다.

ros2 run nav2_map_server map_saver_cli -f ~/my_room_map

9. 저장된 지도 확인

저장된 지도 파일은 다음 명령으로 확인할 수 있습니다.

ls ~

정상적으로 저장되었다면 다음과 같은 파일을 확인할 수 있습니다.

map.pgm
map.yaml

지도 이미지 파일을 열어 보면 흰색, 검은색, 회색으로 구성된 Occupancy Grid Map을 확인할 수 있습니다.

색상의 의미는 다음과 같습니다.

색상의미
흰색이동 가능한 자유 공간
검은색벽, 장애물, 점유 공간
회색아직 확인되지 않은 미지 영역

이 지도는 이후 Navigation 실습에서 사용됩니다.

10. 전체 실행 순서 정리

이번 실습의 전체 실행 순서는 다음과 같습니다.

1단계: TurtleBot3 Bringup 실행

TurtleBot3 SBC에서 실행합니다.

ssh ubuntu@{IP_ADDRESS_OF_RASPBERRY_PI}
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_bringup robot.launch.py

2단계: SLAM 실행

Remote PC에서 실행합니다.

export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_cartographer cartographer.launch.py

3단계: 키보드 조작 실행

Remote PC에서 실행합니다.

ros2 run turtlebot3_teleop teleop_keyboard

4단계: 지도 저장

Remote PC에서 실행합니다.

ros2 run nav2_map_server map_saver_cli -f ~/map

Leave a Comment