Primary and secondary EKF mismatch (EKF1 drift)


We had a crash initiated by a GPS glitch, but whose main cause seems to come from a discrepancy between both EKF. We use ArduCopter 3.5.4.

Some discussions have already taken place on this topic. As suggested by @mboland, I want to post it here, since it may affect any ArduCopter 3.5 user.

So the problem occured when the primary EKF filter changed from EKF0 to EKF1. There was a significant difference between the attitude estimates of EKF0 and EKF1. The EKF0 estimate was still good, but the EKF1 was far from the truth. The real question is: why does the EKF1 attitude estimate drifts so much compare to EKF0?

I chose a log different from that of the original post, because in my opinion it better expresses this particular problem.

The log file is available here.

Looking at Figure 1, we see that the estimate of the EKF1 roll (we see the same problem for the pitch) drifts over time, to compare the EKF0. For a long flight, this can result in more than 15 degrees difference between the two. So, if a GPS glitch occurs, the primary filter goes from EKF0 to EKF1, which obviously causes a problem.

According to @mboland, this comes from the difference between the accelerometers of IMU0 and IMU1. Yet, looking at Figures 2, 3 and 4, we see that they are still similar. There is more noise on the IMU1, but can this really cause such a significant drift over time?