diff --git a/src/modules/vtol_att_control/standard.cpp b/src/modules/vtol_att_control/standard.cpp index 2feee91ee0..a284b9474e 100644 --- a/src/modules/vtol_att_control/standard.cpp +++ b/src/modules/vtol_att_control/standard.cpp @@ -323,6 +323,10 @@ void Standard::update_transition_state() if (!_flag_idle_mc) { _flag_idle_mc = set_idle_mc(); } + + // set spoiler and flaps to the backtransition value + _flaps_setpoint_with_slewrate.update(_params->vt_flaps_bt, _dt); + _spoiler_setpoint_with_slewrate.update(_params->vt_spoilers_bt, _dt); } mc_weight = math::constrain(mc_weight, 0.0f, 1.0f); diff --git a/src/modules/vtol_att_control/tiltrotor.cpp b/src/modules/vtol_att_control/tiltrotor.cpp index ed79497788..abc708a65e 100644 --- a/src/modules/vtol_att_control/tiltrotor.cpp +++ b/src/modules/vtol_att_control/tiltrotor.cpp @@ -446,6 +446,10 @@ void Tiltrotor::update_transition_state() progress = math::constrain(progress, 0.0f, 1.0f); _mc_throttle_weight = moveLinear(0.0f, 1.0f, progress); } + + // set spoiler and flaps to the backtransition value + _flaps_setpoint_with_slewrate.update(_params->vt_flaps_bt, _dt); + _spoiler_setpoint_with_slewrate.update(_params->vt_spoilers_bt, _dt); } diff --git a/src/modules/vtol_att_control/vtol_att_control_main.cpp b/src/modules/vtol_att_control/vtol_att_control_main.cpp index a86669ede9..a7fedf0fc6 100644 --- a/src/modules/vtol_att_control/vtol_att_control_main.cpp +++ b/src/modules/vtol_att_control/vtol_att_control_main.cpp @@ -110,6 +110,9 @@ VtolAttitudeControl::VtolAttitudeControl() : _params_handles.land_pitch_min_rad = param_find("VT_LND_PTCH_MIN"); _params_handles.vt_spoiler_mc_ld = param_find("VT_SPOILER_MC_LD"); + _params_handles.vt_flaps_bt = param_find("VT_FLPAS_BT"); + _params_handles.vt_spoilers_bt = param_find("VT_SPOILERS_BT"); + /* fetch initial parameter values */ parameters_update(); @@ -374,6 +377,9 @@ VtolAttitudeControl::parameters_update() param_get(_params_handles.mpc_land_alt2, &_params.mpc_land_alt2); param_get(_params_handles.vt_spoiler_mc_ld, &_params.vt_spoiler_mc_ld); + param_get(_params_handles.vt_flaps_bt, &_params.vt_flaps_bt); + param_get(_params_handles.vt_spoilers_bt, &_params.vt_spoilers_bt); + // update the parameters of the instances of base VtolType if (_vtol_type != nullptr) { _vtol_type->parameters_update(); 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 9ad9b90356..ec30b39b32 100644 --- a/src/modules/vtol_att_control/vtol_att_control_main.h +++ b/src/modules/vtol_att_control/vtol_att_control_main.h @@ -252,6 +252,8 @@ private: param_t mpc_land_alt2; param_t sys_ctrl_alloc; param_t vt_spoiler_mc_ld; + param_t vt_flaps_bt; + param_t vt_spoilers_bt; } _params_handles{}; hrt_abstime _last_run_timestamp{0}; diff --git a/src/modules/vtol_att_control/vtol_att_control_params.c b/src/modules/vtol_att_control/vtol_att_control_params.c index c903ce070c..e825e4519b 100644 --- a/src/modules/vtol_att_control/vtol_att_control_params.c +++ b/src/modules/vtol_att_control/vtol_att_control_params.c @@ -396,3 +396,27 @@ PARAM_DEFINE_FLOAT(VT_LND_PTCH_MIN, -5.0f); * @group VTOL Attitude Control */ PARAM_DEFINE_FLOAT(VT_SPOILER_MC_LD, 0.f); + +/** + * Flaps setting during backtransition + * + * @unit norm + * @min -1 + * @max 1 + * @decimal 1 + * @increment 0.05 + * @group VTOL Attitude Control + */ +PARAM_DEFINE_FLOAT(VT_FLAPS_BT, 0.f); + +/** + * Spoiler setting during backtransition + * + * @unit norm + * @min -1 + * @max 1 + * @decimal 1 + * @increment 0.05 + * @group VTOL Attitude Control + */ +PARAM_DEFINE_FLOAT(VT_SPOILERS_BT, 0.f); diff --git a/src/modules/vtol_att_control/vtol_type.h b/src/modules/vtol_att_control/vtol_type.h index 6d30489669..7a0debdc49 100644 --- a/src/modules/vtol_att_control/vtol_type.h +++ b/src/modules/vtol_att_control/vtol_type.h @@ -86,6 +86,8 @@ struct Params { float mpc_land_alt1; float mpc_land_alt2; float vt_spoiler_mc_ld; + float vt_flaps_bt; + float vt_spoilers_bt; }; // Has to match 1:1 msg/vtol_vehicle_status.msg