From 458ade86f5b3602e75beff4dda929eb3a22c3797 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 27 Aug 2020 18:33:30 +1000 Subject: [PATCH] AP_NavEKF3: fixed segfault when IMU mask covers more IMUs than GSF mask --- libraries/AP_NavEKF3/AP_NavEKF3_MagFusion.cpp | 3 ++- libraries/AP_NavEKF3/AP_NavEKF3_VehicleStatus.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/AP_NavEKF3/AP_NavEKF3_MagFusion.cpp b/libraries/AP_NavEKF3/AP_NavEKF3_MagFusion.cpp index f1d3963083..97cb6ece28 100644 --- a/libraries/AP_NavEKF3/AP_NavEKF3_MagFusion.cpp +++ b/libraries/AP_NavEKF3/AP_NavEKF3_MagFusion.cpp @@ -246,7 +246,8 @@ void NavEKF3_core::SelectMagFusion() } float yawEKFGSF, yawVarianceEKFGSF; - bool canUseEKFGSF = yawEstimator->getYawData(yawEKFGSF, yawVarianceEKFGSF) && + bool canUseEKFGSF = yawEstimator != nullptr && + yawEstimator->getYawData(yawEKFGSF, yawVarianceEKFGSF) && is_positive(yawVarianceEKFGSF) && yawVarianceEKFGSF < sq(radians(GSF_YAW_ACCURACY_THRESHOLD_DEG)); if (yawAlignComplete && canUseEKFGSF && !assume_zero_sideslip()) { // use the EKF-GSF yaw estimator output as this is more robust than the EKF can achieve without a yaw measurement diff --git a/libraries/AP_NavEKF3/AP_NavEKF3_VehicleStatus.cpp b/libraries/AP_NavEKF3/AP_NavEKF3_VehicleStatus.cpp index 7da6570e30..a5a693fa2f 100644 --- a/libraries/AP_NavEKF3/AP_NavEKF3_VehicleStatus.cpp +++ b/libraries/AP_NavEKF3/AP_NavEKF3_VehicleStatus.cpp @@ -410,7 +410,7 @@ void NavEKF3_core::detectFlight() if (!prevOnGround && onGround) { // landed so disable filter bank EKFGSF_run_filterbank = false; - } else if (!EKFGSF_run_filterbank && ((!prevInFlight && inFlight) || expectTakeoff)) { + } else if (yawEstimator && !EKFGSF_run_filterbank && ((!prevInFlight && inFlight) || expectTakeoff)) { // started flying so reset counters and enable filter bank EKFGSF_yaw_reset_ms = 0; EKFGSF_yaw_reset_request_ms = 0;