mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-29 16:54:07 +08:00
commander arming: disable stick (dis-)arming when arming switch/button is used
A reason for using switch arming in the first place is that you cannot accidentally disarm in-air with the sticks during acrobatic flights. It also adds a low-throttle arming requirement for switch arming.
This commit is contained in:
parent
db2b010630
commit
02fc68a53e
@ -2237,14 +2237,17 @@ Commander::run()
|
||||
status.rc_signal_lost = false;
|
||||
|
||||
const bool in_armed_state = (status.arming_state == vehicle_status_s::ARMING_STATE_ARMED);
|
||||
const bool arm_switch_or_button_mapped = sp_man.arm_switch != manual_control_setpoint_s::SWITCH_POS_NONE;
|
||||
const bool arm_button_pressed = arm_switch_is_button == 1
|
||||
&& sp_man.arm_switch == manual_control_setpoint_s::SWITCH_POS_ON;
|
||||
|
||||
/* DISARM
|
||||
* check if left stick is in lower left position or arm button is pushed or arm switch has transition from arm to disarm
|
||||
* and we are in MANUAL, Rattitude, or AUTO_READY mode or (ASSIST mode and landed)
|
||||
* do it only for rotary wings in manual mode or fixed wing if landed */
|
||||
const bool stick_in_lower_left = sp_man.r < -STICK_ON_OFF_LIMIT && sp_man.z < 0.1f;
|
||||
* do it only for rotary wings in manual mode or fixed wing if landed.
|
||||
* Disable stick-disarming if arming switch or button is mapped */
|
||||
const bool stick_in_lower_left = sp_man.r < -STICK_ON_OFF_LIMIT && sp_man.z < 0.1f
|
||||
&& !arm_switch_or_button_mapped;
|
||||
const bool arm_switch_to_disarm_transition = arm_switch_is_button == 0 &&
|
||||
_last_sp_man_arm_switch == manual_control_setpoint_s::SWITCH_POS_ON &&
|
||||
sp_man.arm_switch == manual_control_setpoint_s::SWITCH_POS_OFF;
|
||||
@ -2276,14 +2279,17 @@ Commander::run()
|
||||
|
||||
/* ARM
|
||||
* check if left stick is in lower right position or arm button is pushed or arm switch has transition from disarm to arm
|
||||
* and we're in MANUAL mode */
|
||||
const bool stick_in_lower_right = (sp_man.r > STICK_ON_OFF_LIMIT && sp_man.z < 0.1f);
|
||||
* and we're in MANUAL mode.
|
||||
* Disable stick-arming if arming switch or button is mapped */
|
||||
const bool stick_in_lower_right = sp_man.r > STICK_ON_OFF_LIMIT && sp_man.z < 0.1f
|
||||
&& !arm_switch_or_button_mapped;
|
||||
/* allow a grace period for re-arming: preflight checks don't need to pass during that time,
|
||||
* for example for accidential in-air disarming */
|
||||
const bool in_arming_grace_period = last_disarmed_timestamp != 0 && hrt_elapsed_time(&last_disarmed_timestamp) < 5_s;
|
||||
const bool arm_switch_to_arm_transition = arm_switch_is_button == 0 &&
|
||||
_last_sp_man_arm_switch == manual_control_setpoint_s::SWITCH_POS_OFF &&
|
||||
sp_man.arm_switch == manual_control_setpoint_s::SWITCH_POS_ON;
|
||||
sp_man.arm_switch == manual_control_setpoint_s::SWITCH_POS_ON &&
|
||||
(sp_man.z < 0.1f || in_arming_grace_period);
|
||||
|
||||
if (!in_armed_state &&
|
||||
status.rc_input_mode != vehicle_status_s::RC_IN_MODE_OFF &&
|
||||
|
||||
@ -1556,7 +1556,10 @@ PARAM_DEFINE_INT32(RC_MAP_OFFB_SW, 0);
|
||||
PARAM_DEFINE_INT32(RC_MAP_KILL_SW, 0);
|
||||
|
||||
/**
|
||||
* Arm switch channel
|
||||
* Arm switch channel.
|
||||
*
|
||||
* Use it to arm/disarm via switch instead of default throttle stick. If this is
|
||||
* assigned, arming and disarming via stick is disabled.
|
||||
*
|
||||
* @min 0
|
||||
* @max 18
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user