Hey guys,
I am performing gps waypoint navigation using `move_base` for the navigation side of things. My localization setup uses `robot_localization` i run two instances of this in order to fuse the gps, so first instance has wheel odom + IMU and second instance has wheel odom + IMU + GPS.
My IMU does not provide an earth referenced heading so i have a gnss heading receiver setup and i pipe the heading into a Pose message of the following format:

I have two pose messages setup, one for the odom frame and one for the map frame **both** are the exact same but with different `frame_id`. I fuse the earth reference heading into both `robot_localization` nodes in the following way:
ekf_se_odom:
frequency: 20
two_d_mode: true
sensor_timeout: 0.15
transform_time_offset: 0.0
transform_timeout: 0.0
print_diagnostics: true
debug: false
map_frame: map
odom_frame: odom
base_link_frame: base_link
world_frame: odom
odom0: /warthog_velocity_controller/odom
odom0_config: [false, false, false,
false, false, false,
true, true, false,
false, false, true,
false, false, false]
odom0_queue_size: 10
odom0_nodelay: true
odom0_differential: false
odom0_relative: false
# GNSS HEADING POSE MESSAGE (ODOM)
pose0: /gps/odometry_odom
pose0_config: [false, false, false,
false, false, true,
false, false, false,
false, false, false,
false, false, false]
pose0_queue_size: 10
pose0_nodelay: true
pose0_differential: false
pose0_relative: false
imu0: /mcu_imu/data
imu0_config: [false, false, false,
false, false, false,
false, false, false,
false, false, true,
true, true, false]
imu0_differential: false
imu0_nodelay: false
imu0_relative: false
imu0_queue_size: 10
use_control: false
ekf_se_map:
frequency: 20
sensor_timeout: 0.15
two_d_mode: true
transform_time_offset: 0.0
transform_timeout: 0.0
print_diagnostics: true
debug: false
debug_out_file: "/home/alec/debug_ekf.txt"
map_frame: map
odom_frame: odom
base_link_frame: base_link
world_frame: map
odom0: /warthog_velocity_controller/odom
odom0_config: [false, false, false,
false, false, false,
true, true, false,
false, false, true,
false, false, false]
odom0_queue_size: 10
odom0_nodelay: true
odom0_differential: false
odom0_relative: false
# GNSS HEADING POSE MESSAGE (MAP)
pose0: /gps/odometry_map
pose0_config: [false, false, false,
false, false, true,
false, false, false,
false, false, false,
false, false, false]
pose0_queue_size: 10
pose0_nodelay: true
pose0_differential: false
pose0_relative: false
odom2: /bunkbot_localization/odometry/gps
odom2_config: [true, true, false,
false, false, false,
false, false, false,
false, false, false,
false, false, false]
odom2_queue_size: 10
odom2_nodelay: true
odom2_differential: false
odom2_relative: false
imu0: /mcu_imu/data
imu0_config: [false, false, false,
false, false, false,
false, false, false,
false, false, true,
true, true, false]
imu0_differential: false
imu0_nodelay: true
imu0_relative: false
imu0_queue_size: 10
use_control: false
**The Problem** Whenever i fuse in the earth referenced heading, record some GPS waypoints and attempt to navigate i get a very strange behaviour! see below:

**BUT:** When i **do not** fuse the earth reference heading. the navigation works fine????? see below:

Does anyone know why this would be happening? I remap the `move_base` odom topic to my ekf filtered output:
And i have checked this topic's output with both fused gnss heading and without and they seem to be fine?
↧