目录
前言
首先反演法又称反步法、后推法,他能将复杂的非线性系统分解称不超过系统阶数的子系统,然后为每个子系统分别涉及Lyapunov函数和中间虚拟控制量,一直推到整个系统。怎么理解后退到整个系统为止呢?其实和分解到系统阶数一个意思,直白了就是每一阶都涉及Lypunov函数保证子系统的稳定性,直到最高阶真实控制输入的出现,可能初次还是有些晦涩难懂。那么直接结合实例来看吧!
1.简单的反演法
定义指令信号为xd,所以位置跟踪误差 :
所以:
注:定义误差的时候x1'和xd'哪者放前放后都一样的,后面保持一致就可以。
因为公式好难编辑,所以我是直接现在world中编辑好再粘贴过来,总之好麻烦,所以有的会直接打字公式,谢谢理解!
1.1反推第一步
定义Lyapunov函数:
求导:
引入第一个中间虚拟控制量α1,并定义x2和虚拟控制量α1的误差为z2(继续往后看为什么要这样假设),引入α1即:
z2 = x2-α1
取虚拟控制量:
其中k1 > 0。
有人问为什么这么取?
其实刚开始学的时候我也很纳闷,因为这一步也是关键,后面推敲发现:假如x2 = α1,那么有:V1' = -k1*z1^2,可以发现这是标准的稳定性判定!
其实也有的文章会将两式进行合并,即直接定义:
好了,我想又有人问那么取多少个中间虚拟控制量?
我可以先告诉你虚拟控制量个数 = 反推步数-1,类似中间插值一样,最后面真实控制不含虚拟控制变量,所以叫做虚拟控制变量!
好了,继续反推设计:
上面说了为什么要这样取虚拟控制量,但是很可惜现在没有足够的条件保证x2 = α1,也就不能保证系统是稳定的,所以:
进而第一级的Lyapunov函数:
可以看到由于误差z2的缘由,导致V'并不能保证小于0,所以继续要消除z1*z2这一项来保证Lyapunov函数的稳定性。
1.2反推第二步
这一步是为了消除z1*z2这一项使V' < 0
继续定义第2步的Lyapunov函数:
可以看到这样定义包含误差z2和第1步的Lyapunov函数,所以只要保证V2' < 0,便能“链式”推出V1' < 0。
继续,对V2求导:
可以看到由于:
也就是现在可以设计真实的控制输入u来消除z1*z2,到这里实际上反推便不需要继续往下了,所以取:
将上式代入V2',有:
可以看到合适的真实控制输入能保证V2' < 0。
所以:
最后,得到控制律:
其中,k1 > 0,k2 > 0。
2.简单的反演法仿真分析
模型为倒立摆:
2.1 simulink模型
这里取指令信号xd = 0.1*sin(Πt),并添加已知扰动d(t) = 10*sin(t),取调节参数k1 = k2 = 100;
2.2仿真结果
3.基于反演法的滑模控制
上面介绍了简单的滑模控制,可以看到,我在推导的时候没有引入扰动项和系统不确定项,因为简单滑模控制无法克服不确定性扰动和系统的不确定性,而且需要精确的模型即f和g。
结合滑模控制的反演法其实和普通反演法类似,只是在第2步反演设计时定义滑模面:
s = z2或者s = c*z1+z2
下面依依推导两种定义形式的控制律,因为第一步反推和上述简单的反演法相同,不再叙述,只介绍引入滑模面的反推第二部。
3.1 s = z2滑模面形式
这里的模型在上述简单反演基础上引入扰动和不确定项的总和归结为d,即:
这个定义可以发现很简单,因为第二步的Lyapunov函数V2仍和上述简单的反演法一致,即:
所以,控制律的形式为:
和简单反演推导同,为使 V2' < 0,令z1+z2' = -k2*z2,所以有:
得控制律:
引入滑膜项将扰动抑制,所以:
3.2 s = c*z1+z2滑模面形式
注:可以看到这里证明V2'变量比之前貌似多了,并且状态变量代来代去的,可能很晕,我认为思想是:把V2'中的状态变量用误差z1和z2代替,所以才代来代去的。
可以看到真实控制律又出现了,并且取合适的值可以使得系统稳定,所以令:
为了使系统具有鲁棒性,上式改写成:
则真实控制律为:
但是这里又z1'导数这项,其实也可以再将z1' = z2-c*z1替换,都是一样,如果代入则:
4.基于反演法的滑模控制仿真分析(s = z2)
同样,这里取指令信号xd = 0.1*sin(Πt),并添加已知扰动d(t) = 10*sin(t);取调节参数k1 = k2 = 35,η = 10.1 (注:η ≥ |d|)
4.1 simulink模型
4.2仿真结果
为了消抖,选用饱和切换函数sats
如果选用符号函数,控制律抖动很大,如下:
5.基于反演法的滑模控制仿真分析(s = c*z1+z2)
同样,这里取指令信号xd = 0.1*sin(Πt),并添加已知扰动d(t) = 10*sin(t);取调节参数k1 = k2 = 35,c = 10,β = 1,η = 10.1 (注:η ≥ |d|)
5.1 simulink模型
5.2 仿真结果
6.学习问题
指令信号的2次微分simulink模块会失真放大,如何解决呢?
如果有帮助,麻烦帮忙点个赞是我最大的分享动力,非常感谢!
注:仅为便利自己学习,错误在所难免,如有侵权,请联系删除,有兴趣的学者可以参考学习交流,谢谢!