模糊控制(五)模糊PID基本原理及matlab仿真實現(小白入門)

模糊控制(五)模糊PID基本原理及matlab仿真實現(小白入門)

上篇從感性的角度BB了對模糊控制的認識,這篇理(直)論(男)一點。

@@@
1.轉自 https://blog.csdn.net/weixin_36340979/article/details/79168052
@
在講解模糊PID前,我們先要了解PID控制器的原理(本文主要介紹模糊PID的運用,對PID控制器的原理不做詳細介紹)。PID控制器(比例-積分-微分控制器)是一個在工業控制應用中常見的反饋迴路部件,由比例單元P、積分單元I和微分單元D組成。PID控制的基礎是比例控制;積分控制可消除穩態誤差,但可能增加超調;微分控制可加快大慣性系統響應速度以及減弱超調趨勢。

1.1傳統PID控制
在這裏插入圖片描述
傳統PID控制器自出現以來,憑藉其結構簡單、穩定性好、工作可靠、調整方便等優點成爲工業控制主要技術。當被控對象的結構和參數具有一定的不確定性,無法對其建立精確的模型時,採用PID控制技術尤爲方便。PID控制原理簡單、易於實現,但是其參數整定異常麻煩。對於小車的速度控制系統而言,由於其爲時變非線性系統不同時刻需要選用不同的PID參數,採用傳統的PID控制器,很難使整個運行過程具有較好的運行效果。

1.2模糊PID控制

模糊PID控制,即利用模糊邏輯並根據一定的模糊規則對PID的參數進行實時的優化,以克服傳統PID參數無法實時調整PID參數的缺點。模糊PID控制包括模糊化,確定模糊規則,解模糊等組成部分。小車通過傳感器採集賽道信息,確定當前距賽道中線的偏差E以及當前偏差和上次偏差的變化ec,根據給定的模糊規則進行模糊推理,最後對模糊參數進行解模糊,輸出PID控制參數。
在這裏插入圖片描述
2.1模糊化

模糊控制器主要由三個模塊組成:模糊化,模糊推理,清晰化。具體如下圖所示。而我們將一步步講解如何將模糊PID算法運用到智能車上。(最好用筆一步步自己寫一遍!!!)
在這裏插入圖片描述
首先我們的智能車會採集到賽道的相關數據,例如攝像頭車,其採集到的數據經過算法處理之後會得到與中線的偏差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,我們可以推出它們各所佔的隸屬度,此時我們可以根據模糊規則表去找出輸出值所對應的隸屬度。
在這裏插入圖片描述

我們假設爲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 )(看圖)。
在這裏插入圖片描述

同理我們可以得出,當輸出值屬於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(第三步求解的時候需要用到隸屬度之和)。
在這裏插入圖片描述

因此,我們知道了輸出值爲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的三個參數)進行求解,再套入公式。
在這裏插入圖片描述

一般的我們也可以只用kp,kd,不用ki。而模糊規則表一般的論文已經基本給出。因此帶入算法之後我們的難度也只是在於調節kp,kd,和適當調節規則表。當然調節的難度會大於普通的PID,因爲還要定kp,kd的輸出範圍,調得不好可能效果並沒有普通的PID好。

  1. 部分解釋

4.1對於部分論文所說的重心法解模糊,其實就是上述方法。公式如下。
在這裏插入圖片描述

式中μ(Zi) * Zi相當於文章上面的(a * b + a * ( 1 - b ) + ( 1 - a ) * ( 1 - b ) ) * ZO + ( 1 - a ) * b * NS,即隸屬度乘以隸屬度值之和,而μ(Zi)之和就是輸出值的隸屬度之和,我們已經證明它是等於1的

PS:模糊控制表在相關書籍中都有,都是前輩的經驗,一般的無需修改即可,不過如果自己要配自己的數據也可以自己配,邏輯關係理清楚就可以了,反正我自己理來理去還是挺鍛鍊對pid三個變量的理解的,當然不止pid,模糊控制也可以單獨使用,很靈活的,重點就是各個參數範圍確定,這是影響模糊控制最重要的因素。
|
|
|
@@@
2.轉自:https://blog.csdn.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,回車就會出來這樣一個窗口。
在這裏插入圖片描述

下面我們都是在這樣一個窗口中進行模糊控制器的設計。

1)確定模糊控制器結構:即根據具體的系統確定輸入、輸出量。

