From 3bae1e78e2dbaaa9a3598deb0a166da9167ca00f Mon Sep 17 00:00:00 2001 From: Martin Budden Date: Wed, 23 Aug 2017 07:22:13 +0100 Subject: [PATCH] Reset ITerm after crash --- src/main/flight/pid.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/flight/pid.c b/src/main/flight/pid.c index 9ebb316b7..b95cc16b0 100644 --- a/src/main/flight/pid.c +++ b/src/main/flight/pid.c @@ -422,6 +422,9 @@ void pidController(const pidProfile_t *pidProfile, const rollAndPitchTrims_t *an errorRate = currentPidSetpoint - gyroRate; } } + // reset ITerm, since accumulated error before crash is now meaningless + // and ITerm windup during crash recovery can be extreme, especially on yaw axis + axisPID_I[axis] = 0.0f; if (cmpTimeUs(currentTimeUs, crashDetectedAtUs) > crashTimeLimitUs || (motorMixRange < 1.0f && ABS(gyro.gyroADCf[FD_ROLL]) < crashRecoveryRate