I’ve been using Navio2 on a Quadcopter but right now I need to write a report for my project.
One of the topics required is to describe the Algorithms used for sensor fusion. From the code I can conclude that there are 3 main filters (DCM, EKF2, EKF3).
I would like to ask which of these are used (or which combination of them). I use Copter3.5.
Studying the code I’ve noticed the following lines at the AP_AHRS_NavEKF::update function.
update_DCM();
update_EKF2();
update_EKF3();
So, I believe that this means DCM, EKF2 and EKF3 are used sequentially to update AHRS data.
Am I wrong?
I would also like to ask if there are any references for each of them, i.e., papers or technical reports. I’ve already found “Direction Cosine Matrix IMU: Theory” by Premerlani and Bizard (that describes most of the DCM filter). I’ve also found Paul’s repository but I was looking for something more theoretical on the subject. I have already implemented Extended Kalman Filters for orientation estimation before, but nothing as complex as EKF1 and EKF2
By default only one EKF is running. In 3.5 as in 3.4 it is the EKF2. I think Paul hasn’t written any document on EKF implementations, but I might be wrong.
My confusion is that I couldn’t figure it out the relation between the three filters (i.e., which parameters were being calculated by one of the filters and used by the others, since they are being called sequentially).
Since only one of them, EKF2, is actually being used as the primary source of AHRS data, that makes things way more simpler. I’m actually almost finished understanding Paul’s 24-state EKF thanks to the Matlab resources available from his repository (it’s simpler to read than the C++ code implemented, since I want to understand the theory behind it).
He actually has done a presentation on the subject that explains some things but not all of it. It can be found here: 1