ROBOTICS 101Concept explainer

Cascade Control

Most robot joints use loops inside loops. An outer position loop decides how fast the joint should move. An inner velocity loop decides how hard to push to reach that speed. Each loop only has to handle a simple job, but the inner loop must be fast enough that the outer loop can trust it.

Two loops

The outer loop turns position error into a speed command, and the inner loop turns speed error into torque:

$$\omega_{\text{cmd}} = K_{\text{pos}}\,(\theta_{\text{cmd}} - \theta) \qquad \tau = K_{\text{vel}}\,(\omega_{\text{cmd}} - \omega)$$

A common rule of thumb is to make each inner loop about 5 to 10 times faster than the loop around it. Here the speed of each loop is roughly its gain divided by the inertia, so you can compare the two gains directly.

What to notice

With the velocity gain well above the position gain, the joint moves to each new target smoothly. Lower the velocity gain toward the position gain and the response starts to overshoot and ring, because the outer loop is asking for speeds the inner loop cannot deliver in time. Turn the inner loop off and use position error directly as torque, and the joint with little friction oscillates badly. Real motor drives add a third, even faster loop on current, inside the velocity loop.