Nav2 - Turtlebot3 시뮬레이션
- Nav2는 ROS2를 기반으로 자율주행 로봇의 경로 계획 및 제어를 포함한 Navigation Stack
- 특정 알고리즘 및 파라미터를 쉽게 교체/테스트 할 수 있는 플러그인 형태, 복잡한 로봇의 행동 양식(시나리오)을 구조적으로 설계할 수 있게 해줌
0. Prepare
1. Nav2 설치
sudo apt install ros-humble-navigation2
sudo apt install ros-humble-nav2-bringup
2. 시뮬레이션 실행
2.1 Gazebo 실행
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
- (참고) WSL에서 gazebo 실행 시 turtlebot 스폰에 timeout이 발생하면 그래픽드라이버 확인
sudo apt install mesa-utils
glxinfo | grep "renderer"
glxinfo | grep "direct rendering"
-Nav2---Turtlebot3-시뮬레이션_image_1.png)
2.2 Nav2, Rviz 실행
- turtlebot3-navigation2 에 포함된 rviz가 함께 실행되며, 2D static map이 생성됨
ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True
-Nav2---Turtlebot3-시뮬레이션_image_2.png)
2.3 초기 위치 지정
2D Pose Estimate
- 2D Pose Estimate 버튼을 통해 현재 로봇의 초기 자세를 알려주면 (로봇이 대략 여기 있다), 3D 환경(gazebo)에 있는 로봇의 여러 센서 값을 이용해 2D map과 비교하며 로봇의 위치를 추정함
- 이때, 로봇 위치 추정(Localization)은 AMCL(Adaptive Monte Carlo Localization) 노드에서 수행되며 지속적인 센서 입력(레이저 스캔 등)과 운동 모델(odometry)을 결합해 확률적으로 로봇의 현재 위치를 업데이트함
- AMCL은 scale 조정은 하지 않으므로 2D map과 센서 데이터의 scale은 동일해야함 (ex. 1pixel = 0.05m)
-Nav2---Turtlebot3-시뮬레이션_image_3.png)
2.4 목표 위치 지정 및 주행
Nav2 Goal
- Nav2 Goal 버튼을 통해 목표 위치와 자세를 지정하면, 2D map 상의 로봇의 현재 추정 위치로부터 목적지까지 cost map 기반 경로를 생성하고 주행함
Global Planner가 2D map을 입력으로 받아 현재 위치에서 목적지까지의 지도 기반 경로를 생성하고, Local Planner가 현재 위치 주변의 충돌 여부 및 최적 속도 등을 체크하며 동적으로 주행함
Global Planner는 2D Static Map 기반 Global Costmap을 이용해 Dijksta, A*, Hybrid A* 등 그래프 탐색 알고리즘을 통한 전역 경로를 설정함 (갑자기 등장한 객체는 반영 x)
Local Planner는 센서로 인지한 주변 환경 기반 Local Costmap을 이용해 전역 경로를 최대한 준수하면서, 실시간 회피를 위한 최적 경로를 업데이트함
3. (Unkown World) 시뮬레이션 실행
- 지도가 없는 환경(Unknown World)에서는 SLAM(Simultaneous Localization and Mapping) 과정을 통해 위치를 추정함과 동시에 지도를 그려야 함
- SLAM Toolbox 또는 Cartographer SLAM 등을 통해 실시간 로봇의 위치 추정과 맵을 생성할 수 있음
- 다양한 SLAM 알고리즘을 Nav2와 결합하여 생성되는 지도를 기반으로 미확인 영역에 대한 탐색 주행 가능
3.1 Gazebo 실행
- 2D Map을 제공하지 않는 sample 실행
ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
-Nav2---Turtlebot3-시뮬레이션_image_4.png)
3.2 Cartographer SLAM & RViz 실행
- turtlebot3 cartohrapher 패키지를 실행하면 rviz가 함께 실행됨
# 필요시 설치
# sudo apt install ros-humble-turtlebot3-cartographer
ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
-Nav2---Turtlebot3-시뮬레이션_image_5.png)
3.3 키보드 제어 및 SLAM 수행
- teleop keyboard 를 이용해서 로봇을 움직이고, 실시간 위치 추정 및 맵 생성
ros2 run turtlebot3_teleop teleop_keyboard