From e34993969b08d65fd73d1f71335d4e4f776c2e29 Mon Sep 17 00:00:00 2001 From: Silvan Fuhrer Date: Mon, 26 Jun 2023 09:57:25 +0200 Subject: [PATCH] tiltrotor: expose tilting duration of backtransition in param Instead of hard-coding the tilting duration (from FW to MC tilt), expose it as a parameter (VT_BT_TILT_DUR). The default is the same as the hard-coded value previously (1s). Slower tilting mechanisms need a higher value here, while for smaller ones a too high value results in unnecessary delays till the motors are in hover configuration. Signed-off-by: Silvan Fuhrer --- src/modules/vtol_att_control/tiltrotor.cpp | 12 ++++++------ src/modules/vtol_att_control/tiltrotor.h | 3 ++- src/modules/vtol_att_control/tiltrotor_params.c | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/modules/vtol_att_control/tiltrotor.cpp b/src/modules/vtol_att_control/tiltrotor.cpp index 3c91a20975..2215b96de2 100644 --- a/src/modules/vtol_att_control/tiltrotor.cpp +++ b/src/modules/vtol_att_control/tiltrotor.cpp @@ -45,10 +45,9 @@ using namespace matrix; using namespace time_literals; -#define FRONTTRANS_THR_MIN 0.25f -#define BACKTRANS_THROTTLE_DOWNRAMP_DUR_S 0.5f; -#define BACKTRANS_THROTTLE_UPRAMP_DUR_S 0.5f; -#define BACKTRANS_MOTORS_UPTILT_DUR_S 1.0f; +#define FRONTTRANS_THR_MIN 0.25f +#define BACKTRANS_THROTTLE_DOWNRAMP_DUR_S 0.5f +#define BACKTRANS_THROTTLE_UPRAMP_DUR_S 0.5f Tiltrotor::Tiltrotor(VtolAttitudeControl *attc) : VtolType(attc) @@ -321,7 +320,8 @@ void Tiltrotor::update_transition_state() // tilt rotors back once motors are idle if (_time_since_trans_start > BACKTRANS_THROTTLE_DOWNRAMP_DUR_S) { - float progress = (_time_since_trans_start - BACKTRANS_THROTTLE_DOWNRAMP_DUR_S) / BACKTRANS_MOTORS_UPTILT_DUR_S; + float progress = (_time_since_trans_start - BACKTRANS_THROTTLE_DOWNRAMP_DUR_S) / math::max(_param_vt_bt_tilt_dur.get(), + 0.1f); progress = math::constrain(progress, 0.0f, 1.0f); _tilt_control = moveLinear(_param_vt_tilt_fw.get(), _param_vt_tilt_mc.get(), progress); } @@ -458,7 +458,7 @@ void Tiltrotor::blendThrottleDuringBacktransition(float scale, float target_thro float Tiltrotor::timeUntilMotorsAreUp() { - return BACKTRANS_THROTTLE_DOWNRAMP_DUR_S + BACKTRANS_MOTORS_UPTILT_DUR_S; + return BACKTRANS_THROTTLE_DOWNRAMP_DUR_S + _param_vt_bt_tilt_dur.get(); } float Tiltrotor::moveLinear(float start, float stop, float progress) diff --git a/src/modules/vtol_att_control/tiltrotor.h b/src/modules/vtol_att_control/tiltrotor.h index 369e335684..b5baa864da 100644 --- a/src/modules/vtol_att_control/tiltrotor.h +++ b/src/modules/vtol_att_control/tiltrotor.h @@ -99,7 +99,8 @@ private: (ParamFloat) _param_vt_tilt_trans, (ParamFloat) _param_vt_tilt_fw, (ParamFloat) _param_vt_tilt_spinup, - (ParamFloat) _param_vt_trans_p2_dur + (ParamFloat) _param_vt_trans_p2_dur, + (ParamFloat) _param_vt_bt_tilt_dur ) }; diff --git a/src/modules/vtol_att_control/tiltrotor_params.c b/src/modules/vtol_att_control/tiltrotor_params.c index 796d214a6b..9d8d76ea89 100644 --- a/src/modules/vtol_att_control/tiltrotor_params.c +++ b/src/modules/vtol_att_control/tiltrotor_params.c @@ -98,3 +98,17 @@ PARAM_DEFINE_FLOAT(VT_TILT_SPINUP, 0.0f); * @group VTOL Attitude Control */ PARAM_DEFINE_FLOAT(VT_TRANS_P2_DUR, 0.5f); + +/** + * Duration motor tilt up in backtransition + * + * Time in seconds it takes to tilt form VT_TILT_FW to VT_TILT_MC. + * + * @unit s + * @min 0.1 + * @max 10 + * @increment 0.1 + * @decimal 1 + * @group VTOL Attitude Control + */ +PARAM_DEFINE_FLOAT(VT_BT_TILT_DUR, 1.f);