【空心杯四旋翼TinyLeaf】PID算法入門

       PID算法的介紹和資料很多,筆者在大一時就聽學長說這個PID算法是如何神奇,我當時找到了PID的公式研究了沒多久就放棄了,因爲完全不能理解!公式看懂了,但是不知道每個變量代表什麼,如何使用。

       大一下學期的時候筆者參加了學院的電子設計競賽校賽,控制類的題目是風控小球,要求是:

       控制兩端的直流風機吹在一個直線導軌上的乒乓球,使得乒乓球停在導軌的指定位置。

       這個題目讓我頓悟了PID的規律。感興趣的同學可以去嘗試實現一下。

       PID是一門來源於實踐的技術,所以我們必須在實踐的方法來理解。

       這是一個很好的用來解釋PID的模型,下面筆者將以這道題目的需求來介紹PID的作用。首先,控制的目的是讓被控對象跟隨給定,這裏出現了第一個術語:“給定”,給定是我們所期望被控對象達到的狀態。

       顯然,在時間上,被控對象是不能瞬間從當前狀態切換到給定的(除非被控對象正好就在給定位置),所以顯然被控對象移動到給定狀態需要一個過程,在此過程中,被控對象的當前狀態(輸出c(t))和給定r(t)之間的差叫做誤差e(t) = r(t) - c(t)。被控對象追隨給定r的過程,就是誤差e逐漸收斂爲0的過程。

       回到“風機-小球系統”,乒乓球是被控對象,評委隨機指定的位置就是給定,左右的兩個風機是執行器,爲了簡化系統,在此把風機提供的動力看隨執行量u線性變化無時延的,也就是說我給風機一個信號,風機吹的風立馬就能使小球受到推力(現實並非如此,先討論理想情況)。

       應該如何實現控制呢?球在給定左邊,風就把求往右吹,反之往左吹?這個叫做開關控制,控制量就是+u和-u(有時還有0,即執行器不動作),很可惜這個系統不太適合,使用這種辦法的結果就是,這個球在給定位置左右滾動,幅度還很大。

       怎麼辦?明明乒乓球距離給定位置只差1cm了,風機還在呼呼的吹,這肯定不行,我們可以試試,乒乓球離給定遠(誤差絕對值大)時,吹的力氣大一點;等到乒乓球很靠近給定位置(誤差的絕對值很小)時,風機就小點吹;到達給定位置(誤差爲0)時,風機就不動作了。將執行量寫作:

u = k_{p}*e

       很好!這就是比例控制(PID中的P)。

       不過,這個系統仍然不是運作的很好。力學告訴我們:乒乓球的速度是力的積分。假設乒乓球開始時靜止在給定的右邊,按照比例控制的控制律,乒乓球在到達給定位置之前,風機一直都在把球往左邊吹,那麼到達給定時,根據積分,乒乓球的速度一定不爲0,自然乒乓球不會老老實實的待在給定位置,而是會在慣性下衝過給定,跑到給定左邊去。然後又被吹回來,如此往復。依舊不能穩定停在給定位置。這個時候開始思考:是什麼影響了控制器的效果呢?對,是乒乓球的速度!如果在控制小球的位置的同時,也控制住小球的速度就好了!速度是有方向的數據,我們希望乒乓球在給定位置上時速度爲零,速度如何獲得?我們可以得到通過反饋得到誤差,誤差的量綱是長度,它關於時間的微分就是速度。

誤差e(t)是連續量的時候微分就是誤差關於時間的導數\frac{\mathrm{d} e\left ( t \right )}{\mathrm{d} t}

誤差e(t)是離散的時候(數字系統)微分就是當前時刻誤差減去上一時刻誤差

       \dot{e}=e\left ( k \right )-e\left ( k-1 \right ) 或 \dot{e}=\frac{e\left ( k \right )-e\left ( k-1 \right )}{h}(有時除以採樣時間)

把執行量u寫成:

       u=k_{p}*e+k_{d}*\dot{e}

       這樣再來看“風機-小球系統”,假設乒乓球在給定位置,誤差e已經是0了,但是誤差微分\dot{e}不爲零,如果執行器中含有一塊誤差爲分的成分,那麼顯然執行器已經在執行反向動作了。

       假設乒乓球在給定位置右邊,開始時誤差e很大,誤差微分\dot{e}爲零,小球在風機作用下開始逐漸加速,此時誤差e開始變小(從正值向0變化),而誤差微分\dot{e}開始變小(從0箱負值變化),可以想見在乒乓球到達給定之前,一定有一個時刻t_{x}會讓執行量在此時

       u\left ( t_{x} \right )=k_{p}*e\left ( t_{x} \right )+k_{d}*\dot{e}\left ( t_{x} \right )=0

       這在系統中的實際情況就是,小球實現了“提前剎車”,這對於消除控制系統的超調和提高控制的快速性很有幫助。這就是典型的比例-微分控制(PD控制)。值得一說的是,微分控制還有一個優勢就是可以“抵禦”劇烈擾動,比如突然用手指彈一下乒乓球,誤差的變化不是很大,但是誤差微分卻在短時間內變得很大,因此執行器會劇烈動作來抵禦,這在實際系統中可以觀測到一種“阻尼”現象。

       現在我們看PID,比例-積分-微分控制,他的控制量公式爲:

      u=\left (k_{p}*e \right )+\left (k_{i}*\int e \right )+\left (k_{d}*\dot{e} \right )

       可以看到控制量的公式在PD控制的基礎上多了一個k_{i}*\int e \right,這就是誤差的積分參與了控制。那麼,積分到底對系統有什麼幫助呢?假設把乒乓球放在一個很靠近的給定的位置,誤差是一個很小值,誤差微分是0,如果沒有積分的作用,風機會吹非常微弱的風(因爲誤差很小)。如果這個時候乒乓球與導軌的靜摩擦比風的推力大,那麼乒乓球是不會動作的,乒乓球到給定位置的這一小段誤差就稱之爲“靜差“”,但是如果有積分作用,這個很小的誤差也會慢慢累積變大,風也會慢慢變大直到把小球對到給定位置,這就是積分環節的消除靜差作用。

       至此,筆者已經將PID控制律大致的描述了一遍。碼字不易,如果對您有幫助,點個贊吧謝謝!


       下一篇,筆者將從控制理論的角度分析PID的作用。

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