본문 바로가기
카테고리 없음

ROS2 Cartographer & Nav2 - Gazebo로 시뮬레이션

by Z0e 2025. 4. 5.

개요

Gazebo 시뮬레이터를 통해 오픈 소스 SLAM cartographer를 실습한다.

 

 

1. Package 설치

 Gazebo

로봇 시스템 개발 및 테스트에 필요한 시뮬레이션을 위한 로봇, 센서, 환경 모델 등을 지원하고 물리 엔진을 탑재하여 실제와 근사한 결과를 얻을 수 있는 3차원 시뮬레이터
bash
닫기
# 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 기반의 모바일 로봇
bash
닫기
# turtlebot3 로봇 플랫폼 패키지
sudo apt install -y \
ros-$ROS_DISTRO-turtlebot3 \
ros-$ROS_DISTRO-turtlebot3-msgs

 

Cartographer

Google에서 개발한 2D-3D LiDAR SLAM 라이브러리
bash
닫기
# Cartographer 패키지
sudo apt install -y \
ros-$ROS_DISTRO-cartographer \
ros-$ROS_DISTRO-cartographer-ros

 

Nav 2

ROS 2 기반으로 작성된 자율 주행 로봇의 경로 계획 및 제어를 돕는 로봇 네비게이션 패키지
bash
닫기
# Navigation2 패키지
sudo apt install -y \
ros-$ROS_DISTRO-navigation2 \
ros-$ROS_DISTRO-nav2-bringup

 

 

 

2. ROS 2 Cartogarpher

2.1 Gazebo 실행

터미널 새 창을 열어 아래 명령어를 통해 Gazebo를 띄운다.

bash
닫기
source .venv/bin/activate
pip install numpy lxml
bash
닫기
export ROS_DOMAIN_ID=11
export TURTLEBOT3_MODEL=waffle
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

 

 

 

2.2 Keyboard Teleoperation

터미널 새창을 열어 아래 명령어를 통해 teleoperation node를 실행시킨다.

bash
닫기
export ROS_DOMAIN_ID=11
export TURTLEBOT3_MODEL=waffle
ros2 run turtlebot3_teleop teleop_keyboard

 

 

 

 

 

2.3 SLAM node 실행

터미널 새 창을 열어 mapping을 진행한다. teleoperation node를 통해 로봇을 이동시킬 수 있다.

bash
닫기
export ROS_DOMAIN_ID=11
ros2 launch turtlebot3_cartographer \
cartographer.launch.py \
use_sim_time:=True

 

중간에 3분 13초쯤 로봇이 뒤집혔지만 다시 주행하면서 맵을 보정했다

 

 

 

 

2.4 Map 저장

터미널 새 창을 열어 맵을 저장한다. .pgm, .yaml 파일이 생성된다.

bash
닫기
ros2 run nav2_map_server map_saver_cli -f <map_name>

 

 

 

 

 

 

 

3. Navigation

3.1 Gazebo 실행

터미널을 열어 아래 명령어를 실행시켜 Gazebo를 띄운다.

bash
닫기
export ROS_DOMAIN_ID=11
export TURTLEBOT3_MODEL=waffle
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

 

 

3.2 Navigation stack 시작

새로운 터미널 창을 열어 아래 명령어로 네비게이션을 진행할 맵을 RViz로 띄운다.

bash
닫기
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