這裏我們可以選取標準的二維控制結構,即輸入爲誤差e和誤差變化ec,輸出爲控制量u。注意這裏的變量還都是精確量。相應的模糊量爲E,EC和U,我們可以選擇增加輸入(Add Variable)來實現雙入單出控制結構。
在這裏插入圖片描述

2)輸入輸出變量的模糊化:即把輸入輸出的精確量轉化爲對應語言變量的模糊集合。

首先我們要確定描述輸入輸出變量語言值的模糊子集,如{NB,NM,NS,ZO,PS,PM,PB},並設置輸入輸出變量的論域,例如我們可以設置誤差E(此時爲模糊量)、誤差變化EC、控制量U的論域均爲{-3,-2,-1,0,1,2,3};然後我們爲模糊語言變量選取相應的隸屬度函數。

在模糊控制工具箱中,我們在Member Function Edit中即可完成這些步驟。首先我們打開Member Function Edit窗口.
在這裏插入圖片描述
在這裏插入圖片描述

然後分別對輸入輸出變量定義論域範圍,添加隸屬函數,以E爲例,設置論域範圍爲[-3 3],添加隸屬函數的個數爲7.
在這裏插入圖片描述

然後根據設計要求分別對這些隸屬函數進行修改,包括對應的語言變量,隸屬函數類型。
在這裏插入圖片描述

3)模糊推理決策算法設計:即根據模糊控制規則進行模糊推理,並決策出模糊輸出量。

首先要確定模糊規則,即專家經驗。對於我們這個二維控制結構以及相應的輸入模糊集,我們可以制定49條模糊控制規則(一般來說,這些規則都是現成的,很多教科書上都有),如圖。
在這裏插入圖片描述

制定完之後,會形成一個模糊控制規則矩陣,然後根據模糊輸入量按照相應的模糊推理算法完成計算,並決策出模糊輸出量。

4)對輸出模糊量的解模糊:模糊控制器的輸出量是一個模糊集合,通過反模糊化方法判決出一個確切的精確量,凡模糊化方法很多,我們這裏選取重心法。

在這裏插入圖片描述

5)然後Export to disk,即可得到一個.fis文件,這就是你所設計的模糊控制器。
在這裏插入圖片描述

6)simulink中使用fis文件,首先加入fuzzy模塊,然後寫入模糊文件,注意應用格式加單引號: ‘fuzzpid.fis’
在這裏插入圖片描述

2、模糊控制pid實例

模糊PID控制,即利用模糊邏輯並根據一定的模糊規則對PID的參數進行實時的優化,以克服傳統PID參數無法實時調整PID參數的缺點。模糊PID控制包括模糊化,確定模糊規則,解模糊等組成部分。小車通過傳感器採集賽道信息,確定當前距賽道中線的偏差E以及當前偏差和上次偏差的變化ec,根據給定的模糊規則進行模糊推理,最後對模糊參數進行解模糊,輸出PID控制參數。

在這裏插入圖片描述

KP的模糊規則控制表

在這裏插入圖片描述
KI的模糊規則控制表
在這裏插入圖片描述
KD的模糊規則控制表
在這裏插入圖片描述
在這裏插入圖片描述模糊推理系統結構圖

輸入變量的隸屬取三角形函數,如下:
在這裏插入圖片描述

誤差變量E的隸屬函數

在這裏插入圖片描述

誤差變化變量EC的隸屬函數

輸出變量的隸屬同樣取三角形函數,如下:

在這裏插入圖片描述

輸出變量KP的隸屬函數

在這裏插入圖片描述

輸出變量KD的隸屬函數

在這裏插入圖片描述

輸出變量KI的隸屬函數

確定了輸入和輸出隸屬函數後,在模糊規則編輯器中,輸入表格中的模糊推理規則,共49條,如下圖
在這裏插入圖片描述

模糊推理編輯器

此時得到的三參數的變化如下圖
在這裏插入圖片描述

模糊推理KP變化圖

在這裏插入圖片描述

模糊推理KI變化圖

在這裏插入圖片描述

模糊推理KD變化圖

在這裏插入圖片描述
在這裏插入圖片描述

運行仿真得到結果

PS:前半部分從理論的層面通俗的講解了啥叫模糊控制,後半部分主要是仿真操作,中間會有一些BUG,抽空會再寫一篇我過程中間遇到的所有BUG和解決。

上文:模糊控制(四)模糊控制的感性認識

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章