Browse Source

implemented use of flaps for auto landings

sbg
tumbili 9 years ago committed by Roman
parent
commit
7fc97ed147
  1. 30
      src/modules/fw_att_control/fw_att_control_main.cpp
  2. 18
      src/modules/fw_att_control/fw_att_control_params.c
  3. 6
      src/modules/fw_pos_control_l1/fw_pos_control_l1_main.cpp

30
src/modules/fw_att_control/fw_att_control_main.cpp

@ -202,6 +202,9 @@ private: @@ -202,6 +202,9 @@ private:
float man_roll_max; /**< Max Roll in rad */
float man_pitch_max; /**< Max Pitch in rad */
float flaps_scale; /**< Scale factor for flaps */
float flaperon_scale; /**< Scale factor for flaperons */
int vtol_type; /**< VTOL type: 0 = tailsitter, 1 = tiltrotor */
} _parameters; /**< local copies of interesting parameters */
@ -246,6 +249,9 @@ private: @@ -246,6 +249,9 @@ private:
param_t man_roll_max;
param_t man_pitch_max;
param_t flaps_scale;
param_t flaperon_scale;
param_t vtol_type;
} _parameter_handles; /**< handles for interesting parameters */
@ -414,6 +420,9 @@ FixedwingAttitudeControl::FixedwingAttitudeControl() : @@ -414,6 +420,9 @@ FixedwingAttitudeControl::FixedwingAttitudeControl() :
_parameter_handles.man_roll_max = param_find("FW_MAN_R_MAX");
_parameter_handles.man_pitch_max = param_find("FW_MAN_P_MAX");
_parameter_handles.flaps_scale = param_find("FW_FLAPS_SCL");
_parameter_handles.flaperon_scale = param_find("FW_FLAPERONS_SCL");
_parameter_handles.vtol_type = param_find("VT_TYPE");
/* fetch initial parameter values */
@ -498,6 +507,9 @@ FixedwingAttitudeControl::parameters_update() @@ -498,6 +507,9 @@ FixedwingAttitudeControl::parameters_update()
_parameters.man_roll_max = math::radians(_parameters.man_roll_max);
_parameters.man_pitch_max = math::radians(_parameters.man_pitch_max);
param_get(_parameter_handles.flaps_scale, &_parameters.flaps_scale);
param_get(_parameter_handles.flaperon_scale, &_parameters.flaperon_scale);
param_get(_parameter_handles.vtol_type, &_parameters.vtol_type);
/* pitch control parameters */
@ -810,8 +822,20 @@ FixedwingAttitudeControl::task_main() @@ -810,8 +822,20 @@ FixedwingAttitudeControl::task_main()
float flaps_control = 0.0f;
/* map flaps by default to manual if valid */
if (PX4_ISFINITE(_manual.flaps)) {
flaps_control = _manual.flaps;
if (PX4_ISFINITE(_manual.flaps) && _vcontrol_mode.flag_control_manual_enabled) {
flaps_control = _manual.flaps * _parameters.flaps_scale;
} else if (_vcontrol_mode.flag_control_auto_enabled) {
flaps_control = _att_sp.apply_flaps ? 1.0f * _parameters.flaps_scale : 0.0f;
}
/* default flaperon to center */
float flaperon = 0.0f;
/* map flaperons by default to manual if valid */
if (PX4_ISFINITE(_manual.aux2) && _vcontrol_mode.flag_control_manual_enabled) {
flaperon = _manual.aux2 * _parameters.flaperon_scale;
} else if (_vcontrol_mode.flag_control_auto_enabled) {
flaperon = _att_sp.apply_flaps ? 1.0f * _parameters.flaperon_scale : 0.0f;
}
/* decide if in stabilized or full manual control */
@ -1119,7 +1143,7 @@ FixedwingAttitudeControl::task_main() @@ -1119,7 +1143,7 @@ FixedwingAttitudeControl::task_main()
_actuators.control[actuator_controls_s::INDEX_FLAPS] = flaps_control;
_actuators.control[5] = _manual.aux1;
_actuators.control[6] = _manual.aux2;
_actuators.control[actuator_controls_s::INDEX_AIRBRAKES] = flaperon;
_actuators.control[7] = _manual.aux3;
/* lazily publish the setpoint only once available */

18
src/modules/fw_att_control/fw_att_control_params.c

@ -434,3 +434,21 @@ PARAM_DEFINE_FLOAT(FW_MAN_R_MAX, 45.0f); @@ -434,3 +434,21 @@ PARAM_DEFINE_FLOAT(FW_MAN_R_MAX, 45.0f);
* @group FW Attitude Control
*/
PARAM_DEFINE_FLOAT(FW_MAN_P_MAX, 45.0f);
/**
* Scale factor for flaps
*
* @min 0.0
* @max 1.0
* @group FW Attitude Control
*/
PARAM_DEFINE_FLOAT(FW_FLAPS_SCL, 1.0f);
/**
* Scale factor for flaperons
*
* @min 0.0
* @max 1.0
* @group FW Attitude Control
*/
PARAM_DEFINE_FLOAT(FW_FLAPERON_SCL, 0.0f);

6
src/modules/fw_pos_control_l1/fw_pos_control_l1_main.cpp

@ -1076,7 +1076,7 @@ FixedwingPositionControl::control_position(const math::Vector<2> &current_positi @@ -1076,7 +1076,7 @@ FixedwingPositionControl::control_position(const math::Vector<2> &current_positi
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
float eas2tas = 1.0f; // XXX calculate actual number based on current measurements
/* filter speed and altitude for controller */
@ -1207,6 +1207,10 @@ FixedwingPositionControl::control_position(const math::Vector<2> &current_positi @@ -1207,6 +1207,10 @@ FixedwingPositionControl::control_position(const math::Vector<2> &current_positi
} else if (pos_sp_triplet.current.type == position_setpoint_s::SETPOINT_TYPE_LAND) {
// 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;
float bearing_lastwp_currwp = get_bearing_to_next_waypoint(prev_wp(0), prev_wp(1), curr_wp(0), curr_wp(1));
float bearing_airplane_currwp = get_bearing_to_next_waypoint(current_position(0), current_position(1), curr_wp(0), curr_wp(1));

Loading…
Cancel
Save