A practical overview of feedback controllers, organized from simple to advanced
Click any controller for detailed formulas, pros & cons, and real-world applications
Every controller navigates a tension between aggressive performance (fast response, tight tracking) and robustness (tolerance of modeling errors, disturbances, noise). High gain gives fast response but amplifies noise and can destabilize uncertain plants. The Bode sensitivity integral (waterbed effect) makes this precise: reducing sensitivity at one frequency must increase it at another.
To reject a disturbance or track a reference with zero steady-state error, the controller must contain an internal model of the signal it needs to handle. For step inputs, this means an integrator in the loop. For sinusoidal disturbances, a resonant pair. This is why the "I" in PID exists, and why repetitive controllers work for periodic disturbances.
For linear Gaussian systems, the optimal controller can be designed in two independent steps: first design a Kalman filter (optimal estimator), then design an LQR (optimal regulator) as if full state were available. The combined LQG controller is still optimal. This separation principle drastically simplifies design — but it does not hold for nonlinear systems or when robustness to model uncertainty is required.
Controllability and observability are binary prerequisites. If a state is uncontrollable, no control input can influence it. If unobservable, no sensor measurement reveals it. Before designing any controller, verify these structural properties from the (A, B) and (A, C) pairs. If the system fails either test, no amount of cleverness in the control law will compensate.
Real actuators saturate. Valves have limits, motors have torque bounds, control surfaces have deflection stops. A controller designed without accounting for constraints will command physically impossible inputs, causing integrator windup, loss of phase margin, or violent transients when the constraint releases. MPC handles constraints natively; for PID, anti-windup schemes are essential.
The best controller is the simplest one that meets the specification. PID before LQR. LQR before MPC. Gain scheduling before adaptive control. Complex controllers are harder to tune, harder to verify, harder to debug when something goes wrong at 2 AM, and more sensitive to implementation details (discretization, numerical precision, timing jitter). Every layer of complexity must earn its place by solving a problem that simpler approaches cannot.