ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Differential robot model on robot_localization to enhance IMU heading with GPS

asked 2022-05-09 14:46:05 -0500

Pepis gravatar image


According to the robot_localization docs it is my understanding that the EKF uses an omnidirectional motion model.

I'm running robot_localization on a custom differential robot with the setup described in the docs for using gps data and it works really well, however I'm having a hard time getting a robust and reliable north referenced heading from commercial grade IMUs: usually the angle they yield can have an error of up to ~20 degrees even if they are fully calibrated, probably because all the magnetic noise the motors and other power electronics elements can produce.

I'm aware this is not robot_localization's fault, however I was thinking that RTK GPS data could be used to remove these static (or very low frequency) offsets that the magnetometer has knowing that a differential robot is being used, since a restriction could be added to tell RL that the robot's linear speed can only point towards the direction it is heading to. This assumption is not present in an omnidirectional motion model, where the robot's linear speed and heading are completely independent (think for instance of a drone).

Do you think that may be a good idea? Or would you recommend creating a custom kalman filter to fuse IMU heading with GPS data knowing that the robot is differential and then feeding this "fused imu" to robot_localization?

Have someone tried to enhance IMU heading with GPS data? If so, I would love to hear your experiences.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2022-05-10 04:18:50 -0500

dinesh gravatar image

Hello looks like you want to fuse imu and gps location data, for this you can do something liek this:

imu0: /imu/data
imu0_config: [false, false, false,
              false, false, false,
              false, false, false,
              false, false, true,
              false, false, false]

imu0_differential: true
imu0_relative: true 

pose0: hedge_pose # Hedgehog!
pose0_config: [true,  true,  false,
               false, false, false,
               false, false, false,
               false, false, false,
               false, false, false]

pose0_rejection_threshold: 3

As of robot_localization package, it supports both the global and local localiztion fully you only need to understand the parametes propely.

edit flag offensive delete link more


Hi! I'm well aware this can be done. However my question addresses the fact that robot_localization uses an omnidirectional motion model by default, but since I'm using a differential robot I thought some advantages could be gained by using a proper motion model, one of them being the capability of enhancing IMU heading data with high precision GPS.

Pepis gravatar image Pepis  ( 2022-05-10 07:29:34 -0500 )edit

Question Tools

1 follower


Asked: 2022-05-09 14:46:05 -0500

Seen: 101 times

Last updated: May 10 '22