개요
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