Rotating inverted pendulum: experimental results


The first plot shown below is for linear control. It is a step response. The controller first balances Link 1 at an unstable equilibrium point. It is then commanded to move Link 1 one revolution. This command is "aggressive," and causes Link 1 to move very fast. Note the poor performance between 2 and 3 seconds, where Link 1 changes direction. This occurs because Link 1 attains a high velocity, so the centripetal force acting on link 2, being proportional to the square of this velocity, (it is nonlinear) becomes large. Furthermore, it acts in the same direction as gravity, i.e., in a destabilizing direction. The linear controller doesn't "know" about this force, can't compensate for it, and therefore provides poor performance. For this experiment, the poles are placed at s=-3.


The second plot is of a nonlinear controller which partially compensates the nonlinear gravity effects and the nonlinear Coriolis and centripetal forces. The pendulum is not feedback linearizable, and therefore, it is not obvious how to compensate these destabilizing forces. (If it were feedback linearizable, we would be able to cancel all the nonlinear forces, and cause the pendulum to behave as a linear system, whose step response is shown in red in both figures.) Since this is not achievable, we have implemented an approximate feedback linearization, with the "outer-loop" poles at s=-3, for sake of comparison. Note the smoothness of the transient - link 1 does not change direction between 2 and 3 seconds.

The code that implements the controller occupies about 32 Kbytes of TI 320C30 memory, and is quite computationally complex. All of it has to be executed each sample period, i.e., in 1/200 of a second. The DSP can do this easily.


Last updated August 23, 1995.

Scott Bortoff, bortoff@control.toronto.edu