PID and filters in plain English

What P, I, D and feedforward actually respond to, what each one feels like when it is wrong, and why every filter you add is a loan against your control authority.

Tuning 8 min read Updated 2026-07-13

What the controller is actually doing

Start here, because most tuning confusion is really this one misunderstanding.

In Acro, your stick does not command an angle. It commands a rotation rate. Full right roll does not mean "go to 90 degrees of bank" — it means "roll to the right at, say, 700 degrees per second, and keep doing it until I tell you otherwise." The stick is a throttle for rotational speed. This is the fact that unlocks everything else, and it is why Acro feels alien to anyone coming from a self-levelling aircraft.

So the loop looks like this:

  1. You move the stick. The firmware converts that stick position into a requested rotation rate — this conversion is what your rates curve does, and it is a separate subject.
  2. The gyro measures the rate the aircraft is actually rotating at, thousands of times a second.
  3. The difference between the two is the error.
  4. The PID controller turns that error into a correction, which is added to and subtracted from the four motor outputs so the aircraft rotates the way you asked.
  5. The aircraft moves, the gyro measures again, and round it goes — hundreds or thousands of times a second, for the whole flight.

That is it. The controller has one job: drive the error to zero. P, I and D are three different opinions about how to do that, and they are combined. Feedforward is a fourth voice that does not look at the error at all.

P — the spring

P responds to the error right now. Big error, big correction. Small error, small correction. Nothing else — P has no memory and no anticipation.

It behaves like a spring. Pull the aircraft away from the rate you asked for, and P pulls back in proportion to how far away it is. It is the term that does most of the work, and it is the term that gives the aircraft its sense of connection — the feeling that it goes where you point it, immediately.

Because it is a spring, it can also ring. A spring on its own, with nothing damping it, overshoots the target, springs back past it, overshoots again. That is exactly what a too-high P looks like in the air.

I — the memory

I responds to accumulated past error. It integrates: every millisecond the aircraft is not doing what you asked, I adds a little more correction, and it keeps that correction even after the error is gone.

This is the term that kills steady-state offset — the persistent, unglamorous errors that P cannot finish off. A crosswind pushing steadily on the aircraft. An off-centre payload. A motor that is slightly weaker than its neighbours. In all of those, the aircraft needs a permanent, non-zero correction just to hold still, and a pure P controller cannot supply one, because as the error shrinks so does P's output. I remembers the error, so it can hold that correction indefinitely.

The dark side of a memory is that it can fill up with things that never happened. If the aircraft physically cannot do what you are asking — you are demanding a rate the motors cannot deliver, or something is holding the airframe — the error persists, and I keeps accumulating on an error it has no power to fix. That is integral wind-up, and you feel it as a lurch when the constraint releases and all that stored correction finally arrives at once. Every mainline firmware has anti-windup logic; it does not make the phenomenon disappear.

D — the damper

D responds to the rate of change of the error. Not how big the error is — how fast it is changing.

It behaves like a damper, the shock absorber next to the spring. When the aircraft is rushing toward the commanded rate, D sees the error collapsing quickly and applies a braking force, so the aircraft arrives rather than overshoots. It is what stops P from ringing. It is why a well-damped quad stops dead at the end of a flick instead of bouncing.

And it is the term that will hurt you, for one reason: anything that responds to rate of change amplifies noise. Gyro noise is small in amplitude but enormous in rate of change — it flips back and forth hundreds of times a second. D takes that and turns it into motor commands. The motors, obediently, oscillate. The oscillation shakes the frame. The gyro reads the shaking. Round it goes.

That is why hot motors after a gentle flight are the classic D symptom, and it is the direct reason filters exist at all.

Feedforward — the one people forget

P, I and D all wait for an error before they act. That is structurally pessimistic: the aircraft has to already be wrong before the controller does anything about it.

Feedforward acts on the movement of your stick, not on the error. When you slam the roll stick, feedforward sees the rate of change of your command and pushes the motors immediately, before the gyro has had time to notice the aircraft is behind. It gets the aircraft moving, so the error never builds up in the first place.

This matters in two ways. It sharpens the response to fast stick inputs — the aircraft feels like it is anticipating you rather than chasing you. And because the error stays small, P and I have far less work to do, which means you can run them at sane values instead of cranking P up to get a crisp feel and then fighting the oscillation you just created.

If your aircraft feels laggy on hard stick movements but is otherwise stable, feedforward is the term to look at, not P.

What each one feels like when it is wrong

