robot_localization odom and map drifts
Currently, I’m trying to fuse simulated gazebo GPS and IMU data to get localization to use with navigation stack I've tested the movebase with perfect odometry given by Gazebo skid steering plugin and there's no problem with that But when I'm using the fused data from robotlocalization my odom and map frame drifts constantly when the robot moves, making it impossible for the planner to make decisions.
Here's a short video with the demonstration:
Here's the launch file used for localization:
<launch>
<rosparam command="load" file="$(find my_robot_localization)/params/my_localization_params.yaml" />
<node pkg="robot_localization" type="ukf_localization_node" name="ukf_se_odom" clear_params="true"/>
<node pkg="robot_localization" type="ukf_localization_node" name="ukf_se_map" clear_params="true">
<remap from="odometry/filtered" to="odometry/filtered_map"/>
</node>
<node pkg="robot_localization" type="navsat_transform_node" name="navsat_transform" clear_params="true">
<remap from="odometry/filtered" to="odometry/filtered_map"/>
</node>
</launch>
And the parameters for them:
ukf_se_odom:
publish_tf: true
frequency: 30
sensor_timeout: 0.1
two_d_mode: true
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
imu0: imu/data
imu0_config: [false, false, false,
false, false, 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
ukf_se_map:
frequency: 30
sensor_timeout: 0.1
two_d_mode: true
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_link
world_frame: map
odom0: odometry/gps
odom0_config: [true, true, 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
imu0: imu/data
imu0_config: [false, false, false,
false, false, true,
false, false, false,
true, true, true,
true, true, true]
imu0_nodelay: true
imu0_differential: false
imu0_relative: false
imu0_queue_size: 10
imu0_remove_gravitational_acceleration: true
twist0: gps/vel/converted
twist0_config: [false, false, false,
false, false, false,
true, true, false,
false, false, false,
false, false, false]
twist0_nodelay: false
twist0_differential: false
twist0_relative: false
twist0_queue_size: 10
twist0_remove_gravitational_acceleration: true
use_control: false
navsat_transform:
frequency: 30
delay: 3.0
magnetic_declination_radians: 0.0429351 # For lat/long 55.944831, -3.186998
yaw_offset: 0.0 # IMU reads 0 facing magnetic north, not east 1.570796327
zero_altitude: false
broadcast_utm_transform: true
publish_filtered_gps: true
use_odometry_yaw: true
wait_for_datum: true
Let me know about any other data you might need and I'll be happy to provide. Thanks in advance
Asked by Ubicray on 2017-07-14 07:16:26 UTC
Answers
I guess you should fuse all the in one robot_localization node although it is hard to understand from the video. Next time, you may paste warnings from terminal or log file.
The problem can be related with your param files when you declare world_frame different. I think setting world_frame as "odom" solves it. Additionally, trying to fuse more variables if applicable.
Asked by orko on 2017-07-14 08:32:23 UTC
Comments
I'm getting the same problem when I fuse it all in the same node Tried with the world frame set to odom as well, doesn't change it
Asked by Ubicray on 2017-07-18 01:57:40 UTC
Comments
Can you try without fusing acceleration data? Edit: Does your robot have no wheel odometry?
Asked by Humpelstilzchen on 2017-07-16 12:32:34 UTC