From 6b51eddecc510086f562592807680dd1f69cd6cf Mon Sep 17 00:00:00 2001 From: gguidone Date: Tue, 3 Mar 2026 15:39:43 +0100 Subject: [PATCH] Added failsafe if parachute is not detected mid flight --- msg/FailsafeFlags.msg | 3 +++ .../commander/HealthAndArmingChecks/checks/parachuteCheck.cpp | 4 ++++ src/modules/commander/failsafe/failsafe.cpp | 3 +++ 3 files changed, 10 insertions(+) diff --git a/msg/FailsafeFlags.msg b/msg/FailsafeFlags.msg index 243a4b5c9e..0d51a0fb6f 100644 --- a/msg/FailsafeFlags.msg +++ b/msg/FailsafeFlags.msg @@ -58,3 +58,6 @@ bool fd_critical_failure # Critical failure (attitude/altitude limi bool fd_esc_arming_failure # ESC failed to arm bool fd_imbalanced_prop # Imbalanced propeller detected bool fd_motor_failure # Motor failure + +# Parachute +bool parachute_unhealthy # Parachute system missing or unhealthy diff --git a/src/modules/commander/HealthAndArmingChecks/checks/parachuteCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/parachuteCheck.cpp index ce0c2f538f..8072e0f9a2 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/parachuteCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/parachuteCheck.cpp @@ -42,6 +42,10 @@ void ParachuteChecks::checkAndReport(const Context &context, Report &reporter) return; } + reporter.failsafeFlags().parachute_unhealthy = + !context.status().parachute_system_present || + !context.status().parachute_system_healthy; + if (!context.status().parachute_system_present) { /* EVENT * @description diff --git a/src/modules/commander/failsafe/failsafe.cpp b/src/modules/commander/failsafe/failsafe.cpp index b0c19db29b..9431354544 100644 --- a/src/modules/commander/failsafe/failsafe.cpp +++ b/src/modules/commander/failsafe/failsafe.cpp @@ -574,6 +574,9 @@ void Failsafe::checkStateAndMode(const hrt_abstime &time_us, const State &state, CHECK_FAILSAFE(status_flags, battery_unhealthy, Action::Warn); } + // Parachute system health failsafe + CHECK_FAILSAFE(status_flags, parachute_unhealthy, Action::RTL); + // Battery low failsafe // If battery was low and arming was allowed through COM_ARM_BAT_MIN, don't failsafe immediately for the current low battery warning state const bool warning_worse_than_at_arming = (status_flags.battery_warning > _battery_warning_at_arming);