四轴PID控制算法详解(单环PID、串级PID)
正文開始:這篇文章分為三個部分:
- PID原理普及
- 常用四軸的兩種PID算法講解(單環PID、串級PID)
- 如何做到垂直起飛、四軸飛行時為何會飄、如何做到脫控?
PID原理普及
1、??對自動控制系統的基本要求:
? ?? ???穩、準、快:
? ?? ???穩定性(P和I降低系統穩定性,D提高系統穩定性):在平衡狀態下,系統受到某個干擾后,經過一段時間其被控量可以達到某一穩定狀態;
? ?? ???準確性(P和I提高穩態精度,D無作用):系統處于穩態時,其穩態誤差;
? ?? ???快速性(P和D提高響應速度,I降低響應速度):系統對動態響應的要求。一般由過渡時間的長短來衡量。
2、??穩定性:當系統處于平衡狀態時,受到某一干擾作用后,如果系統輸出能夠恢復到原來的穩態值,那么系統就是穩定的;否則,系統不穩定。
3、??動態特性(暫態特性,由于系統慣性引起):系統突加給定量(或者負載突然變化)時,其系統輸出的動態響應曲線。延遲時間、上升時間、峰值時間、調節時間、超調量和振蕩次數。
通常:? ??上升時間和峰值時間用來評價系統的響應速度;
? ?? ?? ?? ?? ? 超調量用來評價系統的阻尼程度;
? ?? ?? ?? ?? ? 調節時間同時反應響應速度和阻尼程度;
4、??穩態特性:在參考信號輸出下,經過無窮時間,其系統輸出與參考信號的誤差。影響因素:系統結構、參數和輸入量的形式等
5、??比例(P)控制規律:具有P控制的系統,其穩態誤差可通過P控制器的增益Kp來調整:Kp越大,穩態誤差越小;反之,穩態誤差越大。但是Kp越大,其系統的穩定性會降低。
由上式可知,控制器的輸出m(t)與輸入誤差信號e(t)成比例關系,偏差減小的速度取決于比例系數Kp:Kp越大,偏差減小的越快,但是很容易引起振蕩(尤其是在前向通道中存在較大的時滯環節時);Kp減小,發生振蕩的可能性小,但是調節速度變慢。單純的P控制無法消除穩態誤差,所以必須要引入積分I控制。原因:(R為參考輸入信號,Kv為開環增益)
當參考輸入信號R不為0時,其穩態誤差只能趨近于0,不能等于0。因為開環增益Kv不為0。
6、?比例微分(PD)控制規律:可以反應輸入信號的變化趨勢,具有某種預見性,可為系統引進一個有效的早期修正信號,以增加系統的阻尼程度,而從提高系統的穩定性。(tao為微分時間常數)
如果系統中存在較大時滯的環節,則輸出變化總是落后于當前誤差的變化,解決的方法就是使抑制誤差的作用變化“超前”,增強系統的穩定性。
7、??積分(I)控制規律:由于采用了積分環節,若當前誤差e(t)為0,則其輸出信號m(t)有可能是一個不為0的常量。需要注意的是,引入積分環節,可以提到系統型別,使得系統可以跟蹤更高階次的輸入信號,以消除穩態誤差。
8、?比例積分(PI)控制規律:在保證系統穩定的前提下,引入PI控制器可以提高它的穩態控制質量,消除其穩態誤差。(TI為積分時間常數)
? ?? ???積分調節可以消除靜差,但有滯后現象,比例調節沒有滯后現象,但存在靜差。
? ?? ???PI調節就是綜合P、I兩種調節的優點,利用P調節快速抵消干擾的影響,同時利用I調節消除殘差。
9、?比例積分微分(PID)控制規律:除了積分環節提高了系統型別,微分環節提高了系統的動態性能。
觀察PID的公式可以發現:Kp乘以誤差e(t),用以消除當前誤差;積分項系數Ki乘以誤差e(t)的積分,用于消除歷史誤差積累,可以達到無差調節;微分項系數Kd乘以誤差e(t)的微分,用于消除誤差變化,也就是保證誤差恒定不變。由此可見,P控制是一個調節系統中的核心,用于消除系統的當前誤差,然后,I控制為了消除P控制余留的靜態誤差而輔助存在,對于D控制,所占的權重最少,只是為了增強系統穩定性,增加系統阻尼程度,修改PI曲線使得超調更少而輔助存在。
10、P控制對系統性能的影響:
- 開環增益越大,穩態誤差減小(無法消除,屬于有差調節)
- 過渡時間縮短
- 穩定程度變差
11、I控制對系統性能的影響:
- 消除系統穩態誤差(能夠消除靜態誤差,屬于無差調節)
- 穩定程度變差
12、D控制對系統性能的影響:
- 減小超調量
- 減小調節時間(與P控制相比較而言)
- 增強系統穩定性
- 增加系統阻尼程度
13、PD控制對系統性能的影響:
- 減小調節時間
- 減小超調量
- 增大系統阻尼,增強系統穩定性
- 增加高頻干擾
14、PI控制對系統性能的影響:
- 提高系統型別,減少系統穩態誤差
- 增強系統抗高頻干擾能力
- 調節時間增大
15、P調節、I調節降低系統穩定性
? ?? ???D調節增強系統穩定性
? ?? ???所以PI調節器的P比P調節器的P要小一些,PD調節器的P比P調節器的P要大一些
16、位置式PID表達式(數字PID):
P(n)為第n次輸出,e(n)為第n次偏差值,Ts為系統采用周期,Ti為積分時間常數,Td為微分時間常數
17、消除隨機干擾的措施:
- 幾個采樣時刻的采樣值求平均后代替本次的采樣值
- 微分項的四點中心差分(e(n)-e(n-3)+3e(n-1)-3e(n-2))*1/(6Ts)
- 矩形積分改為梯形積分??
18、PID調試一般原則
- 在輸出不振蕩時,增大比例增益P
- 在輸出不振蕩時(能消除靜態誤差就行),減小積分時間常數Ti
- 在輸出不振蕩時,增大微分時間常數Td
19、描述比例Kp的性能:比例帶。比例帶就是Kp的倒數:比例帶越大,Kp越小,無超調,穩態誤差大,調節時間長;比例帶越小,Kp越大,系統會有超調,甚至發散,穩態 誤差減小,調節時間縮短
20、描述積分Ki的性能:積分時間常數Ti。與積分系數Ki也是倒數關系:積分時間常數Ti越大,積分系數Ki越小,系統穩定性增加,但是調節速度變慢;積分時間常數Ti越小, 積分系數Ki越大,系統穩定性降低,甚至振蕩發散。無論增大還是減小積分時間常數Ti,被調量最后都沒有靜差。
21、描述微分Kd的性能:微分時間常數Td。主要用于克服調節對象有較大的時滯。Td越大,微分作用越強,系統阻尼程度增加。
22、比例P調節作用:
系統一旦出現偏差,比例調節立即產生調節作用用以減少偏差
比例作用大,可以加快調節,減少調節時間,減少穩態誤差
過大的比例作用,使系統的穩定性下降
23、積分I調節作用:
消除穩態誤差
系統穩定性下降,動態響應變慢
24、微分D調節作用:
具有預見性,能預見偏差變化趨勢,有超前的控制作用,增強系統動態性能
減少超調量,減少調節時間
25、比例積分PI調節器
- 引入積分消除了穩態誤差,但是降低了原有系統的穩定性
- 超調趨勢隨著Kp增大、積分時間Ti減小而增大
26、積分分離的措施:(在系統啟動,結束或者大幅度增減時,短時間系統輸出會有很大偏差,造成PID運算的積分積累,致使控制量超過執行結構可能允許的最大動作范圍, 引起系統較大的超調,甚至振蕩)
- 當誤差大于某個閾值時,采用PD控制,當誤差在該閾值范圍內,采用PID控制
注意:閾值的選取,過大,則達不到積分分離的目的;過小,則會導致無法進入積分區
27、抗積分飽和的措施:
- 限制PI調節器的輸出(這樣有可能在正常操作中不能消除系統的余差)
- 積分分離法:誤差在某個范圍內開啟積分調節(既不會積分飽和又能在小偏差時利用積分作用消除偏差)
- 遇限削弱積分法:調節器輸出大于某個值后,只累加負誤差(可避免控制量長時間停留在飽和區)
28、比例微分PD調節器
- 仍然屬于有差調節
- 提高了系統的穩定性,因為微分D的作用總是試圖抑制被調量的振蕩,所以也增加了系統的阻尼程度
- 因為提高了系統的穩定性,所以可以適當加大Kp
- D只是輔助作用,主要還是P控制
29、MATLAB仿真
純P調節(Kp大,穩態誤差小,響應快,但超調大)
PI調節(Ti小,響應速度加快,超調大,系統振蕩加劇)
PI調節(在同樣積分常數Ti下,減小比例增益Kp可減小
超調,增加系統的穩定性)
PD調節(引入微分項,提高了響應速度,增加了系統的穩定性但不能消除系統的余差)
PD調節(微分時間越大,微分作用越強,響應速度越快,系統越穩定)
PID調節(PD基礎上I作用的引入消除了余差,達到了理想的多項性能指標要求:超調、上升時間、調節時間、余差等)
30、PID參數整定需要查看三種基本曲線,缺一不可:
- 設定值
- 被調量
- PID輸出
如果是串級調節系統,還需要收集:
- 副調的被調量
- 副調PID輸出
31、在整定PID參數時,PID三個參數的大小都不是絕對的,而是相對的。也就是說,如果發現一個參數比較合適,就把這個參數固定死,不管別的參數怎么變化,永遠不動前 面固定的參數。這是要不得的。
32、如果是串級調節系統,在整定參數時,一般把主、副調隔離開來,先整定一個回路,再全面考慮。一般而言,先整定內回路。把PID參數隔離開來,先去掉積分、微分作 用,讓系統變為純比例調節方式,再考慮積分,最后考慮微分
33、整定比例帶:
方法:逐漸加大比例作用,一直到系統發生等幅振蕩,記錄下此時的比例增益,乘以0.6~0.8即可
注意1:比例作用很強時的振蕩周期很有規律,基本上呈正弦波;而在極弱比例作用參數下的系統有時也會呈現出有規律的振蕩,但是往往參雜了幾個小波峰。
現象:最終整定的系統,其調節效果應該是被調量波動小而平緩。在一個擾動過來之后,被調量的波動應該呈現“一大一小兩個波”(波形高度差4:1)
注意2:如果看不到這種被調量的周期特征,那說明參數整定的很好。即滿足快速性,也不會超調
整定積分時間:
方法:主調的作用是為了消除靜態偏差,當比例作用整定好的時候,就需要逐漸加強積分作用(調小積分時間Ti或者增大積分項系數Ki),直到消除靜差為止。也就是說, 積分作用只是輔助比例作用進行調節,它僅僅是為了消除靜態偏差。
整定微分作用:
方法:逐漸加強微分作用(增加微分時間Td或者增加微分項系數Kd),直到PID輸出毛刺過多
34、串級調節系統,一般而言,主調的比例弱,積分強,以消除靜差;副調的比例強,積分弱,以消除干擾。但是不絕對!
35、不完全微分PID控制:微分控制對高頻干擾非常敏感,為了避免在誤差擾動突變時的微分控制的不足,在微分項通道前加一個低通濾波器可以使得系統性能得到改善
36、微分先行PID控制:只對被調量進行微分,而不對給定值進行微分。這樣的處理在改變給定值時,輸出不會改變,被控量的變化通常比較緩和,適用于給定值頻繁升降的場合。
常用四軸的兩種PID算法講解(單環PID、串級PID)
? ?? ???這里主要講解的PID算法屬于一種線性控制器,這種控制器被廣泛應用于四軸上。要控制四軸,顯而易見的是控制它的角度,那么最簡單,同時也是最容易想到的一種控制策略就是角度單環PID控制器,系統框圖如圖所示:
或許有些朋友看得懂框圖,但是編程實現有一定困難,在這里筆者給出了偽代碼:
上述角度單環PID控制算法僅僅考慮了飛行器的角度信息,如果想增加飛行器的穩定性(增加阻尼)并提高它的控制品質,我們可以進一步的控制它的角速度,于是角度/角速度-串級PID控制算法應運而生。在這里,相信大多數朋友已經初步了解了角度單環PID的原理,但是依舊無法理解串級PID究竟有什么不同。其實很簡單:它就是兩個PID控制算法,只不過把他們串起來了(更精確的說是套起來)。那這么做有什么用?答案是,它增強了系統的抗干擾性(也就是增強穩定性),因為有兩個控制器控制飛行器,它會比單個控制器控制更多的變量,使得飛行器的適應能力更強。為了更為清晰的講解串級PID,這里筆者依舊畫出串級PID的原理框圖,如圖所示:
同樣,為了幫助一些朋友編程實現,給出串級PID偽代碼:
關于如何整定單環PID與串級PID的問題,請原諒筆者的能力有限,無法給出標準而可靠的整定流程,這里我給出三個鏈接,第一個為阿莫論壇的一位同學的單環PID整定現象與思考,個人覺得參考價值很大;第二、三兩個分別為APM與PX4的串級PID整定現象說明,大家可以參考他們的網頁說明。
www.amobbs.com/thread-5554367-1-1.html
copter.ardupilot.com/wiki/configuration/tuning/
pixhawk.org/users/multirotor_pid_tuning
而筆者在整定串級PID時的經驗則是:先整定內環PID,再整定外環P。
內環P:從小到大,拉動四軸越來越困難,越來越感覺到四軸在抵抗你的拉動;到比較大的數值時,四軸自己會高頻震動,肉眼可見,此時拉扯它,它會快速的振蕩幾下,過幾秒鐘后穩定;繼續增大,不用加人為干擾,自己發散翻機。
特別注意:只有內環P的時候,四軸會緩慢的往一個方向下掉,這屬于正常現象。這就是系統角速度靜差。
內環I:前述PID原理可以看出,積分只是用來消除靜差,因此積分項系數個人覺得沒必要弄的很大,因為這樣做會降低系統穩定性。從小到大,四軸會定在一個位置不動,不再往下掉;繼續增加I的值,四軸會不穩定,拉扯一下會自己發散。
特別注意:增加I的值,四軸的定角度能力很強,拉動他比較困難,似乎像是在釘釘子一樣,但是一旦有強干擾,它就會發散。這是由于積分項太大,拉動一下積分速度快,給??的補償非常大,因此很難拉動,給人一種很穩定的錯覺。
內環D:這里的微分項D為標準的PID原理下的微分項,即本次誤差-上次誤差。在角速度環中的微分就是角加速度,原本四軸的震動就比較強烈,引起陀螺的值變化較大,此時做微分就更容易引入噪聲。因此一般在這里可以適當做一些滑動濾波或者IIR濾波。從小到大,飛機的性能沒有多大改變,只是回中的時候更加平穩;繼續增加D的值,可以肉眼看到四軸在平衡位置高頻震動(或者聽到電機發出滋滋的聲音)。前述已經說明D項屬于輔助性項,因此如果機架的震動較大,D項可以忽略不加。
外環P:當內環PID全部整定完成后,飛機已經可以穩定在某一位置而不動了。此時內環P,從小到大,可以明顯看到飛機從傾斜位置慢慢回中,用手拉扯它然后放手,它會慢速回中,達到平衡位置;繼續增大P的值,用遙控器給不同的角度給定,可以看到飛機跟蹤的速度和響應越來越快;繼續增加P的值,飛機變得十分敏感,機動性能越來越強,有發散的趨勢。
如何做到垂直起飛、四軸飛行時為何會飄、如何做到脫控?
? ?? ???眼看這三個問題是三個不同的問題,其實就原理上講,他們的原因在絕大多數情況下都是由于加速度計引起的。如果飛機可以垂直起飛,說明你的加速度計放置地很水平,同時也說明你的PID控制算法參數找的不錯,既然可以垂直起飛,那么飛行過程中,只要無風,四軸幾乎就不會飄,自然而然就可以脫控飛行。由此可見,加速度計是個十分重要的器件。
? ?? ???在姿態解算中,或者說在慣性導航中,依靠的一個重要器件就是慣性器件,包括了加速度計和陀螺儀。陀螺儀的特性就是高頻特性好,可以測量高速的旋轉運動;而加速度計的低頻特性好,可以測量低速的靜態加速度。無論是何種算法(互補濾波、梯度下降、甚至是Kalman濾波器),都離不開對當地重力加速度g的測量和分析。慣性導航利用的就是靜態性能好的加速度計去補償動態性能好的陀螺儀漂移特性,得到不飄并且高速的姿態跟蹤算法,因此基于慣性器件的姿態解算,加速度計是老大,它說了算。
? ?? ???下面,我給大伙推理一下四軸如何平穩飛信的思路,歡迎各位批評指出::-)
? ?? ???首先,為了讓四軸平穩的懸停或飛行在半空中,四個電機必須提供準確的力矩->假設力矩與電機PWM輸出呈線性關系,也就是必須提供準確的4路PWM->4路PWM由遙控器輸入(期望角度)、PID算法及其參數和姿態解算輸出(當前角度)組成,假設遙控器輸入不變(類似脫控)、PID算法及其參數也較為準確(PID參數無需十分精確,但只要在某個合理的范圍內,控制品質差不了多少),也就是姿態解算的輸出必須是十分準確的,可以真實反應飛行器的實際角度->姿態解算的結果由加速度計和陀螺儀給出,根據前述慣性導航的描述,加速度計補償陀螺儀,因此要得到精確的姿態解算結果,務必要求加速度輸出精確的重力加速度g->這里僅討論懸停飛行,因此忽略掉額外的線性加速度(事實證明,在四軸強機動飛行過程中,線性加速度必須要考慮并消除),假設加速度計輸出重力加速度g,這個重力加速度g必須十分“精確”。
? ?? ???我先寫到這里,總結一下:精準力矩->精準PWM->精準姿態->加速度計輸出“精確”重力加速度g。這里的“精確”打了引號,意思不是說加速度的性能十分好,要輸出精確的當地加速度g,而是說它能夠準確反應機架的角度。為了達到懸停、平穩的飛行效果,控制算法輸出的PWM會讓加速度計輸出的重力加速度g在XOY平面內的分量就可能少,也就是說:PID控制算法控制的不是機架水平,而是加速度計水平,PID不知道機架是什么東西,它只認加速度計,它的使命就是讓加速度計水平。我現在假設加速度計與機架存在某個角度,比如右傾30°,四軸主視圖如圖所示。
上圖中,加速度計(紅線)與四軸機架的水平面(虛線)呈30°。起飛后,PID控制算法會嘗試將加速度計調整至水平位置,因此四軸就會往圖中左邊飄,傾斜角度也為30°。這就是為什么飛機無法垂直起飛,或者飛行過程中往一個方向飄的原因:加速度計和機架沒有水平。因此在加速度計的機械安裝時,盡量保證加速度計與機架水平。如果有些朋友已經將加速度計固定在飛控板上,可以通過遙控器的通道微調功能設置懸停時的期望角度,軟件上校正這種機械不水平。
? ?? ???除了上述討論的加速度計安裝水平問題,也需要對加速度計進行零偏置校正,具體的方法叫做6位置標定法:即將加速度計沿著6個方向放置,分別記錄重力加速度計g在6個方向上的最大輸出值,然后取平均,得到圓球的中心點(這里假設g投影為球,實際上為橢球,需要進行最小二乘法擬合求三軸標定系數)。
? ?? ???最后提一點,如果加速度計和遙控器均做了調整,飛機可以做到垂直起飛,并且飛行效果還行,但是飛機的回中速度較慢,感覺就像是在抬轎子一樣。具體描述:懸停時,猛往一個方向打搖桿后立即放手,飛機會往搖桿方向走很遠才停下。這是因為飛機過于穩定,也就是內環的作用過強或者外環作用過弱導致,解決方法是降低內環P或者加大外環P。
以上內容,均為筆者學習過程中的體會和想法,難免有錯誤之處,還請諸位批評指出,共同學習進步。
總結
以上是生活随笔為你收集整理的四轴PID控制算法详解(单环PID、串级PID)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用七大经典排序算法总结(C语言描述)
- 下一篇: pixhawk的姿态控制算法解读