diff --git a/ArduPlane/events.cpp b/ArduPlane/events.cpp index 3a8cadaad07bbf..6eb233406e3e0b 100644 --- a/ArduPlane/events.cpp +++ b/ArduPlane/events.cpp @@ -162,7 +162,7 @@ void Plane::handle_battery_failsafe(const char *type_str, const int8_t action) } FALLTHROUGH; case Failsafe_Action_Land: - if (flight_stage != AP_Vehicle::FixedWing::FLIGHT_LAND && control_mode != &mode_qland) { + if (flight_stage != AP_Vehicle::FixedWing::FLIGHT_LAND && control_mode != &mode_qland && !plane.mission.is_best_land_sequence()) { // never stop a landing if we were already committed if (plane.mission.jump_to_landing_sequence()) { plane.set_mode(mode_auto, ModeReason::BATTERY_FAILSAFE); @@ -172,6 +172,10 @@ void Plane::handle_battery_failsafe(const char *type_str, const int8_t action) FALLTHROUGH; case Failsafe_Action_RTL: if (flight_stage != AP_Vehicle::FixedWing::FLIGHT_LAND && control_mode != &mode_qland && !quadplane.in_vtol_land_sequence()) { + if (g.rtl_autoland == 2 && plane.mission.is_best_land_sequence()) { + // continue mission reaches a land in less distance + break; + } // never stop a landing if we were already committed set_mode(mode_rtl, ModeReason::BATTERY_FAILSAFE); aparm.throttle_cruise.load();