工程角度如何考慮ADRC控制算法在無人機的應用

摘自:https://mp.weixin.qq.com/s/06WkKwl6X3uJ7o9zDAifgw

工程角度如何考慮ADRC控制算法在無人機的應用

原創 across超越者 across說 4月29日

本文以ADRC控制算法爲例,介紹一下在無人機的控制算法開發中是如何使用的。

 

現狀:

目前爲止,無論是開源飛控還是飛控廠商,基本上還是以PID控制算法爲主,針對無人機的各個控制迴路特性,在此基礎上增加一下控制策略。比如GPS模式下,如何控制飛行器穩定的剎車,並停留在原點等?因此底層的核心還是PID算法。而控制器的性能,又很大程度上取決於狀態估計算法的數據,而這一點恰恰是目前飛控算法的難點所在,也是主要工作。所以基本上飛控算法還是以調節狀態估計算法爲主。而控制算法這塊,PID算法的性能已經基本滿足了需求。

 

爲什麼要換ADRC?

不得不說,ADRC在無人機領域的熱度很高,據各種小道消息,都宣稱其算法性能優異,遠超PID。而筆者對此也一直持保留意見,曾經也試過各種先進控制算法,如LQG、滑模等,效果也並非宣稱的那樣具有明顯的優勢,不能否認的是先進的控制算法如果根據其特點,找到合適的控制迴路應用,效果還是可以的。

至此,筆者也打算嘗試一下,對比一下ADRC是否真的這麼神奇。正好,做一個研究的記錄,從工程應用的角度,將自己的研究方法與心得與讀者分享一下。這裏,不做ADRC算法的理論推導與穩定性分析。至於原因?別問,問就是不會。

 

ADRC優勢?

既然要換ADRC算法,那首先就得要知道這個控制算法有什麼優點?能解決什麼樣的問題?

韓京清教授的論文首先描述了PID控制算法的缺點

總結起來就是:

  • 如果是一個階躍響應,PID算法的誤差計算會有一個很大的輸出;

  • PID三項是一個線性的組合;

  • 積分雖然可以解決穩態誤差,但是也會帶來系統的不穩定因素。如果系統沒有干擾,積分參數不合適的話,會導致超調、積分飽和等問題。而且積分的抗干擾主要體現在低頻,對中高頻干擾作用不大。

 

所以ADRC的解決辦法就是:

  • 安排一個過渡過程,將階躍變化變得柔和;

  • 設計非線性控制率;

  • 設計擴張狀態觀測器ESO,估計反饋數據和干擾;

 

ADRC原理?

作爲算法應用者,對算法本身的推導不會不要緊,但是必須要定性的瞭解原理是什麼,這樣才能正確的應用以及參數的調試。

圖中標註的就是以上提到的ADRC的組成部分:

  • 跟蹤微分器TD;

  • 非線性狀態誤差反饋控制率NLSEF;

  • 擴張狀態觀測器ESO;

TD主要安排一個柔和的目標值輸入,這樣避免了PID算法快速響應與超調的矛盾。PID中,要想響應快速,必須增大P項,而增大到一定程度,又會有超調;

NLSEF的話,主要是解決一個“小誤差大增益,大增益小誤差”的問題,比如開源飛控ardupilot中採用的sqrt控制器就是一個P控制的變型;

ESO的作用是:根據系統的輸入和輸出,重新估計出控制器的反饋,同時,增加了一個狀態量,系統干擾(將系統模型內部的干擾和外界的隨機干擾統一認爲是一個總擾動),估計出總干擾後,在控制輸入部分進行抵消,這樣就相當於去掉了系統的擾動。ESO中的干擾估計是ADRC的一個關鍵點,有了干擾後,進行抵消,即所謂的自抗擾控制

 

ADRC公式?

前面已經講過,本文不注重公式的推導,實際在工程應用的時候,這個也不是一個必須工作,可以參考現有的公式進行編程即可。

 

如何使用?

無人機的控制器迴路衆多,角速度、角度、速度、位置是最基本的,另外,如果是控制歐拉角,還會區分出三個軸向,所以ADRC適合用在哪?是需要考慮的

ADRC的最主要特點就是抗擾動,那顯然,對於姿態控制和高度控制迴路,個人覺得是比較針對的。姿態控制是水平控制的基礎,如外界的風對飛行器的干擾等,所以姿態如果抗擾動,對上層的位置迴路也會有很大幫助。同理,高度迴路,任務載荷的變化也是需要考慮的。

另外,以上的公式是針對一個二階系統,而姿態控制中的角速度迴路,可以看做是一個二階系統。綜上考慮,我們首先在角速度迴路進行ADRC的測試。

 

 

