EKF: Ensure normal yaw alignment using mag is performed if GPS method is not

This commit is contained in:
Paul Riseborough
2017-07-08 11:13:40 +02:00
committed by Lorenz Meier
parent d446f66105
commit ec2b54fde7
2 changed files with 14 additions and 6 deletions
+4 -4
View File
@@ -1050,7 +1050,7 @@ void Ekf::controlMagFusion()
if (!_control_status.flags.mag_3D) {
if (!_flt_mag_align_complete) {
// If we are flying a vehicle that flies forward, eg plane, then we can use the GPS course to check and correct the heading
if (_control_status.flags.fixed_wing) {
if (_control_status.flags.fixed_wing && _control_status.flags.in_air) {
_control_status.flags.yaw_align = realignYawGPS();
_flt_mag_align_complete = _control_status.flags.yaw_align;
} else {
@@ -1069,9 +1069,9 @@ void Ekf::controlMagFusion()
}
}
// use 3D mag fusion when airborne
_control_status.flags.mag_hdg = false;
_control_status.flags.mag_3D = true;
// only use one type of mag fusion at the same time
_control_status.flags.mag_3D = _flt_mag_align_complete;
_control_status.flags.mag_hdg = !_control_status.flags.mag_3D;
} else {
// save magnetic field state variances for next time
+10 -2
View File
@@ -361,6 +361,8 @@ bool Ekf::realignYawGPS()
// correct yaw angle using GPS ground course if compass yaw bad
if (badMagYaw) {
ECL_WARN("EKF bad yaw corrected using GPS course");
// save a copy of the quaternion state for later use in calculating the amount of reset change
Quatf quat_before_reset = _state.quat_nominal;
@@ -459,11 +461,17 @@ bool Ekf::realignYawGPS()
// capture the reset event
_state_reset_status.quat_counter++;
// the alignment using GPS has been successful
return true;
} else {
// attempt a normal alignment using the magnetometer
return resetMagHeading(_mag_sample_delayed.mag);
}
return true;
} else {
// we were unable to verify the alignment
return false;
}