An aside: If you really, really wished to, you probably could use something as simplistic as a PID, except that there'd be a nonlinear, time varying transform applied to its inputs, and its outputs. At that point you can pretty much almost implement any controller you wish while still claiming that there's a PID in there somewhere :) Think of the Park and Clarke transforms used in motor controllers. The overall controller still uses a PID core, but behaves nothing like a raw PID would. The transforms could be much more complex, effectively implementing a whole different control scheme, and letting PID not do much of substance :)