SLAM을 통해 환경 지도 생성하기
SLAM (Simultaneous Localization and Mapping)은 현재 위치의 추정과 지도 생성을 동시에 수행하는 알고리즘을 말합니다. Moby-RP에는 Cartographer 를 이용한 SLAM이 구현되어 있습니다.
준비
- SLAM 알고리즘의 동작을 위해서는 Moby의 제어 노드 및 LiDAR 노드가 실행중이어야 합니다. Moby 제어 노드 챕터의 설명에 따라, Moby 제어 노드를 실행해주시기 바랍니다.
실행 방법
1. SLAM node 실행하기
- 아래의 명령어를 통해 SLAM을 위한 cartographer 노드를 실행할 수 있습니다.
1 |
|
- 이제 RViz 창이 열리며 지도가 표시되는 것을 확인할 수 있습니다. LaserScan의 관측 포인트들이 검은색 장애물 영역으로 기록되는 것을 확인할 수 있습니다.
2. 지도 그리기
- 조이패드를 이용해 로봇을 이동하면, 로봇의 시야에 인식되는 영역이 점진적으로 RViz 화면의 지도에 업데이트 되는 모습을 볼 수 있습니다.
- 조이패드를 이용한 로봇 조작은 기본조작 챕터를 참고하시기 바랍니다.
3. 지도 저장하기
- 아래의 명령어를 이용해 지금까지 그려진 지도를 저장할 수 있습니다. 새로운 터미널을 열어 아래의 명령어 중 file_path 에 원하는 파일 경로를 입력해 실행합니다.
1 |
|
- 예시:
1 |
|
- 위 예시의 명령어를 실행하면 입력된 경로에 아래의 두 파일이 생성됩니다.
- ~/default_map.pgm : 지도 이미지 파일
- ~/default_map.yaml : 지도 및 원점에 대한 메타 데이터 파일
- 지도 생성이 완료되면 cartographer 노드를 실행한 터미널로 돌아가 노드를 종료합니다.
4. 지도 편집하기
- GIMP 와 같은 이미지 편집 툴을 사용해 생성된 *.pgm 파일을 열고 편집할 수 있습니다.
- 검은색은 장애물로 확인된 영역입니다 ( #000000 ).
- 회색은 LiDAR가 확인하지 못한 영역입니다 ( #CDCDCD ).
- 흰색은 장애물이 없는 것으로 확인된 영역입니다 ( #FFFFFF ).
- 유리, 낮은 턱 등 센서가 인식하지 못한 장애물을 직접 그려 추가하거나 잘못 인식된 장애물을 지울 수 있습니다.
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 |