Problem with GPS and robot_localization: map frame

asked 2020-03-24 08:45:14 -0500

tseco gravatar image

Hello,

We are running two instances of robot_localization node (as recommended) in order to fuse the information provide by an imu, odometry and GPS-RTK (ardusimple). The first instance of robot_localizaiton fuses only relative values using the imu (imu/data) and the odometry data (/odom) and setting world_frame param to odom. The result is /odometry/filtered. The second instance fuses the information that comes from the imu (imu/data), the odometry (/odom) and the odometry from gps (/odometry/gps) obatined using the navsat_transform_node. In this case, world_frame is set to map. So, we obtained the transform from odom to base_link from the first robot_localization node and the transform from map to odom using the second one.

The navsat_tranform_node use the information provided by /odometry/filtered, by the gps (/gps/fix) and the heading provied also with a specific setup of our ardusimple gps-rtk (different from the other imu we use). We have checked that the /odometry/gps provided by this node is correctly oriented and the accuracy in terms of position and orientation is good enough.

These are the main parameters of the relative configuration:

map_frame: map
odom_frame: odom
base_link_frame: base_link
world_frame: odom 

odom0: /odom

odom0_config: [true,  true,  false,
               false, false, true,
               true, true, false,
               false, false, false,
               false, false, false]
odom0_queue_size: 2
odom0_nodelay: false
odom0_differential: true
odom0_relative: false

imu0: /imu/data
imu0_config: [false, false, false,
              false,  false,  false,
              false, false, false,
              false,  false,  true,
              false,  false,  false]
imu0_nodelay: false
imu0_differential: false
imu0_relative: true
imu0_queue_size: 5
imu0_pose_rejection_threshold: 0.8                 
imu0_twist_rejection_threshold: 0.8                
imu0_linear_acceleration_rejection_threshold: 0.8  
imu0_remove_gravitational_acceleration: true

The params used for the other robot_localizacion instance are:

map_frame: map              
odom_frame: odom            
base_link_frame: base_link 
world_frame: map           

odom0: /odom
odom0_config: [false,  false,  false,
               false, false, false,
               true, true, false,
               false, false, false,
               false, false, false]
odom0_queue_size: 10
odom0_nodelay: false
odom0_differential: true
odom0_relative: false  

#  Odometry that comes from gps data (navsat_transform_node)
odom1: /odometry/gps
odom1_config: [true, true, false,
 false, false, false,
 false, false, false,
 false, false, false,
 false, false, false]
odom1_differential: false
odom1_relative: false
odom1_queue_size: 10
odom1_pose_rejection_threshold: 5
odom1_twist_rejection_threshold: 1
odom1_nodelay: true

imu0: /imu/data
imu0_config: [false, false, false,
              false,  false,  false,
              false, false, false,
              false,  false,  true,
              false,  false,  false]
imu0_nodelay: false
imu0_differential: false
imu0_relative: true
imu0_queue_size: 10
imu0_pose_rejection_threshold: 0.8                 
imu0_twist_rejection_threshold: 0.8                
imu0_linear_acceleration_rejection_threshold: 0.8  
imu0_remove_gravitational_acceleration: true

Using these configurations, the odom frame is continously jumping with repect to map frame. You can see the effect in the next video:

gps map_odom problem

The issue is observed when the robot starts moving.

Any suggestions?

Thanks in advance

edit retag flag offensive close merge delete