matlab eig函数_基于状态观测器的状态反馈控制Matlab仿真实现

本文介绍了关于如何在matlab中实现课本中所学的状态反馈控制。状态反馈控制率的设计为u=-Kx+v;

假设一个系统,我们只知道它的输入u和输出y=x1,而其他状态在现实中是不可测量的,那么我们如何进行状态反馈的设计?这就需要引入状态观测器来对无法测量的状态进行估计。

分为以下几个步骤:

  1. 验证系统可观测性可控性
  2. 观测器程序设计
  3. 极点配置

039ebb132dbf004a07158a6519a303d0.png

仿真模型图如上所示。状态空间描述如下:

c67ffa3b28a092ec77d7aaed29c39d39.png

首先判定系统是否可观测可控:

b158fe2c2c9057620034b8262f259a3a.png

观测器设计程序:

3a789dd5faad08a2d4c357513234a0af.png

注意:这里采用了LESO的参数整定方法。将观测器的极点统一配置在-w,然后选取带宽的值

已知ABC矩阵,那么设带宽为160 则选取合适的L阵满足条件,使得观测器的误差是稳定的。

L的选取计算方法:

584e02349db769065ed7acd705711e66.png

最终得到L矩阵,观测器设计完毕。

极点配置部分:

可控性验证:

A=[-0.044 66666 0;-1 0 0.01;0 -65217 -21.7];

B=[0;0;2174];

Co=ctrb(A,B)

rank(Co)

极点配置程序:

A=[-0.044 66666 0;-1 0 0.01;0 -65217 -21.7];

B=[0;0;2174];

J=[-10;-10;-14.5];

eig(A)

K=acker(A,B,J)

eig(A-B*K)

通过acker函数计算出K阵,极点配置控制率设计完毕。

实际出现问题总结:

  1. 出现不稳定问题,L有问题。极点配置不能离虚轴太近
  2. 一开始总是末尾不稳定,但是把极点调到-100左右解决问题
  3. 虚部也不能太大,会有稳态误差。但是极点可以选的很远三个极点之间的关系影响了稳态误差,通过调整他们的间距,解决稳态误差问题最终-100 -100 -145
  4. 观测器跟踪存在稳态误差,如何消去稳态误差? 已解决:观测器方程有误,正确形式如下:

0bfe36c07cc48db9be57a4d154afaf61.png

仿真结果如下,分别对阶跃曲线和正弦曲线进行跟踪:

2136d244149f915094ab0c9c29a811b9.png

44ffbbbc662ba7d650a3e903dcc554cc.png

可以看到 在1.5s加入了正弦扰动,仍能得到很好的抑制。

[1] 陈增强, 孙明玮, 杨瑞光. 线性自抗扰控制器的稳定性研究[J]. 自动化学报, 2013, 39(5):574-580.

[2 ]Gao Z . [IEEE 2003 American Control Conference - Denver, CO, USA (4-6 June 2003)] Proceedings of the 2003 American Control Conference, 2003. - Scaling and bandwidth-parameterization based controller tuning[C]// American Control Conference, 2003. Proceedings of the 2003. IEEE, 2003:4989-4996.


二周目:

时隔许久再次回来看这篇文发现,这篇并没有涉及ESO,只是基础的龙贝格观测器(全维状态观测器),寻找一个L阵使得A-LC是赫尔维茨即可,并不需要严格的整定策略。

而LESO其实就是全维观测器多了一阶而已,整定方法说白了就是把A-LC极点配在同一处,找到对应的那个L就ok。

A-LC是不是和A-BK形式很像?我们做状态反馈会求K阵,那么这里要求L阵,其实也是一样的。很简单,只要转置一下就可以了。sI-(A-LC)进行转置后行列式是不变的,所以可以转置为sI-(A‘-C'L’)L‘就相当于K

ca50b9522e2abd0543791fa2492cd62d.png

后来又做了一个四阶系统的LESO的仿真,发现x1~x3都可以精确估计,x4却一直是0,反复检查不知道错在哪。结果发现不是我式子写错了,是观测器增益不够大,一个四阶系统按照LESO的整定策略数值能上百万。。(其实不夸张,因为最后一项出现了4次方,轻轻松松就上百万。。)所以,它看上去是0不代表就是0,是上升速度实在太慢了(只仿真了5秒)所以,理论拿来做一下仿真就会发现很多不知道的问题,就算极点在左边,实际也不能满足要求,还要考虑快速性、噪声放大等问题。

至于出现的末尾发散问题,并不只是你看到的只在末尾发散,实际上从一开始就在发散了,指数的原因,后面的数太大了前面看不出来而已。俗称指数爆炸。

matlab编程这一块内容,使用s-function写模块是很方便的,定义好输入输出,中间再做运算就可以了。而且方便去改参数,只是matlab实在是太慢了,增益改大一点计算速度明显变慢。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值