UM7 IMU: adjust / turn off extended kalman filter to arrest drift?
I am having considerable difficulty obtaining accurate results out of my UM7 IMU: yaw, pitch, and roll drift ~20 deg per minute making the sensor almost unusable. The drift exists during motion, and when the robot is sitting still on the ground. The output drifts when the acceleration and magnetometer values are unchanging. Viewing Euler angles or converting output quaternion values to euler angles myself makes no difference.
Use case: The IMU is mounted to a robot sailboat, I am looking for accuracy in orientation, it is OK if the response is slow (~0.25 s). The environment is magnetically quite clean, no vibration, but some low magnitude and 'smooth' accelerations from waves, etc.
The sensor is configured from defaults (U72A firmware revision):
- quaternion mode on
- no mag updates (the roll and pitch should be estimated from accel only)
- magnetometer process variance: 50 (an attempt to use more magnetometer in orientation estimate)
I have calibrated the magnetometer following instructions from Redshift and CH robotics ~6 times - ensuring a match between sensor temperature during operation and calibration (so temperature dependency is less likely to be issue?). The calibration numbers are close to each other, suggesting this part is working OK. The processed mag values are between 0-1. I have used other IMUs with magnetometers in the area with better success, suggesting the mag field here is OK enough for yaw estimation (the environment is OK).
I have set the process variance for the rate gyros to 0. This reduced the drift considerably from much worse results previously - I believe this effectively 'turns off the rate gyros' - but I cannot be totally sure as I have been unable to find documentation that explains these parameters. The lack of fast response that the gyros would give is OK for my application.
Interestingly enough, the roll and pitch drift when the boat is sitting on the table. If I understand correctly, without 'mag updates' and process variance for rate gyros set to 0, the pitch and roll should be only estimated from accelerometers (gravity) - thus I am perplexed why the roll and pitch drift? All other kalman filters I've used converge on the correct value rather than accumulate some bias - as appears to be happening?
Resetting the extended kalman filter produces the correct value for ~10-20 s, until it drifts. Thus, I have programmed by boat to continuously reset the EKF every 10 seconds . . a regretfully hacky solution . . this is likely not how the system was designed to function and produces step changes upon each EKF reset.
- is there a way to 'turn off' or restrain the accumulation of bias in the EKF?
- any other tips or hints to help reduce the drift and make the sensor more usable?
I've been unable to find any documentation for the filter settings. Thank you for any help!
We also recently acquired a UM7. Our unit had badly misaligned accel axes. We had to upgrade to the U72B firmware and perform a calibration to rotate the axes to the correct position to prevent our continuous drift. Contact Redshift labs with your issue, they were greatly helpful to us.
Also, the way Kalman filters work, I'd expect that setting the process variance rate of the gyros to zero will actually cause the filter to trust their measurements much more, rather than reject them. If this improved your estimate, then it points to the accelerometer being the problem I think.