Browse Source

Change RC override to affect offboard mode as well

-Defines COM_RC_OVERRIDE as a bitmask
-Changes RC override to affect auto modes, offboard mode, or both
sbg
Tal Zaitsev 5 years ago committed by Matthias Grob
parent
commit
d54ab5f6eb
  1. 15
      src/modules/commander/Commander.cpp
  2. 8
      src/modules/commander/Commander.hpp
  3. 11
      src/modules/commander/commander_params.c

15
src/modules/commander/Commander.cpp

@ -1743,15 +1743,20 @@ Commander::run() @@ -1743,15 +1743,20 @@ Commander::run()
// but only if not in a low battery handling action
const bool 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 in_auto_mode =
_internal_state.main_state == commander_state_s::MAIN_STATE_AUTO_LAND ||
const bool override_auto_mode =
(_param_rc_override.get() & OVERRIDE_AUTO_MODE_BIT) &&
(_internal_state.main_state == commander_state_s::MAIN_STATE_AUTO_LAND ||
_internal_state.main_state == commander_state_s::MAIN_STATE_AUTO_RTL ||
_internal_state.main_state == commander_state_s::MAIN_STATE_AUTO_MISSION ||
_internal_state.main_state == commander_state_s::MAIN_STATE_AUTO_LOITER;
_internal_state.main_state == commander_state_s::MAIN_STATE_AUTO_LOITER);
if (_param_rc_override.get() && is_rotary_wing && !low_battery_reaction
&& !_geofence_warning_action_on && in_auto_mode) {
const bool override_offboard_mode =
(_param_rc_override.get() & OVERRIDE_OFFBOARD_MODE_BIT) &&
_internal_state.main_state == commander_state_s::MAIN_STATE_OFFBOARD;
if ((override_auto_mode || override_offboard_mode) && is_rotary_wing
&& !low_battery_reaction && !_geofence_warning_action_on) {
// transition to previous state if sticks are touched
if ((_last_sp_man.timestamp != _sp_man.timestamp) &&
((fabsf(_sp_man.x - _last_sp_man.x) > _min_stick_change) ||

8
src/modules/commander/Commander.hpp

@ -223,7 +223,7 @@ private: @@ -223,7 +223,7 @@ private:
(ParamInt<px4::params::COM_FLIGHT_UUID>) _param_flight_uuid,
(ParamInt<px4::params::COM_TAKEOFF_ACT>) _param_takeoff_finished_action,
(ParamBool<px4::params::COM_RC_OVERRIDE>) _param_rc_override,
(ParamInt<px4::params::COM_RC_OVERRIDE>) _param_rc_override,
(ParamInt<px4::params::COM_RC_IN_MODE>) _param_rc_in_off,
(ParamInt<px4::params::COM_RC_ARM_HYST>) _param_rc_arm_hyst,
(ParamFloat<px4::params::COM_RC_STICK_OV>) _param_min_stick_change,
@ -258,6 +258,12 @@ private: @@ -258,6 +258,12 @@ private:
ALWAYS = 2
};
enum OverrideMode {
OVERRIDE_DISABLED = 0,
OVERRIDE_AUTO_MODE_BIT = (1 << 0),
OVERRIDE_OFFBOARD_MODE_BIT = (1 << 1)
};
/* Decouple update interval and hysteresis counters, all depends on intervals */
static constexpr uint64_t COMMANDER_MONITORING_INTERVAL{10_ms};
static constexpr float COMMANDER_MONITORING_LOOPSPERMSEC{1 / (COMMANDER_MONITORING_INTERVAL / 1000.0f)};

11
src/modules/commander/commander_params.c

@ -631,13 +631,18 @@ PARAM_DEFINE_INT32(COM_ARM_MAG_STR, 1); @@ -631,13 +631,18 @@ PARAM_DEFINE_INT32(COM_ARM_MAG_STR, 1);
/**
* Enable RC stick override of auto modes
* Enable RC stick override of auto or offboard 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.
* Moving the RC sticks gives control back to the pilot in manual position mode immediately when:
* 0: an auto mode is active (except a critical battery reaction)
* 1: offboard mode is active
*
* Only has an effect on multicopters and VTOLS in multicopter mode.
*
* @boolean
* @min 0
* @max 3
* @bit 0 Enable override of auto modes
* @bit 1 Enable override of offboard mode
* @group Commander
*/
PARAM_DEFINE_INT32(COM_RC_OVERRIDE, 1);

Loading…
Cancel
Save