개요
Gazebo 시뮬레이터를 통해 오픈 소스 SLAM cartographer
를 실습한다.
1. Package 설치
Gazebo
로봇 시스템 개발 및 테스트에 필요한 시뮬레이션을 위한 로봇, 센서, 환경 모델 등을 지원하고 물리 엔진을 탑재하여 실제와 근사한 결과를 얻을 수 있는 3차원 시뮬레이터
# Gazebo 패키지 sudo apt install install -y \ ros-$ROS_DISTRO-gazebo-ros \ ros-$ROS_DISTRO-gazebo-ros-pkgs \ ros-$ROS_DISTRO-gazebo-ros2-control
Turtlebot3
ROBOTIS에서 만든 ROS 기반의 모바일 로봇
# turtlebot3 로봇 플랫폼 패키지 sudo apt install -y \ ros-$ROS_DISTRO-turtlebot3 \ ros-$ROS_DISTRO-turtlebot3-msgs
Cartographer
Google에서 개발한 2D-3D LiDAR SLAM 라이브러리
# Cartographer 패키지 sudo apt install -y \ ros-$ROS_DISTRO-cartographer \ ros-$ROS_DISTRO-cartographer-ros
Nav 2
ROS 2 기반으로 작성된 자율 주행 로봇의 경로 계획 및 제어를 돕는 로봇 네비게이션 패키지
# Navigation2 패키지 sudo apt install -y \ ros-$ROS_DISTRO-navigation2 \ ros-$ROS_DISTRO-nav2-bringup
2. ROS 2 Cartogarpher
2.1 Gazebo 실행
터미널 새 창을 열어 아래 명령어를 통해 Gazebo를 띄운다.
source .venv/bin/activate pip install numpy lxml
export ROS_DOMAIN_ID=11 export TURTLEBOT3_MODEL=waffle ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

2.2 Keyboard Teleoperation
터미널 새창을 열어 아래 명령어를 통해 teleoperation node를 실행시킨다.
export ROS_DOMAIN_ID=11 export TURTLEBOT3_MODEL=waffle ros2 run turtlebot3_teleop teleop_keyboard

2.3 SLAM node 실행
터미널 새 창을 열어 mapping을 진행한다. teleoperation node를 통해 로봇을 이동시킬 수 있다.
export ROS_DOMAIN_ID=11 ros2 launch turtlebot3_cartographer \ cartographer.launch.py \ use_sim_time:=True

2.4 Map 저장
터미널 새 창을 열어 맵을 저장한다. .pgm
, .yaml
파일이 생성된다.
ros2 run nav2_map_server map_saver_cli -f <map_name>
3. Navigation
3.1 Gazebo 실행
터미널을 열어 아래 명령어를 실행시켜 Gazebo를 띄운다.
export ROS_DOMAIN_ID=11 export TURTLEBOT3_MODEL=waffle ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
3.2 Navigation stack 시작
새로운 터미널 창을 열어 아래 명령어로 네비게이션을 진행할 맵을 RViz로 띄운다.
export TURTLEBOT3_MODEL=waffle ros2 launch turtlebot3_navigation2 \ navigation2.launch.py \ use_sim_time:=true map:=/path/to/map.yaml

3.3 로봇 초기 위치 설정
RViz에서 2D Pose Estimate
를 통해 현재 Gazebo에서 로봇이 있는 위치와 방향을 설정해준다. 위치가 정확하게 찍히지 않아도 주행하면서 위치를 보정한다. 또는 2D Pose Estimate
를 다시 클릭하여 재설정할 수 있다.

3.4 원하는 위치로 로봇 이동시키기
Nav2 Goal
으로 이동할 위치와 방향을 설정하면 자동으로 경로를 생성하여 로봇이 움직인다.
참고
https://ros2-industrial-workshop.readthedocs.io/en/latest/_source/navigation/ROS2-Cartographer.html
https://ros2-industrial-workshop.readthedocs.io/en/latest/_source/navigation/ROS2-Navigation.html