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