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 *