[轉]PID控制算法原理

PID控制算法是工業界使用極其普遍的一個負反饋算法,相信這個算法在作系統軟件時也有用武之處,這裏摘錄了知乎上的一篇文章,後面學習更多後本身總結一篇算法

 

如下爲原文:編程

PID控制應該算是應用很是普遍的控制算法了。小到控制一個元件的溫度,大到控制無人機的飛行姿態和飛行速度等等,均可以使用PID控制。這裏咱們從原理上來理解PID控制。 
PID(proportion integration differentiation)其實就是指比例,積分,微分控制。先把圖片和公式擺出來,看不懂不要緊。(一開始看這個算法,公式能看懂,具體怎麼用怎麼寫代碼也知道,可是就是不知道原理,不知道爲何要用比例,微分,積分這3個項才能實現最好的控制,用其中兩個爲何不行,用了3個項能好在哪裏,每個項各有什麼做用)函數

 

 

總的來講,當獲得系統的輸出後,將輸出通過比例,積分,微分3種運算方式,疊加到輸入中,從而控制系統的行爲,下面用一個簡單的實例來講明。學習

比例控制算法

咱們先說PID中最簡單的比例控制,拋開其餘兩個不談。仍是用一個經典的例子吧。假設我有一個水缸,最終的控制目的是要保證水缸裏的水位永遠的維持在1米的高度。假設初始時刻,水缸裏的水位是0.2米,那麼當前時刻的水位和目標水位之間是存在一個偏差的error,且error爲0.8.這個時候,假設旁邊站着一我的,這我的經過往缸里加水的方式來控制水位。若是單純的用比例控制算法,就是指加入的水量u和偏差error是成正比的。即 
u=kp*error 
假設kp取0.5, 
那麼t=1時(表示第1次加水,也就是第一次對系統施加控制),那麼u=0.5*0.8=0.4,因此這一次加入的水量會使水位在0.2的基礎上上升0.4,達到0.6. 
接着,t=2時刻(第2次施加控制),當前水位是0.6,因此error是0.4。u=0.5*0.4=0.2,會使水位再次上升0.2,達到0.8. 
如此這麼循環下去,就是比例控制算法的運行方法。 
能夠看到,最終水位會達到咱們須要的1米。 
可是,單單的比例控制存在着一些不足,其中一點就是 –穩態偏差!(我也是看了不少,而且想了很久纔想通什麼是穩態偏差以及爲何有穩態偏差)。 
像上述的例子,根據kp取值不一樣,系統最後都會達到1米,只不過kp大了到達的快,kp小了到達的慢一些。不會有穩態偏差。可是,考慮另一種狀況,假設這個水缸在加水的過程當中,存在漏水的狀況,假設每次加水的過程,都會漏掉0.1米高度的水。仍然假設kp取0.5,那麼會存在着某種狀況,假設通過幾回加水,水缸中的水位到0.8時,水位將不會再變換!!!由於,水位爲0.8,則偏差error=0.2. 因此每次往水缸中加水的量爲u=0.5*0.2=0.1.同時,每次加水,缸裏又會流出去0.1米的水!!!加入的水和流出的水相抵消,水位將再也不變化!! 
也就是說,個人目標是1米,可是最後系統達到0.8米的水位就再也不變化了,且系統已經達到穩定。由此產生的偏差就是穩態偏差了。3d

(在實際狀況中,這種相似水缸漏水的狀況每每更加常見,好比控制汽車運動,摩擦阻力就至關因而「漏水」,控制機械臂、無人機的飛行,各種阻力和消耗均可以理解爲本例中的「漏水」)
因此,單獨的比例控制,在不少時候並不能知足要求。orm

積分控制算法

仍是用上面的例子,若是僅僅用比例,能夠發現存在暫態偏差,最後的水位就卡在0.8了。因而,在控制中,咱們再引入一個份量,該份量和偏差的積分是正比關係。因此,比例+積分控制算法爲: 
u=kp*error+ ki∗∫ error 
仍是用上面的例子來講明,第一次的偏差error是0.8,第二次的偏差是0.4,至此,偏差的積分(離散狀況下積分其實就是作累加),∫error=0.8+0.4=1.2. 這個時候的控制量,除了比例的那一部分,還有一部分就是一個係數ki乘以這個積分項。因爲這個積分項會將前面若干次的偏差進行累計,因此能夠很好的消除穩態偏差(假設在僅有比例項的狀況下,系統卡在穩態偏差了,即上例中的0.8,因爲加入了積分項的存在,會讓輸入增大,從而使得水缸的水位能夠大於0.8,漸漸到達目標的1.0.)這就是積分項的做用。blog

