From e0f524d4256c6a7dadb601d0ac10841da1961906 Mon Sep 17 00:00:00 2001 From: Samuel Tabor Date: Mon, 13 Jul 2020 14:10:05 +0100 Subject: [PATCH] Plane: Soaring: Use circling time as timeout if less than 20s. --- ArduPlane/soaring.cpp | 3 ++- libraries/AP_Soaring/AP_Soaring.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ArduPlane/soaring.cpp b/ArduPlane/soaring.cpp index 7cc2ea382f..32ea20a678 100644 --- a/ArduPlane/soaring.cpp +++ b/ArduPlane/soaring.cpp @@ -111,8 +111,9 @@ void Plane::update_soaring() { // Some other loiter status, we need to think about exiting loiter. const uint32_t time_in_loiter_ms = AP_HAL::millis() - plane.soaring_mode_timer_ms; + const uint32_t timeout = MIN(1000*g2.soaring_controller.get_circling_time(), 20000); - if (!soaring_exit_heading_aligned() && loiterStatus!=SoaringController::LoiterStatus::ALT_TOO_LOW && time_in_loiter_ms < 20000) { + if (!soaring_exit_heading_aligned() && loiterStatus != SoaringController::LoiterStatus::ALT_TOO_LOW && time_in_loiter_ms < timeout) { // Heading not lined up, and not timed out or in a condition requiring immediate exit. break; } diff --git a/libraries/AP_Soaring/AP_Soaring.h b/libraries/AP_Soaring/AP_Soaring.h index 47b5e12999..ea833cb082 100644 --- a/libraries/AP_Soaring/AP_Soaring.h +++ b/libraries/AP_Soaring/AP_Soaring.h @@ -127,6 +127,8 @@ public: float get_alt_cutoff() const {return alt_cutoff;} + float get_circling_time() const {return _vario.tau;} + private: // slow down messages if they are the same. During loiter we could smap the same message. Only show new messages during loiters LoiterStatus _cruise_criteria_msg_last;