• Nav2는 ROS2를 기반으로 자율주행 로봇의 경로 계획 및 제어를 포함한 Navigation Stack
  • 특정 알고리즘 및 파라미터를 쉽게 교체/테스트 할 수 있는 플러그인 형태, 복잡한 로봇의 행동 양식(시나리오)을 구조적으로 설계할 수 있게 해줌

0. Prepare

1. Nav2 설치

  • Nav2 패키지 설치 (Humble 기준)
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"

+full

2.2 Nav2, Rviz 실행

  • turtlebot3-navigation2 에 포함된 rviz가 함께 실행되며, 2D static map이 생성됨
ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True

+full

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) +full

2.4 목표 위치 지정 및 주행

  • Nav2 Goal 버튼을 통해 목표 위치와 자세를 지정하면, 2D map 상의 로봇의 현재 추정 위치로부터 목적지까지 cost map 기반 경로를 생성하고 주행
  • Global Planner가 2D map을 입력으로 받아 현재 위치에서 목적지까지의 지도 기반 경로를 생성하고, Local Planner가 현재 위치 주변의 충돌 여부 및 최적 속도 등을 체크하며 동적으로 주행함
  • Global Planner2D 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

+full

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

+full

3.3 키보드 제어 및 SLAM 수행

  • teleop keyboard 를 이용해서 로봇을 움직이고, 실시간 위치 추정 및 맵 생성
ros2 run turtlebot3_teleop teleop_keyboard