機器人 自動化 SPI 藍牙

具備環境探索能力 自主機器車破解迷宮

2014-12-29
由於技術快速發展,過去只能手動進行的活動現在已可實現自動化,從而降低人工作業的安全風險。本文旨在展示如何創建探索迷宮的機器車。一旦能創造出會探索環境的原型機器車,就可通過增加新功能來擴展其用途。
這樣的機器車配備一個藍牙終端,能夠將資料從外部感測器傳輸到整合在行動電話或平板電腦中的另一個藍牙終端。傳輸到接收器的資料必須通過另一個應用來解析,為使用者提供一個友好的介面。

在這種情況下,終端前端是運行Android應用的個人化手機,使用者可設定運行在電路板上的應用程式,並即時查看迷宮、迷宮的結構,以及機器當前所處的位置。

機器車不僅從感測器獲取常規資訊,並將其打包後通過藍牙發送,而且還從配合裝置接收命令、進行解析並執行命令。

以下將展示兩個實體的結構和作業,對機器車的描述將多於配合裝置。

RTOS可拓展機器車功能

首先要介紹本文探索迷宮機器車的基礎--Freedom板,為了擴展功能,Freedom板添加了幾個模組,而編寫卡板程式所用的開發環境是採用微控制器(MCU)C語言的CodeWarrior;為了加快與外部模組通訊的驅動程式實作,設計人員須要使用工具軟體如Processor Expert,該產品可用於創建、設定及優化軟體元件,為多個設備(從感測器到微控制器)自動生成源代碼。如此一來,創建能經由如通用異步收發器(UART)進行通訊的軟體模組,變得非常簡單,可直接從圖形使用者介面(GUI)實現。

由於這項設計為即時應用,因此須要在硬體和編寫新代碼之間擁有一個即時作業系統(RTOS)。即使從多個角度來看將增加開銷,但它的一大優勢是能夠簡化編程,重點是能夠輕鬆地擴展機器的功能。

在此考量的RTOS選項包括FreeRTOS和MQX(帶MQX Lite版本)。FreeRTOS適用小型裝置,只需要3∼4KB的快閃記憶體和小於1KB的RAM。另一方面,MQX Lite需要大約2.4MB的RAM才能運行。MQX和MQX Lite之間的主要區別在於後者沒有附帶驅動程式以及用於串列周邊介面(SPI)、內部整合電路(I2C)或UART的額外驅動程式,而其中有些驅動程式是本專案必需的。

FreeRTOS和MQX Lite之間另一個重要區別是,後者只基於優先順序搶占調度器,而前者則基於時間量子,這些區別導致FreeRTOS成為最終選擇。

三大硬體元件實現自主機器車

圖1 硬體組裝
圖1為本文所使用的硬體模組及其連結的簡單示意圖,其中有一個藍牙模組BC-04,用於機器車與基於手機的馬達驅動晶片之間的通訊,另外還有兩個直流馬達、三個超音波距離感測器HC-SR04(分別位在機器車的前部、左側及右側,用於檢測障礙物和彼此之間的距離)。

除此之外,系統架構中還有一個能夠接收9∼12伏特(V)輸入、產生5伏特電壓的電壓轉換器,為Freedom板和遠程感測器供電。

以下將分別探討如何連接和設定藍牙模組、驅動器和感測器等元件。

藍牙模組

這兩個設備(手機、探索機器車)將通過藍牙技術進行無線通訊。顧名思義,藍牙標準主要服務兩類虛擬實體:主設備和從設備。在一系列相互連接的設備中,該標準指定需要一個主設備和一個或一個以上的從設備。

在本文例子中將主設備定義為機器車,從設備定義為手機。多個從設備可以同時連接到主設備並與之進行通訊,這意味著可以藉由多部手機來控制機器車。

手機和機器車之間的藍牙通訊採用UART(UART1)協議,而不使用偶校驗位;具備一個停止位,社區串列傳輸速率設為9600。但任何校驗位缺失或只有一個停止位元可能會增加資料傳輸錯誤機率,於是須要創建一種機制,以糾正接收器收到的資料包(圖2)。

圖2 將藍牙模組連接到Freedom板

馬達驅動

附加在機器車的兩個直流馬達,是經由驅動器下達命令,驅動器是一顆積體電路,能夠將輸入電壓分成兩個相同或不同的輸出。該驅動器基於馬達驅動晶片,可提供最大2安培(A)的輸出電流。

要改變馬達的速度須要改變施加到馬達上的電壓,因此可以放心使用脈衝寬度調變(PWM)。在此不對PWM進行介紹,也不描述其工作方式,但須要強調的是,通過驅動器來控制馬達的精確度並不高,因此如果想讓機器車的兩個輪子保持相同的速度,則馬達無法提供相同的輸出電壓;但是這個問題可以透過軟體來解決。圖3為驅動器的連接方式。

圖3 連接電機驅動器

超音波距離感測器

最後一個尤為重要的硬體元件是超音波距離感測器。該感測器是非接觸式感測器,依據Ecolocatiei原理工作,能夠測量離最近障礙物的距離,在以下範圍內上下浮動3毫米(mm):2公分(cm)是下限,4公尺(m)是上限。此外,感測器的另一個特性是角度測量非常小,僅為15o。

該感測器的工作原理非常簡單,即為發射超音波,一次八個,然後啟動計時器,等待這些超音波返回(當超音波遇到障礙物時會被反射)(圖4)。

圖4 超聲波距離感測器的連接

