Skip to content

Commit

Permalink
mc_pos_control: combine separate pitch and roll maximum tilt angles i…
Browse files Browse the repository at this point in the history
…nto one

because there is no sense to have different angle scalings into different directions
it would lead to unintuitive piloting experience
acceleration is directly coupled to the tilt angle regardless of possible assymetric multicopter vehicles
  • Loading branch information
MaEtUgR committed Apr 19, 2017
1 parent 16f52ca commit 8e93687
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 26 deletions.
20 changes: 7 additions & 13 deletions src/modules/mc_pos_control/mc_pos_control_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,8 +176,7 @@ class MulticopterPositionControl : public control::SuperBlock
param_t land_speed;
param_t tko_speed;
param_t tilt_max_land;
param_t man_roll_max;
param_t man_pitch_max;
param_t man_tilt_max;
param_t man_yaw_max;
param_t global_yaw_max;
param_t mc_att_yaw_p;
Expand All @@ -197,8 +196,7 @@ class MulticopterPositionControl : public control::SuperBlock
float land_speed;
float tko_speed;
float tilt_max_land;
float man_roll_max;
float man_pitch_max;
float man_tilt_max;
float man_yaw_max;
float global_yaw_max;
float mc_att_yaw_p;
Expand Down Expand Up @@ -495,9 +493,7 @@ MulticopterPositionControl::MulticopterPositionControl() :
_params_handles.land_speed = param_find("MPC_LAND_SPEED");
_params_handles.tko_speed = param_find("MPC_TKO_SPEED");
_params_handles.tilt_max_land = param_find("MPC_TILTMAX_LND");

_params_handles.man_roll_max = param_find("MPC_MAN_R_MAX");
_params_handles.man_pitch_max = param_find("MPC_MAN_P_MAX");
_params_handles.man_tilt_max = param_find("MPC_MAN_TILT_MAX");
_params_handles.man_yaw_max = param_find("MPC_MAN_Y_MAX");

_params_handles.global_yaw_max = param_find("MC_YAWRATE_MAX");
Expand Down Expand Up @@ -629,12 +625,10 @@ MulticopterPositionControl::parameters_update(bool force)

/* mc attitude control parameters*/
/* manual control scale */
param_get(_params_handles.man_roll_max, &_params.man_roll_max);
param_get(_params_handles.man_pitch_max, &_params.man_pitch_max);
param_get(_params_handles.man_tilt_max, &_params.man_tilt_max);
param_get(_params_handles.man_yaw_max, &_params.man_yaw_max);
param_get(_params_handles.global_yaw_max, &_params.global_yaw_max);
_params.man_roll_max = math::radians(_params.man_roll_max);
_params.man_pitch_max = math::radians(_params.man_pitch_max);
_params.man_tilt_max = math::radians(_params.man_tilt_max);
_params.man_yaw_max = math::radians(_params.man_yaw_max);
_params.global_yaw_max = math::radians(_params.global_yaw_max);

Expand Down Expand Up @@ -2182,8 +2176,8 @@ MulticopterPositionControl::generate_attitude_setpoint(float dt)

/* control roll and pitch directly if no aiding velocity controller is active */
if (!_control_mode.flag_control_velocity_enabled) {
_att_sp.roll_body = _manual.y * _params.man_roll_max;
_att_sp.pitch_body = -_manual.x * _params.man_pitch_max;
_att_sp.roll_body = _manual.y * _params.man_tilt_max;
_att_sp.pitch_body = -_manual.x * _params.man_tilt_max;

/* only if optimal recovery is not used, modify roll/pitch */
if (_params.opt_recover <= 0) {
Expand Down
15 changes: 2 additions & 13 deletions src/modules/mc_pos_control/mc_pos_control_params.c
Original file line number Diff line number Diff line change
Expand Up @@ -359,26 +359,15 @@ PARAM_DEFINE_FLOAT(MPC_LAND_SPEED, 0.5f);
PARAM_DEFINE_FLOAT(MPC_TKO_SPEED, 1.5f);

/**
* Max manual roll
* Maximal tilt angle in manual or altitude mode
*
* @unit deg
* @min 0.0
* @max 90.0
* @decimal 1
* @group Multicopter Position Control
*/
PARAM_DEFINE_FLOAT(MPC_MAN_R_MAX, 35.0f);

/**
* Max manual pitch
*
* @unit deg
* @min 0.0
* @max 90.0
* @decimal 1
* @group Multicopter Position Control
*/
PARAM_DEFINE_FLOAT(MPC_MAN_P_MAX, 35.0f);
PARAM_DEFINE_FLOAT(MPC_MAN_TILT_MAX, 35.0f);

/**
* Max manual yaw rate
Expand Down

0 comments on commit 8e93687

Please sign in to comment.