Gain scheduling based on rotor rpm

Indoors I am flying with the lowest possible rpm because of noise (and fear…)
Outdoors i choose much higher rpm-s because of wind gusts and more dynamics.

Unfortunately I have to adapt the control gains every time: at 1700rpm the RAT_P,I -s are around 50% higher than the outdoor values (2000rpm).

This seems to be logical as the aerodynamic forces on the blade foil are proportional to AoA*velocity^2. So the control sensitivity to a small swashplate movement (delta AoA on blade) will be 4 times higher at doubled rotor speed.

I have the same effect with one larger model airplane: either high gains but then oscillations at high flight speeds. Or lower gains, but then it is not stabilized at low speeds.

The solution is mostly a gain scheduling based on speed (or mach number in manned AC). For a model airplane maybe not so usable because of uncertanity of air speed estimation or measurement with pitot tube.

But for helicopter it could work well based on rotor rpm. Was this discussed already in ardupilot?

Just discovered that there is already a PID gain scheduling available for planes:
Tailsitter Planes — Plane documentation (

‘’ PID gains can be scaled for fixed wing control surfaces while in VTOL flight modes for Tailsitters by setting Q_TAILSIT_THSCMX ‘’

If I understand well, not the gains are modified, but simply the control deflections (in our case the swashplate movement) is scaled. Practically the same effect.
Input is the throttle level (and attitude, not relevant for us), this could be usable for heli with governor as well.

Does anybody has interest on this or I am alone?

What about the VFF gain. I would imagine that would be the most important one. My recommendation for now is to have a parameter file that you load for flight indoors and one of for flight outdoor. The parameter file can be one that only contains the gains you wish to change based on RPM.

This may be true. Scaling with RPM is probably a good idea but my first question would be, do you have an RPM sensor on your heli? This would be a basic requirement to support this feature. As for having discussed this before, I know there are users that wanted the ability to use more than one rotor speed during a flight. However this gets complicated on the implementation on the RSC especially if we are talking about more than one throttle curve. We have kept the code that it only supports one rotor speed. if you are using an electric powered helicopter with an ESC that has a governor, then speed can be changed by changing the RSC_SETPOINT (at least this can be done with castle creation ESC as they have 3 governor setpoints available). I have talked about rotor speed scaling with other devs but have not done much about it. I would rather concentrate on getting the autotune working.

I would need to understand the implementation further. Plus your theory on the gains scaling with rpm squared needs to be researched and shown to work. We need to ensure that changing gains with RPM squared does not create instabilities for the RAT_P and RAT_D gains. So there is a lot of work that would need to be done. For now it is not a priority for me but that doesn’t mean that someone else can’t do the work and submit a PR.