與此同時,計時器將持續統計在超音波返回前,或者在超過時間限制時過去了多少微秒。最後,能夠節省音波真正在空氣中的傳輸時間(Δt)。然後根據音波在空氣中的傳播速度,可以判斷與障礙物之間的距離:

caer=(331.3+0.606×Θ)m/s,其中Θ是驅動工作的環境溫度。

在了解所有互連的硬體模組後,現在就可以討論軟體,重點是探勘環境中所使用的演算法。

演算法協助 機器車處理不同路況

圖5 直走

事實上,本文機器車沒有配備伺服驅動器來阻止其移動,特別是在須要轉彎時,因此需複雜的演算法,來保證當機器車以直線行駛時,在路口或倒退時的轉彎性能。但以機器車的例子來說,接到機器車硬體以及所採用演算法的模組都有其局限性。

假設現在有一個迷宮,只包含大小相等的直牆街區(Y),高度至少X公分,任意兩個區之間的距離固定為Y公分,迷宮的寬度為Y公分(十字路口是Y面的平方)。

一開始,機器車會位於迷宮的某處,使感測器能夠檢測到側壁和障礙物(L和R)(圖5)。不一定要位於道路的正中央,但可以使模組側感測器檢測到距離差(ΔS)的值小於Z。Z的值最好為10公分。這很重要,因為每當演算法檢測到ΔS小於Z時,會考慮機器的左側和右側以及牆壁,從而使汽車保持直線路徑。換句話說,要使機器車保持直線軌跡,則須通過側感測器獲得的值進行調整,如此一來便解決了一個輪子的電壓驟降大於另一個輪子的問題。

如果該差值大於模組,且前感測器獲得的距離D大於Y,則視機器已走出迷宮。事實上,尋找迷宮出口的條件限制了機器車本身的構造,因為其無法滿足十字形的路口,在這種情況下三個感測器檢測到的值會較高,演算法會認為機器已到達最終狀態。由此可知,機器車直線行駛的速度將與前感測器提供的距離成反比。

圖6 如果汽車總向右轉,會進入無限迴圈。

那麼當機器車到達路口時會發生什麼事呢?基本上,當模組間隙距離L和R大於Z時,表示機器車已經到達一個十字路口。在這種情況下,機器車可自動調整軌跡和一小段路,轉向與道路平行的路徑,得出的結論是邊緣交點(Y值)不能很高(最大30英吋),才能使偏差最小。

當正處於十字路口時,機器車如果能夠選擇繼續前進,將會是首要選擇,因為實際上沒有人會知道應該停在路口的哪個地方才能轉彎。

如果將該路口的位置保存下來,在到達該位置時停下來,向右轉彎(確保機器車不超過該路口的中心),機器車會將從距離該點Y公分的地方開始減速;在其他情況下,如果機器車到達能夠選擇繼續向前移動的十字路口,當距離小於Fmin時,將停在該路口的前面。在這個點上,機器車完全處於路口內。

現在,不僅須要檢測是否有左側路或右側路,還要檢測是否有T形路口,或簡單地改變移動方向。在第一種情況下,要保持向右轉彎,然後在機器中保存有未訪問的區域這一事實,並標記虛擬迷宮。

圖7 在路口轉彎

由於機器車要遵從的邏輯和命令由手機提供,因此高精度機器所處的虛擬迷宮的構造須要與現實保持同步。

此外,還要考慮迷宮的迴圈模式。如圖6所示,在該情況下機器車從所指定的位置開始移動,在每個路口都向右轉,將進入無限的迴圈中。

要解決無限迴圈的情形,須假定當機器車進入之前來過的路口,並且向相同的方向轉彎時不會遇到死胡同,也不會到達從未訪問過的地區。

圖8 Android應用

機器車沒有致動器,會轉大大的彎,而且要能夠避免其返回到180o,因為機器車和在現實生活中一樣,無法一次完成動作,需要幾個動作才行(包括退回)。所以要一直進行90o的轉彎。如圖7所示,機器車進入路口,想要向左轉彎。機器車感測器產生的超音波將進行傳播。超音波到達垂直的牆不會到達感測器,前感測器檢測到的距離將大於機器車完成轉彎後的距離。如果機器車以較低的速度完成轉彎然後靜止不動(左車輪靜止不動,右車輪向前),當達到兩個光束的最小值時則視為轉彎結束。

最後,剩下的最後一種情況是,到達死胡同時該採取什麼行動?返回是無可避免的,這就是要返回之前所在路口的原因(前感測器檢測到的距離大約等於之前在該路口時同一個感測器所檢測到的距離)。

Android應用讓使用者能夠通過藍牙設備選擇合作夥伴實現連接,設定應用設置,通過記錄最重要的流迷宮形式的系統,在意外發生時做出通知。圖8為迷宮的3D呈現,介面簡單易用,可進行擴展。在建立起與機器車的藍牙連接後,按下開始按鈕,即可開始探索流程。

本文所介紹的機器車可在簡單的迷宮中提供導航,根據一套演算法來保持軌跡,進行轉彎,到達未訪問過的走廊。如果創建的迷宮 面有兩個或兩個以上接近的路口,或者牆不完全垂直會引發多個問題,導致無法完整地探索整個迷宮,或者改變行進方向而沒有碰到障礙物。

這個局限性不是因為使用三個與周圍環境進行交互的超音波距離感測器。陀螺儀有助於建立和保持軌跡,但會對專案的總體成本產生影響。

目前這樣的機器車設計,可進一步透過提高轉彎精確度、構建一個能夠即時讀取環境參數並根據檢測出的限制做出不同決策的自適應系統加以改進。

(本文作者任職於飛思卡爾)

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!