From 0c4d7350c568f89ec9639b8c75c959b3d6afd6e9 Mon Sep 17 00:00:00 2001 From: Daniel Agar Date: Mon, 9 May 2022 11:36:08 -0400 Subject: [PATCH] commander: add COM_DISARM_SAFE to optionally disable disarm safety protections --- src/modules/commander/Commander.cpp | 2 +- src/modules/commander/Commander.hpp | 1 + src/modules/commander/commander_params.c | 10 ++++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index d3fdf38332..345d33d66b 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -767,7 +767,7 @@ transition_result_t Commander::arm(arm_disarm_reason_t calling_reason, bool run_ transition_result_t Commander::disarm(arm_disarm_reason_t calling_reason, bool forced) { - if (!forced) { + if (!forced && _param_com_disarm_safe.get()) { const bool landed = (_vehicle_land_detected.landed || _vehicle_land_detected.maybe_landed || is_ground_rover(_vehicle_status)); const bool mc_manual_thrust_mode = _vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING diff --git a/src/modules/commander/Commander.hpp b/src/modules/commander/Commander.hpp index 221307b847..bced78ee77 100644 --- a/src/modules/commander/Commander.hpp +++ b/src/modules/commander/Commander.hpp @@ -217,6 +217,7 @@ private: (ParamInt) _param_com_imb_prop_act, (ParamFloat) _param_com_disarm_land, (ParamFloat) _param_com_disarm_preflight, + (ParamBool) _param_com_disarm_safe, (ParamBool) _param_com_obs_avoid, diff --git a/src/modules/commander/commander_params.c b/src/modules/commander/commander_params.c index 15c98f8c09..82926039cb 100644 --- a/src/modules/commander/commander_params.c +++ b/src/modules/commander/commander_params.c @@ -243,6 +243,16 @@ PARAM_DEFINE_FLOAT(COM_DISARM_LAND, 2.0f); */ PARAM_DEFINE_FLOAT(COM_DISARM_PRFLT, 10.0f); +/** + * Disarm safety protections + * + * Prevent disarming if flying in an altitude or position control mode and not landed. + * + * @group Commander + * @boolean + */ +PARAM_DEFINE_INT32(COM_DISARM_SAFE, 1); + /** * Allow arming without GPS *