Robotics StackExchange | Archived questions

robot_localization: Unsure of what global EKF instance is fusing

Hello,

I have been trying to obtain an orientation estimate from gyroscope data using the EKF nodes. I am using a launch file (attached below) with the structure - one local EKF node in the odom frame, fusing only continuous IMU data and outputting odom->baselink TF transform, and another global EKF node in the map frame, coupled to navsattransformnode and fusing GPS with IMU data.

I have set the configs as such:

For the global EKF node, imu0config is IMU and odom0config is GPS odometry from navsattransformnode:

  <rosparam param="imu0_config">[false, false, false,
                                 false,  false,  false,
                                 false, false, false,
                                 false,  false,  true,
                                 true,  true,  false]</rosparam>

  <rosparam param="odom0_config">[true, true, false,
                                 false,  false,  false,
                                 false, false, false,
                                 false,  false,  false,
                                 false,  false,  false]</rosparam>

For the local EKF node, (imu0_config refers to same IMU topic as global EKF node):

  <rosparam param="imu0_config">[false, false, false,
                                 false,  false,  false,
                                 false, false, false,
                                 false,  false,  true,
                                 true,  true,  false]</rosparam>

When I plot the local EKF's yaw output, I obtain this: https://drive.google.com/file/d/0B_Ldva1OIRTfMEVBeHVVQjJwd00/view?usp=sharing

This is very much in line with what I expected and what I obtained just by integrating my gyroscope data in MATLAB. However, when I plot the global EKF's yaw output, I obtain this instead: https://drive.google.com/file/d/0B_Ldva1OIRTfcEZJdjJFd2VIMEE/view?usp=sharing

This does not resemble my expected output and the yaw seems to blow up even though I am moving in an approximately straight line. Both of these nodes are also fusing data from the same topic, '/imu/data'.

Would you happen to know why the result of the fusing is so different, especially since I am only fusing IMU yaw velocity to obtain yaw in both nodes (i.e. I think I am using the exact same sources of data, no more and no less, to obtain yaw in both nodes)? Or am I implicitly fusing other data in the global EKF node?

My launch file is included here: https://drive.google.com/file/d/0B_Ldva1OIRTfTkFid2tCdlNSODQ/view?usp=sharing

My bagfile in case required: https://drive.google.com/file/d/0B_Ldva1OIRTfcGVnOXpaWGlZZDQ/view?usp=sharing

Thanks!

Asked by jll on 2015-12-09 11:27:33 UTC

Comments

This question is very old and slipped past me; did you ever find an answer to this?

Asked by Tom Moore on 2017-07-20 04:14:23 UTC

Answers