diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index af191f9968..bea6303558 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -2206,7 +2206,7 @@ Commander::run() } /* Check for failure detector status */ - if (armed.armed) { + if (armed.armed && !_in_flight_termination) { if (_failure_detector.update()) { @@ -2217,15 +2217,16 @@ Commander::run() status_changed = true; } - if (failure_status != 0 && !status_flags.circuit_breaker_flight_termination_disabled) { + if (!status_flags.circuit_breaker_flight_termination_disabled) { + if (failure_status != 0) { - // TODO: set force_failsafe flag + armed.force_failsafe = true; + status_changed = true; - if (!_failure_detector_termination_printed) { - mavlink_log_critical(&mavlink_log_pub, "Attitude failure detected! Enforcing failsafe"); - _failure_detector_termination_printed = true; + _in_flight_termination = true; + + mavlink_log_critical(&mavlink_log_pub, "Attitude failure detected: force failsafe"); } - } } } diff --git a/src/modules/commander/Commander.hpp b/src/modules/commander/Commander.hpp index a15166a0b2..7f3806e60f 100644 --- a/src/modules/commander/Commander.hpp +++ b/src/modules/commander/Commander.hpp @@ -170,7 +170,7 @@ private: bool _geofence_violated_prev{false}; FailureDetector _failure_detector; - bool _failure_detector_termination_printed{false}; + bool _in_flight_termination{false}; bool handle_command(vehicle_status_s *status, const vehicle_command_s &cmd, actuator_armed_s *armed, orb_advert_t *command_ack_pub, bool *changed);