diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index c0c4e17b89..371858ce06 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -631,7 +631,7 @@ transition_result_t Commander::disarm(arm_disarm_reason_t calling_reason, bool f || (calling_reason == arm_disarm_reason_t::rc_switch) || (calling_reason == arm_disarm_reason_t::rc_button); - if (!landed && !(mc_manual_thrust_mode && commanded_by_rc)) { + if (!landed && !(mc_manual_thrust_mode && commanded_by_rc && _param_com_disarm_man.get())) { if (calling_reason != arm_disarm_reason_t::rc_stick) { mavlink_log_critical(&_mavlink_log_pub, "Disarming denied: not landed\t"); events::send(events::ID("commander_disarm_denied_not_landed"), diff --git a/src/modules/commander/Commander.hpp b/src/modules/commander/Commander.hpp index 874f9a9b14..d477585c03 100644 --- a/src/modules/commander/Commander.hpp +++ b/src/modules/commander/Commander.hpp @@ -332,6 +332,7 @@ private: (ParamFloat) _param_com_disarm_land, (ParamFloat) _param_com_disarm_preflight, + (ParamBool) _param_com_disarm_man, (ParamInt) _param_com_dl_loss_t, (ParamInt) _param_com_hldl_loss_t, (ParamInt) _param_com_hldl_reg_t, diff --git a/src/modules/commander/commander_params.c b/src/modules/commander/commander_params.c index 6274b841ec..e01b45276d 100644 --- a/src/modules/commander/commander_params.c +++ b/src/modules/commander/commander_params.c @@ -245,6 +245,19 @@ PARAM_DEFINE_INT32(COM_ARM_WO_GPS, 1); */ PARAM_DEFINE_INT32(COM_ARM_SWISBTN, 0); +/** + * Allow disarming via switch/stick/button on multicopters in manual thrust modes + * + * 0: Disallow disarming when not landed + * 1: Allow disarming in multicopter flight in modes where + * the thrust is directly controlled by thr throttle stick + * e.g. Stabilized, Acro + * + * @group Commander + * @boolean + */ +PARAM_DEFINE_INT32(COM_DISARM_MAN, 1); + /** * Battery failsafe mode *