humanoid robots, eg Boston dynamics. balancing is just too complex compared to a simpler 2-way 2D inverted pendulum, and PID alone just isn't going to cut it.
Let's say you're trying to control the x,y,z coordinates of a robot arm. It has three pivots. Rotating the third pivot can increase or decrease x depending on the first two.
That's a complex, multidimensional, nonlinear system (albeit with relatively simple dynamics). PID won't do it, since you don't even know which way the PID terms should go. There are approaches which mix PID with other methods, though.
A lot of analog systems too, such as some audio amplifiers, use more complex control techniques simply because they achieve higher performance. If you want low distortion, you need a lot of gain in your feedback loop. Most use rather simple controllers, but some go very fancy.
Some have complex linear dynamics. A system with a right half plane zero means that if you push right, the system goes left than right. That's very difficult to control. An example (called a boost amplifier) works like this, in analogy:
You have a bucket of water. You can either turn on a spigot to fill the bucket at a fixed rate, or one to empty it from a hole in the bottom (so at a rate proportional to how full it is). You'd like water to come out at a given rate. What is the ratio of time between filling and emptying?
- In the short term, if you empty for less time, less water comes out, because duh.
- In the long term, though, ALL the water which goes in must come out. If you empty for less time, you fill for more time, so it gets fuller, water pressure goes up, and more water comes out.
The above is actually completely analogous, mathematically, to how a USB device might take a 5V power rail and make a -12V power rail from it. You connect an inductor to 5V, charge it up with a current, and have it drive the -12V rail down.
If you're controlling more complex systems, you might have a mix of all of the above: nonlinearity AND complex dynamics.
Is your nick accurate? If so, you should already know this.
Not only that. The most important aspect is that you can have explicit constraints in the outputs, so that your system does not go outside the operating envelope it is designed for. For example you can state that I want you to stabilize my system given that my motor can only apply up to this force. And by the way do not exceed system velocity of x km/h.
We can also have objective to explicitly define how much more important to us accurate tracking vs stabilization speed.