Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fw: add takeoff flaps setting #9858

Merged
merged 2 commits into from
Jul 11, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion msg/vehicle_attitude_setpoint.msg
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@ bool yaw_reset_integral # Reset yaw integral part (navigation logic change)
bool fw_control_yaw # control heading with rudder (used for auto takeoff on runway)
bool disable_mc_yaw_control # control yaw for mc (used for vtol weather-vane mode)

bool apply_flaps
uint8 apply_flaps # flap config specifier
uint8 FLAPS_OFF = 0 # no flaps
uint8 FLAPS_LAND = 1 # landing config flaps
uint8 FLAPS_TAKEOFF = 2 # take-off config flaps

float32 landing_gear

Expand Down
17 changes: 15 additions & 2 deletions src/modules/fw_att_control/FixedwingAttitudeControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ FixedwingAttitudeControl::FixedwingAttitudeControl() :
_parameter_handles.acro_max_z_rate = param_find("FW_ACRO_Z_MAX");

_parameter_handles.flaps_scale = param_find("FW_FLAPS_SCL");
_parameter_handles.flaps_takeoff_scale = param_find("FW_FLAPS_TO_SCL");
_parameter_handles.flaperon_scale = param_find("FW_FLAPERON_SCL");

_parameter_handles.rattitude_thres = param_find("FW_RATT_TH");
Expand Down Expand Up @@ -201,6 +202,7 @@ FixedwingAttitudeControl::parameters_update()
_parameters.acro_max_z_rate_rad = math::radians(_parameters.acro_max_z_rate_rad);

param_get(_parameter_handles.flaps_scale, &_parameters.flaps_scale);
param_get(_parameter_handles.flaps_takeoff_scale, &_parameters.flaps_takeoff_scale);
param_get(_parameter_handles.flaperon_scale, &_parameters.flaperon_scale);

param_get(_parameter_handles.rattitude_thres, &_parameters.rattitude_thres);
Expand Down Expand Up @@ -875,7 +877,17 @@ void FixedwingAttitudeControl::control_flaps(const float dt)

} else if (_vcontrol_mode.flag_control_auto_enabled
&& fabsf(_parameters.flaps_scale) > 0.01f) {
flap_control = _att_sp.apply_flaps ? 1.0f * _parameters.flaps_scale : 0.0f;
switch (_att_sp.apply_flaps) {
case vehicle_attitude_setpoint_s::FLAPS_OFF : flap_control = 0.0f; // no flaps
break;

case vehicle_attitude_setpoint_s::FLAPS_LAND : flap_control = 1.0f * _parameters.flaps_scale; // landing flaps
break;

case vehicle_attitude_setpoint_s::FLAPS_TAKEOFF : flap_control = 1.0f * _parameters.flaps_scale *
_parameters.flaps_takeoff_scale; // take-off flaps
break;
}
}

// move the actual control value continuous with time, full flap travel in 1sec
Expand All @@ -896,7 +908,8 @@ void FixedwingAttitudeControl::control_flaps(const float dt)

} else if (_vcontrol_mode.flag_control_auto_enabled
&& fabsf(_parameters.flaperon_scale) > 0.01f) {
flaperon_control = _att_sp.apply_flaps ? 1.0f * _parameters.flaperon_scale : 0.0f;
flaperon_control = (_att_sp.apply_flaps == vehicle_attitude_setpoint_s::FLAPS_LAND) ? 1.0f *
_parameters.flaperon_scale : 0.0f;
}

// move the actual control value continuous with time, full flap travel in 1sec
Expand Down
2 changes: 2 additions & 0 deletions src/modules/fw_att_control/FixedwingAttitudeControl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ class FixedwingAttitudeControl final : public ModuleBase<FixedwingAttitudeContro
float acro_max_z_rate_rad;

float flaps_scale; /**< Scale factor for flaps */
float flaps_takeoff_scale; /**< Scale factor for flaps on take-off */
float flaperon_scale; /**< Scale factor for flaperons */

float rattitude_thres;
Expand Down Expand Up @@ -264,6 +265,7 @@ class FixedwingAttitudeControl final : public ModuleBase<FixedwingAttitudeContro
param_t acro_max_z_rate;

param_t flaps_scale;
param_t flaps_takeoff_scale;
param_t flaperon_scale;

param_t rattitude_thres;
Expand Down
14 changes: 14 additions & 0 deletions src/modules/fw_att_control/fw_att_control_params.c
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,20 @@ PARAM_DEFINE_FLOAT(FW_MAN_P_MAX, 45.0f);
*/
PARAM_DEFINE_FLOAT(FW_FLAPS_SCL, 1.0f);

/**
* Flaps setting during take-off
*
* Sets a fraction of full flaps (FW_FLAPS_SCL) during take-off
*
* @unit norm
* @min 0.0
* @max 1.0
* @decimal 2
* @increment 0.01
* @group FW Attitude Control
*/
PARAM_DEFINE_FLOAT(FW_FLAPS_TO_SCL, 0.0f);

/**
* Scale factor for flaperons
*
Expand Down
8 changes: 6 additions & 2 deletions src/modules/fw_pos_control_l1/FixedwingPositionControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -704,7 +704,7 @@ FixedwingPositionControl::control_position(const Vector2f &curr_pos, const Vecto
bool setpoint = true;

_att_sp.fw_control_yaw = false; // by default we don't want yaw to be contoller directly with rudder
_att_sp.apply_flaps = false; // by default we don't use flaps
_att_sp.apply_flaps = vehicle_attitude_setpoint_s::FLAPS_OFF; // by default we don't use flaps

calculate_gndspeed_undershoot(curr_pos, ground_speed, pos_sp_prev, pos_sp_curr);

Expand Down Expand Up @@ -1137,6 +1137,10 @@ FixedwingPositionControl::control_takeoff(const Vector2f &curr_pos, const Vector
prev_wp(1) = (float)pos_sp_curr.lon;
}

// apply flaps for takeoff according to the corresponding scale factor set
// via FW_FLAPS_TO_SCL
_att_sp.apply_flaps = vehicle_attitude_setpoint_s::FLAPS_TAKEOFF;

// continuously reset launch detection and runway takeoff until armed
if (!_control_mode.flag_armed) {
_launchDetector.reset();
Expand Down Expand Up @@ -1305,7 +1309,7 @@ FixedwingPositionControl::control_landing(const Vector2f &curr_pos, const Vector

// apply full flaps for landings. this flag will also trigger the use of flaperons
// if they have been enabled using the corresponding parameter
_att_sp.apply_flaps = true;
_att_sp.apply_flaps = vehicle_attitude_setpoint_s::FLAPS_LAND;

// save time at which we started landing and reset abort_landing
if (_time_started_landing == 0) {
Expand Down