gazebo/Nav2
nav2 - Setting Up Odometry - Gazebo
정지홍
2025. 4. 17. 12:56
https://docs.nav2.org/setup_guides/odom/setup_odom_gz.html
Setting Up Odometry - Gazebo — Nav2 1.0.0 documentation
In this guide, we will be looking at how to integrate our robot’s odometry system with Nav2. First we will provide a brief introduction on odometry, plus the necessary messages and transforms that need to be published for Nav2 to function correctly. Next
docs.nav2.org
- 위의 튜토리얼에서는 로봇의 odometry 시스템을 nav2와 통합하는 방법을 살펴본다.
- 우선 odometry에 대해서 소개하고, nav2가 작동하기 위해서 publish해야할 message와 transform에 대해서 설명한다.
- 이후에는 두가지 경우에 대한 odometry설정 방법을 소개한다.
- 1. 휠 인코더가 이미 장착된 로봇에 대한 설정
- 2. 이전 튜토리얼에서 만든 sam_bot을 활용하여 odometry 시스템을 시뮬레이션하는 데모를 구축
1. odometry introduction
- odometry 시스템은 로봇의 움직임을 기반으로 로봇의 위치와 속도를 지역적으로 정확하게 추정한다.
- odometry 정보는 IMU , LIDAR , RADAR , VIO , 휠 인코더 등 다양한 센서에서 얻을수있다.
- IMU는 시간이 지남에 따라서 드리프트가 발생하며, 휠 인코더는 이동거리와 함께 드리프트가 발생하니, 이 두가지 센서는 서로의 단점을 보완하기 위해서 함께 사용한다.
- odom frame과 이것의 transform은 로봇의 odometry시스템을 기반으로 연속적인 로컬 위치 정보를 publish한다.
- 시간이 지남에 따라서 정확도는 떨어질 수 있지만, 근처 장애물 회피 같은 즉각적인 움직임에는 유용하다.
- 장기적으로는 정확한 위치 정보를 위해서는 map프레임이 odom프레임을 보정해준다.
- odom 프레임은 odom => base_link 좌표 변환을 통해서 nav2와 연결된다.
- 이 변환은 tf2 broadcaster 또는 robot_localization과 같은 프레임워크에서 publish한다.
- nav2는 odom => base_link뿐만 아니라, 로봇의 속도 정보를 제공하는 nav_msgs/Odometry 메시지도 필요로 한다.
- nav_msgs/Odometry는 pose와 twist정보를 포함
2. Setting Up Odometry on your Robot
- nav2용 odometry설정은 로봇에 탑재된 센서 구성에 따라 다르다.
- 아래의 예시는 휠 인코더를 사용하는 것을 예를 들어서 설명한다.
- 목표는 ROS2에서 nav_msgs/Odometry 메시지와 odom => base_link 변환을 publish하는 것이다.
- right_wheel_est_vel , left_wheel_est_vel는 휠 속도이며, wheel_separation은 휠 간의 거리이다.
- 목표는 ROS2에서 nav_msgs/Odometry 메시지와 odom => base_link 변환을 publish하는 것이다.

- 위의 정보를 수동으로 publish하는 것 보다는 ros2_control framework를 사용하는것을 추천한다.
- 이 프레임워크는 diff_drive_controller가 포함되어 있으며, cmd_vel 토픽을 구독하고 odom , tf , joint_state를 퍼블리시 합니다.
3. Simulating an Odometry System using Gazebo
- 이전 튜토리얼에서 만든 sam_bot의 odometry 시스템을 gazebo로 시뮬레이션한다.
- 전체적인 과정은 "필요한 패키지 설치 --> gazebo의 플러그인 추가 --> sam_bot을 gazebo환경에 spawn하고 메시지가 잘 publish되는지 확인하기" 이다.
- gazebo 플러그인은 "sensor_msgs/Imu"과 "nav_msgs/Odometry"메시지를 publish하는, IMU센서와 differential drive odometry system을 시뮬레이션하기 위해서이다.
4. Adding Gazebo Plugins to a URDF/SDF
- 여기에서는 URDF/SDF에 gz의 IMU센서와 differntial drive plugin을 추가할 것 이다.
- 1. sensor들은 link와 연결이 되어야한다. 그러므로 imu_link를 생성하여 IMU센서에 부착할 것 이다.
- 이 link는 urdf/sdf를 사용한다면, <gazebo>요소 아래에서 참조 될것이다.
- 2. /demo/imu라는 토픽을 설정할 것이며, IMU센서가 여기에 정보를 publishing할 것이다.