robot_localization using dual node drifts
I'm trying to use dual ekf node to do transform for my robot.
I'm using params file:
ekf_odom:
frequency: 30
sensor_timeout: 0.1
two_d_mode: false
transform_time_offset: 0.0
transform_timeout: 0.0
print_diagnostics: true
debug: false
publish_tf: true
map_frame: map
odom_frame: odom
base_link_frame: base_footprint
world_frame: odom
odom0: odom
odom0_config: [false, false, false,
false, false, false,
true, true, true,
false, false, true,
false, false, false]
odom0_queue_size: 10
odom0_nodelay: true
odom0_differential: false
odom0_relative: false
imu0: imu/data_raw
imu0_config: [false, false, false,
true, true, true,
false, false, false,
true, true, true,
true, true, true]
imu0_nodelay: false
imu0_differential: false
imu0_relative: false
imu0_queue_size: 10
imu0_remove_gravitational_acceleration: true
ekf_map:
publish_tf: true
map_frame: map
odom_frame: odom
base_link_frame: base_footprint
world_frame: map
odom0: odom
odom0_config: [false, false, false,
false, false, false,
false, false, false,
false, false, false,
false, false, false]
odom0_queue_size: 10
odom0_nodelay: true
odom0_differential: false
odom0_relative: false
odom1: odometry/gps
odom1_config: [true, true, false,
false, false, false,
false, false, false,
false, false, false,
false, false, false]
odom1_queue_size: 10
odom1_nodelay: true
odom1_differential: false
odom1_relative: false
imu0: imu/data_raw
imu0_config: [false, false, false,
false, false, true,
false, false, false,
false, false, false,
false, false, false]
imu0_nodelay: false
imu0_differential: false
imu0_relative: false
imu0_queue_size: 10
imu0_remove_gravitational_acceleration: true
use_control: false
navsat_transform:
frequency: 30
delay: 3.0
magnetic_declination_radians: 0 #
yaw_offset: 0 #1.570796327 # IMU reads 0 facing magnetic north, not east
zero_altitude: true
broadcast_utm_transform: true
publish_filtered_gps: true
use_odometry_yaw: false
wait_for_datum: false
The problem I am having is that GPS is off about 0.01m. Now this will change the ekf state where the offset is accumulated. My robot is stationary (no moving) and within 10 seconds, it is off my 1 meter.
This is run in simulator, GPS and IMU data are almost ideal. How should I setup my robot_localization so that I wouldn't have such a drift? It seems that it tries to compensate the offset, but with every step, the offset gets bigger.
I have tried several things. What strangely helps a bit is to change world_frames in the conf. If GPS would be used in the node where world_frame is odom, then odom itself is drifting, but base_footprint stays put.
All this happens when the robot stays at (0, 0).