From 7bee3d1751f4a5ed28c9be03ce43f17c9634b8c9 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Sun, 12 Oct 2025 21:20:46 +0300 Subject: [PATCH] Improve rc failsafe logic Don't trigger failsafe if there's no RC at all Use AUTO mode for descending, instead of STAB Increase RC loss timeout and descend time --- flix/failsafe.ino | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/flix/failsafe.ino b/flix/failsafe.ino index 1767b1f..77ddd2a 100644 --- a/flix/failsafe.ino +++ b/flix/failsafe.ino @@ -3,8 +3,8 @@ // Fail-safe functions -#define RC_LOSS_TIMEOUT 0.5 -#define DESCEND_TIME 3.0 // time to descend from full throttle to zero +#define RC_LOSS_TIMEOUT 1 +#define DESCEND_TIME 10 extern double controlTime; extern float controlRoll, controlPitch, controlThrottle, controlYaw; @@ -16,7 +16,7 @@ void failsafe() { // RC loss failsafe void rcLossFailsafe() { - if (mode == AUTO) return; + if (controlTime == 0) return; // no RC at all if (!armed) return; if (t - controlTime > RC_LOSS_TIMEOUT) { descend(); @@ -25,14 +25,12 @@ void rcLossFailsafe() { // Smooth descend on RC lost void descend() { - mode = STAB; - controlRoll = 0; - controlPitch = 0; - controlYaw = 0; - controlThrottle -= dt / DESCEND_TIME; - if (controlThrottle < 0) { + mode = AUTO; + attitudeTarget = Quaternion(); + thrustTarget -= dt / DESCEND_TIME; + if (thrustTarget < 0) { + thrustTarget = 0; armed = false; - controlThrottle = 0; } }