I am wondering what the use is of two PID loops to control a quadcopter. One PID for stability control and another PID for rate control.

Why can't you just use one PID per axis to control a quadcopter where you take the current and desired angle as input and motor power as the output?


Because it is an under-actuated system. You can not directly control the linear velocity with only one PID. To move in the 3D space you need to control the linear velocity.

So the first loop uses the angular velocity (or the attitude itself) as control inputs to control the linear velocity, while the second loop uses the torques or rpms of the fans (real commands) to achieve that angular velocity: backstepping-like effect.

Is this comment helpful?

  • $\begingroup$ That's not a comment, that's an answer. Mine is a comment. $\endgroup$ – ott-- Feb 5 '15 at 19:00

I'm not quite old in quadcopter, but from my understanding, you can, but it is quite annoying.

We set up the PID control loops as position control loop and speed control loop because these are two ways we want and we will control the quadcopter. For example, I want my quadcopter rotate 3 rad/s in yaw then stop or fly 5 meters away in y axis then stop. So I just set the reference signal as 3 in speed control loop and 5 in position control loop. That is enough.

But if we want to do the same thing with PID control for every axis, you need to calculate how these three inputs are and when to change them in order to make quadcopter stop. That is not quite convenient.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.