From 706500f19c2bbc86d858a8aa23c8cdaa184afbd1 Mon Sep 17 00:00:00 2001 From: Matthias Grob Date: Thu, 18 Jul 2019 14:15:41 +0100 Subject: [PATCH] Commander: make RC override multicopter only AAs discussed in the devcall this functionality is only useful for rotary-wing (multicopter) flying since it's a big safety hazard to accidentally bring a fixed wing out of an auto mode e.g. a mission and fly away in a straight line or into an obstacle. --- src/modules/commander/Commander.cpp | 3 ++- src/modules/commander/commander_params.c | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index 9ea2231aea..de06d2705d 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -1825,6 +1825,7 @@ Commander::run() // abort auto mode or geofence reaction if sticks are moved significantly // but only if not in a low battery handling action const bool not_in_low_battery_reaction = _battery_warning < battery_status_s::BATTERY_WARNING_CRITICAL; + const bool is_rotary_wing = status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING; const bool manual_mode_before_geofence = main_state_before_rtl == commander_state_s::MAIN_STATE_MANUAL || main_state_before_rtl == commander_state_s::MAIN_STATE_ALTCTL || @@ -1837,7 +1838,7 @@ Commander::run() internal_state.main_state == commander_state_s::MAIN_STATE_AUTO_MISSION || internal_state.main_state == commander_state_s::MAIN_STATE_AUTO_LOITER; - if (rc_override != 0 && not_in_low_battery_reaction + if (rc_override != 0 && is_rotary_wing && not_in_low_battery_reaction && (in_auto_mode || (_geofence_warning_action_on && manual_mode_before_geofence))) { // transition to previous state if sticks are touched if ((_last_sp_man.timestamp != sp_man.timestamp) && diff --git a/src/modules/commander/commander_params.c b/src/modules/commander/commander_params.c index 914d572421..c4e3e47ec3 100644 --- a/src/modules/commander/commander_params.c +++ b/src/modules/commander/commander_params.c @@ -613,6 +613,11 @@ PARAM_DEFINE_FLOAT(COM_ARM_MAG, 0.15f); /** * Enable RC stick override of auto modes * + * When an auto mode is active (except a critical battery reaction) moving the RC sticks + * gives control back to the pilot in manual position mode immediately. + * + * Only has an effect on multicopters and VTOLS in multicopter mode. + * * @boolean * @group Commander */