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 1c9c95bc4c..4f5faf3cea 100644 --- a/src/modules/mc_att_control/mc_att_control_params.c +++ b/src/modules/mc_att_control/mc_att_control_params.c @@ -241,3 +241,17 @@ PARAM_DEFINE_FLOAT(OMNI_ATT_ROLL, 0.0f); * @group Multicopter Attitude Control */ PARAM_DEFINE_FLOAT(OMNI_ATT_PITCH, 0.0f); + +/** + * Axes for thrust projection in omni-directional attitude modes + * + * Specifies the axis used for projecting inertial thrust setpoint + * to the body-fixed frame in omni-directional modes (OMNI_ATT_MODE > 0). + * + * @min 0 + * @max 1 + * @value 0 commanded attitude + * @value 1 current attitude + * @group Multicopter Attitude Control + */ +PARAM_DEFINE_INT32(OMNI_PROJ_AXES, 1); diff --git a/src/modules/mc_pos_control/PositionControl/PositionControl.cpp b/src/modules/mc_pos_control/PositionControl/PositionControl.cpp index 1acc1a732a..edd2aaee72 100644 --- a/src/modules/mc_pos_control/PositionControl/PositionControl.cpp +++ b/src/modules/mc_pos_control/PositionControl/PositionControl.cpp @@ -363,9 +363,9 @@ void PositionControl::getLocalPositionSetpoint(vehicle_local_position_setpoint_s void PositionControl::getAttitudeSetpoint(const matrix::Quatf &att, const int omni_att_mode, const float omni_dfc_max_thrust, float &omni_att_tilt_angle, float &omni_att_tilt_dir, float &omni_att_roll, - float &omni_att_pitch, vehicle_attitude_setpoint_s &attitude_setpoint) const + float &omni_att_pitch, int omni_proj_axes, vehicle_attitude_setpoint_s &attitude_setpoint) const { ControlMath::thrustToAttitude(_thr_sp, _yaw_sp, att, omni_att_mode, omni_dfc_max_thrust, omni_att_tilt_angle, - omni_att_tilt_dir, omni_att_roll, omni_att_pitch, 1, attitude_setpoint); + omni_att_tilt_dir, omni_att_roll, omni_att_pitch, omni_proj_axes, attitude_setpoint); attitude_setpoint.yaw_sp_move_rate = _yawspeed_sp; } diff --git a/src/modules/mc_pos_control/PositionControl/PositionControl.hpp b/src/modules/mc_pos_control/PositionControl/PositionControl.hpp index 8cd71aef97..267f7180a7 100644 --- a/src/modules/mc_pos_control/PositionControl/PositionControl.hpp +++ b/src/modules/mc_pos_control/PositionControl/PositionControl.hpp @@ -180,7 +180,7 @@ public: */ void getAttitudeSetpoint(const matrix::Quatf &att, const int omni_att_mode, const float omni_dfc_max_thrust, float &omni_att_tilt_angle, float &omni_att_tilt_dir, float &omni_att_roll, float &omni_att_pitch, - vehicle_attitude_setpoint_s &attitude_setpoint) const; + int omni_proj_axes, vehicle_attitude_setpoint_s &attitude_setpoint) const; private: /** diff --git a/src/modules/mc_pos_control/mc_pos_control_main.cpp b/src/modules/mc_pos_control/mc_pos_control_main.cpp index 22c78ca39a..1a348f0fdf 100644 --- a/src/modules/mc_pos_control/mc_pos_control_main.cpp +++ b/src/modules/mc_pos_control/mc_pos_control_main.cpp @@ -180,7 +180,8 @@ private: (ParamFloat) _param_omni_att_tilt_angle, (ParamFloat) _param_omni_att_tilt_dir, (ParamFloat) _param_omni_att_roll, - (ParamFloat) _param_omni_att_pitch + (ParamFloat) _param_omni_att_pitch, + (ParamInt) _param_omni_proj_axes ); control::BlockDerivative _vel_x_deriv; /**< velocity derivative in x */ @@ -667,7 +668,7 @@ MulticopterPositionControl::Run() float omni_att_roll = _param_omni_att_roll.get(); float omni_att_pitch = _param_omni_att_pitch.get(); _control.getAttitudeSetpoint(matrix::Quatf(att.q), _param_omni_att_mode.get(), _param_omni_dfc_max_thr.get(), - omni_att_tilt_angle, omni_att_tilt_dir, omni_att_roll, omni_att_pitch, attitude_setpoint); + omni_att_tilt_angle, omni_att_tilt_dir, omni_att_roll, omni_att_pitch, _param_omni_proj_axes.get(), attitude_setpoint); // Update the tilt angle and direciton parameters if we are in tilt estimation mode if (_param_omni_att_mode.get() == 5) {