四軸上兩種常用的PID算法(單環PID和串級PID)

2021-02-15 走近無人機

 

這裡主要講解的PID算法屬於一種線性控制器,這種控制器被廣泛應用於四軸上。要控制四軸,顯而易見的是控制它的角度,那麼最簡單,同時也是最容易想到的一種控制策略就是角度單環PID控制器,系統框圖如圖所示: 

或許有些朋友看得懂框圖,但是編程實現有一定困難,在這裡筆者給出了偽代碼:

上述角度單環PID控制算法僅僅考慮了飛行器的角度信息,如果想增加飛行器的穩定性(增加阻尼)並提高它的控制品質,我們可以進一步的控制它的角速度,於是角度/角速度-串級PID控制算法應運而生。在這裡,相信大多數朋友已經初步了解了角度單環PID的原理,但是依舊無法理解串級PID究竟有什麼不同。其實很簡單:它就是兩個PID控制算法,只不過把他們串起來了(更精確的說是套起來)。那這麼做有什麼用?答案是,它增強了系統的抗幹擾性(也就是增強穩定性),因為有兩個控制器控制飛行器,它會比單個控制器控制更多的變量,使得飛行器的適應能力更強。為了更為清晰的講解串級PID,這裡筆者依舊畫出串級PID的原理框圖,如圖所示:

同樣,為了幫助一些朋友編程實現,給出串級PID偽代碼:

而筆者在整定串級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°。起飛後,PID控制算法會嘗試將加速度計調整至水平位置,因此四軸就會往圖中左邊飄,傾斜角度也為30°。這就是為什麼飛機無法垂直起飛,或者飛行過程中往一個方向飄的原因:加速度計和機架沒有水平。因此在加速度計的機械安裝時,儘量保證加速度計與機架水平。如果有些朋友已經將加速度計固定在飛控板上,可以通過遙控器的通道微調功能設置懸停時的期望角度,軟體上校正這種機械不水平。

除了上述討論的加速度計安裝水平問題,也需要對加速度計進行零偏置校正,具體的方法叫做6位置標定法:即將加速度計沿著6個方向放置,分別記錄重力加速度計g在6個方向上的最大輸出值,然後取平均,得到圓球的中心點(這裡假設g投影為球,實際上為橢球,需要進行最小二乘法擬合求三軸標定係數)。

最後提一點,如果加速度計和遙控器均做了調整,飛機可以做到垂直起飛,並且飛行效果還行,但是飛機的回中速度較慢,感覺就像是在抬轎子一樣。具體描述:懸停時,猛往一個方向打搖杆後立即放手,飛機會往搖杆方向走很遠才停下。這是因為飛機過於穩定,也就是內環的作用過強或者外環作用過弱導致,解決方法是降低內環P或者加大外環P。

來源:Nemo之家


如果您覺得文章對您有幫助,請分享給您的朋友

分享知識,分享快樂

關注前沿科技一點通:了解更多前沿科技

點擊」閱讀原文「查看更多無人機知識

