06.01 平衡車的算法處理過程和難點分析

平衡車的算法處理過程和難點分析

平衡原理

調皮的我在小時候玩過這樣的一個動作:記得我小時候用的雨傘還是那種比較長的,大概有1m左右吧那種的,不像現在的雨傘都比較小了,不過現在長的也有,有時在拿雨傘的時候,總喜歡把它的一端放立在兩個並排的手指上,讓它不倒。

平衡車的算法處理過程和難點分析

為了讓它不倒,我們肯定要做一個動作,那就是觀察雨傘的運動情況,然後我也運動起來。我們抽象一下這個模型:

其實要做到不倒,我們必須滿足兩個條件:

  • 必須通過眼睛觀察雨傘的傾斜角度和傾斜趨勢(角速度)。
  • 雨傘放在手指上必須可以移動,需通過手指的移動去抵消雨傘傾斜的角度和趨勢。

我相信應該沒人可以蒙著眼睛(當然也不能通過其它感觸),就可以直立雨傘,因為沒有眼睛的負反饋,就不知道雨傘的傾斜角度和趨勢。這就需要引出下面的內容了。

閉環控制

我把上面這整個過程用一個框圖表示出來:

平衡車的算法處理過程和難點分析

我們把這樣的一個系統稱之為閉環控制系統,通過眼睛來實時的反饋雨傘的運動趨勢,再將這個偏差信號給到大腦在反饋到執行器上,實現實時的控制。使雨傘的傾角保持在0度,就可實現直立。和閉環控制系統對應的那當然是開環控制系統了,其實也就是沒有了反饋迴路,不能將結果再傳輸到控制系統的輸入端做有差運算了。典型的例子就是我們打籃球,籃球出手後,就是一個開環控制,至於結果能不能投中我們是無能為力的。

小車平衡原理

平衡小車是通過兩個電機運動下實現小車不倒下直立行走的的小車,在外力的推拉下,小車依然保持不倒下。這是我們的目標。

平衡小車也是上述這樣的過程,通過負反饋實現平衡。與上面保持雨傘直立比較則相對簡單,因為小車有兩個輪子著地,車體只會在輪子滾動的方向上發生傾斜。控制輪子轉動,抵消在一個維度上傾斜的趨勢便可以保持車體平衡了。看圖:

平衡車的算法處理過程和難點分析

基本上就是這3種情況:

  • 圖1,車體和車輪處於垂直狀態,小車平衡的,這也是我們要的狀態
  • 圖2,車體向左傾斜,為了保持平衡,車輪應該加速向左運動
  • 圖3,車體向右傾斜,為了保持平衡,車輪應該加速向右運動

所以根據上述的原理,通過測量小車的傾角和傾角速度控制小車車輪的加速度來消除小車的傾角。因此,小車傾角以及傾角速度的測量成為控制小車直立的關鍵。

小車平衡的處理過程和難點

其實過程很簡單,先是使用傳感器獲得當前小車傾斜角,然後根據此角度做PID調節,得到小車兩個電機的PWM脈寬,調整輪子速度,使之回到傾角為0的狀態,即保持平衡。然後就不停地重複採集->處理->調節->處理這一過程。在此基礎上,附加兩電機的PWM值,即可實現前進,倒退,左轉,右轉動作。

難點不外乎以下幾點:

1.傳感器的數據處理是小車的最大難點。一是傳感器受震動影響很大,很容易超量程;二是傳感器數據漂移比較厲害。而關鍵的小車傾角就來源於此傳感器數據。這就是我們上一講《 》的內容了採用卡爾曼濾波算法,融合陀螺儀和加速度傳感器數據得出小車傾角。

2.單純靠傾角做PID不能使小車平衡,因為當小車傾角接近0度時,改變的PWM值無法使小車越過平衡點,造成小車朝一邊加速前進,所以要將速度也添加至PID調節中,做積分。

後面的內容我們將具體來實施了,下一章將講解控制角度的PD算法


分享到:


相關文章: