Need help understanding the PID tuning of ArduCopter

I’ve been flying multirotors for 5 years now and have done tuning with FPV racers to larger craft with 28’’ props running custom firmware.So I’m not that much of a stranger to tuning, but recently I’ve been working with the ArduPilot software for which I have the least experience.

The PID tuning doesn’t make much sense to me neither from the Mission Planner or QGC perspective. I’m hoping someone here is able to at least explain to me about which are the key components in tuning with ArduCopter.

I did test the autotune, but I don’t really think it accomplished its mission very well.

Previously the tune seemed very loose as throttle inputs would have caused the craft to wobble in either pitch or roll or both axes. After autotune, I’d say the Acro flight mode seems to work relatively well, but the rates are super low, so movement is smooth, but slow- making it hard to try some harder manouvers to test the tune. Yet Stabilize is erratic and twitchy and Loiter seems somewhere inbetween, being a little softer than Stabilize, but nowhere near as smooth as Acro.

How does ArduCopter even achieve different behavior for these flight modes regarding the tuning.

This is what my tune looks like right now. I’m running a roughly 3.5kg 18’’ prop X-quad with 520kv motors.

  1. In BetaFlight or other race quad softwares, we have rates separately as the speed at which the quad will make it’s desired state change (deg/s) for each axis. In ArduCopter the phrase Rate seems to have a different meaning as it’s paired with PID somehow. So you can adjust Rate Roll PID. Which makes no sense to me. Would love to understand this.

  2. In the picture posted above, you can see the Stabilize Roll / Pitch / Yaw (Error to Rate) + Position XY(Dist to Speed) - Can anyone explain what is this? Are these just P gains per axis? If that’s so where are the I and D terms for this? What does the ACCEL MA field stand for, I’ve never seen that before, usually it’s just the P gains which I always assumed are like rates in BetaFlight or other FPV FC softwares. And the other new field for me is the Position XY(Dist to Speed). Where can I get an understanding about what this does or why it’s there?

  3. The middle section seems to be the most usual looking, yet there are the field of IMAX and FILT, which I don’t understand either.
    What is IMAX? - The maximum I gain? Why is that necessary?
    What is FILT? - A filter? Which type? What’s the unit of the value I should enter? Doesn’t seem to be a field to enter Hz values?

  4. What is Velocity XY (Vel to Accel) - Totally foreign object to me regarding PID control loops. Again would love to understand why it’s there and what is its purpose.

EDIT: I’m quite perplexed as to why there’s this notion of keeping kP and kI values locked together in Arducopter. In the BetaFlight type PID controller world, the kP and kI are very different and not linked to each others values. What does ArduCopter do different that it seems almost to be a rule that you should follow.

Thanks in advance!


The scaling of the P and I gains has been chosen so that when P==I the overshoot is kept in a safe interval.

Did you read the Tuning Process Instructions — Copter documentation ?

And for more info:

Thanks @amilcarlucas I’ll check these out. And see if I can get all my answers.

I think part of the problem abou tthis subject(at least for me) is that for this one task is usually done via autotune, but to get deeper on how to tune yourself you need to go through several pages to find the answers. It might help users if the subject of PID tuning was all on one page perhaps?

I’m not really finding anything from these links about the ACCEL MA parameter. Where should I look for information on that?

ACCEL_MA caps the acceleration of rate of rotation, which is how fast the rate (deg/s) changes per second. The low values can cause the some of the sluggish feel.

I had this problem when it was set to 70,000 centideg/s^2, which meant 0.1s after full stick deflection, it would only be rotating at 70deg/s. And it would take a full second for the quad to get to 700deg/s rotation.

I initially worked around this by setting the parameter to zero to remove the limitation, though I’m not sure of the dangers of setting of this (maybe if the tune is bad is you may get some more vibrations on hard maneuvers)

The parameter name is ATC_ACCEL_* and description is found here: