constrain integrator part in control output until startup detection is available for safety reasons

This commit is contained in:
Thomas Gubler
2013-10-24 17:57:21 +02:00
parent ccc6dd73a0
commit 1e89f30120
4 changed files with 12 additions and 9 deletions
@@ -161,9 +161,10 @@ float ECL_PitchController::control_bodyrate(float roll, float pitch,
}
/* integrator limit */
_integrator = math::constrain(_integrator, -_integrator_max, _integrator_max);
//xxx: until start detection is available: integral part in control signal is limited here
float integrator_constrained = math::constrain(_integrator * k_i_rate, -_integrator_max, _integrator_max);
/* store non-limited output */
_last_output = ((_rate_error * _k_d * scaler) + _integrator * k_i_rate * scaler + (_rate_setpoint * k_roll_ff)) * scaler;
_last_output = ((_rate_error * _k_d * scaler) + integrator_constrained * scaler + (_rate_setpoint * k_roll_ff)) * scaler;
return math::constrain(_last_output, -_max_deflection_rad, _max_deflection_rad);
}