程序: clear all; clc
A=[0,0,1,0;0,0,0,1;0,15.2476,-3.4727,-0.2325;0,74.9826,-3.8965,-1.1432];
B=[0;0;4.8895;5.4862];
C=[1,0,0,0;0,1,0,0;0,0,1,0;0,0,0,1]; Q=diag([10 1 0 0]); R=1;
sys=ss(A,B,C,0);
[K]=lqr(sys,Q,R)%计算状态反馈矩阵,k为最优反馈增益矩阵 Ac=A-B*K; Gc=ss(Ac,B,C,0); t=0:0.1:10;%仿真时间 x0=[30 10 0 0];
[y,t]=initial(Gc,x0,t);%运行仿真 plot(t,y(:,1),t,y(:,2)),grid xlabel(' 时间/s');
ylabel(' 旋臂和摆杆角度/度'); 得出: K =
-3.1623 52.3849 -3.0019 6.0669 p =
7.2470 -21.7108 2.3737 -2.6919 -21.7108 176.5050 -12.7108 20.8768
2.3737 -12.7108 1.1111 -1.5374 -2.6919 20.8768 -1.5374 2.4761 e =
-9.7409 -7.8941 -2.7936 + 1.9578i -2.7936 - 1.9578i
由图可见,3s以内,系统就会进入稳定状态,所以,LQR控制算法是可以实现倒立摆系统的稳定控制的。
建立Simulink模型,Clock模块用来提供仿真所需的时间t,注
意Y、U、t均设置成Array格式:
得出仿真结果如下:
实际情况中,倒立摆控制系统是受扰的,现在模型中加上一个冲激作用,在Pulse Generator模块中将Amplitudes(振幅)、Period(时段)和Pulse Width(脉宽)分别设为1、10和1,相当于每隔5s提供一个单位冲激信号作为外界对系统的扰动作用。