模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

上篇从感性的角度BB了对模糊控制的认识,这篇理(直)论(男)一点。

@@@
1.转自 https://blog.****.net/weixin_36340979/article/details/79168052
@
在讲解模糊PID前,我们先要了解PID控制器的原理(本文主要介绍模糊PID的运用,对PID控制器的原理不做详细介绍)。PID控制器(比例-积分-微分控制器)是一个在工业控制应用中常见的反馈回路部件,由比例单元P、积分单元I和微分单元D组成。PID控制的基础是比例控制;积分控制可消除稳态误差,但可能增加超调;微分控制可加快大惯性系统响应速度以及减弱超调趋势。

1.1传统PID控制
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)
传统PID控制器自出现以来,凭借其结构简单、稳定性好、工作可靠、调整方便等优点成为工业控制主要技术。当被控对象的结构和参数具有一定的不确定性,无法对其建立精确的模型时,采用PID控制技术尤为方便。PID控制原理简单、易于实现,但是其参数整定异常麻烦。对于小车的速度控制系统而言,由于其为时变非线性系统不同时刻需要选用不同的PID参数,采用传统的PID控制器,很难使整个运行过程具有较好的运行效果。

1.2模糊PID控制

模糊PID控制,即利用模糊逻辑并根据一定的模糊规则对PID的参数进行实时的优化,以克服传统PID参数无法实时调整PID参数的缺点。模糊PID控制包括模糊化,确定模糊规则,解模糊等组成部分。小车通过传感器采集赛道信息,确定当前距赛道中线的偏差E以及当前偏差和上次偏差的变化ec,根据给定的模糊规则进行模糊推理,最后对模糊参数进行解模糊,输出PID控制参数。
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)
2.1模糊化

模糊控制器主要由三个模块组成:模糊化,模糊推理,清晰化。具体如下图所示。而我们将一步步讲解如何将模糊PID算法运用到智能车上。(最好用笔一步步自己写一遍!!!)
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)
首先我们的智能车会采集到赛道的相关数据,例如摄像头车,其采集到的数据经过算法处理之后会得到与中线的偏差E,以及当前偏差和上次偏差的变化(差值)EC两个值(即此算法为2维输入,同理也可以是1维和3维,但2维更适合智能车)。例如此时车偏离中线的距离为150,而上一时刻偏离中线的距离为120,则E为150,EC为150 - 120 = 30。

其次我们要对这两个值进行模糊化。这里我们对E进行举例。摄像头车采集回来的E是有范围的,即与中线的偏差是在一个区间内可行的。在这里我们假设该区间为-240到240,即小车偏离中线的最大距离为240,正负即为左右。再假设中线偏差变化率的可行区间为-40到+40。

接着我们要对这两个值进行模糊化。我现在将E的区间(-240 到 240)分成8个部分,那么他们分别为-240 ~ -180,-180 ~ -120 ,-120 ~ -60,-60 ~ 0,0 ~ 60,60 ~ 120,120 ~ 180,180 ~ 240。然后我们把-180,-120,-60,0,60,120,180分别用NB,NM,NS,ZO,PS,PM,PB表示(个人理解N为negative,P为positive,B为big,M为middle,S为small,ZO为zero)。例如,当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进行模糊化。

2.2 模糊推理

对于采集回来的E和EC,我们可以推出它们各所占的隶属度,此时我们可以根据模糊规则表去找出输出值所对应的隶属度。
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

我们假设为E的两个隶属度值为PM、PB,E属于PM的隶属度为a(a < 1),则属于PB的隶属度为(1 - a)。再假设EC的两个隶属度值为NB、NM,EC属于NM的隶属度为b,则属于NB的隶属度为(1 - b)。而在假设中,E属于PM的隶属度为a,EC属于NB的隶属度为( 1 - b ),则输出值属于ZO的隶属度为a *( 1 - b )(看图)。
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

同理我们可以得出,当输出值属于ZO的另外两个隶属度为a * b, ( 1 - a ) * ( 1 - b) ,而输出值属于NS的隶属度为( 1 - a ) * 1 - b。

在这里我们先证明一个条件,将这四个隶属度加起来,刚好等于1。这是因为

(a + (1 - a)) * (b + (1 - b)) = a * b + ( 1 - a ) * b + a * ( 1 - b ) + ( 1 - a ) * ( 1 - b ) (下图)

即一个十字相乘的概念。这个等式说明输出值的隶属度之和等于1(第三步求解的时候需要用到隶属度之和)。
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

因此,我们知道了输出值为ZO的隶属度和为 a * b + a * ( 1 - b ) + ( 1 - a ) * ( 1 - b ) ,输出值为NS的隶属度为 ( 1 - a ) * b 。

2.3 清晰化

对于输出值,我们同样采用给予隶属度的办法。例如,我们把输出值假设为[1000,1400](即舵机的摆角值范围)的区间同样划分为八个部分,即7个隶属值NB,NM,NS,ZO,PS,PM,PB。根据上一步所得出的结论,我们就可以用隶属度乘以相应的隶属值算出输出值的解,即 (a * b + a * ( 1 - b ) + ( 1 - a ) * ( 1 - b ) ) * ZO + ( 1 - a ) * b * NS。到此为止,整个模糊过程就结束了。

3 模糊PID

我们已经知道了整个模糊的过程,但上述的过程还不够完美。因为我们的输出值只有一个输出,并没有实现PID。因此我们可以先对E和EC进行模糊化,然后分别对kp和ki和kd(PID的三个参数)进行求解,再套入公式。
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

