pid/windup
A scenario of the PID controller, from tools/trace/scenarios/pid/windup.hpp.
✓ pass
- The clang run (clang 18.1 optimized) matches the committed trace.
- The gcc run (gcc 13.3 optimized) matches the committed trace.
Shown on
These players show the same trace, with panels chosen to explain it:
- Why does a saturated integral make the loop slow to recover? (How the PID Controller Works)
- Does the loop recover at once when the setpoint comes back within reach? (PID V&V Plan)
Every channel
response [0] [1]
setpoint setpoint
command [0] [1]
integral [0] [1]
t = 0.000 s / 8.000 s
Keys (with the player focused): Space play/pause · ← → one sample (Shift: ten) · Home/End · [ ] speed
8 s of the control/pid scenario windup.hpp, 801 samples every 0.01 s. The panels plot every channel that changes: response, setpoint, command, integral. 4 events are marked. Pass criteria: BB-T1 recovery_time_to_within_0.02 <= 0.2 s.
- setpoint 1.5, beyond the actuator's reach
- setpoint 0.5, within reach
- anti-windup: within 0.02 of 0.5, 0.09 s after the drop
- no anti-windup: within 0.02 of 0.5, 2.40 s after the drop
- ✓ passBB-T1 recovery_time_to_within_0.02 = 0.088 s (<= 0.2), computed by the scenario harness
Constant over the run
actuator_limit= 1