diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/10042_xvert b/ROMFS/px4fmu_common/init.d-posix/airframes/10042_xvert index 331668ab53..4368c0238f 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/10042_xvert +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/10042_xvert @@ -11,7 +11,7 @@ param set-default VT_MC_CS_LOCK 0 param set-default VT_TYPE 0 param set-default VT_FW_DIFTHR_EN 1 -param set-default VT_FW_DIFTHR_SC 0.3 +param set-default VT_FW_DIFTHR_S_Y 0.3 param set-default MPC_MAN_Y_MAX 60 param set-default MC_PITCH_P 5 diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/1041_tailsitter b/ROMFS/px4fmu_common/init.d-posix/airframes/1041_tailsitter index ac62a455d4..5310bd2d2a 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/1041_tailsitter +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/1041_tailsitter @@ -72,7 +72,7 @@ param set-default MPC_XY_VEL_D_ACC 0.1 param set-default NAV_ACC_RAD 5 param set-default VT_FW_DIFTHR_EN 1 -param set-default VT_FW_DIFTHR_SC 0.5 +param set-default VT_FW_DIFTHR_S_Y 0.5 param set-default VT_F_TRANS_DUR 1.5 param set-default VT_F_TRANS_THR 0.7 param set-default VT_TYPE 0 diff --git a/ROMFS/px4fmu_common/init.d/airframes/1102_tailsitter_duo_sih.hil b/ROMFS/px4fmu_common/init.d/airframes/1102_tailsitter_duo_sih.hil index 730d43878e..b66992ab18 100644 --- a/ROMFS/px4fmu_common/init.d/airframes/1102_tailsitter_duo_sih.hil +++ b/ROMFS/px4fmu_common/init.d/airframes/1102_tailsitter_duo_sih.hil @@ -22,7 +22,7 @@ param set-default VT_MC_CS_LOCK 0 param set-default VT_MOT_COUNT 2 param set-default VT_TYPE 0 param set-default VT_FW_DIFTHR_EN 1 -param set-default VT_FW_DIFTHR_SC 0.3 +param set-default VT_FW_DIFTHR_S_Y 0.3 param set-default MPC_MAN_Y_MAX 60 param set-default MC_PITCH_P 5 diff --git a/ROMFS/px4fmu_common/init.d/airframes/13012_convergence b/ROMFS/px4fmu_common/init.d/airframes/13012_convergence index dd0db60c2d..0f89165974 100644 --- a/ROMFS/px4fmu_common/init.d/airframes/13012_convergence +++ b/ROMFS/px4fmu_common/init.d/airframes/13012_convergence @@ -57,7 +57,7 @@ param set-default VT_B_TRANS_DUR 1 param set-default VT_F_TRANS_DUR 1.2 param set-default VT_F_TR_OL_TM 4 param set-default VT_FW_DIFTHR_EN 1 -param set-default VT_FW_DIFTHR_SC 0.17 +param set-default VT_FW_DIFTHR_S_Y 0.17 param set-default VT_FW_MOT_OFFID 3 param set-default VT_IDLE_PWM_MC 1200 param set-default VT_MOT_ID 123 diff --git a/src/lib/parameters/param_translation.cpp b/src/lib/parameters/param_translation.cpp index 9672f1e36c..059ed8e1da 100644 --- a/src/lib/parameters/param_translation.cpp +++ b/src/lib/parameters/param_translation.cpp @@ -264,5 +264,14 @@ bool param_modify_on_import(bson_node_t node) } } + // 2022-07-18: translate VT_FW_DIFTHR_SC->VT_FW_DIFTHR_S_Y + { + if (strcmp("VT_FW_DIFTHR_SC", node->name) == 0) { + strcpy(node->name, "VT_FW_DIFTHR_S_Y"); + PX4_INFO("copying %s -> %s", "VT_FW_DIFTHR_SC", "VT_FW_DIFTHR_S_Y"); + return true; + } + } + return false; } diff --git a/src/modules/vtol_att_control/tailsitter.cpp b/src/modules/vtol_att_control/tailsitter.cpp index 5946e0f254..71394905ef 100644 --- a/src/modules/vtol_att_control/tailsitter.cpp +++ b/src/modules/vtol_att_control/tailsitter.cpp @@ -336,9 +336,9 @@ void Tailsitter::fill_actuator_outputs() _thrust_setpoint_0->xyz[2] = -fw_in[actuator_controls_s::INDEX_THROTTLE]; /* allow differential thrust if enabled */ - if (_param_vt_fw_difthr_en.get()) { - mc_out[actuator_controls_s::INDEX_ROLL] = fw_in[actuator_controls_s::INDEX_YAW] * _param_vt_fw_difthr_sc.get() ; - _torque_setpoint_0->xyz[0] = fw_in[actuator_controls_s::INDEX_YAW] * _param_vt_fw_difthr_sc.get() ; + if (_param_vt_fw_difthr_en.get() & static_cast(VtFwDifthrEnBits::YAW_BIT)) { + mc_out[actuator_controls_s::INDEX_ROLL] = fw_in[actuator_controls_s::INDEX_YAW] * _param_vt_fw_difthr_s_y.get() ; + _torque_setpoint_0->xyz[0] = fw_in[actuator_controls_s::INDEX_YAW] * _param_vt_fw_difthr_s_y.get() ; } } else { diff --git a/src/modules/vtol_att_control/tiltrotor.cpp b/src/modules/vtol_att_control/tiltrotor.cpp index 4cf85c83f1..cd1549cef8 100644 --- a/src/modules/vtol_att_control/tiltrotor.cpp +++ b/src/modules/vtol_att_control/tiltrotor.cpp @@ -495,9 +495,9 @@ void Tiltrotor::fill_actuator_outputs() _thrust_setpoint_0->xyz[2] = fw_in[actuator_controls_s::INDEX_THROTTLE]; /* allow differential thrust if enabled */ - if (_param_vt_fw_difthr_en.get()) { - mc_out[actuator_controls_s::INDEX_ROLL] = fw_in[actuator_controls_s::INDEX_YAW] * _param_vt_fw_difthr_sc.get() ; - _torque_setpoint_0->xyz[2] = fw_in[actuator_controls_s::INDEX_YAW] * _param_vt_fw_difthr_sc.get() ; + if (_param_vt_fw_difthr_en.get() & static_cast(VtFwDifthrEnBits::YAW_BIT)) { + mc_out[actuator_controls_s::INDEX_ROLL] = fw_in[actuator_controls_s::INDEX_YAW] * _param_vt_fw_difthr_s_y.get() ; + _torque_setpoint_0->xyz[2] = fw_in[actuator_controls_s::INDEX_YAW] * _param_vt_fw_difthr_s_y.get() ; } } else { 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 be9eed8c62..eb7f0d2305 100644 --- a/src/modules/vtol_att_control/vtol_att_control_params.c +++ b/src/modules/vtol_att_control/vtol_att_control_params.c @@ -286,29 +286,65 @@ PARAM_DEFINE_INT32(VT_FW_MOT_OFFID, 0); PARAM_DEFINE_INT32(VT_MOT_ID, 0); /** - * Differential thrust in forwards flight. + * Differential thrust in forward flight * - * Set to 1 to enable differential thrust in fixed-wing flight. + * Enable differential thrust seperately for roll, pitch, yaw in forward (fixed-wing) mode. + * The effectiveness of differential thrust around the corresponding axis can be + * tuned by setting VT_FW_DIFTHR_S_R / VT_FW_DIFTHR_S_P / VT_FW_DIFTHR_S_Y. * * @min 0 - * @max 1 - * @decimal 0 + * @max 7 + * @bit 0 Yaw + * @bit 1 Roll + * @bit 2 Pitch * @group VTOL Attitude Control */ PARAM_DEFINE_INT32(VT_FW_DIFTHR_EN, 0); /** - * Differential thrust scaling factor + * Roll differential thrust factor in forward flight * - * This factor specifies how the yaw input gets mapped to differential thrust in forwards flight. + * Maps the roll control output in forward flight to the actuator differential thrust output. + * + * Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN. * * @min 0.0 - * @max 1.0 + * @max 2.0 * @decimal 2 * @increment 0.1 * @group VTOL Attitude Control */ -PARAM_DEFINE_FLOAT(VT_FW_DIFTHR_SC, 0.1f); +PARAM_DEFINE_FLOAT(VT_FW_DIFTHR_S_R, 1.f); + +/** + * Pitch differential thrust factor in forward flight + * + * Maps the pitch control output in forward flight to the actuator differential thrust output. + * + * Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN. + * + * @min 0.0 + * @max 2.0 + * @decimal 2 + * @increment 0.1 + * @group VTOL Attitude Control + */ +PARAM_DEFINE_FLOAT(VT_FW_DIFTHR_S_P, 1.f); + +/** + * Yaw differential thrust factor in forward flight + * + * Maps the yaw control output in forward flight to the actuator differential thrust output. + * + * Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN. + * + * @min 0.0 + * @max 2.0 + * @decimal 2 + * @increment 0.1 + * @group VTOL Attitude Control + */ +PARAM_DEFINE_FLOAT(VT_FW_DIFTHR_S_Y, 0.1f); /** * Backtransition deceleration setpoint to pitch feedforward gain. diff --git a/src/modules/vtol_att_control/vtol_type.h b/src/modules/vtol_att_control/vtol_type.h index 8f9615346e..d5ce1ec0a7 100644 --- a/src/modules/vtol_att_control/vtol_type.h +++ b/src/modules/vtol_att_control/vtol_type.h @@ -97,6 +97,13 @@ enum class pwm_limit_type { TYPE_MAXIMUM }; +// enum for bitmask of VT_FW_DIFTHR_EN parameter options +enum class VtFwDifthrEnBits : int32_t { + YAW_BIT = (1 << 0), + ROLL_BIT = (1 << 1), + PITCH_BIT = (1 << 2), +}; + class VtolAttitudeControl; class VtolType: public ModuleParams @@ -291,8 +298,8 @@ protected: (ParamBool) _param_fw_arsp_mode, (ParamFloat) _param_vt_trans_timeout, (ParamFloat) _param_mpc_xy_cruise, - (ParamBool) _param_vt_fw_difthr_en, - (ParamFloat) _param_vt_fw_difthr_sc, + (ParamInt) _param_vt_fw_difthr_en, + (ParamFloat) _param_vt_fw_difthr_s_y, (ParamFloat) _param_vt_b_dec_ff, (ParamFloat) _param_vt_b_dec_i, (ParamFloat) _param_vt_b_dec_mss,