一般的我们也可以只用kp,kd,不用ki。而模糊规则表一般的论文已经基本给出。因此带入算法之后我们的难度也只是在于调节kp,kd,和适当调节规则表。当然调节的难度会大于普通的PID,因为还要定kp,kd的输出范围,调得不好可能效果并没有普通的PID好。

  1. 部分解释

4.1对于部分论文所说的重心法解模糊,其实就是上述方法。公式如下。
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

式中μ(Zi) * Zi相当于文章上面的(a * b + a * ( 1 - b ) + ( 1 - a ) * ( 1 - b ) ) * ZO + ( 1 - a ) * b * NS,即隶属度乘以隶属度值之和,而μ(Zi)之和就是输出值的隶属度之和,我们已经证明它是等于1的

PS:模糊控制表在相关书籍中都有,都是前辈的经验,一般的无需修改即可,不过如果自己要配自己的数据也可以自己配,逻辑关系理清楚就可以了,反正我自己理来理去还是挺锻炼对pid三个变量的理解的,当然不止pid,模糊控制也可以单独使用,很灵活的,重点就是各个参数范围确定,这是影响模糊控制最重要的因素。
|
|
|
@@@
2.转自:https://blog.****.net/qingfengxd1/article/details/88023414?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
@

Matlab模糊控制工具箱为模糊控制器的设计提供了一种非常便捷的途径,通过它我们不需要进行复杂的模糊化、模糊推理及反模糊化运算,只需要设定相应参数,就可以很快得到我们所需要的控制器,而且修改也非常方便。下面将根据模糊控制器设计步骤,一步步利用Matlab工具箱设计模糊控制器。

1、模糊控制工具箱使用

首先我们在Matlab的命令窗口(command window)中输入fuzzy,回车就会出来这样一个窗口。
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

下面我们都是在这样一个窗口中进行模糊控制器的设计。

1)确定模糊控制器结构:即根据具体的系统确定输入、输出量。

这里我们可以选取标准的二维控制结构,即输入为误差e和误差变化ec,输出为控制量u。注意这里的变量还都是精确量。相应的模糊量为E,EC和U,我们可以选择增加输入(Add Variable)来实现双入单出控制结构。
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

2)输入输出变量的模糊化:即把输入输出的精确量转化为对应语言变量的模糊集合。

首先我们要确定描述输入输出变量语言值的模糊子集,如{NB,NM,NS,ZO,PS,PM,PB},并设置输入输出变量的论域,例如我们可以设置误差E(此时为模糊量)、误差变化EC、控制量U的论域均为{-3,-2,-1,0,1,2,3};然后我们为模糊语言变量选取相应的隶属度函数。

在模糊控制工具箱中,我们在Member Function Edit中即可完成这些步骤。首先我们打开Member Function Edit窗口.
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

然后分别对输入输出变量定义论域范围,添加隶属函数,以E为例,设置论域范围为[-3 3],添加隶属函数的个数为7.
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

然后根据设计要求分别对这些隶属函数进行修改,包括对应的语言变量,隶属函数类型。
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

3)模糊推理决策算法设计:即根据模糊控制规则进行模糊推理,并决策出模糊输出量。

首先要确定模糊规则,即专家经验。对于我们这个二维控制结构以及相应的输入模糊集,我们可以制定49条模糊控制规则(一般来说,这些规则都是现成的,很多教科书上都有),如图。
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

制定完之后,会形成一个模糊控制规则矩阵,然后根据模糊输入量按照相应的模糊推理算法完成计算,并决策出模糊输出量。

4)对输出模糊量的解模糊:模糊控制器的输出量是一个模糊集合,通过反模糊化方法判决出一个确切的精确量,凡模糊化方法很多,我们这里选取重心法。

模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

5)然后Export to disk,即可得到一个.fis文件,这就是你所设计的模糊控制器。
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

6)simulink中使用fis文件,首先加入fuzzy模块,然后写入模糊文件,注意应用格式加单引号: ‘fuzzpid.fis’
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

2、模糊控制pid实例

模糊PID控制,即利用模糊逻辑并根据一定的模糊规则对PID的参数进行实时的优化,以克服传统PID参数无法实时调整PID参数的缺点。模糊PID控制包括模糊化,确定模糊规则,解模糊等组成部分。小车通过传感器采集赛道信息,确定当前距赛道中线的偏差E以及当前偏差和上次偏差的变化ec,根据给定的模糊规则进行模糊推理,最后对模糊参数进行解模糊,输出PID控制参数。

模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

KP的模糊规则控制表

模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)
KI的模糊规则控制表
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)
KD的模糊规则控制表
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)模糊推理系统结构图

输入变量的隶属取三角形函数,如下:
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

误差变量E的隶属函数

模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

误差变化变量EC的隶属函数

输出变量的隶属同样取三角形函数,如下:

模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

输出变量KP的隶属函数

模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

输出变量KD的隶属函数

模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

输出变量KI的隶属函数

确定了输入和输出隶属函数后,在模糊规则编辑器中,输入表格中的模糊推理规则,共49条,如下图
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

模糊推理编辑器

此时得到的三参数的变化如下图
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

模糊推理KP变化图

模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

模糊推理KI变化图

模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

模糊推理KD变化图

模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)
模糊控制(五)模糊PID基本原理及matlab仿真实现(小白入门)

运行仿真得到结果

PS:前半部分从理论的层面通俗的讲解了啥叫模糊控制,后半部分主要是仿真操作,中间会有一些BUG,抽空会再写一篇我过程中间遇到的所有BUG和解决。

上文:模糊控制(四)模糊控制的感性认识