火星拓荒挑戰-二維網格地圖介紹
使用mBot2實現平面座標精準定位
前言
觀察目前科技教育領域,尋跡自走車大大小小的競賽,雖然比賽場地各有千秋,有的還加入障礙物等等增加挑戰,但不論地圖在複雜剖析其核心仍然是一條線走到底,學生能從中學習到的,不外乎就是紅外線、超聲波感測器的原理,以及PID自動控制或各種尋跡避障的程式邏輯,剩下的就是不斷調適參數,或追求更輕更快更靈敏的車體。
但縱觀各個產業自走車的應用,很少有哪個領域的機器人是只需要一條線走到底的,例如亞馬遜的無人搬運車系統,在工廠內一次有多台自走車同時協作,每台車都要知道自己目前的位置,要去哪裡拿貨並投遞到哪個出口,並且還不能跟其他台車子相撞,這當中的每個環節都離不開一個最關鍵的核心 — 坐標系,而這還只是在地上跑的車子,只需要建立二維坐標系,在天上飛的無人機還需要知道自己目前的高度,才能構建出三維坐標系。
上述這些都是目前的比賽內容所無法學到的內容,為此我設計了一張棋盤格地圖,搭配最新的mBot2機器人,車子在地圖中以走格子為主,以網格的座標系定位車體位置,再帶入火星拓荒的主題,模擬mBot2機器人在火星上執行探勘、採礦、搬運等等任務。
mBot2簡介
那麼市面上這麼多循機車,為甚麼特別選擇了mBot2用於二維網格地圖中,這就得從地圖本身說起,雖然一樣是白底黑線的地圖,但由於車子是走在格子裡,感測器大部分時候是走在白底上,在知道自己的座標位置之前,更重要的是校正車頭目前的方向,才能在移動或轉彎時走到正確的位置上,車子在走難免會有誤差,可能往左偏一點或往右偏一點,必須每走一格就校正一次,以免誤差累積導致車子跑離既定的路線。
因此如何在一個正方形格線內調整車體的方向,就是至關重要的環節,一般的循線車只有兩個紅外線感測器,雖然也勉強能夠校正,但還是有很多狀況是判斷不出來的,而mBot2底下是四路顏色感測器,想當於有四顆眼睛,數量多分佈寬,能夠判斷出更多種車體在方格中的相對位置,且能感測不只黑白兩色而是能辨別出八種顏色,在地圖網格中貼上色紙還能玩出更多花樣。
而mBot2的大腦CyberPi中又有另外一項黑科技 — 陀螺儀,有了陀螺儀便能夠時時刻刻監控車體的旋轉速度,並以此計算出目前偏行的角度,如此便能夠在車子行徑間或校正過程中,確保角度不會偏轉過大,其實在飛機或船上也都配有陀螺儀確定方向,有了四路顏色感測器與陀螺儀的雙重保障,mBot2才能更加準確的走在網格地圖中。
技術解密 校正
每前進、後退或轉彎後都要做一次校正,完整的校正過程如下所示,看起來很長很複雜,但其實只是將車子在方格內可能發生的各種相對位置,逐一挑出來進行處理,以下將對整個函式分段講解
首先,先剔除函式中段對各種狀況的處理,只看頭尾的主體結構,進入函式尤其是有無限迴圈的函示,一定要設定可以跳出迴圈的機制,變數OK用於紀錄校正程序完成了沒,先設為0代表還沒完成要接著繼續校正,另外也順便將角度紀錄歸零。
mBot2的四路顏色感測可以用四個1010的數表示看到黑白線的狀態,數字0表示這顆感測器看到白色、而1表示看到黑色,0000表示四眼睛個都是看到白底,車子就要繼續往前一小步,否則就後退一步再進行修正,1111表示四個都是看到黑線,So(State zero)用於紀錄前一個瞬間看到的狀態。
甚麼樣的狀況代表式校正完成了呢,當車頭對準當下該面向的方向,同時四個感測器的排列一定會平行於方框的某個邊,如果車子在前一刻狀態為0000,下一瞬間四個感測器一起看到黑線狀態變成1111,接著變數OK變成1跳出函式迴圈,否則就將現在看到的狀態重新設為So,繼續校正。
第一類車子行徑間可能發生的誤差是走的太靠邊,太靠右邊會得到0001的狀態,此時就要左轉來修正,相對得太靠左邊得到1000的狀態就要右轉,只是這樣轉之後車頭的方向就偏了怎麼辦,沒關係之後還會有其他機制可以修正回來。
另外一種狀況,就是車頭方向稍微偏了沒有對正,如果車子還在格子內感測不出來,但當車子往前走碰到邊線,就不會同時都感測到黑線,例如當車頭方向稍往左邊偏,得到的狀況可能是0011或0111,此時就要往右轉作修正,反之亦然。
第三種狀況,就是車子方向偏很大,此時當車子走到邊線可能只有一個眼睛看到黑線,就會產生1000或0001的狀況,此時車子會被混淆以為發生的是第一類狀況,例如當車頭方向朝左偏太多,結果被誤判成太靠右邊又左轉,造成錯誤進一步被放大,車子的方向就回不去了該怎麼辦。
別忘記我們還有陀螺儀可以做最後的挽救,在校正的過程中陀螺儀會不斷監測車子旋轉的角度,也就是車頭偏向的角度,當發現車頭偏的太多超過45度,就會直接反方向轉45度將方向拉回。
延伸應用
當最關鍵的校正搞定之後,就可以測試一些進階功能,例如用下列的簡單程式,就能讓車子在網格地圖中走出一個正方形,在該地圖中每個白色格子是15cm的正方形,黑線的寬度是2cm,因此每次前進都是走17cm,而旋轉後稍微後退2cm,是為了怕車體轉90度之後會超過邊線跑到下一格。
網格地圖的玩法也不限於走格子,還是想走在黑線上透過交點定位座標也是可以,除了mBot2任何能判別出網格或交點的小車也都可以,例如搭配mBuild AI視覺模組的mBot,或是有五個循線感測器的BitRacer都是不錯的選擇,會用mBot2只是因為他的延伸性比較多。
往更廣的說,網格地圖只是提供一個精準定位的座標系統,車子以外的東西也可以放上去一起玩,例如下圖mBot2搭配Dobot機械手臂跟輸送帶,構建出的迷你送餐系統也相當有意思。