aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorThomas Gubler <thomasgubler@gmail.com>2013-12-23 13:18:05 +0100
committerThomas Gubler <thomasgubler@gmail.com>2013-12-23 13:18:05 +0100
commitafbf4223398407a5734aa0741ef24b5fab5b6dca (patch)
treedbc2c7a915aa5a427fdc7815785a3539fc1f2775 /src/lib
parent1279b5fbf3838811a08845e41b1e1244fb85d026 (diff)
downloadpx4-firmware-afbf4223398407a5734aa0741ef24b5fab5b6dca.tar.gz
px4-firmware-afbf4223398407a5734aa0741ef24b5fab5b6dca.tar.bz2
px4-firmware-afbf4223398407a5734aa0741ef24b5fab5b6dca.zip
tecs: change pitch on climbout #559 (ported from ardupilot)
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/external_lgpl/tecs/tecs.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/lib/external_lgpl/tecs/tecs.cpp b/src/lib/external_lgpl/tecs/tecs.cpp
index a733ef1d2..1d5c85699 100644
--- a/src/lib/external_lgpl/tecs/tecs.cpp
+++ b/src/lib/external_lgpl/tecs/tecs.cpp
@@ -404,10 +404,18 @@ void TECS::_update_pitch(void)
// Apply max and min values for integrator state that will allow for no more than
// 5deg of saturation. This allows for some pitch variation due to gusts before the
// integrator is clipped. Otherwise the effectiveness of the integrator will be reduced in turbulence
+ // During climbout/takeoff, bias the demanded pitch angle so that zero speed error produces a pitch angle
+ // demand equal to the minimum value (which is )set by the mission plan during this mode). Otherwise the
+ // integrator has to catch up before the nose can be raised to reduce speed during climbout.
float gainInv = (_integ5_state * _timeConst * CONSTANTS_ONE_G);
float temp = SEB_error + SEBdot_error * _ptchDamp + SEBdot_dem * _timeConst;
+ if (_climbOutDem)
+ {
+ temp += _PITCHminf * gainInv;
+ }
_integ7_state = constrain(_integ7_state, (gainInv * (_PITCHminf - 0.0783f)) - temp, (gainInv * (_PITCHmaxf + 0.0783f)) - temp);
+
// Calculate pitch demand from specific energy balance signals
_pitch_dem_unc = (temp + _integ7_state) / gainInv;