仿真調試

相信以上的公式已經可以讓一部分人絕望了,ADRC的參數太多,而且互相之間影響較大,這個即使在飛控中寫好了代碼,實際又該如何調試?

答案就是仿真

作爲算法工程師,仿真是必備步驟,尤其是一個新的算法開發過程。

仿真的好處就是,可以幫我們驗證編寫的算法是否有bug,同時,能協助我們確定參數的量級以及大概範圍,至於參數的準確程度取決於模型的準確度。實際一般會有所差別,因此我們不追求絕對的最優參數,最優的參數可以在真機上調試。

圖中所示就是搭建的角速度環的ADRC控制仿真,圖中給了一個1.5rad/s的角速度目標,結果表明基本參數都在合理範圍。

 

調參的時候,可以分開考慮,比如這裏ADRC有3個部分,所以我們可以單獨分別進行參數的調試。

比如單獨測試TD:

比如這裏,我將目標的輸入經過TD後,需要約0.8s的跟蹤,具體可以調節TD的參數,TD調好以後,就不再考慮這個參數,而專心調節後續模塊的參數,以上只是一個分開調試的舉例說明。

 

調參方法

其實任何算法,只要有了仿真,參數的調試就可以很方便了。比如這裏,首先你要原理上大概知道每個參數是幹嘛的,大概調節參數會有什麼樣的反應;

如果理論知識不夠,也沒關係,可以在仿真裏不斷的進行試驗,總結規律。比如在調節ESO的時候,帶寬的大小對結果有什麼影響呢?只需要其他參數固定,通過調節帶寬,看下最終結果的變化,就能總結出規律。

 

筆者這裏給出大概的經驗:

TD的參數比較好判斷,這裏不敘述了。而ESO的beta0、beta1、beta2參數與觀測器的帶寬有關,所以只需調節帶寬,還有一個就是補償係數b,這兩個參數比較重要

當你發現觀測的結果,比如角速度與實際傳感器測量的角速度相比,噪聲很大,則說明觀測器的帶寬設置的太大了,而如果數據有一些超調,則說明設置的太小了;

補償係數b的話,直接感受是控制的響應,因爲b越大,則控制量就小了,系統響應就會變慢,相反,如果想提高響應,就需要減小b。

所以,經過調試,你會發現其實只需改變極少參數即可。

 

 

飛行測試

在飛行測試前,還需進行嵌入式代碼的編寫,當然,這部分工作目前也可以由matlab自動生成。不過,筆者作爲一個老派選手,還是習慣了自己編寫。

編程完成後,就需要進行一些調試檢查。比如看一下控制器的輸出是否在合理範圍內等等

 

結論

算法能正常運行後,就需要通過實際的飛行數據和飛行現象來判定是否具有優勢,也就是完成了這麼多工作以後,總要得出自己的實驗結論。

得到結論的方法:

比如ADRC,可以看一下角度的跟蹤響應,與PID進行對比,尤其注意的是用性能調好的PID對比,即相同的響應下,哪個更穩定,沒有超調。很多人的對比沒有注意同等條件,用一個調的不好的PID對比,自然結論也是不科學的。

還可以測試一下抗干擾的能力,比如突然動一下飛機,或是帶個重量變化的載荷等。

這裏筆者不敘述自己的結論了,讀者可以自己試驗。重點還是一句話,絕知此事要躬行,對網上的各種結論性說法都不要抱着深信不疑的態度,有條件的話,還是自己測試,自己得出結果。包括筆者的文章,成文較早的初期也有很多理解不到位的地方,其實是有問題的。

 

以上就是有關ADRC的應用全過程,從提出問題,到選用控制算法,到如何應用以及參數調試等。本文可能並沒給出一些結論性說明,主要是有關ADRC的相關文章也是比較多,讀者可以自行查閱資料,另外本人比較傾向於提供方法論,直接給結論其實對每個人的成長幫助不大,很多人因爲有參考,就沒有深入思考,在繁雜的資料面前,往往忽略了最應該掌握的核心問題,在算法的調參上也是不得法門,浪費了精力。今年工作室計劃會開設一個控制算法專題課程,還是教授如何從工程角度應用控制理論,包括控制理論的基礎知識,LQG、MPC、ADRC等控制算法,屆時會詳細的敘述整個開發過程,開放相關的源碼。

 


across說:一個有趣有用的公衆號,分享筆者在無人機、無人駕駛、機器人等領域的技術開發心得與見解。掃描下方二維碼,即可關注本公衆號。

 

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