From f68ae3984040a179edf8403016969eccf6c42245 Mon Sep 17 00:00:00 2001 From: Matthias Grob Date: Wed, 22 Dec 2021 13:02:29 +0100 Subject: [PATCH] Commander: avoid RC actions during calibration --- msg/vehicle_status_flags.msg | 2 +- src/modules/commander/Commander.cpp | 21 ++++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/msg/vehicle_status_flags.msg b/msg/vehicle_status_flags.msg index 79d2548d74..de0f22b148 100644 --- a/msg/vehicle_status_flags.msg +++ b/msg/vehicle_status_flags.msg @@ -30,7 +30,7 @@ bool circuit_breaker_vtol_fw_arming_check # set to true if for VTOLs arming in bool offboard_control_signal_lost bool rc_signal_found_once -bool rc_input_blocked # set if RC input should be ignored temporarily +bool rc_calibration_in_progress bool rc_calibration_valid # set if RC calibration is valid bool vtol_transition_failure # Set to true if vtol transition failed bool usb_connected # status of the USB power supply diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index a176d23c4b..a8e15868bd 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -572,7 +572,6 @@ transition_result_t Commander::arm(arm_disarm_reason_t calling_reason, bool run_ "Arming denied: throttle above center"); tune_negative(true); return TRANSITION_DENIED; - } if (!_vehicle_control_mode.flag_control_climb_rate_enabled && @@ -1257,7 +1256,7 @@ Commander::handle_command(const vehicle_command_s &cmd) /* RC calibration */ answer_command(cmd, vehicle_command_s::VEHICLE_CMD_RESULT_ACCEPTED); /* disable RC control input completely */ - _status_flags.rc_input_blocked = true; + _status_flags.rc_calibration_in_progress = true; mavlink_log_info(&_mavlink_log_pub, "Calibration: Disabling RC input\t"); events::send(events::ID("commander_calib_rc_off"), events::Log::Info, "Calibration: Disabling RC input"); @@ -1307,9 +1306,9 @@ Commander::handle_command(const vehicle_command_s &cmd) } else if ((int)(cmd.param4) == 0) { /* RC calibration ended - have we been in one worth confirming? */ - if (_status_flags.rc_input_blocked) { + if (_status_flags.rc_calibration_in_progress) { /* enable RC control input */ - _status_flags.rc_input_blocked = false; + _status_flags.rc_calibration_in_progress = false; mavlink_log_info(&_mavlink_log_pub, "Calibration: Restoring RC input\t"); events::send(events::ID("commander_calib_rc_on"), events::Log::Info, "Calibration: Restoring RC input"); @@ -1552,6 +1551,15 @@ void Commander::executeActionRequest(const action_request_s &action_request) { arm_disarm_reason_t arm_disarm_reason{}; + // Silently ignore RC actions during RC calibration + if (_status_flags.rc_calibration_in_progress + && (action_request.source == action_request_s::SOURCE_RC_STICK_GESTURE + || action_request.source == action_request_s::SOURCE_RC_SWITCH + || action_request.source == action_request_s::SOURCE_RC_BUTTON + || action_request.source == action_request_s::SOURCE_RC_MODE_SLOT)) { + return; + } + switch (action_request.source) { case action_request_s::SOURCE_RC_STICK_GESTURE: arm_disarm_reason = arm_disarm_reason_t::rc_stick; break; @@ -2448,8 +2456,7 @@ Commander::run() _last_valid_manual_control_setpoint = manual_control_setpoint.timestamp; } else { - if (_status_flags.rc_signal_found_once && !_status.rc_signal_lost - && !_status_flags.condition_calibration_enabled && !_status_flags.rc_input_blocked) { + if (_status_flags.rc_signal_found_once && !_status.rc_signal_lost) { mavlink_log_critical(&_mavlink_log_pub, "Manual control lost\t"); events::send(events::ID("commander_rc_lost"), {events::Log::Critical, events::LogInternal::Info}, "Manual control lost"); @@ -2472,7 +2479,7 @@ Commander::run() if ((_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING) && !in_low_battery_failsafe && !_geofence_warning_action_on && _armed.armed - && !_status_flags.rc_input_blocked + && !_status_flags.rc_calibration_in_progress && manual_control_setpoint.valid && manual_control_setpoint.sticks_moving && override_enabled) {