- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单级倒立摆LQR和LQY控制
单级倒立摆LQR与LQY控制
1、建模
在忽略了空气阻力,各种摩擦之后,可将直线一级倒立摆系统抽象成小车和匀质杆组成的系统,如下图所示。
其中:
M 小车质量
m 摆杆质量
b 小车摩擦系数
l 摆杆转动轴心到杆质心的长度
I 摆杆惯量
F 加在小车上的力
x 小车位置
φ 摆杆与垂直向上方向的夹角
θ 摆杆与垂直向下方向的夹角(考虑到摆杆初始位置为竖直向下)
采用牛顿动力学方法可建立单级倒立摆系统的微分方程如下:
倒立摆的平衡是使倒立摆的摆杆垂直于水平方向倒立,所以假设,为足够小的角度,即可近似处理得:,,。
用u来代表被控对象的输入力F,线性化后两个方程如下:
取状态变量:
即摆杆的角度和角速度以及小车的位移和速度四个状态变量。则系统的状态方程为:
将上式写成向量和矩阵的形式,就成为线性系统的状态方程:
这里设:
将参数带入,有:
2、LQR控制
线性二次型是指系统的状态方程是线性的,指标函数是状态变量和控制变量的二次型。考虑线性系统的状态方程为:
找一状态反馈控制律:,使得二次型性能指标最小化:
其中,为系统的状态变量;、为起始时间与终止时间;为终态约束矩阵;为运动约束矩阵;为约束控制矩阵。其中、决定了系统误差与控制能量消耗之间的相对重要性。
为使最小,由最小值原理得到最优控制为:
式中,矩阵为微分Riccatti方程:的解。
如果令终止时间,为一个常数矩阵,且,因此以上的Riccatti方程简化为。
对于最优反馈系数矩阵,使用Matlab中专门的求解工具lqr()来求取。将LQR控制方法用于倒立摆控制的原理如下图所示。
用Matlab求解lqr(A, B, Q, R)可以求出最优反馈系数矩阵的值。lqr函数需要选择两个参数和,这两个参数是用来平衡输入量和状态量的权重。其中,代表摆杆角度的权重,而是小车位置的权重。这里选择:
matlab求得:K = [-82.4246 -10.7034 -10.0000 -11.8512]。
LQY控制
取性能指标为
对应控制率为,满足如下黎卡提方程
同LQR求解过程求解
K = [-276.8656 3.8430 -45.2606 -8.6243]
4、仿真
通过matlab仿真,LQR控制与LQY倒立摆摆角和小车位移仿真结果如下图所示。LQR仿真图:
LQY仿真图
上下两条曲线分别为倒立摆摆角和小车位移。
结果分析
从仿真图我们可以看出对于这两种控制方法LQY的控制响应效果更好,图中明显可以看出LQY控制器的控制下的倒立摆瞬时响应稳定时间更短,而LQR控制方法下的倒立摆的响应稳定时间几乎是LQY控制器的2倍,但是LQR控制下的倒立摆超调变化量更小,相对LQY响应过程更加稳定。
程序
LQR方法
%Modelling
a=[0 38.1825 0 -0.3847;1 -0 0 0;0 0 0 0;0 0 0 1 0];
b=[0;-2.8037;0;0.7477];
c=[1 0 0 0;0 0 1 0];
d=[0;0];
eig(a)
Qc=ctrb(a,b);
Rc=rank(Qc)
if (Rc==4)
disp(状态完全能控)
else
disp(状态不完全能控)
end
Qo=obsv(a,c);
Ro=rank(Qo)
if( Ro==4)
disp(状态完全能观测)
else
disp(状态不完全能观测)
end
Q=[250 0 0 0;0 0 0 0;0 0 10 0;0 0 0 0];
R=1;
K=lqr(a,b,Q,R);
x0=[0.2,0,0,0];
ac=[(a-b*K)];
bc=;
cc=[c];
dc=[d];
[K,P,e]=lqr(a,b,Q,R),
t=0:0.005:7;
figure
initial(ac,b,c,d,x0)
title(step respond of inverted pendulum system )
xlabel(Sec)
ylabel(Output y=x3)
figure
[y,x,t]=initial(ac,bc,cc,dc,x0,t);
plot(t,x,y)
figure,x1=[1 0 0 0]*x,plot(t,x1);grid;
title(x1的响应曲线)
figure,x2=[0 1 0 0]*x,plot(t,x2);grid;
title(x2的响应
文档评论(0)