模糊PID算法

 在講解模糊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 ) *  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好。

 

4. 部分解釋

     4.1對於部分論文所說的重心法解模糊,其實就是上述方法。公式如下。

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

參考

[1] https://blog.csdn.net/weixin_36340979/article/details/79168052

[2] https://blog.csdn.net/foxclever/article/details/83932107

發佈了158 篇原創文章 · 獲贊 42 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章