看完你就懂的PID算法

PID算法簡介

PID即:Proportional(比例)、Integral(積分)、Differential(微分)的縮寫。顧名思義,PID控制算法是結合比例、積分和微分三種環節於一體的控制算法。PID算法已經有105年的歷史了,它在很多地方都有它的應用,如汽車的定速巡航、3D打印機的溫溼度控制器、自平衡小車、四旋翼等等。PID控制的實質就是根據輸入的偏差值,按照比例、積分、微分的函數關係進行運算,運算結果用以控制輸出
連續控制系統的理想PID控制規律爲:在這裏插入圖片描述
Kp——比例增益,Kp與比例度成倒數關係;

Tt——積分時間常數;

TD——微分時間常數;

爲什麼要使用PID(生活實例)

假設有一個水池,我們要給它加水到一定的高度並且保持不變。每次讓人去加水並測試距離要保持高度差多少,通過比例來控制是一定可以完成的。但是一旦出現水池漏水的情況。一邊加水一邊漏水,當加水的速度與漏水的速度恰好相等時,那麼就會存在一個液位差!那麼就會導致控制系統中會一直存在一個靜態誤差。(當漏水的速度爲1cm/s時,而補償系統用誤差(err)乘以Kp時也剛好等於1cm/s的速度往裏面補水)就會導致剛補進去的水就會漏掉。就會導致始終有一段固定的誤差沒有進行彌補,所以我們就需要一個輸出系統檢測,然後通過檢測來彌補這個誤差
在這裏插入圖片描述

比例控制算法

還是用生活中實際的實例來舉例說明吧!比如我想穩定一壺水的溫度爲50度,水溫低於50度就加熱,水溫低於50度就降溫,水溫接近就輕輕加熱,水溫差值大就努力加熱。這就是Kp的作用保持偏差與比例的一個調節
假設水的初始溫度爲5攝氏度,目標溫度爲50攝氏度。那麼當前時刻的溫度和目標溫度存在一個誤差error,且error爲45時,此時通過加熱來控制水溫。如果單純的用比例控制算法,就是指升高的溫度T和誤差error是成正比的。即
T=kperror
假設kp取0.6,
那麼t=1時(表示第1次升溫,也就是第一次對系統施加控制),那麼T=0.6
45=27,所以這一次升高的溫度會使水溫在5的基礎上上升27,達到32。
接着,t=2時刻(第2次施加控制),當前水溫爲32,所以error是28。u=28*0.4=11.2,會使水位再次上升11.2,達到43.2。
如此循環下去就會發現水溫可以近似到達50度,但是多多少少會有一些誤差,不能剛剛好到大50度。

微分控制算法

還是水溫加熱的例子,當要保持水溫爲50度的時候不管是加熱還是降溫都不能直接剛剛好達到50度,溫度會在50度上下晃晃悠悠的一個小範圍的擺動。我們就需要另一個量KD這種擺動更加平緩。也就是如果P讓車開的太快,D就要讓P儘快的剎車。
微分,說白了在離散情況下,就是error的差值,就是t時刻和t-1時刻error的差,即T=kd*(error(t)-error(t-1)),其中的kd是一個係數項。可以看到,在剎車過程中,因爲error是越來越小的,所以這個微分控制項一定是負數,在控制中加入一個負數項,他存在的作用就是爲了防止汽車由於剎車不及時而闖過了線。從常識上可以理解,越是靠近停車線,越是應該注意踩剎車,不能讓車過線,所以這個微分項的作用,就可以理解爲剎車,當車離停車線很近並且車速還很快時,這個微分項的絕對值(實際上是一個負數)就會很大,從而表示應該用力踩剎車才能讓車停下來。
那麼切換到剛纔水加溫的例子,就是水溫快要接近50度時加入微分項,可以避免水溫超過50度,說白了就是讓這種波動更加平緩。

積分控制算法

依舊拿水加溫的例子,P在加溫但是外界的環境散熱很快,P覺得自己很快就到50度了就一直在這個緩慢的加熱,D也看到P比較穩定也就不動作啦,但是這個時候水是永遠加熱不到50度的(存在偏差)。那麼這個時候就需要增加功率,也就需要一個KI的值設置一個積分量只要現有的值和目標值有偏差就不斷的對偏差進行積分的累加。這樣隨着時間的推移系統就知道自己沒有達到目標的溫度,這時候就應該增加功率最後總是能夠達到目標的。所以 I 的作用就是減小靜態誤差,讓受控物體更接近目標值
還是用上面的例子,如果僅僅用比例和微分,可以發現存在暫態誤差,最後的水溫就卡在43.2攝氏度了。於是,在控制中,我們再引入一個分量,該分量和誤差的積分是正比關係。所以,比例+積分控制算法爲:
T=kp*error+ ki∗∫∫error
還是用上面的例子來說明,第一次的誤差error是45,第二次的誤差是28,至此,誤差的積分(離散情況下積分其實就是做累加),∫∫error=45+28=73。 這個時候的控制量,除了比例的那一部分,還有一部分就是一個係數ki乘以這個積分項。由於這個積分項會將前面若干次的誤差進行累計,所以可以很好的消除穩態誤差(假設在僅有比例項的情況下,系統卡在穩態誤差了,即上例中的43.2,由於加入了積分項的存在,會讓輸入增大,從而使得水溫可以大於43.2,漸漸到達目標的50)
講到這裏,相信大家對PID有了一定的理解,剩下的就是實踐了。在真正的工程實踐中,最難就是是如何確定三個項的係數,這就需要大量的實驗以及經驗來決定了。通過不斷的嘗試和不斷的思考,才能得到合適的係數,實現優良的控制器。同時借鑑了另一位博主的文章(鏈接)希望對大家有幫助!

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