From 963467b4df6d9188eb7ab2eaa279adbcc279d610 Mon Sep 17 00:00:00 2001 From: Jimmy Johnson Date: Fri, 2 Aug 2019 07:41:25 -0700 Subject: [PATCH] splitting preflight and land disarm times into 2 parameters --- src/modules/commander/Commander.cpp | 22 ++++++++++------------ src/modules/commander/Commander.hpp | 1 + src/modules/commander/commander_params.c | 23 +++++++++++++++++------ 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index 0cb335f3ba..5e2733d9a2 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -561,7 +561,7 @@ Commander::Commander() : ModuleParams(nullptr), _failure_detector(this) { - _auto_disarm_landed.set_hysteresis_time_from(false, 10_s); + _auto_disarm_landed.set_hysteresis_time_from(false, _param_com_disarm_preflight.get() * 1_s); _auto_disarm_killed.set_hysteresis_time_from(false, 5_s); // We want to accept RC inputs as default @@ -1670,25 +1670,23 @@ Commander::run() // Auto disarm when landed or kill switch engaged if (armed.armed) { - // Check for auto-disarm on landing - if (_param_com_disarm_land.get() > 0) { + // Check for auto-disarm on landing or pre-flight + if (_param_com_disarm_land.get() > 0 || _param_com_disarm_preflight.get() > 0) { - if (!have_taken_off_since_arming) { - // pilot has ten seconds time to take off - _auto_disarm_landed.set_hysteresis_time_from(false, 10_s); - - } else { + if (_param_com_disarm_land.get() > 0 && have_taken_off_since_arming) { _auto_disarm_landed.set_hysteresis_time_from(false, _param_com_disarm_land.get() * 1_s); - } + _auto_disarm_landed.set_state_and_update(land_detector.landed, hrt_absolute_time()); - _auto_disarm_landed.set_state_and_update(land_detector.landed, hrt_absolute_time()); + } else if (_param_com_disarm_preflight.get() > 0 && !have_taken_off_since_arming) { + _auto_disarm_landed.set_hysteresis_time_from(false, _param_com_disarm_preflight.get() * 1_s); + _auto_disarm_landed.set_state_and_update(true, hrt_absolute_time()); + } if (_auto_disarm_landed.get_state()) { - arm_disarm(false, &mavlink_log_pub, "Auto disarm on land"); + arm_disarm(false, &mavlink_log_pub, "Auto disarm initiated"); } } - // Auto disarm after 5 seconds if kill switch is engaged _auto_disarm_killed.set_state_and_update(armed.manual_lockdown, hrt_absolute_time()); diff --git a/src/modules/commander/Commander.hpp b/src/modules/commander/Commander.hpp index 0c00870a0d..f3da471d4c 100644 --- a/src/modules/commander/Commander.hpp +++ b/src/modules/commander/Commander.hpp @@ -123,6 +123,7 @@ private: (ParamInt) _param_com_low_bat_act, (ParamFloat) _param_com_disarm_land, + (ParamFloat) _param_com_disarm_preflight, (ParamInt) _param_com_obs_avoid, (ParamInt) _param_com_oa_boot_t, diff --git a/src/modules/commander/commander_params.c b/src/modules/commander/commander_params.c index e530b317fb..1e3b0b804b 100644 --- a/src/modules/commander/commander_params.c +++ b/src/modules/commander/commander_params.c @@ -262,18 +262,29 @@ PARAM_DEFINE_INT32(COM_RC_ARM_HYST, 1000); * A non-zero, positive value specifies the time-out period in seconds after which the vehicle will be * automatically disarmed in case a landing situation has been detected during this period. * - * The vehicle will also auto-disarm right after arming if it has not even flown, however the time - * will always be 10 seconds such that the pilot has enough time to take off. - * * A negative value means that automatic disarming triggered by landing detection is disabled. * * @group Commander - * @min -1 - * @max 20 * @unit s * @decimal 2 */ -PARAM_DEFINE_FLOAT(COM_DISARM_LAND, 2.0f); + +PARAM_DEFINE_FLOAT(COM_DISARM_LAND, 5.0f); + +/** + * Time-out for auto disarm before the first take off + * + * A non-zero, positive value specifies the time-out period in seconds after which the vehicle will be + * automatically disarmed when the vehicle has never taken off. + * + * A negative value means that automatic disarming triggered by a pre-takeoff timeout is disabled. + * + * @group Commander + * @unit s + * @decimal 2 + */ +PARAM_DEFINE_FLOAT(COM_DISARM_PRFLT, 2.0f); + /** * Allow arming without GPS