【滑模控制】减小抖振 模糊控制

目录

普通滑模控制

 经典防抖滑模

 双曲正切tanh函数代替

 连续函数代替

 饱和模块代替

模糊滑模控制

fuzzy模糊机制

映射 (论域 - fuzzy 横轴)

隶属函数 (隶属度 - fuzzy 纵轴)

在Simulink中的fuzzy模块

 利用S模糊,直接作为切换项(较准确)

利用ss'模糊,输出的积分作为K

利用ss'模糊 输出作为dK(参考文章的做法)


普通滑模控制

直接抄的【模糊滑模】基于模糊切换增益调节的滑模控制 里面的被控模型:

\left \{ \begin{aligned} \dot{x_1}=x_2 \\ \dot{x_2}=f(x)+g(x)u+d(t)\\ y=x_1 \\ \end{aligned} \right .\left \{ \begin{aligned} f(x)=\cfrac{0.5sinx_1(1+0.5cosx_1)x_2^2-10sinx_1(1+cosx_1)}{0.25(2+cosx_1)^2}\\ g(x)=\cfrac{1}{0.25(2+cosx_1)^2} \\ d(x)=10cos(2t)cosx_1 \\ x_d(t)=\cfrac{\pi}{6}sin(t) \end{aligned} \right .

干扰 |d(x)|\leqslant 10 可以设 D=10,滑模面:s=ce+\dot{e} 求导 \dot{s}=c\dot{e}+\ddot{x_d}-f-gu-d

将趋近率设计为指数趋近率,即 \dot{s}=-Ksgn(s)-s

忽略扰动,将两个趋近率表达式联立可以解出:u=\cfrac{1}{g(c\dot{e}+\ddot{x_d}-f+Ksgn(s)+s)}

反代回趋近率得实际 \dot{s}=-Ksgn(s)-s-d

即能使 Lyapunov 函数 V=\cfrac{s^2}{2} 求导 \dot{V}=s\dot{s}=-ds-K|s|-s^2\leqslant D|s|-K|s|-s^2

因此只需要参数 K>D 即可使 \dot{V}<0;对系统和控制器建模如图:

 仿真结果如图:(三图分别为位置跟踪、速度跟踪与输入控制量) 

 控制量呈现明显抖振,为了减小抖振,采用一系列对符号函数的替代:

 经典防抖滑模

 双曲正切tanh函数代替

双曲正切tanh函数公式:tanhx=\cfrac{e^x-e^{-x}}{e^x+e^{-x}} 图像:

 用双曲正切tanh函数代替符号函数,如图:

控制效果如图:(三图分别为位置跟踪、速度跟踪与输入控制量)

 连续函数代替

 用连续函数\theta(s)=\cfrac{s}{|s|+\delta} 代替符号函数,如图:

 

 饱和模块代替

用饱和模块代替符号函数,如图:

如果不加入增益模块,会导致线性化区域加宽,控制效果如图:

 如果不加入增益模块,会导致线性化区域加宽,控制效果如图:

模糊滑模控制

fuzzy模糊机制

映射 (论域 - fuzzy 横轴)

对于输入或输出总要设置映射范围,即论域 在fuzzy中论域常用整数离散点表示 记作:x_i

如 x 的真实范围为[a,b],设计论域为 [-6,6],

则任意 x=X ,有  X\rightarrow \cfrac{12(x-a)}{b-a}-6=\cfrac{12x-6(a+b)}{b-a}

隶属函数 (隶属度 - fuzzy 纵轴)

参考:【学习笔记】模糊控制算法_模糊控制csdn_记录无知岁月的博客-CSDN博客

完整计算过程:模糊控制——(1)基本原理_一抹烟霞的博客-CSDN博客

隶属函数规定了论域上每个整数点对应的隶属度

隶属度 \mu_i 类似于曲线积分 即曲线与x轴围成的面积

在一个论域 x=\{-2,-1,0,1,2\} 的fuzzy中,通过一个输入,经过隶属函数转换之后的值:

首先经过映射转换:X→x 如果要判断其在NB这个隶属度为 NB=\{1,0.2,0.1,0,0,0\} 隶属函数上的值:可以将每个隶属函数的模糊关系用矩阵R表示:如隶属函数NB对应的模糊关系为R_{NB}

【例子】如果输入和输出的NB函数对应的隶属度用矩阵表示分别是A和B,则可以计算出:

R_{NB}=A^T\circ B 常见形式 A=[0.8 0.4],B=[\frac{0.1 0.6 1}{0.1 0.5 0.5}],实际是求较小值 A_i\wedge B_i

这里可以解出 R_{NB}=[\frac{0.1 0.6 0.8}{0.1 0.4 0.4}] ,具体计算方法:R(u,v)=A(u)\wedge B(v)

(如果此时论域变化,NB变为 A^*=[0.7 0.1] 可以得到输出为B^*=A\circ R=[0.1 0.6 0.7])

而求出所有隶属函数对应的 R_i 之后,对所有模糊关系矩阵取并集,得到整体模糊关系矩阵R_{whole}

那么给定一个输入,如果属于NB,则有 e=A_{NB} 而 u=A_{NB}\circ R_{whole} 

得到的矩阵可以记作U=[...],对于论域 y=\{-2,-1,0,1,2\} 的输出,

真正得到的输出值的映射为:\cfrac{u_1}{-2}+\cfrac{u_2}{-1}+\cfrac{u_3}{0}+\cfrac{u_4}{1}+\cfrac{u_5}{2}  但注意这只是取了整数点进行计算

在Simulink中的fuzzy模块

发现如果输入超出了论域,会导致输出很怪

如果输入的值超出了设定的输入range,如输入为幅值为5的正弦波,而给定论域为[-3,3] 在实际仿真时发现,在输入持续上升增长,超出3之后,超出多少,相当于从3的峰值开始下降(反变化),等进入到给定的range范围内之后,又按照正常情况变化: 可以画一个图:

而在fuzzy中,输入就相当于修改之后的图像,相应的输出为右图黄线所示:通过右图可以看出,变化已经很sgn了。但注意,这个不完全正确,如果经过处理之后的图像反向之后仍然可以超过range,要反向,在fuzzy中默认输出0。

因此在利用fuzzy时需要注意设定的输入范围一定与设定保持一致:即需要进行一次映射。

重点是使用简单的模糊机制,对趋近率 \dot{s}=-Ksgn(s)-s 中的参数 K 进行修正:

期望能在远离滑模面时增大 K ,而在到达滑模面时减小 K 。

这里举例利用 s\dot{s} 进行判断:当 s\dot{s}> 0 ,K 增大;当s\dot{s}< 0 ,K 减小;这里利用 \Delta K 作为模糊控制的输出,二者关系如图:

其实这里就已经能发现,类似于其他能够改善抖振现象的方法,由于模糊控制的输出与输入有一定的正相关性,但又具有一定的限度,可以很好的减弱抖振。

具体可以参考:【滑模控制】减弱抖振或噪声 趋近率的选择_摸鱼摸鱼疯狂摸鱼的博客-CSDN博客

利用s模糊,直接作为切换项(较准确)

 将s输入到模糊控制器中,输出的K直接就相当于经典滑模中的切换项Ksgn(s),利用滑模可以在不使用阶跃切换的条件下,不关注s值的数值,只关注s的符号,直接拿到在正负间类似于三角函数连续变换的K值:

这里使用的fuzzy是输入range=输出range=[-15 15],当用幅值为15的三角函数作输入测试时,得到的输出在11和-11之间波动,且在接近于0时跟随输入较好,如左图。因此只需要将输入S处理为范围15,可以通过原始的连续函数拿到s的范围大致是-0.05-0.015,因此给一个100的增益,时输入的s映射后落在输入范围内。仿真:

利用ss'模糊,输出的积分作为K

参考的是一篇论文中的做法,基本原理是,对于控制量中的Ksgn(s)切换项,如果ss'>0,应该增大K,加快运动到滑模面上的速度;如果ss'<0,应该减小K,使得在滑模面附近切换的速度减慢。

而趋近率就变成:\dot{s}=-G\int_{0}^{t}\Delta Kdt· sat(s)-s,G为经验增益;

这里很重要的一点是,如果发现K的变化太缓慢,即k对s变化的响应的快速性不太好,可以增大s=ce+e'里参数c。这里将c由初始的8改为50后,其余条件不变,仿真结果如图:

可以发现,速度也变快了,因为初始的K值较大。如果将模糊控制的方法与之前连续仿真中,用别的模块代替符号函数对比,发现抑制抖动的原理不太相同;如果用tanh等代替sgn,仿真得到的s仍然是正负间波动的:

但在这两个fuzzy的使用下输出s可以看出,在第二种使用sgn的处理中,除了初期很短时间,后来始终有s>0。如果把ss'拉出来可以看到:

利用ss'模糊 输出作为dK(参考文章的做法)

本质是在当远离滑模面时增大K,以提高速度;

当输出的增益设为0.8,而constant设为3

多次修改参数进行仿真,容易发现增益越大,跟随越好,越容易出现因为K的变化值较大产生的抖振;而增益减小,需要同时增大constant,会导致s的切换产生的阶跃增多,仍然产生抖振;

因此这种方法也许只能减弱抖振但不能完全消除,基本思路就是通过下面两种方式:

  1. 通过增大constant:gain=0.3 // cons=8

  2. 通过增大gain:gain=0.8 // cons=3

  • 6
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值