咨詢電話
021-80392549
該項目旨在讓機器人在預先定義的路徑上精確移動,無需使用GPS或WiFi或藍牙進行定位,甚至無需地圖或建筑布局規劃。并實時繪制其實際路徑(按比例)。藍牙可以代替有線,用于傳輸實時位置信息。
poYBAGKexECAQkEsAAXk1Nr4yXA055.png
背景
我們一直在為基于Arduino的機器人的室內導航尋找強大的解決方案。在為此應用選擇正確的運動傳感解決方案時,我們考慮了Oblu(一種開源IMU)。它的低成本和開源性質使其成為可能的候選者。這里棘手的部分是oblu的開源程序適用于腳踏式室內行人航位推算(PDR)或行人導航,簡而言之。Oblu作為一款腳裝式IMU在室內的PDR性能令人印象深刻。一個很大的優點是免費的Android應用程序(Xblu)的實時位置跟蹤。但是,我們不確定如何利用其現有的基于人類步行模型的行人導航算法。
Oblu的內部計算基于人類行走。Oblu給出兩個連續步驟之間的位移和航向變化。當腳與地面接觸時,鞋底的速度為零,即鞋底處于靜止狀態。這樣,Oblu可以檢測“步驟”并糾正一些內部錯誤。這種頻繁的錯誤糾正會帶來出色的跟蹤性能。所以我們的機器人也以同樣的方式行走——移動、停止、移動、停止。
我們選擇了Oblu,很快我們就可以組裝我們的機器人和跟蹤系統。
它是如何工作的:
機器人以預先編程的路徑移動,并將其實際移動信息(通過藍牙)傳輸到手機以進行實時跟蹤。
Arduino預編程了路徑,oblu用于感知機器人的運動。oblu定期向Arduino傳輸運動信息。在此基礎上,Arduino控制輪子的運動,讓機器人遵循預定義的路徑。
poYBAGKexDuASJyDAAJpqB8UR64588.png
機器人的路徑被編程為一組直線段。每個線段由其長度和相對于前一個線段的方向定義。機器人的運動保持謹慎,即它以直線運動,但在較小的部分(為簡單起見,我們稱之為“步幅”)。在每一步結束時,oblu將步長和偏離程度(方向變化)從直線傳輸到Arduino。如果Arduino發現與預定義的直線有偏差,則Arduino在收到此類信息的每一步都會糾正機器人的對齊方式。
根據程序,機器人總是應該直線移動。但是,由于表面不平整、機器人裝配質量不平衡、直流電機的結構或電氣不平衡或前自由運轉輪的隨機方向等非理想情況,它可能會偏離直線,并可能以一定的角度或傾斜的路徑行走。
邁出一步→糾正你的前進方向→前進
如果機器人的行程超過該特定線段的編程長度,它也會向后移動。
下一個步長取決于該特定直線段要覆蓋的剩余距離。當要行進的距離較大時,機器人會大步走,而在接近目的地(即每個直線段的末端)時,機器人會小步走。
IMUOblu同時將數據傳輸到Arduino和手機(通過藍牙)。Xblu(Android應用程序)根據從機器人接收到的運動信息執行一些簡單的計算來構建路徑,用于在手機上進行實時跟蹤。使用Xblu構建路徑如下所示:
pYYBAGKexDeAHOhuAAHx8ZAHyO4347.png
總而言之,Obl可以感知運動并定期將運動信息傳達給Arduino和手機。根據編程路徑和運動信息(由oblu發送),Arduino控制車輪的運動。除啟動/停止命令外,機器人的運動不受遠程控制。
路徑建模:
如果機器人只在直線段上行走,它可能會最容易控制。因此,必須首先將路徑建模為一組直線段。下面的圖片包含幾個示例路徑及其在位移和方向方面的表示。這就是在Arduino中對路徑進行編程的方式。
pYYBAGKexDKAbP5lAAEH5tQ_73E653.png
同樣,任何作為一組直線段的路徑都可以在Arduino中定義和編程。
通訊協議:
第1步:Xoblu向oblu發送START命令
第2步:oblu通過向Xblu發送適當的ACK來確認接收命令
第3步:oblu在每一步向Xoblu發送包含每個步幅的位移和方向信息的DATA包。(步驟=每當檢測到零運動或檢測到靜止時)。
第4步:Xblu通過向oblu發送適當的ACK來確認接收到最后一個DATA數據包。(重復第3步和第4步的循環,直到Xblu發送STOP。收到STOP命令后,oblu執行第5步)
第5步:停止-(i)在oblu中停止處理(ii)在oblu中停止所有輸出