SLAM 하기 - Mapping

이전 과정에서 로봇을 원격으로 조종하기를 마쳤다면 이제 SLAM을 해볼 차례입니다.

2D YD라이다를 가지고 2차원 맵을 생성하고 만들어진 맵을 가지고 주행하는 방식으로 진행됩니다.

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

SLAM Mapping으로 맵 생성 --> 맵 저장 및 .yaml 파일 생성 --> SLAM Navigation 실행

R1mini SLAM 패키지 소개

R1mini의 ROS2 패키지는 Cartographer ROS 패키지를 기반으로 개발되었습니다.

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

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 파일이 생성됩니다.

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

동영상 따라해보기

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

Last updated