Key Takeaways
- All three methods stabilise the same second-order integrator, but they differ in how the disturbance is obtained: accumulated, measured or observed.
- PID’s integral term compensates a constant disturbance exactly, yet its steady-state error scales with how fast the disturbance changes.
- INDI reads the disturbance straight off the accelerometer, so it reacts within one control cycle — but it needs hundreds of hertz and a clean acceleration signal.
- ADRC separates disturbance estimation from error convergence, which is what makes its transient response easier to shape than a PID’s.
- For a UAV position loop the practical ranking is ADRC first, mature PID second, and INDI last — INDI belongs in the attitude and rate loops.
Disturbance rejection is the part of a flight controller that decides whether wind, model error and thrust error get absorbed or amplified. As of 2026 PX4 still runs PID and its variants for most position and attitude control, but ADRC and INDI both offer concrete advantages — on different loops.
Assume the UAV’s thrust and attitude respond perfectly, so the position loop reduces to a second-order integrator: position, velocity, a controller output interpreted as a desired acceleration, and an unknown disturbance term covering wind, model error, thrust error and unmodelled aerodynamics. Take position control to the origin as the example. Trajectory tracking only adds an acceleration feedforward term and leaves the disturbance analysis unchanged, and the attitude loop can be treated the same way.
The Three Approaches Side by Side
| Method | How it rejects disturbance | Measures disturbance directly? | Main advantage | Main problem |
|---|---|---|---|---|
| PID | Integral term gradually accumulates error and compensates indirectly | No | Simple, few gains, mature in practice | Disturbance estimation and error convergence are entangled, so the transient is hard to tune |
| INDI | Reads the previous instant’s disturbance directly from IMU acceleration, then compensates | Yes, requires an accelerometer | Fast disturbance response, not limited by observer bandwidth | Depends heavily on acceleration quality and high control rates; expensive to deploy on a position loop |
| ADRC | Estimates the disturbance with an observer, then compensates with a standard controller | No, estimated from position measurements | Separates estimation from error control, so the transient can be shaped independently | One more observer than PID, with extra parameters to tune |
For a UAV position loop the practical engineering judgement is that ADRC has the most potential, PID is the most mature, and INDI is the hardest to deploy directly. PX4 defaults to PID and its variants not because PID rejects disturbance best, but because it is simple, cheap to compute, predictable and well understood by tuners. INDI has more room in the attitude loop; putting it on the position loop means confronting accelerometer noise, bias and control frequency.
PID: The Integral Term Slowly Eats the Disturbance
The controller form
For position control to the origin, the error is defined in the usual way and a standard PID law is applied.
Rejection lives in the integral term
Assume the disturbance is constant and the system reaches steady state. At that point the proportional and derivative terms approach zero. To satisfy equilibrium, the control input must become the constant that cancels the disturbance — and that constant is accumulated by the integral term. PID’s integral term is therefore performing a very simple disturbance-compensation job: as long as the error is not zero, the integral keeps accumulating, until it produces a control input large enough to offset a constant disturbance.
If the disturbance is constant and the system is stable with no integral windup, PID can theoretically drive steady-state error to zero.
Steady-state error depends on the disturbance’s rate of change
PID does not know the disturbance value; it only adjusts the integral according to the error. How fast it can actually compensate therefore depends on how fast the disturbance changes. For a stable PID closed loop, the disturbance estimation error and the resulting steady-state error are generally proportional to the disturbance’s rate of change. Intuitively:
- If the disturbance is constant, the integral eventually compensates fully.
- If it changes slowly, PID follows but leaves an error related to the rate.
- If it changes quickly, the integral cannot accumulate fast enough and a clear error remains around steady state.
So “PID eliminates steady-state error” carries an implicit precondition: the disturbance is constant or slow enough.
Stability conditions and tuning logic
Substituting PID into the second-order integrator gives a third-order closed-loop characteristic polynomial. Applying the Routh-Hurwitz criterion yields the familiar parameter conditions. Once those basic conditions hold, the gains can be tuned against convergence speed, overshoot and disturbance response: increasing the proportional gain usually improves error recovery but risks stronger control action and overshoot; increasing the derivative gain adds damping and suppresses oscillation but can amplify velocity-estimate noise; increasing the integral gain removes constant error faster but invites overshoot, oscillation and windup.
The core weakness: two jobs, one set of gains
PID’s real problem is not that it cannot reject disturbance — it is that it assigns two different jobs to the same three gains:
- estimating and compensating the unknown disturbance;
- driving position and velocity error to zero.
The integral term is simultaneously hunting for the disturbance and altering the closed-loop dynamics. Adjusting the integral gain changes both the compensation speed and the overshoot and oscillation of the transient. The result is that with three gains alone, achieving fast settling, low overshoot and fast disturbance compensation at the same time is usually not achievable. Many real PID transients are visibly worse than a scheme that designs the error controller and the disturbance observer separately — which is exactly the problem ADRC sets out to solve.
INDI: Measure Acceleration, React Incrementally
The basic idea
INDI stands for Incremental Nonlinear Dynamic Inversion. Its systematic development for micro air vehicles is closely associated with the Delft University of Technology group; the classic reference is Smeur, de Croon and Chu in Control Engineering Practice, 2018. The core idea is to obtain the disturbance from the current sensor measurement directly, then correct around the previous control input.
For the second-order integrator, if the previous instant’s acceleration can be measured by the IMU, then the previous acceleration minus the previous input is effectively a measurement of the previous disturbance.
The controller form
Let the standard controller’s desired acceleration be defined without disturbance rejection — for position control to the origin, a PD law. INDI’s incremental form then writes the control input as a correction on top of the previous input.
That expression can be read two ways. The first is direct disturbance compensation: the measured disturbance is cancelled explicitly. The second is incremental control: the input is a first-order Taylor expansion around the previous input, correcting for the gap between desired and measured acceleration — which implicitly compensates for the input shortfall the previous disturbance caused.
Why INDI responds fast
INDI infers the disturbance directly from the accelerometer rather than letting a dynamic observer converge to it. When a gust arrives, the IMU acceleration changes immediately and INDI can correct in the next control cycle. There is no observer bandwidth limit: no waiting for an observer state to converge, no inferring acceleration disturbance from position error, and a fast response as long as the acceleration measurement is good enough. That is why INDI is attractive in fast inner loops such as attitude and angular rate control.
The practical problems
INDI’s theoretical advantage rests on one important precondition: the acceleration measurement must be good. Real accelerometers bring high-frequency noise, bias that feeds straight into the disturbance estimate, vibration contamination, errors from mounting position and frame transformation, and phase lag from low-pass filtering. The acceleration measurement error enters the control output directly — it does not merely perturb an internal observer state.
INDI’s incremental control also needs a high update rate, commonly several hundred hertz or more. A high-quality IMU, high-rate control, reliable filtering and good vibration isolation are all mandatory. Deploying INDI directly on a UAV position loop therefore carries a large engineering cost: the position loop runs slower than the attitude loop, and position and velocity measurements do not naturally provide high-quality linear acceleration feedback. In real projects INDI is far more common in the attitude or rate loop than in the position loop.
ADRC: An Observer Plus a Standard Controller
The core idea
ADRC — Active Disturbance Rejection Control — originates with Han Jingqing’s 1998 formulation. For UAV trajectory tracking, a representative line of work is the 2023 IEEE Transactions on Circuits and Systems I paper by Zhao and colleagues with Beijing Institute of Technology. That work shows the typical ADRC route for UAVs: estimate the total disturbance with an extended state observer, then compensate it with a trajectory tracking controller.
Setting aside the tracking differentiator and the nonlinear observer variants, the core structure is simple: a disturbance observer, plus a standard controller, plus compensation using the disturbance estimate.
For the second-order integrator with position and velocity feedback, a standard controller ignoring disturbance can be written directly. The final control input is that standard control minus the disturbance estimate from the observer.
The linear disturbance observer
Because a position loop usually cannot get reliable direct acceleration measurement the way INDI can, the disturbance must be estimated from position measurements, control input and the system model. Taking a linear extended state observer, the disturbance is treated as an extra state, and a simple linear observer is written for it. The observer’s third state is the disturbance estimate, and the controller uses the standard control minus that estimate.
The essence of the observer is an artificially designed virtual dynamic system that gradually recovers position, velocity and disturbance from the position error.
A linear observer is, in effect, a PID
The linear observer is not magic. It looks like a third-order state-space system, but eliminating the observer equations shows that its action on the position innovation is essentially a PID.
Differentiating the first observer equation and substituting the other two yields a standard PID form, up to a constant term from the initial conditions that can be absorbed into the integral’s initial value. So the observer does not conjure a disturbance estimate from nothing; it applies proportional, integral and derivative correction to the position innovation until position, velocity and disturbance are pulled toward their true values.
Two levels need to be kept apart here. The derivation shows that the linear observer’s error-correction channel is equivalent to a PID operator; it does not mean the ADRC controller degenerates into an ordinary PID. ADRC still separates the observer, which estimates the disturbance, from the standard controller, which generates the nominal control from position and velocity error, and then executes the difference.
This also explains why linear ADRC and PID share similar theoretical disturbance-rejection properties. When the disturbance varies with time, the linear observer’s estimation error is still generally related to the disturbance’s rate of change — both can be understood as structures with a bounded ultimate error under certain conditions, i.e. uniformly ultimately bounded results. Some nonlinear extended state observers can achieve asymptotic convergence to zero under stronger assumptions, at the cost of more nonlinearity and switching behaviour, which in practice risks chattering, noise amplification and implementation complexity.
The bandwidth trade-off
Because ADRC’s disturbance estimate depends on a dynamic observer, it cannot obtain the disturbance instantaneously the way INDI does from an accelerometer.
At low observer bandwidth the estimate is less sensitive to measurement noise and smoother, but responds more slowly, weakening rejection of fast wind disturbance. At high bandwidth the estimate converges faster and compensates rapid disturbance more promptly, but amplifies position-measurement noise, velocity-estimate noise and discretisation error, and can make the control output jitter or drive the actuator too hard. Observer bandwidth therefore cannot be increased indefinitely; it trades estimation speed against noise amplification.
Why ADRC is easier to shape than PID
ADRC’s key advantage is that it splits disturbance estimation from error convergence. The observer estimates the disturbance; the position and velocity gains drive convergence; the estimate cancels what was estimated.
That lets the standard controller be designed gently enough for the airframe’s real dynamics, avoiding saturation and excessive overshoot, while the observer is designed separately and faster to track disturbance changes. PID has only one set of gains, and its integral term both estimates the disturbance and alters the closed-loop transient. ADRC’s extra observer parameters do add tuning work, but they are exactly what creates independent room to adjust estimation and error control — which is why ADRC more easily finds a good compromise between fast settling, low overshoot and disturbance response.
Which Method Belongs on Which Loop
Position loop: ADRC, or a mature PID
A UAV position loop is well approximated by the second-order integrator: position measurement is relatively easy, velocity comes from the state estimator, and high-quality linear acceleration feedback is not reliably available. It therefore suits either a mature PID, for simple, stable, maintainable control, or ADRC, to separate position-error control from total-disturbance estimation and improve the transient under complex wind and model error. In a project, PID is usually the default; if stronger disturbance rejection is needed and extra observer tuning is acceptable, ADRC is worth trying.
Attitude loop: INDI earns its place
Attitude and rate loops run at higher frequency, and the IMU’s gyro and accelerometer participate more directly in the attitude dynamics feedback. That makes INDI genuinely valuable in the attitude or rate inner loop, where it can exploit measured dynamic change immediately and reduce dependence on an accurate aerodynamic and inertia model. This does not mean INDI suits every loop: moving a fast-inner-loop incremental method onto a low-frequency position loop is usually a net loss.
Summary
For the second-order integrator model used here, the three controllers read as follows:
- PID slowly accumulates a control input that cancels a constant disturbance. Simplest structure, fewest gains, but disturbance estimation and error convergence are entangled, so fast settling, stability and low overshoot are hard to achieve together.
- INDI measures acceleration with the IMU, derives the disturbance estimate from it, and applies an incremental correction to the previous input. Fast response, but demanding on acceleration quality and control rate.
- ADRC estimates the disturbance with an observer, handles position error with a standard PD controller, and executes the difference. One more observer than PID, but estimation and error convergence can be designed separately.
For actual UAV deployment the recommendation is straightforward: ADRC first for the position loop, mature PID second, and INDI reserved for the attitude or rate loop. But the structural difference is clean: PID accumulates the disturbance through error, INDI measures it with a sensor, and ADRC estimates it explicitly with an observer.
Have questions about this article? Feel free to contact us at [email protected] — we’re happy to help!
Frequently Asked Questions
Which rejects wind disturbance best on a drone: PID, INDI or ADRC?
INDI reacts fastest because it reads acceleration directly, but it is hard to run on a position loop. ADRC gives the best practical compromise there, separating disturbance estimation from error control. PID remains the default because it is simple and well understood.
Why does PID leave steady-state error when the disturbance changes?
Because PID never measures the disturbance — it accumulates error over time. A constant disturbance can be fully cancelled, but a changing one leaves an error proportional to its rate of change, since the integral cannot keep up.
Is a linear ADRC observer just a PID in disguise?
Its error-correction channel is mathematically equivalent to a PID operator, yes. But ADRC keeps the observer and the controller separate, so the nominal control and the disturbance compensation can be tuned independently — which is the whole point.
Why is INDI rarely used on a drone position loop?
Because the position loop runs slowly and cannot supply clean linear acceleration feedback. INDI needs several hundred hertz and a low-noise accelerometer, so its natural home is the attitude or angular-rate loop.
What limits ADRC observer bandwidth?
Noise. Raising bandwidth speeds up disturbance estimation but amplifies position-measurement noise, velocity-estimate noise and discretisation error, and can make the control output jitter or overdrive the actuator.
About Aomway
Aomway has been developing and manufacturing video transmission and UAV radio hardware for over 15 years, producing equipment for any frequency band from 1 GHz to 9 GHz at power levels from 3W to 15W. We build high-power FPV video transmitters, directional and circularly polarised antennas, digital links, fiber-optic tether systems and detection hardware for pilots, integrators and commercial operators worldwide.

