Ask Your Question
0

Huge drift using single IMU state estimation

asked 2016-01-14 10:26:09 -0500

dfornas gravatar image

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 ... (more)

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
3

answered 2016-01-14 12:02:43 -0500

If you just use the IMU you' re double integrating linear accelerations to come up with position and integrating angular rates to come up with orientation. Unbounded and quick drift is to be expected in such a situation unless you use really expensive sensors (such as those used in aircraft). It thus is not really surprising that significant drift is observed.

edit flag offensive delete link more

Comments

Thanks. I was specting bad result but not so bad. Then I will use it with visual Odometry from the begining.

dfornas gravatar imagedfornas ( 2016-01-18 02:15:01 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2016-01-14 10:26:09 -0500

Seen: 306 times

Last updated: Jan 14 '16