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);