单级倒立摆LQR和LQY控制.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档