Skip to content

SLAM을 통해 환경 지도 생성하기

SLAM (Simultaneous Localization and Mapping)은 현재 위치의 추정과 지도 생성을 동시에 수행하는 알고리즘을 말합니다. Moby-RP에는 Cartographer 를 이용한 SLAM이 구현되어 있습니다.

준비

  • SLAM 알고리즘의 동작을 위해서는 Moby의 제어 노드 및 LiDAR 노드가 실행중이어야 합니다. Moby 제어 노드 챕터의 설명에 따라, Moby 제어 노드를 실행해주시기 바랍니다.

실행 방법

1. SLAM node 실행하기

  • 아래의 명령어를 통해 SLAM을 위한 cartographer 노드를 실행할 수 있습니다.
1
ros2 launch moby_mapping cartographer.launch.py
  • 이제 RViz 창이 열리며 지도가 표시되는 것을 확인할 수 있습니다. LaserScan의 관측 포인트들이 검은색 장애물 영역으로 기록되는 것을 확인할 수 있습니다.


지도 생성 과정

2. 지도 그리기

  • 조이패드를 이용해 로봇을 이동하면, 로봇의 시야에 인식되는 영역이 점진적으로 RViz 화면의 지도에 업데이트 되는 모습을 볼 수 있습니다.
    • 조이패드를 이용한 로봇 조작은 기본조작 챕터를 참고하시기 바랍니다.

3. 지도 저장하기

  • 아래의 명령어를 이용해 지금까지 그려진 지도를 저장할 수 있습니다. 새로운 터미널을 열어 아래의 명령어 중 file_path 에 원하는 파일 경로를 입력해 실행합니다.
1
ros2 run nav2_map_server map_saver_cli -f file_path
  • 예시:
1
ros2 run nav2_map_server map_saver_cli -f ~/default_map
  • 위 예시의 명령어를 실행하면 입력된 경로에 아래의 두 파일이 생성됩니다.
    • ~/default_map.pgm : 지도 이미지 파일
    • ~/default_map.yaml : 지도 및 원점에 대한 메타 데이터 파일


지도 저장 과정

  • 지도 생성이 완료되면 cartographer 노드를 실행한 터미널로 돌아가 노드를 종료합니다.

4. 지도 편집하기

  • GIMP 와 같은 이미지 편집 툴을 사용해 생성된 *.pgm 파일을 열고 편집할 수 있습니다.
    • 검은색은 장애물로 확인된 영역입니다 ( #000000 ).
    • 회색은 LiDAR가 확인하지 못한 영역입니다 ( #CDCDCD ).
    • 흰색은 장애물이 없는 것으로 확인된 영역입니다 ( #FFFFFF ).
    • 유리, 낮은 턱 등 센서가 인식하지 못한 장애물을 직접 그려 추가하거나 잘못 인식된 장애물을 지울 수 있습니다.


GIMP 에디터를 이용한 지도 편집

cartographer.launch.py 파일의 구성

  • Cartographer의 구성 관련 정보는 아래의 경로의 Lua 스크립트에 정의되어 있습니다. 해당 파일에 대한 정보는 Cartographer ROS의 Read the Docs 페이지를 참고하세요.

         moby-ros2/moby_mapping/param/moby_lds_2d.lua

  • cartographer.launch.py 실행 시 커맨드 라인에서는 상황에 따라 아래의 옵션들을 지정할 수 있습니다.

이름 형식 설명 기본값
cartographer_config_dir string Cartographer config 파일 위치한 경로 ~/ros2_ws/install/ moby_navigation/share/ moby_mapping/config
configuration_basename string Cartographer config 파일 이름 moby_lds_2d.lua
resolution float 지도 이미지의 각 픽셀이 실제 환경에서 차지할 크기 (m) 0.05
publish_period_sec float 지도 데이터를 발행하는 주기 1.0
launch_rviz bool RViz 화면의 실행 여부 true