【空心杯四旋翼TinyLeaf】姿態控制入門

家父昨日已經取消休假返回醫院工作,望所有醫護人員平安歸來!武漢加油,中國加油!

                                                                                                                   ——2020.1.27


目錄

什麼是控制

什麼是閉環控制

姿態控制的目的

PID算法簡介

航向控制


本文將結合PID控制算法介紹四旋翼姿態環的閉環控制思想和算法。


  • 什麼是控制

        控制是一個寬泛的概念,筆者對控制的理解是“讓被控制對象按照期望運行”,下文也將按照此思想論述。

       如上圖所示,控制的作用就是讓被控對象的實際輸出儘量符合期望/給定(給定:控制論術語,即期望的輸出數據,比如“控溫空調設定在26℃”,這裏的“26℃”就是給定),期望可以是單個或多個,輸出也可以是單個或多個。期望和實際輸出之間的差值叫做誤差。控制的意義就在於讓誤差及時的收斂。

       實現讓輸出跟隨給定的算法叫做控制算法。控制算法有很多種,PID算法是一種非常經典的控制算法,也是本文着重介紹的算法,此外,還有諸如滑模控制(SMC),自抗擾控制(ADRC)等控制算法等。

  • 什麼是閉環控制

       閉環和開環相對,他們的差別是:閉環控制會採集被控對象的被控輸出和期望比較,並通過一些算法對控制器修正,從而使輸出更接近給定。在控制框圖上,實際輸出會返回到被控對象執行機構的控制量之前,以某種形式參與被控對象執行機構的控制量的計算,使得控制框圖出現一個環,這就是閉環控制的由來。一般來說,只有閉環控制可以實現無誤差的控制,並具有良好的抗干擾性能;開環控制一般做不到無誤差控制(步進電機的控制是一個特例)。

       PID算法就是一種經典的閉環控制算法:

  • 姿態控制的目的

       姿態控制是四旋翼飛行器控制的基礎。沒有控制好飛行器的姿態,飛行器就會變成一顆“布朗運動彈”,後續的高度控制,航線控制也就無從談起。

       通常,我們常用歐拉角來描述飛行器的姿態。關於歐拉角的介紹,可以看我先前的博文【空心杯四旋翼TinyLeaf】四旋翼基礎。歐拉角包括橫滾(roll)、俯仰(pitch)、航向(yaw),航向比較特殊,筆者會在本文下方另開一章介紹。

       顯而易見,四旋翼在水平情況(四個旋翼軸向與地面垂直)下,升力和重力在一條直線上,也只有這個時候,隨着升力的加大,四旋翼得以垂直起飛。當飛機傾斜時,總升力F的垂直分力F_{_{up}}與重力相抵消,總升力F的水平分力F_{_{move}}爲四旋翼提供了一個水平方向的加速度。這個加速度爲我們後續的位置控制提供了幫助。

        因此,我們把水平情況下的姿態定爲零點,也就是俯仰角爲零,橫滾角爲零。姿態控制的目的是讓四旋翼保持水平,也就是讓四旋翼的姿態服從給定(給定爲零點),讓俯仰Pitch和橫滾Roll去跟蹤給定零點(Pitch = 0;Roll = 0)。這就是四旋翼的姿態控制。

  • PID算法簡介

       首先亮出PID的公式:

這就是PID的公式

       PID分別代表了比例(Proportion)、積分(Integration)、微分(Differentiation)三個環節(忘記微積分的同學需要複習一下高等數學)。

       上方的框圖我爲了符合公式的寫法,作的是時域框圖,所以在積分環節和微分環節那,就只好用一個計算符號來表示環節這樣不正規的做法了。大家在書本上或論文中,主要用的都是頻域框圖,那樣更加準確。

       PID算法的實質,就是通過誤差e(t)來調節執行機構的控制量 u(t)。

       控制量u(t)由比例、積分、微分三個部分構成:

  • 比例:輸出和誤差成正比,係數是 Kp,比例項沒有滯後,誤差越大,比例項提供的修正量越大;
  • 積分:輸出和誤差的積分程成正比,係數是 Ki,積分項對誤差響應有滯後,同向誤差持續存在時間越長,積分項提供的修正量越大;
  • 微分:輸出和誤差的微分(導數)成正比,係數是 Kd,微分項對誤差響應有提前,誤差的變化程度越劇烈,微分項提供的修正量越大。

       從上面的框圖我們可以看到,如果輸入和輸出一致

                                                                                                    c(t) = r(t)

       那麼誤差就爲0

                                                                                             e(t) = r(t) - c(t) = 0

       如果誤差誤差的積分誤差的微分(導數)都爲0,這麼U(t)也就爲0,即執行器不會動作。這點很好理解:輸出已經和所希望的一致了,自然就不需要動作了,只有輸出和期望出現了偏差(誤差e(t)),執行器纔會動作以消除偏差。

      

