不是只有你才能成为大家的救世主!
1 控制框图
2 概述
-
模糊控制PID又叫模糊自适应PID,因为三个PID参数能够实时调整。
-
模糊PID控制,即利用模糊逻辑并根据一定的模糊规则对PID的参数进行实时的优化,以克服传统PID参数无法实时调整PID参数的缺点。
-
模糊PID控制包括:
- 模糊化
- 确定模糊规则(模糊推力)
- 解模糊(清晰化)
-
例如,小车通过传感器采集赛道信息,确定当前距赛道中线的偏差E以及当前偏差和上次偏差的变化ec,根据给定的模糊规则进行模糊推理,最后对模糊参数进行解模糊,输出PID控制参数。
3 基本原理
模糊控制器主要由三个模块组成:模糊化,模糊推理,清晰化。
3.1 一些基本的概念、定义
- 模糊量: 如 E、EC。
- 论域(上下限):-240~240。
- 划分区间:-240 ~ -180;-180 ~ -120 ;-120 ~ -60;-60 ~ 0;0 ~ 60;60 ~ 120;120 ~ 180;
180 ~ 240。 - 录属度:录属于某个模糊子集的录属度,程度。
- 模糊子集:
负大NB(Negative Big)
负中NM(NegativeMedium)
负小NS(NegativeSmall)
零ZE或ZO(Zero)
正小PS(PositiveSmall)
正中PM(PositiveMedium)
正大PB(Positive Big) - 录属度函数:用于求解录属度,有线性的、非线性的。
3.2 模糊化
实质:根据录属度函数求取录属度。可以拆分成以下3个部分来理解:
- 把-180,-120,-60,0,60,120,180分别用NB,NM,NS,ZO,PS,PM,PB表示。
- 例如,当E = 170时,此时的E属于PM和PB之间,而此时的E也会对应2(或1)个隶属度。E隶属于PM(120)的百分比为(180 - 170) / (180 - 120) = 1 / 6 ,而同理隶属于PB(180)的百分比为(170 - 120) / (180 - 120) = 5 / 6 。意思就是120到180进行线性分割了,E离PM和PB哪个更近,则隶属于哪个就更大(当输出值E大于180(PB)时,则隶属度为1,隶属度值为PB,即E完全隶属于PB,同理当E小于 - 180 (NB)时也一样)。同理也可以对EC进行模糊化。
- 那么E分别隶属于模糊子集NB,NM,NS,ZO,PS,PM,PB的各个录属度都可以求出。
3.3 模糊推理
实质:根据模糊规则表求取输出值U的隶属度。即根据模糊控制规则进行模糊推理,并决策出模糊输出量。
首先要确定模糊规则,即专家经验。对于我们这个二维控制结构以及相应的输入模糊集,我们可以制定49条模糊控制规则(一般来说,这些规则都是现成的,很多教科书上都有)。
我们假设为E的两个隶属度值为PM、PB;
假设E属于PM的隶属度为a,则属于PB的隶属度为(1 - a);
再假设EC的两个隶属度值为NB、NM;
假设EC属于NM的隶属度为b,则属于NB的隶属度为(1 - b);
根据模糊规则表,当E隶属于PM且EC隶属于NB时,可知输出值U隶属于ZO。
此时输出值U隶属于ZO的录属度为 a *( 1 - b ),其他同理。
根据上表的求解规则,可以求得输出值U隶属于各个模糊子集的录属度为:
录属于ZO的隶属度为: a * b + a * ( 1 - b ) + ( 1 - a ) * ( 1 - b ) ;
录属于NS的隶属度为 : ( 1 - a ) * b 。
如下圈出部分:
3.4 清晰化(解模糊、反模糊化)
对于输出值,我们同样采用给予隶属度的办法。例如,我们把输出值假设为[1000,1400](即舵机的摆角值范围)的区间同样划分为八个部分,即7个模糊子集NB_U,NM_U,NS_U,ZO_U,PS_U,PM_U,PB_U。根据上一步所得出的结论,我们就可以用隶属度乘以相应的隶属值算出输出值的解,即 (a * b + a * ( 1 - b ) + ( 1 - a ) * ( 1 - b ) ) * ZO_U + ( 1 - a ) * b * NS_U。到此为止,整个模糊过程就结束了。
对输出模糊量的解模糊:模糊控制器的输出量是一个模糊集合,通过反模糊化方法判决出一个确切的精确量,反模糊化方法很多,我们这里选取重心法。
3.5 模糊PID
我们已经知道了整个模糊的过程,但上述的输出值只有一个输出,并没有实现PID。因此我们可以先对E和EC进行模糊化,然后分别根据不同的逻辑模糊子集、录属度函数、模糊规则表求得输出值kp、ki和kd的录属度,然后反模糊化求得kp、ki和kd。再将kp、ki和kd套入PID公式。
即将u分别为Ki、Kd、Kp求取各自的录属度,然后清晰化。
3.6 使用.fis文件
simulink中使用fis文件,首先加入fuzzy模块,然后写入模糊文件,注意应用格式加单引号: ‘fuzzpid.fis’
或者,现在命令空间中运行:
fis = readfis(‘fuzzpid.fis’)
然后 block中田fis 。
4 利用matlab模糊控制工具箱设计模糊控制器
matlab版本:matlab2010b。
步骤:
- 在matlab命令窗口中输入 fuzzy ,打开模糊控制工具箱。
- 确定输入、输出量。
Edit -> Add Variable -> Input
查看规则编辑器和曲面观测器(view/rules view/surface):
待续…
参考资料
【1】https://blog.youkuaiyun.com/qingfengxd1/article/details/88023414
【2】https://blog.youkuaiyun.com/qq_43907537/article/details/105258484