你真的瞭解PID嗎?PID的本質純乾貨分析

入住頭條有1年多了,第一次發文。我是一隻在無人機領域的嵌入式工程獅,看了頭條上很多的對PID解說的專業文章,幾乎都是從控制上切入的,這裡我從不同的角度來分析PID。

先說結論:PID的本質是跟隨器,用於跟蹤給定訊號。

很多朋友在這裡又會發問了,PID不是控制器嗎?在某權威百科上面的解釋就是:比例(P)積分(I)微分(D)控制,簡稱PID控制。這是沒錯的,PID演算法從100年前開始出現,就開始廣泛的用於工業控制,PID的起源就是用於做控制器。看起來PID和控制是分不開的,實則不然。

你真的瞭解PID嗎?PID的本質純乾貨分析

從PID的公式也可以看出,e是目標量和輸出量的偏差,當誤差e趨近0時,輸出u將收斂到一個固定值。最終PID實現的效果就是將目標量和輸出量兩者的偏差歸零,當目標量變化時,輸出量也會跟隨著目標量變化,也就是說

輸出量透過PID來跟隨目標量

下面我從兩個例子來說明PID分別作為控制器使用和訊號跟隨器的使用。

PID作為控制器——水箱液位控制

這裡水箱的液位我們假設沒有延遲,設計一個PID控制器來控制液位,誤差e為目標液位和輸出量為液位之差。u為執行器輸出,這裡是閥門開度,大於0為注水,小於0為放水。具體程式碼不在此贅述。

你真的瞭解PID嗎?PID的本質純乾貨分析

剛開始的時候,把液位設定到5米,2秒後實際液位基本到達5米。在50s的時候,把目標液位設定為2米,液位下降,2秒後穩定到2米。說明PID完成了它原始的使命——作為控制器使用。

PID作為訊號跟隨器——傾角感測器的設計

這裡傾角感測器的設計就不涉及到任何控制了。我們的目標是測量角度,硬體選用加速度計和陀螺儀構成。為了方便,我們只測量單軸角度,這裡用2軸微電子加速度計和1軸微電子陀螺儀。

陀螺儀的輸出量是角速度,角速度積分就是角度,這不是用陀螺儀就能解決了嗎?為什麼還要加速度計呢?是因為陀螺儀輸出的角速度包含有各種噪聲,積分得到的角度會隨著時間誤差越來越大。具體的可以看下面的影象分析。

你真的瞭解PID嗎?PID的本質純乾貨分析

上面左圖是以1度/秒的角速度運動10秒,右圖在角速度1度/秒的基礎上加了±0。5度/秒的隨機噪聲,可以發現在10秒后角度值為106度(圖可能看不清),這是因為角度值的獲取是透過角速度積分得到的,存在累計誤差。而加速度計具備良好的穩定性,測量的偏移也很小,最重要的是它測量的角度沒有累計誤差。

你真的瞭解PID嗎?PID的本質純乾貨分析

θacc是加速度計測量的傾角。定義當測量角為0時,az沿著重力方向豎直向下,和重力加速度的關係是az=g*cos(θacc),ax垂直於az,和重力加速度的關係是az=g*sin(θacc)。這就是加速度計測量傾角的原理。

那既然加速度計沒有累計誤差,測量比陀螺儀更好,用加速度計就夠了嘛,為什麼一定要用陀螺儀呢?因為

加速度計測量的物理量是比力,而非加速度

,加速度是透過比力計算得到的。

加速度計不能分辨出是地球引力還是運動外力

。所以在被測量物體運動的時候將無法得到準確的傾角。這個時候陀螺儀就起作用了,因為陀螺儀對運動加速度不敏感。

陀螺儀短時間內計算的角度很準確,但時間長了會產生累計誤差,加速度計長時間內的穩定彌補了陀螺儀的短缺。加速度計在運動的情況下測量有誤差,陀螺儀對運動不敏感。

所以可以用兩者的互補關係,來設計一個傾角感測器。那這裡面怎麼用到PID的性質呢?

我們把

加速度求得的角度θacc作為目標量

,我們把

陀螺儀積分角度θgyro作為輸出量

。讓陀螺儀角度跟隨著加速度角度。設計PI跟隨器,調節引數,讓陀螺儀積分角度θgyro慢慢跟隨加速度計算的角度θacc。下圖是計算週期為50ms時,kp=0。2,ki=0。005時的效果影象。角速度噪聲±0。5度/秒。加速度受到運動的影響,角度噪聲為±2度。

你真的瞭解PID嗎?PID的本質純乾貨分析

在0秒時以角速度10度/秒運動2秒,在2秒時角速度以-10度/秒運動4秒。下面是6s到10s的放大圖。

你真的瞭解PID嗎?PID的本質純乾貨分析

真實角度(藍色)為-21度,陀螺儀積分角度(紫色)漂移了2度左右,加速度計計算角度(綠)噪聲為±2度,組合角度(紅,即陀螺儀積分角度跟隨加速度計計算角度的結果)保持在真實角度附近,誤差不到1度,說明PID完成了它的本質工作——作為訊號跟隨器使用。

新人首次發文,文章中有問題的地方請指出,我會改正。後面計劃普及一些在導航和控制上的一些專業知識。如果能開專欄,計劃在專欄開源一個無人機的專案,透過專案來分享導航和控制的設計經驗。