關於PID算法的詳細介紹我將在之後新開一篇博客介紹。

 

  • 航向控制

       之所以要把航向控制取出來特別講,是因爲航向的控制有多種方式,也涉及到四旋翼的飛行模式。俯仰、橫滾軸的控制參數是基本一致的,它們決定了飛行器與水平面的夾角。在整定好俯仰軸的PID參數後,這套參數可以照搬到橫滾軸。而航向則比較特殊,航向軸的變化不影響飛行器與水平面的夾角。

       筆者剛開始寫四旋翼飛控的時候,對於航向軸的閉環是和控制俯仰,橫滾軸類似的:給定水平時的初始方向爲零點。然後就發現了一個問題:四旋翼起飛時機頭朝南,我使用遙控器打航向左轉。機頭朝東。遙控器航向歸中,機頭又自動回到了朝南。這就和筆者玩的穿越機不太一樣了(正常應該是打方向旋轉,歸中就停在當前角度)。爲什麼呢?實際上,大多數四旋翼對航向軸採取的是角速度閉環,也就是說,給定是角速度爲0而不是角度爲0。

  • PID的參數整定

        一直以來,PID的參數整定對於很多人來說都是一個老大難問題。筆者在開始學習自抗擾控制前,控制一直使用的是PID算法,包括四旋翼,傾轉翼,動量輪,倒立擺,風力擺,平衡車等等。在這些系統的控制中,筆者總結了一些調試PID參數的技巧和注意點,這部分內容會在我講述PID算法的專門博文中介紹,在此只介紹一些四旋翼飛行器控制的相關的技巧。

        我知道很多人寫代碼都是CtrlCVer,不過筆者還是建議初學PID的朋友,按照公式自己寫一些,這對於理解PID的算法有很多好處。

       在四旋翼的的姿態控制中,PID正常情況下起作用的主要是比例和微分,也就是PD控制。

       爲什麼積分環節一般不常用呢?主要是兩個原因,一個是積分的作用總是非常遲緩,而四旋翼的姿態控制對快速性的要求很高,另一方面,積分環節的作用主要是消除靜差,而姿態環很少出現靜差,出現靜差說明你的四旋翼出現了一些問題,有可能是陀螺儀的安裝固定出現的明顯的傾斜,或者四旋翼的重心沒有與合升力在一條直線上(重力和升力不是共點力,就會產生力矩,這就是靜差的來源)。

        對於姿態環的參數整定,筆者的建議是:

  1. 先調一個軸,先調節比例係數Kp,即純P控制,從小往大調節,調節到四旋翼可以自己恢復到平衡點但不至於產生振盪。
  2. 然後將Kp置0,調節微分系數Kd,這個的感覺需要自己拿捏,不同的機型參數差異比較大。這個參數也是從小往大調節,微分是抑制高頻擾動的,什麼屬於高頻擾動?用杆子捅一下四旋翼,對四旋翼產生的擾動就屬於高頻擾動,Kd的調節因性能要求而異,唯一的要求是不能出現自激振盪(在擾動後自己產生的振盪也算是自激振盪)
  3. 調到自己覺得滿意之後。再使用PD控制,注意要讓之前的Kd稍微減小一些,建議將係數乘以0.7~0.95。然後開始綜合調節,視情況在加上一些積分作用(Ki)。

語言總是無力的,紙上得來終覺淺,絕知此事要躬行。有條件的朋友,建議準備一個調試架。

 


       筆者能力有限,錯漏之處在所難免,如有錯誤,可在下方評論指出,也可郵箱交流:[email protected]

碼字不易,給個贊可好?

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