iTermRelaxFactor now only attenuates amount added
commit1d998ea4041088293433cf0f301bca53867e525d
authorctzsnooze <chris.thompson@sydney.edu.au>
Tue, 26 Feb 2019 01:23:21 +0000 (26 12:23 +1100)
committermikeller <github@ike.ch>
Thu, 28 Feb 2019 06:51:50 +0000 (28 19:51 +1300)
tree821ecf9a94147a2ebdfaf36688ed1f4ec28fc440
parent750e7c30cf459890ce01eba54a8a28d301697837
iTermRelaxFactor now only attenuates amount added

The original setpoint based iTerm Relax code attenuated the amount of iTerm added per loop by a relax factor based on an HPF of setpoint.
At some point the code was re-factored and the relax factor multiplied the accumulating iterm error itself, such that almost any relax factor below 1.0 would quickly zero out iTerm.
This was bad for racing because when making sustained tight turns, I would abrubtly be zeroed when the setpoint for the starting of some relax was close to the threshold.
This was never the intent of the original proposal, which was for a smoother attenuation of iTerm, and for retention of some accumulation of iTerm during spirals around poles etc.
This PR fixes that error.
It also changes the default threshold up from 30 deg/s to 40 deg/s which better suits racing.
Also included us a form of simple cutoff independence. In the initial form, lowering cutoff would reduce the effectiveness but draw out the duration.  Now cutoff only really affects duration.
Lower cutoff values are better for quads with greater motor delay, faster values are better for quicker quads. For most of my quads a cutoff of 30 works best.
I've also removed newlines.

set to current cutoff maybe fix unit test

default cutoff set to current value

in unit test add itermRelaxSetpointThreshold as float

in unit test add itermRelaxSetpointThreshold as float, because ITERM_RELAX_SETPOINT_THRESHOLD doesn't exist any more

Move itermRelaxFactor limit, remove from fast ram

remove unncessary max, revert unit test changes, restore original defaults.

remove max from debug
restore old defaults and revert unit test changes temporarily to see if will pass unit test with defaults

whoops

lets see if unit test passes when cutoff is 20

lets see if unit test passes when cutoff is 20
src/main/flight/pid.c
src/main/flight/pid.h
src/test/unit/pid_unittest.cc