diff --git a/src/modules/mc_att_control/mc_att_control.hpp b/src/modules/mc_att_control/mc_att_control.hpp index eb56a4a299..aa73ace4b4 100644 --- a/src/modules/mc_att_control/mc_att_control.hpp +++ b/src/modules/mc_att_control/mc_att_control.hpp @@ -159,7 +159,9 @@ private: (ParamInt) _param_mc_airmode, - (ParamInt) _param_omni_att_mode + /* Omnidirectional vehicle params */ + (ParamInt) _param_omni_att_mode, + (ParamFloat) _param_omni_max_hor_thr ) bool _is_tailsitter{false}; diff --git a/src/modules/mc_att_control/mc_att_control_main.cpp b/src/modules/mc_att_control/mc_att_control_main.cpp index 92dedbf0a6..8bf343b44a 100644 --- a/src/modules/mc_att_control/mc_att_control_main.cpp +++ b/src/modules/mc_att_control/mc_att_control_main.cpp @@ -241,8 +241,7 @@ MulticopterAttitudeControl::generate_attitude_setpoint(float dt, bool reset_yaw_ h_thrust /= h_thrust_norm; } - const float max_xy_thrust_ratio = 0.3; - h_thrust *= max_xy_thrust_ratio; + h_thrust *= _param_omni_max_hor_thr.get(); // Check if the total thrust has exceeded the maximum Vector3f total_thrust = Vector3f(h_thrust(0), h_thrust(1), z_thrust); diff --git a/src/modules/mc_att_control/mc_att_control_params.c b/src/modules/mc_att_control/mc_att_control_params.c index ce18646183..8347a2aca2 100644 --- a/src/modules/mc_att_control/mc_att_control_params.c +++ b/src/modules/mc_att_control/mc_att_control_params.c @@ -144,3 +144,18 @@ PARAM_DEFINE_FLOAT(MC_YAWRATE_MAX, 200.0f); * @group Multicopter Attitude Control */ PARAM_DEFINE_FLOAT(MC_RATT_TH, 0.8f); + +/** + * Maximum horizontal thrust ratio for omnidirectional vehicles + * + * Specifies the maximum horizontal thrust compared to the maximum possible + * thrust generated by the vehicle for an omnidirectional multirotor. The + * value of this parameter does not affect the behavior if the attitude mode + * is not set to one of omni-directional modes. + * + * @min 0 + * @max 1 + * @decimal 2 + * @group Multicopter Attitude Control + */ +PARAM_DEFINE_FLOAT(OMNI_MAX_HOR_THR, 0.3f);