相關焦點

  • 【乾貨】PID原理和調試口訣詳解
    1,PID是一個閉環控制算法。因此要實現PID算法,必須在硬體上具有閉環控制,就是得有反饋。比如控制一個電機的轉速,就得有一個測量轉速的傳感器,並將結果反饋到控制路線上,下面也將以轉速控制為例。其中容量滯後通常又包括:測量滯後和傳送滯後。測量滯後是檢測元件在檢測時需要建立一種平衡,如熱電偶、熱電阻、壓力等響應較慢產生的一種滯後。而傳送滯後則是在傳感器、變送器、執行機構等設備產生的一種控制滯後。純滯後是相對與測量滯後的,在工業上,大多的純滯後是由於物料傳輸所致,如:大窯玻璃液位,在投料機動作到核子液位儀檢測需要很長的一段時間。
  • linux進程PID和進程描述符關係
    除了上述 pid 和 tgid 兩種,還有更大的進程集合。在系統啟動以後,用戶使用系統首先需要使用創建會話 session,,一個 tty 對應一個 session。在當前 tty 中創建的所有進程都共享一個 sid(即 leader 的 pid)。
  • 【技術】改進初學者的PID-介紹
    作者Brett Beauregard的原文網址:http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/ 結合新的Arduino PID庫的發布,我決定發布這一系列帖子。最後一個庫雖然穩定,但並沒有真正提供任何代碼解釋。這次計劃的目的是詳細解釋為什麼代碼是這樣的。
  • 【技術】PID控制器改進筆記之五:改進PID控制器之串級設定
    這一系列PID控制器雖說實現了主要功能,也在實際使用中取得了良好效果,但還有很多的細節部分可以改進以提高性能和靈活性。所以在這篇中我們來討論改進PID控制器以串級調節等複雜控制方式。1、提出問題我們前面提到的PID控制器其實都是基於單迴路來考慮的。
  • 關於 Linux進程,線程,PID,LWP,TID,TGID
    pid: 進程ID。lwp: 線程ID。在用戶態的命令(比如ps)中常用的顯示方式。tid: 線程ID,等於lwp。tid在系統提供的接口函數中更常用,比如syscall(SYS_gettid)和syscall(__NR_gettid)。
  • 四軸飛行器DIY全教程合集(程序+原理圖+四軸PID)
    四軸飛行器又稱四旋翼飛行器、四旋翼直升機,簡稱四軸、四旋翼。這四軸飛行器(Quadrotor)是一種多旋翼飛行器。
  • Linux /proc/$pid部分內容詳解
    auxv/proc/[pid]/auxv包含傳遞給進程的ELF解釋器信息,格式是每一項都是一個unsigned long長度的ID加上一個unsigned long長度的值。最後一項以連續的兩個0x00開頭。
  • Linux中 /proc/[pid] 目錄各文件簡析
    用戶和應用程式可以通過 proc 得到系統的信息,並可以改變內核的某些參數。由於系統的信息,如進程,是動態改變的,所以用戶或應用程式讀取 proc 文件時,proc 文件系統是動態從系統內核讀出所需信息並提交的。下面列出的這些文件或子文件夾,並不是都是在你的系統中存在,這取決於你的內核配置和裝載的模塊。
  • PID的控制原理
    PID控制詳解讓我們先看一張圖:注意觀察pid三個值的變化對曲線的影響一、PID控制簡介
  • 四軸飛行器飛行原理與雙閉環PID控制
    四軸飛行器是微型飛行器的其中一種,相對於固定翼飛行器,它的方向控制靈活、抗幹擾能力強、飛行穩定,能夠攜帶一定的負載和有懸停功能,因此能夠很好地進行空中拍攝、監視、偵查等功能,在軍事和民用上具備廣泛的運用前景。四軸飛行器關鍵技術在於控制策略。
  • 我們辛辛苦苦研究控制理論,卻發現工業界只愛PID
    蘇聯時期的飛彈,是靠模擬電路搭建的控制算法。(我解釋一下,運放電路其實就是帶負反饋的控制電路。)3. 2012年,美國抓捕晶片和傳感器走私商人何朝輝,重大打擊了中國的航天控制事業。4.世界上,只有俄羅斯和中國有純粹的自動化專業。5. 雖然很多人都在說PID,其實在控制領域卡爾曼濾波也有重大工程意義。6.自動化專業的別名是應用數學。
  • 案例解析丨三菱PID控制實例
    配線時,應使用帶屏蔽的補償導線和模擬輸入電纜配合,屏蔽一切可能產生的幹擾。FX2N-4ad-tc的特殊功能模塊編號為0。 這裡介紹PID控制改變加熱器(熱盤管)的加熱時間從而實現對溫度的閉環控制。 PLC控制時和自動調諧時電加熱器的動作情況如上圖所示。其參數設定內容如下表所示。  三菱PLC和FX2N-4ad-tc實現溫度PID閉環控制系統程序設計: 用選擇開關置x10作為自動調諧控制後的PID控制,用選擇開關置x11作為無自動調諧的PID控制。
  • PID控制及參數調節
    當被控對象的結構和參數不能完全掌握,或得不到精確的數學模型時,控制理論的其它技術難以採用時,系統控制器的結構和參數必須依靠經驗和現場調試來確定,這時應用PID控制技術最為方便。即當我們不完全了解一個系統和被控對象﹐或不能通過有效的測量手段來獲得系統參數時,最適合用PID控制技術。PID控制,實際中也有PI和PD控制。PID控制器就是根據系統的誤差,利用比例、積分、微分計算出控制量進行控制的。
  • PID控制及參數調節、PID圖難點詞彙、各種介質代號、PID圖例大集合!
    當被控對象的結構和參數不能完全掌握,或得不到精確的數學模型時,控制理論的其它技術難以採用時,系統控制器的結構和參數必須依靠經驗和現場調試來確定,這時應用PID控制技術最為方便。即當我們不完全了解一個系統和被控對象﹐或不能通過有效的測量手段來獲得系統參數時,最適合用PID控制技術。PID控制,實際中也有PI和PD控制。PID控制器就是根據系統的誤差,利用比例、積分、微分計算出控制量進行控制的。
  • PID基本概念 P、I、D參數的作用是什麼?
    微分作用主要是用來克服被控對象的滯後,常用於溫度控制系統。除採用微分作用外,在使用控制系統時要注意測量傳送的滯後問題,如溫度測量元件的選擇和安裝位置等。在常規PID控制器中,微分作用的輸出變化與微分時間和偏差變化的速度成比例,而與偏差的大小無關,偏差變化的速度越大,微分時間越長,則微分作用的輸出變化越大。
  • PID很難理解?系統講解PID控制及參數調節,理論加實際才是真的好!
    當被控對象的結構和參數不能完全掌握,或得不到精確的數學模型時,控制理論的其它技術難以採用時,系統控制器的結構和參數必須依靠經驗和現場調試來確定,這時應用PID控制技術最為方便。即當我們不完全了解一個系統和被控對象﹐或不能通過有效的測量手段來獲得系統參數時,最適合用PID控制技術。PID控制,實際中也有PI和PD控制。PID控制器就是根據系統的誤差,利用比例、積分、微分計算出控制量進行控制的。
  • 新手必看的15個PID基本概念!
    在PID調節器和執行機構之間還會有其他環節,比如限幅、伺服放大器等。限幅功能通常在PID調節器內完成;如果如果將PID、限幅和伺服放大器功能做在一臺儀表內就構成閥位控制PID調節器;將伺服放大器和限幅做在執行機構裡就構成智能執行機構。
  • PID這樣講解,小白都能搞懂!
    當被控對象的結構和參數不能完全掌握,或得不到精確的數學模型時,控制理論的其它技術難以採用時,系統控制器的結構和參數必須依靠經驗和現場調試來確定,這時應用PID控制技術最為方便。即當我們不完全了解一個系統和被控對象﹐或不能通過有效的測量手段來獲得系統參數時,最適合用PID控制技術。PID控制,實際中也有PI和PD控制。PID控制器就是根據系統的誤差,利用比例、積分、微分計算出控制量進行控制的。
  • 最常用的16條Linux命令
    最後因為換電腦的緣故,又用上了MacOS,所以基本上每天都在和各種命令打交道。MacOS和Linux都是基於Unix系統,二者在命令上基本都是通用的,今天Peter給大家介紹一下自己平時常用的16條Linux命令。命令1:pwd pwd顯示當前的工作路徑,查看位置所在。
  • Linux系統分析常用指令
    top命令經常用來監控linux的系統狀況,是常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用情況。