SLAM 하기 – Mapping

이전 과정에서 로봇을 원격으로 조종하기를 마쳤다면 이제 SLAM을 해볼 차례입니다.2D YD라이다를 가지고 2차원 맵을 생성하고 만들어진 맵을 가지고 주행하는 방식으로 진행됩니다.전체 과정은 크게 다음과 같습니다.SLAM Mapping으로 맵 생성 –> 맵 저장 및 .yaml 파일 생성 –> SLAM Navigation 실행

R1mini SLAM 패키지 소개 #

R1mini의 ROS2 패키지는 Cartographer ROS 패키지를 기반으로 개발되었습니다.Cartgographer는 로봇의 odom 데이터와 2D 라이다 센서 데이터만 있으면 매핑과 네비게이션이 가능한 패키지입니다. 자세한 설명은 다음 페이지를 참조하시기 바랍니다.

Cartographer ROS Integration — Cartographer ROS documentation
Cartographer ROS Integration — Cartographer ROS documentation

Cartographer를 실행하였을때의 노드 그래프 입니다.

SLAM Mapping 하기 #

주변 정리 #

SLAM 매핑을 잘 하기 위해서는 되도록 주변 사물이 정돈되어있어야 합니다.움직이는 물체나 사람이 있는경우 맵이 잘못 생성되어 정합이 잘 되지 않는 현상이 발생할 수 있으므로 주의합니다.

노드 실행하기 #

이제 Cartographer를 실행하기위해 필요한 노드들을 띄울 차례입니다.

2개의 터미널을 열고 ssh를 통해 r1mini 로봇에 접속한 후 각각 다음을 실행합니다.

$ ros2 launch omo_r1mini_bringup omo_r1mini_bringup.launch.py
$ ros2 launch omo_r1mini_cartographer cartographer.launch.py

다시 2개의 터미널을 열고 다음을 실행합니다.

$ ros2 run omo_r1mini_teleop teleop_keyboard
$ ros2 launch omo_r1mini_cartographer cartographer_rviz.launch.py

rviz를 실행하게 되면 다음과 같은 화면이 나타납니다.

지도 그리기 #

이제 teleop keyboard 명령으로 로봇을 천천히 움직이면서 맵을 그려나가기 시작합니다.

(주의!) 너무 빠르게 움직이거나 벽에 충돌하는 경우 맵이 틀어질 수 있으므로 주의합니다.

지도 저장하기 #

어느정도 지도가 완성되면 s키를 눌러 로봇을 정지합니다.이제 맵을 저장하기 위한 폴더로 이동하여 map_server를 실행하여 맵을 저장합니다.

아래 명령어 중 <map 이름>을 저장하고자 하는 지도 이름으로 입력합니다.

$ cd {$HOME}
$ ros2 run nav2_map_server map_saver_cli -f <map 이름>

이제 map이름.pgm 이라는 그림파일과 함께 .yaml 파일이 생성됩니다.

.pgm fileyaml파일에는 아래와 같이 지도에 대한 대략적인 설명이 저장되어있습니다.

동영상 따라해보기 #

전체 과정은 다음과 같습니다.