Introduction: Two-wheel Self-balancing Robot
This is a Two-wheel Self-balancing Robot powered by Arduino Mega 2560. Click here to watch the demo video!
Step 1: Build the Robot Body
1. 車身用壓克力板打造而成,並用銅柱將四層的壓克力板連接起來。
2. 馬達利用金屬L夾連接到壓克力板上
3. 最底層放L298N(馬達驅動電路),中間兩層Arduino及電路板,上層放電池。注意,因平衡車是利用倒單擺的原理(上重下輕),所以重物(如電池)放上層才較容易平衡
Step 2: Program Flow
這台平衡車最主要的sensor為MPU-6050,它是3軸陀螺儀+3軸加速度計。但其量測到的數值無法直接用來當作平衡的參數,還需經過互補濾波器處理後才能送到PID Controller進行平衡控制。
1. Complementary Filter (互補濾波器)
實際上,感測器各有其限制,當角度快速變化(高頻)時,陀螺儀取其角速度,這時候積分得到的角度比較準確,但這種快速變化會對加速規造成顯著的外力干擾,反而無法透過計算重力加速度的分量來計算角度;另一方面,在角度幾乎靜止(低頻)時,加速規能夠很好的計算角度,但陀螺儀的offset與漂移(drift)的問題,會隨著積分不斷的累積誤差,反而失去量測角度的功能。
互補濾波器便是利用這樣的特性,取高頻的陀螺儀訊號積分值,同時也感測低頻的加速規訊號,將兩者分別計算的角度以固定比例相加,如此可達到感測互補的作用,既抑制加速規的干擾,又可消除陀螺儀的積分誤差,更重要的是這個方法在程式碼中容易實現,並具有調整的彈性。
2. PID Controller
PID控制器的比例單元(P)、積分單元(I)和微分單元(D)分別對應目前誤差、過去累計誤差及未來誤差。若是不知道受控系統的特性,一般認為PID控制器是最適用的控制器[2]。藉由調整PID控制器的三個參數,可以調整控制系統,設法滿足設計需求。
Step 3: Arduino Programming
Please visit my GitHub harrysdc for the code.