Huge drift using single IMU state estimation
I am using an XSens MTi IMU to get Odometry. I don't expect it very precise becuase using robot_localization with only an IMU it's not enough. But the data doesn't make any sense.
Here's a sample IMU message laying on a table:
header:
seq: 1493
stamp:
secs: 1452787986
nsecs: 27338981
frame_id: base_link
orientation:
x: -9.18361765798e-05
y: -0.000674668292049
z: -0.734749555588
w: 0.678338110447
orientation_covariance: [0.017453292519943295, 0.0, 0.0, 0.0, 0.017453292519943295, 0.0, 0.0, 0.0, 0.15707963267948966]
angular_velocity:
x: 0.0122445328161
y: -0.00810989271849
z: -0.00434370618314
angular_velocity_covariance: [0.0004363323129985824, 0.0, 0.0, 0.0, 0.0004363323129985824, 0.0, 0.0, 0.0, 0.0004363323129985824]
linear_acceleration:
x: -0.00497149862349
y: -0.00394084630534
z: 9.78269386292
linear_acceleration_covariance: [0.0004, 0.0, 0.0, 0.0, 0.0004, 0.0, 0.0, 0.0, 0.0004]
I checked REP 103 also and seems fine. Here's the robot localization launchfile:
<launch>
<node pkg="robot_localization" type="ekf_localization_node" name="ekf_localization" clear_params="true">
<param name="frequency" value="30"/>
<param name="sensor_timeout" value="0.1"/>
<param name="two_d_mode" value="true"/>
<param name="map_frame" value="/map"/>
<param name="odom_frame" value="/odom"/>
<param name="base_link_frame" value="/base_link"/>
<param name="world_frame" value="/odom"/>
<param name="transform_time_offset" value="0.0"/>
<param name="imu0" value="/imu/data"/>
<rosparam param="imu0_config">[false, false, false,
false, false, true,
false, false, false,
false, false, false,
true, true, false]</rosparam>
<param name="imu0_differential" value="false"/>
<param name="imu0_relative" value="true"/>
<param name="imu0_remove_gravitational_acceleration" value="true"/>
</node>
</launch>
The result after a few seconds lying on the table is this:
header:
seq: 1901
stamp:
secs: 1452788610
nsecs: 768650563
frame_id: odom
child_frame_id: base_link
pose:
pose:
position:
x: -2.99917433573
y: -8.30798645846
z: 0.0
orientation:
x: 0.0
y: 0.0
z: -0.0231484280161
w: 0.999732039239
covariance: [2122.6117142173225, -0.0035229890303028243, 0.0, 0.0, 0.0, 0.0013095380994704372, -0.0035229890300358443, 2122.605124971249, 0.0, 0.0, 0.0, -0.000826090225265527, 0.0, 0.0, 4.998605100602168e-07, -6.838714190263323e-16, 3.8712827075785966e-16, 0.0, 0.0, 0.0, -6.838714190263321e-16, 4.997211757054987e-07, 1.8979578160663854e-21, 0.0, 0.0, 0.0, 3.871282707578594e-16, 1.89795781606538e-21, 4.99721175705501e-07, 0.0, 0.0013095380994704374, -0.0008260902252655267, 0.0, 0.0, 0.0, 0.01920065636100415]
twist:
twist:
linear:
x: -0.167155196932
y: -0.294827166126
z: 0.0
angular:
x: 0.0
y: 0.0
z: 6.04546665353e-05
covariance: [1.58496585179876, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.58496585179876, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.997908234510603e-07, -4.353086314172724e-25, 2.204505057578188e-25, 0.0, 0.0, 0.0, -4.353086314172724e-25, 4.991653868352568e-07, 4.409189412729252e-30, 0.0, 0.0, 0.0, 2.204505057578188e-25, 4.409192020306667e-30, 4.991653868352568e-07, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.040124442094004405]
I can see linear twist changes when I move the imu in the table but at the end the speeds are continuously increasing at high rate. What may be ...