I recently adapted the arducopter code to use an indoor RF-based navigation technique for positioning for my drone instead of outdoor GPS. I have a few problems with navigating my drone, more specifically, the yaw has a lot of inaccuracies during flight. It seems to get thrown off and settle at an incorrect value as I make movements, especially sharp ones. I checked the compass readings and they are always correct, but do not play a major role in the output yaw of the EKF. I have also calibrated the compass yielding low compass offsets.
The indoor GPS solution does not provide velocity so I have turned this part of the EKF fusion code off (fuseVelData = false). However, I do calculate instantaneous velocity using position and feed this into the EKF, however, this does not improve the errors I observe in yaw values.
I also observed that the code skips magnetometer fusion (FuseMagnetometer()) because inhibitMagStates is set to true, i.e. its using the algebraic method for yaw fusion (fuseEulerYaw()). However, when I set inhibitMagStates false the yaw just spins counterclockwise continuously.
Does anyone have tips on how to correct the yaw for this application?