diff --git a/src/modules/vtol_att_control/tailsitter.cpp b/src/modules/vtol_att_control/tailsitter.cpp index c503df7e63..69fd7f7de0 100644 --- a/src/modules/vtol_att_control/tailsitter.cpp +++ b/src/modules/vtol_att_control/tailsitter.cpp @@ -80,7 +80,16 @@ void Tailsitter::update_vtol_state() float pitch = Eulerf(Quatf(_v_att->q)).theta(); - if (!_attc->is_fixed_wing_requested()) { + if (_vtol_vehicle_status->vtol_transition_failsafe) { + // Failsafe event, switch to MC mode immediately + _vtol_schedule.flight_mode = vtol_mode::MC_MODE; + + //reset failsafe when FW is no longer requested + if (!_attc->is_fixed_wing_requested()) { + _vtol_vehicle_status->vtol_transition_failsafe = false; + } + + } else if (!_attc->is_fixed_wing_requested()) { switch (_vtol_schedule.flight_mode) { // user switchig to MC mode case vtol_mode::MC_MODE: diff --git a/src/modules/vtol_att_control/tiltrotor.cpp b/src/modules/vtol_att_control/tiltrotor.cpp index 672db19c62..b34a8e70f3 100644 --- a/src/modules/vtol_att_control/tiltrotor.cpp +++ b/src/modules/vtol_att_control/tiltrotor.cpp @@ -100,7 +100,16 @@ void Tiltrotor::update_vtol_state() * forward completely. For the backtransition the motors simply rotate back. */ - if (!_attc->is_fixed_wing_requested()) { + if (_vtol_vehicle_status->vtol_transition_failsafe) { + // Failsafe event, switch to MC mode immediately + _vtol_schedule.flight_mode = vtol_mode::MC_MODE; + + //reset failsafe when FW is no longer requested + if (!_attc->is_fixed_wing_requested()) { + _vtol_vehicle_status->vtol_transition_failsafe = false; + } + + } else if (!_attc->is_fixed_wing_requested()) { // plane is in multicopter mode switch (_vtol_schedule.flight_mode) {