From d3ddbe8db54490d9042565dd9e8a947ad2b886ca Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 29 Jan 2021 12:03:26 +0100 Subject: [PATCH] Allow quadchute from external command --- src/modules/vtol_att_control/vtol_att_control_main.h | 3 ++- src/modules/vtol_att_control/vtol_type.cpp | 11 +++++++++++ src/modules/vtol_att_control/vtol_type.h | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/modules/vtol_att_control/vtol_att_control_main.h b/src/modules/vtol_att_control/vtol_att_control_main.h index 34cd547b3e..d0dc23b427 100644 --- a/src/modules/vtol_att_control/vtol_att_control_main.h +++ b/src/modules/vtol_att_control/vtol_att_control_main.h @@ -108,12 +108,13 @@ public: bool is_fixed_wing_requested(); void quadchute(const char *reason); + int get_transition_command() {return _transition_command;} struct actuator_controls_s *get_actuators_fw_in() {return &_actuators_fw_in;} struct actuator_controls_s *get_actuators_mc_in() {return &_actuators_mc_in;} struct actuator_controls_s *get_actuators_out0() {return &_actuators_out_0;} struct actuator_controls_s *get_actuators_out1() {return &_actuators_out_1;} - struct airspeed_validated_s *get_airspeed() {return &_airspeed_validated;} + struct airspeed_validated_s *get_airspeed() {return &_airspeed_validated;} struct position_setpoint_triplet_s *get_pos_sp_triplet() {return &_pos_sp_triplet;} struct tecs_status_s *get_tecs_status() {return &_tecs_status;} struct vehicle_attitude_s *get_att() {return &_v_att;} diff --git a/src/modules/vtol_att_control/vtol_type.cpp b/src/modules/vtol_att_control/vtol_type.cpp index 3b204cd823..8a46ef9fb9 100644 --- a/src/modules/vtol_att_control/vtol_type.cpp +++ b/src/modules/vtol_att_control/vtol_type.cpp @@ -235,6 +235,17 @@ bool VtolType::can_transition_on_ground() void VtolType::check_quadchute_condition() { + //TODO: adapt https://mavlink.io/en/messages/common.html#MAV_VTOL_STATE to contain MAV_VTOL_STATE_QC + //instead of hardcoded 5. + if (_attc->get_transition_command() == 5 && !_quadchute_command_treated) { + _attc->quadchute("QuadChute by command"); + _quadchute_command_treated = true; + + } else { + _quadchute_command_treated = false; + } + + if (!_tecs_running) { // reset the filtered height rate and heigh rate setpoint if TECS is not running diff --git a/src/modules/vtol_att_control/vtol_type.h b/src/modules/vtol_att_control/vtol_type.h index ea9a3dd9f3..7334611298 100644 --- a/src/modules/vtol_att_control/vtol_type.h +++ b/src/modules/vtol_att_control/vtol_type.h @@ -247,6 +247,8 @@ protected: float _accel_to_pitch_integ = 0; + bool _quadchute_command_treated = 0; + /**