ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

I'd have to see input messages and your launch file. Also, see this question. In addition, try increasing the process_noise_covariance parameter for yaw velocity (not the measurement covariance).

I'd have to see input messages and your launch file. Also, see this question. In addition, try increasing the process_noise_covariance parameter for yaw velocity (not the measurement covariance).

EDIT

Looking at your bag and launch files, a few things jump out at me. There are things that could be causing your issue, and things that are probably unrelated, but should be fixed.

Potential Causes for Delay

  1. The EKF and UKF in robot_localization are typically subject to a two-spin-cycle delay. Part of this is due to the use of TF message filters. I've managed to get this down to one cycle in the latest indigo-devel source. However, part of your problem is that you have your frequency set to 20 Hz. If every measurement is delayed by two spin cycles, then you're looking at a lag of 0.1 seconds, which is quite a long time. This also appears to align with what I'm seeing when I plot the IMU input for yaw velocity and the filter output. Grab the latest source and see if that brings it down a bit. Then up the frequency parameter, or decrease the sensor_timeout parameter (or both).
  2. Maybe up the process_noise_covariance a bit more for yaw velocity.
  3. You have yaw set to true for your IMU data, which means you are (presumably) using a magnetometer. I personally find magnetometers to be nearly useless indoors, but YMMV.

Other Things That You Should Correct

  1. Despite the use of yaw information from your IMU, you have your initial_estimate_covariance yaw value set to 0.01. That will make the filter slow to integrate the yaw measurements initially, which may or may not have been your intention. Making matters worse is that your yaw covariance value in your measurement is 1000000.0, which will effectively make the filter ignore those measurements.

  2. Your IMU is reporting at a rate of 9.89 Hz, which seems low for an IMU, and makes me wonder if it's supposed to be 10, and there's a delay in the handling of the raw data. If you can up the frequency on your IMU (and the EKF), then it might be helpful.

  3. You have nothing measuring Y velocity. If your robot cannot move laterally, then go ahead and set Y velocity to true for your odometry, and make sure the odometry data has a small covariance value for Y velocity.