Browse Source

launch pitch limit: add mtecs interface

sbg
Thomas Gubler 11 years ago
parent
commit
df181455eb
  1. 20
      src/modules/fw_pos_control_l1/fw_pos_control_l1_main.cpp

20
src/modules/fw_pos_control_l1/fw_pos_control_l1_main.cpp

@ -381,7 +381,8 @@ private:
bool climbout_mode, float climbout_pitch_min_rad, bool climbout_mode, float climbout_pitch_min_rad,
float altitude, float altitude,
const math::Vector<3> &ground_speed, const math::Vector<3> &ground_speed,
tecs_mode mode = TECS_MODE_NORMAL); tecs_mode mode = TECS_MODE_NORMAL,
bool pitch_max_special = false);
}; };
@ -1117,8 +1118,8 @@ FixedwingPositionControl::control_position(const math::Vector<2> &current_positi
/* select maximum pitch: the launchdetector may impose another limit for the pitch /* select maximum pitch: the launchdetector may impose another limit for the pitch
* depending on the state of the launch */ * depending on the state of the launch */
float takeoff_pitch_max_rad = math::radians( float takeoff_pitch_max_deg = launchDetector.getPitchMax(_parameters.pitch_limit_max);
launchDetector.getPitchMax(_parameters.pitch_limit_max)); float takeoff_pitch_max_rad = math::radians(takeoff_pitch_max_deg);
/* apply minimum pitch and limit roll if target altitude is not within climbout_diff /* apply minimum pitch and limit roll if target altitude is not within climbout_diff
* meters */ * meters */
@ -1137,7 +1138,8 @@ FixedwingPositionControl::control_position(const math::Vector<2> &current_positi
math::radians(10.0f)), math::radians(10.0f)),
_global_pos.alt, _global_pos.alt,
ground_speed, ground_speed,
TECS_MODE_TAKEOFF); TECS_MODE_TAKEOFF,
takeoff_pitch_max_deg != _parameters.pitch_limit_max);
/* limit roll motion to ensure enough lift */ /* limit roll motion to ensure enough lift */
_att_sp.roll_body = math::constrain(_att_sp.roll_body, math::radians(-15.0f), _att_sp.roll_body = math::constrain(_att_sp.roll_body, math::radians(-15.0f),
@ -1391,7 +1393,7 @@ void FixedwingPositionControl::tecs_update_pitch_throttle(float alt_sp, float v_
bool climbout_mode, float climbout_pitch_min_rad, bool climbout_mode, float climbout_pitch_min_rad,
float altitude, float altitude,
const math::Vector<3> &ground_speed, const math::Vector<3> &ground_speed,
tecs_mode mode) tecs_mode mode, bool pitch_max_special)
{ {
if (_mTecs.getEnabled()) { if (_mTecs.getEnabled()) {
/* Using mtecs library: prepare arguments for mtecs call */ /* Using mtecs library: prepare arguments for mtecs call */
@ -1406,6 +1408,14 @@ void FixedwingPositionControl::tecs_update_pitch_throttle(float alt_sp, float v_
} else { } else {
limitOverride.disablePitchMinOverride(); limitOverride.disablePitchMinOverride();
} }
if (pitch_max_special) {
/* Use the maximum pitch from the argument */
limitOverride.enablePitchMaxOverride(M_RAD_TO_DEG_F * pitch_max_rad);
} else {
/* use pitch max set by MT param */
limitOverride.disablePitchMaxOverride();
}
_mTecs.updateAltitudeSpeed(flightPathAngle, altitude, alt_sp, _airspeed.true_airspeed_m_s, v_sp, mode, _mTecs.updateAltitudeSpeed(flightPathAngle, altitude, alt_sp, _airspeed.true_airspeed_m_s, v_sp, mode,
limitOverride); limitOverride);
} else { } else {

Loading…
Cancel
Save