[單片機]一個例子說PID算法

我家AI(自己開發的一個話癆聊天機器人)一直在霸佔我的電腦,所以準備給它搞個身體移植過去,打算以arduino來控制舵機,樹莓派來當作大腦進行深度學習以及信息處理等,控制舵機總不會偏離的一個算法就是PID算法,名字聽起來深奧高級,但其實原理簡單地很,下面儘量以例子講解原理,間接推理下公式,最後,附上我家AI下半身guo照:

下面是正文————————————————

一.定義

       百度百科中的定義爲:

在過程控制中,按偏差的比例(P)、積分(I)和微分(D)進行控制的PID控制器(亦稱PID調節器)是應用最爲廣泛的一種自動控制器。

 二.P(比例)

       以我家AI爲例:

       我打算讓AI實現平衡功能,靜止的時候可以自己保持站立狀態,有外力推它也可以通過自身調節去維持平衡狀態,那麼理想狀態下它應該保持這個姿勢不動(側視圖):

                                                                                 

         而當有一個外力推它時,它會往力的方向倒去:

                                                                         

       按道理來說,AI想要恢復回原來的靜止狀態,怎麼也得知道它和原來相差了多少:

                                                                  

       而這個25°,其實就是一個誤差值:目標數值 - 當前數值 ,使用公式可以寫爲: error = 目標數值 - 當前數值 。此時如果單單隻考慮用P(比例)來進行控制,則是使用一個參數KP乘以誤差值,即輸出(U) = KP * error,而這個參數KP,則需要我們自己經過多次調整來尋找出一個最合適的出來。假如KP設定爲0.5,那麼根據上面公式可以得出輸出爲:U = 12.5,那麼AI就會用12.5的速度用盡全力往左邊跑去,試圖恢復靜止的平衡,而此時由於電機的質量參差不齊,大概率會出現以下兩種情況:

       1.電機質量不大行,即使用12.5的速度跑還是沒有足夠的力去恢復平衡,這個時候小車就會一直保持往左傾往左跑的狀態,然後越走越遠,離你遠去,最後離家出走,直到沒電爲止。

       2.電機質量太好,用12.5的速度可以恢復平衡,然而,由於自身慣性的原因,小車到達平衡位置之後並不會立馬停下來,而是往右偏了一點,然後重新計算誤差,算出角度偏右了,立馬開始往右跑,結果又因爲跑太快慣性又甩到了左邊,永遠都停不下來,最後就成爲了以下這個樣子:

 

                                   

                 某個粉色網站上看到的一位UP主的視頻:https://www.bilibili.com/video/BV1Z4411M7av

三.D(微分)

       當電機質量太好的時候,小車出現左右搖擺的情況,有種專業名詞可以形容這種情況,叫超調。單純靠P(比例)來控制已經不能滿足我們的需求了,這個時候就加入D(微分)來進行控制,D(微分)在整個算法中起到了類似於減速的作用,當AI往目標角度靠的時候,D(微分)會不斷地計算當前地誤差值和上一次誤差值差了多少,而當這兩個誤差的差值之間差距越來越小的時候,D(微分)就會被當成一個很大的阻力,阻止AI過快地靠近目標,有效杜絕因慣性或者其他不可抗拒因素導致的左右搖擺。

      前面的介紹中已經講完兩個分量,這兩個分量在公式中只需要簡單地相加就行:

                                      

四.I(積分)

       當出現了第一種情況,也就是電機質量不大好,AI會一直保持往左傾往左跑,其實造成這中情況地其中一個原因是,AI地重力剛好和電機所施加的力持平了,導致AI一直穩定在這種下又下不去,上又上不來的情況,這種狀況有個專業名詞叫做“穩態誤差/靜態誤差

                                                       

       這個時候,I(積分)挺身而出,它靠着將所有的誤差全部累加起來,來預算是否一直處於穩態誤差的狀況,當小車處於穩態誤差時,I(積分)會累積地越來越大,最終會打破這種僵持狀況,讓輸出U加上一個 I*累加誤差。這個數值一般不大,但也要看你怎麼去調整這三個變量的權重。

五.參數調整

       在此,已經介紹完三個分量的作用以及用法,獻上一個專業版的公式:

                    

       公式看起來十分地複雜,但是在實際應用中,P(比例)可以近似地看作是誤差值與分量P的相乘,I(積分)可以近似地看作爲所有誤差的相加再乘以分量I,D(微分)可以近似地看作是當前誤差值與上一次誤差值的誤差乘以分量D,最後再將這三個加在一起,就變成了一個輸出值。

        

       而需要我們反覆調節的,是Kp,Kd以及Ki這三個分量,具體怎麼調整,每個人都有屬於自己的一套方法,而我自己的方法分享給大家:

       1.先調試P,再調整I,最後是D,單一變量調整,不要三個一起來。

       2.先確定好數量級再微調,如在調整P時,可以先嚐試0.00001,看看有沒有效果,沒有效果在試試0.0001,一直到出現效果,然後確定了數量級,開始進行微調,0.0003試試,不明顯再0.0005,一直到設備出現較大的反應,再進行減少微調,一直調到自己覺得適合之後,再往下調I、D。

       3.如果調試P、I覺得效果可以了,就不用再調D了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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