微分控制算法

換一個另外的例子,考慮剎車狀況。平穩的駕駛車輛,當發現前面有紅燈時,爲了使得行車平穩,基本上提早幾十米就放鬆油門並踩剎車了。當車輛離停車線很是近的時候,則使勁踩剎車,使車輛停下來。整個過程能夠看作一個加入微分的控制策略。 
微分,說白了在離散狀況下,就是error的差值,就是t時刻和t-1時刻error的差,即u=kd*(error(t)-error(t-1)),其中的kd是一個係數項。能夠看到,在剎車過程當中,由於error是愈來愈小的,因此這個微分控制項必定是負數,在控制中加入一個負數項,他存在的做用就是爲了防止汽車因爲剎車不及時而闖過了線。從常識上能夠理解,越是靠近停車線,越是應該注意踩剎車,不能讓車過線,因此這個微分項的做用,就能夠理解爲剎車,當車離停車線很近而且車速還很快時,這個微分項的絕對值(其實是一個負數)就會很大,從而表示應該用力踩剎車才能讓車停下來。 
切換到上面給水缸加水的例子,就是當發現水缸裏的水快要接近1的時候,加入微分項,能夠防止給水缸裏的水加到超過1米的高度,說白了就是減小控制過程當中的震盪。圖片

如今在回頭看這個公式,就很清楚了 element


括號內第一項是比例項,第二項是積分項,第三項是微分項,前面僅僅是一個係數。不少狀況下,僅僅須要在離散的時候使用,則控制能夠化爲 get

 


每一項前面都有係數,這些係數都是須要實驗中去嘗試而後肯定的,爲了方便起見,將這些係數進行統一一下: 


這樣看就清晰不少了,且比例,微分,積分每一個項前面都有一個係數,且離散化的公式,很適合編程實現。 
講到這裏,PID的原理和方法就說完了,剩下的就是實踐了。在真正的工程實踐中,最難的是若是肯定三個項的係數,這就須要大量的實驗以及經驗來決定了。經過不斷的嘗試和正確的思考,就能選取合適的係數,實現優良的控制器。


文章發佈到如今,發現評論中有些頗有價值的信息,因此在此將評論中的精彩內容也作一個總結,方便你們進一步學習和交流。你們對於文章有任何的意見或建議,以及關於相關內容的討論和感想,均可以發到評論裏與你們一塊兒交流,共同進步。

 

那爲啥不加入更進一步的,微分的微分或者微分的微分的微分呢。若是有其餘因素,該如何使用PID呢 ——

 

做者回復:我覺這個問題問的很是好,因此我本身先回答一下個人見解。PID這個算法呢,你說它有嚴格的數學證實嗎,貌似也沒有,說它不嚴謹吧,可是某些狀況下確實有挺管用的。在使用的過程當中,各個份量的各個參數基本上都須要經過實驗試出來的。某些狀況下僅僅只有P或者只有PI,效果就達到要求了,因此也就不須要再考慮其餘的了。PID三種份量的結合使用,加上大量的實驗來肯定合適的參數,基本上就能知足咱們的需求了。 —— 

 

通常來講微分環節至關於放大了反饋信號中的高頻份量,若是取得係數很差會引發高頻震盪。因此大部分應用都只採用PI(不影響穩態精度)或者雙閉環PI。至於微分的微分等一些量在物理上並無實際意義,好比調速中轉速的微分是加速度,再次微分就基本不用了。固然若是學過自控理論則能夠從系統傳遞函數來分析須要加入什麼樣的控制器來保持系統穩定收斂。—— 

 

好問題,通常狀況pi或者pd就能搞定,原本加i就會讓系統不穩定,若是外加i或者d系統的穩定性有可能會進一步受影響,具體緣由得看博德圖解釋。不過這種控制器確實有,不過不會直接加,通常配合加一個極點或者一個零點。—— 

 

 

我喜歡這樣理解pid: p是控制如今,i是糾正曾經,d是管控將來!只有不忘過往,把握當前,規劃將來才能讓人生的軌跡按照既定的目標前進。講真,理解了彈性阻尼系統,對pid的內涵會更加深入。—— 

 

做者回復:其餘的不少評論裏,也提到了p表明如今,i表明過去的這種觀點,這裏就不一一列舉啦。 ——— 

 

轉載來源:https://zhuanlan.zhihu.com/p/39573490

相關文章
相關標籤/搜索