# robot_localization: Delay in node startup causes odom drift

I am using a simple implementation with visual odometry (ZED2) for odom and an xsens IMU for IMU data. What I'm running into is that the data buffer from the IMU starts much earlier than the visual odometry and results in robot_localization parsing through all of the IMU values trying to estimate the pose without getting any visual odometry data. What I'm observing is that base_link and odom drift apart exponentially, I've seen kilometers of drift, until the visual odometry messages can catch up, and then eventually they will converge. This is with both IMU and stereo camera static on a benchtop. I'm wondering if this is expected behavior and if there is some way to ignore data from nodes until data from all nodes have been received or something to that affect? I played with relative and differential settings and they didn't seem to help. The drift did seem to settle out sooner, but then it stayed at the location instead of odom and base_link converging.

edit retag close merge delete

Sort by » oldest newest most voted

I was able to solve this by modifying the process_noise_covariance matrix. I changed the default value for az from 0.015 to 0.15 and that resolved my problem. Hope this helps someone else out. It was my x and z positions that were out of whack, but this was the one that addressed my problem.

I increased all the values and base_link to odom converged quickly. I then switched the values back to the defaults in groups of 3 (x, y, z) then (roll, pitch, yaw) then (vx, vy, vz), etc until the behavior changed. Then I did each one in that group till I found the culprit. I then adjusted it until it was converging appropriately (not sure how to quantify this).

more