diff --git a/ArduPlane/avoidance_adsb.cpp b/ArduPlane/avoidance_adsb.cpp index b44ff75b96..467d1fac30 100644 --- a/ArduPlane/avoidance_adsb.cpp +++ b/ArduPlane/avoidance_adsb.cpp @@ -134,11 +134,20 @@ void AP_Avoidance_Plane::handle_recovery(RecoveryAction recovery_action) case RecoveryAction::RESUME_IF_AUTO_ELSE_LOITER: if (prev_control_mode_number == Mode::Number::AUTO) { plane.set_mode(plane.mode_auto, ModeReason::AVOIDANCE_RECOVERY); + } else { + // let ModeAvoidADSB continue in its guided + // behaviour, but reset the loiter location, + // rather than where the avoidance location was + plane.guided_WP_loc = plane.current_loc; + plane.set_guided_WP(); } - // else do nothing, same as RecoveryAction::LOITER break; default: + // user has specified an invalid recovery action; + // loiter where we are + plane.guided_WP_loc = plane.current_loc; + plane.set_guided_WP(); break; } // switch }