mBot 如何使用 Gyroscope (陀螺儀) 自行走直線

mBot 如何使用 Gyroscope (陀螺儀) 自行走直線

這裡我們嘗試運用外部感應器讓 mBot 自行走直線 (straight line),也就是利用感應器回傳的數值來修正 mBot 的行走方向。可運用的感應器有「羅盤 (compass)」、「陀螺儀 (gyroscope)」與「加速計 (accelerometer)」,三者的差異可參考「Difference between Accelerometer , Compass ,Gyros or Gyroscope」。

而「走直線」在此意味著盡可能讓 mBot 朝著初始位置 (initial position) 所指的方向前進。起初嘗試運用「電子羅盤」指引方向,但容易受到地球磁場以外的磁性物質干擾,不利於 mBot 正確找到方向。因此,選擇「陀螺儀」來偵測 mBot 車體偏移情形,及時轉向,回到初始指向的路線。

  1. 選用陀螺儀「Me 3-Axis Accelerometer and Gyro Sensor」,裝置於 mBot 上,讀取 Z 軸資訊取得車體偏移情形。
     
  2. 車體相對於平面的靜止情況下,Z 軸的數值雖然上下起伏,尚在一定範圍內,其數值仍具參考價值。如將 USB 電源供應改為電池供電後,將明顯發現 Z 軸數值不斷偏移,隨著時間而增加 (可為負值),這樣便無法正確運用 Z 軸的數值了解車體偏向情形。推測或許是 drift 的問題,可參考關鍵字「gyro drift」搜尋相關文件。
  3. 如何修正 mBot 陀螺儀 Z 軸數值偏移的問題呢?
    首先,透過簡單的程式來紀錄「時間」與「Z 軸數值」的對應關係,「時間」則是 mBot 內部的計時器數值。取樣的過程,可以加入時間間隔,每隔0.5秒、1秒,或是0.1秒皆可。避免過於頻繁讀取,感應器未能及時反應,而取得極端數值。

    將數值紀錄於清單 (list) 中,再將此資料匯出,透過相關統計軟體來分析與計算。
  4. 觀察「時間」與「Z 軸數值」對應關係,排除掉過大或過小的數值,推測可能為線性關係 (linear),進一步使用統計軟體(如「Linear regression calculator」)分析與確認。下表數值中,也會發現當 Z 軸數值小於 -180 後,將變成 180;而大於 180 後,將變成 -180。在後面的程式中會針對這個問題做處理。

    Z 軸數值每秒大概會有接近 -3.0 的增加。
  5. 實際程式
    透過 calc_drift 函式,可以依實際請況自動取樣計算合適的 drift 值。或依據實際經驗,指定 drift 值,如 calc_drift2 函式。這裡修正所需的經驗數值約是 3.34。
  6. 上述方法,雖不能完美的直線行走,尚能於適當距離內完成近似直線的軌跡。正所謂「失之毫釐,差之千里」,初始指向的些微差異,隨著時間變化,終將使得 mBot 與目標位置漸行漸遠。
  7. 借用 Micro:bit 或其他的「電子羅盤 (磁強計)」,增加額外的觀察資訊,提供 mBot 判斷方向或許值得一試。

    下圖程式,將 Micro:bit 讀取到的方位感應值稍做判斷後,以數位信號方式與 mBot 溝通。