Symptom Term Direction
Fast oscillation or wobble, worse under load P Down
Mushy, vague, does not hold the rate you asked for P Up
Slow bounce-back, "boaty" feel, a lurch after a hard manoeuvre I Down
Drifts off the commanded attitude, will not hold against wind I Up
High-frequency buzz, hot motors, visibly noisy gyro trace D Down
Overshoot and bounce at the end of a flick D Up
Laggy on fast stick movement, but stable Feedforward Up
Jumpy, twitchy, overreacts to small stick movements Feedforward Down

The symptom side of this — telling a 15 Hz wobble from a 300 Hz buzz, and telling either from a bad bearing — is a whole diagnostic problem of its own. See Why does my quadcopter shake? before you assume the fault is in the tune at all. A great many "bad tunes" are chipped props.

Filters: why they exist and what they cost

The gyro sees everything: the aircraft's real motion, and also the buzz of four motors, the flex of the frame, the imbalance in a prop. D amplifies all of it indiscriminately. So we filter — low-pass filters on the gyro signal, and usually more on the D term specifically, to strip out what is above the frequencies an aircraft can actually rotate at.

Here is the part that gets skipped. Every filter adds delay. A filter works by, in effect, averaging the signal over a short window, and an average is always slightly out of date. That delay goes straight into the control loop — the controller is now reacting to where the aircraft was, not where it is. And delay in a feedback loop is precisely the thing that makes it unstable. Enough of it, and a perfectly reasonable P value starts to oscillate, for no other reason than that the correction is arriving late.

So filtering is a loan against your control authority. You borrow smoothness now and repay it in latency, and latency is what forces you to lower your gains, which is what makes the aircraft feel vague. The goal is a clean enough aircraft that you need less filtering, not more filtering to hide a dirty one. Balanced props, sound bearings, working soft mounts, no cracked arms. Fix those and you can run less filtering, which lets you run more D, which gives you a better-damped aircraft. It compounds in both directions.

RPM filtering

This is the biggest single win available to you, and it is worth understanding why.

An ordinary low-pass filter is blunt: it removes everything above a cutoff frequency, useful signal included, and pays for it in delay across the whole band. But motor noise is not spread evenly — it appears at very specific frequencies, determined by how fast each motor is currently spinning, and those frequencies move as the throttle moves.

RPM filtering uses the actual RPM telemetry the ESCs send back (bidirectional DShot) to build narrow notch filters that sit exactly on each motor's noise frequency and follow it as it changes. It removes the noise where the noise is, and leaves everything else alone. The delay cost is a fraction of what a broad low-pass would charge you for the same cleanliness.

It also fails silently. If your motor pole count is wrong, or bidirectional DShot is not actually negotiated, the notches sit in the wrong place and you get all of the cost and none of the benefit. Verify it is working before you conclude your build is noisy.

How to actually tune

Fix the mechanics first. Balanced props, tight arm bolts, healthy bearings, soft mounts that are actually soft. No amount of tuning fixes a bent shaft, and a noisy airframe forces you into a filtering compromise that limits every gain you can subsequently use.

Verify your filtering before you touch a gain. Confirm RPM filtering is live and the notches are tracking. Then check your low-pass settings are doing something and not merely inherited from a preset written for a different aircraft.

Then, one term at a time. One axis at a time. Roll and pitch are different — on almost every airframe they have different inertias — and yaw is different again. Change one number, in steps of roughly 10%, and fly.

Fly the same manoeuvre every time. A consistent test flight is the entire experiment. If you change two settings and fly a different line, you have learned nothing, and you will convince yourself otherwise, because you want the last change to have worked.

Log everything. Feel lies. The Blackbox log does not. The gap between your setpoint and your actual gyro rate is the thing you are trying to close, and it is right there in the trace.

And the one that matters most: do not chase somebody else's numbers. A tune is a property of an airframe, not of a firmware. It belongs to a specific mass, a specific inertia tensor, a specific set of motors and props on specific arm lengths. This is why you will find no PID values in this article — publishing numbers would be irresponsible, because they would be wrong for your aircraft and you would have no way of knowing why.

That goes double if you fly heavy. A 5 kg platform has vastly more rotational inertia than a 250 g racer: it is slower to start rotating and, far more importantly, slower to stop. Its natural frequencies are lower, its motors respond more slowly, and it punishes an aggressive tune in a way a light quad simply does not. Copying a 5-inch freestyle tune onto a heavy airframe is one of the more reliable ways to break something expensive. Start from a sane default for the size, and work up.