摘 要: 移動定位是機器人執(zhí)行任務的基礎,沒有精確的定位系統(tǒng),移動機器人無法完成所要求的工作。基于Arduino模塊設計實現(xiàn)了一個簡單的機器人移動定位系統(tǒng),系統(tǒng)以Arduino模塊作為移動機器人的控制核心。簡單介紹了移動定位理論,著重闡述定位系統(tǒng)的軟硬件設計。系統(tǒng)采用ZigBee無線傳感網(wǎng)絡定位方法,利用ZigBee大范圍定位無誤差特性,使移動機器人快速準確定位,基于ZigBee無線傳感網(wǎng)絡定位范圍較小、精確度低的缺陷,對測距定位算法進行了一定的改進。最后經(jīng)試驗驗證,所設計的移動定位系統(tǒng)定位誤差較小,滿足實際需求。
關鍵詞: 移動機器人; Arduino; ZigBee無線定位; RSSI
中圖分類號: TN911?34; TP242.2 文獻標識碼: A 文章編號: 1004?373X(2015)24?0040?04
Research and application of mobile positioning system for modular robot
CHEN Shuya
(School of Mathematics and Computer Science, Gannan Normal University, Ganzhou 341000, China)
Abstract: Mobile positioning is the basis for robot to execute any tasks, that is, mobile robot can not complete the required work without a precise positioning system. A simple robot mobile positioning system based on Arduino module was designed and implemented, in which Arduino module is taken as the control core. The mobile positioning theory is introduced briefly, but the hardware and software design of the positioning system is described emphatically. ZigBee wireless sensor network positioning method is adopted in this system, which utilizes the zero error characteristic of ZigBee positioning in large area to make the mobile robot to locate correctly and rapidly. Aiming at the ZigBee’s shortcomings of small range and low accuracy, the ranging location algorithm is improved in this paper. The experimental results show that the positioning error of the designed mobile positioning system is small, which can satisfy the actual demand.
Keywords: mobile robot; Arduino; ZigBee wireless location; RSSI
自主移動機器人是通過自身傳感器感知周圍環(huán)境信息,對環(huán)境信息進行自主分析、判斷和決策,并結合自身狀態(tài)進行合理路徑規(guī)劃,最終自主運動到目的地以完成相應的任務[1]。移動定位是自主移動機器人首先要解決的問題,只有明確了自身精確位置才能做出合理有效的規(guī)劃路徑,進而快速準確地到達目的地。在定位過程中,單一傳感器獲取的數(shù)據(jù)是片面的,需要使用多個傳感器才可以完整的獲取機器人周圍的環(huán)境信息[2]。本文利用多個ZigBee無線傳感器的交互使用網(wǎng)絡實現(xiàn)移動機器人的全局定位。
1 ZigBee無線定位技術
ZigBee無線傳感器具有低功耗、低成本、強自組網(wǎng)的特點,這些特點使它在工廠或室內(nèi)的應用中具有得天獨厚的優(yōu)勢:自組網(wǎng)能力使得各監(jiān)測節(jié)點自行完成網(wǎng)絡構建,免去人工設置和維護;低功耗提高了監(jiān)測數(shù)據(jù)的持續(xù)能力[3]。無線定位技術是根據(jù)特定的算法對接收的無線信號進行測量,從而計算被測物體的位置。定位算法主要有基于測距的定位算法和無需測距的定位算法?;跍y距的定位算法需要通過測量傳感節(jié)點之間的距離來計算未知節(jié)點的位置,此種算法有較高的精度,目前常用的測距技術是接收信號的強度RSSI(Received Signal Strength Indicator)。
1.1 基于RSSI的測距原理
RSSI測距技術成本低并易實現(xiàn),是目前廣泛使用的測距技術。受環(huán)境影響,傳播模型建模的復雜性是此種測距誤差的主要來源[4]。RSSI是發(fā)射節(jié)點和接收節(jié)點之間距離的函數(shù),可表示為:
[RSSI=-(10nlgd+A)] (1)
式中:[n]是信號傳輸常數(shù);[d]為發(fā)射節(jié)點和接收節(jié)點之間的距離;[A]是與發(fā)射強度有關的量。
1.2 基于RSSI的定位算法
在無線傳感網(wǎng)絡中,發(fā)射節(jié)點會周期性的發(fā)射信號,待測節(jié)點接收信號并采樣存儲,等到獲得足夠多的信息后,就通過定位算法計算待測節(jié)點的坐標,定位的過程如下:
(1) 先通過事先測定或GPS手段獲取部分發(fā)射節(jié)點的精確位置坐標;
(2) 無線傳感網(wǎng)絡中的相鄰節(jié)點間進行信息交流以交換位置坐標和測量各節(jié)點間的RSSI值,經(jīng)過信息交流,待測節(jié)點獲得了其相鄰已知節(jié)點的坐標值和RSSI值;
(3) 發(fā)射節(jié)點根據(jù)接收的RSSI值,通過式(1)給出的計算模型計算與待測節(jié)點的距離;
(4) 待測節(jié)點根據(jù)收到的發(fā)射節(jié)點的距離和坐標,通過定位算法確定自己的坐標。
基于測距的節(jié)點定位算法有三邊測量法、三角測量法、加權質(zhì)心法和極大似然估計法。本文采用極大似然估計法作為確定待測節(jié)點的定位算法。采用極大似然估計法的示意圖如圖1所示。
圖1 極大似然估計法的示意圖
已知發(fā)射節(jié)點1,2,…,n的坐標分別為[(x1,y1),][(x2,y2),…,(xn,yn)]。它們到待測節(jié)點A的距離分別為[d1,d2,…,dn],設A的坐標為[(x,y)],根據(jù)極大似然估計法可求得A的坐標。
根據(jù)兩點間的距離公式,可得:
[(x1-x)2+(y1-y)2=d12(x2-x)2+(y2-y)2=d22 ?(xn-x)2+(yn-y)2=dn2] (2)
從第一個方程開始依次減去最后一個方程可得: [x21-x2n-2(x1-xn)x+y21-y2n-2(y1-yn)y=d21-d2nx22-x2n-2(x2-xn)x+y22-y2n-2(y2-yn)y=d22-d2n ?x2n-1-x2n-2(xn-1-xn)x+y2n-1-y2n-2(yn-1-yn)y=d2n-1-d2n] (3)
將式(3)用線性方程可表示為:[AX=b]。
利用標準最小均方差估計法,可得A的坐標:
[X=(ATA)-1ATb] (4)
其中矩陣A,b和X分別為:
[A= 2(x1-xn) 2(y1-yn) 2(x2-xn) 2(y2-yn) ? ?2(xn-1-xn) 2(yn-1-yn)] (5)
[b= x22-x2n+y22-y2n+d2n-d21 x22-x2n+y22-y2n+d2n-d22 ?x2n-1-x2n+y2n-1-y2n+d2n-d2n-1] (6)
[X=xy] (7)
2 ZigBee無線定位系統(tǒng)的設計
在底層無線定位系統(tǒng)中,CC2431為待測節(jié)點的主控,CC2430為發(fā)射節(jié)點的主控。CC2431相較于CC2430,其增加了基于RSSI測距定位的硬件引擎,該引擎通過接收發(fā)射節(jié)點的RSSI值并經(jīng)定位算法進行計算[5]。在ZigBee無線網(wǎng)絡定位系統(tǒng)中,待測節(jié)點定位的精度不僅與周圍的環(huán)境有關還與發(fā)射節(jié)點即參考節(jié)點的數(shù)量有關,一般情況下,參考節(jié)點越多,待測節(jié)點的定位精度越高。本文無線定位系統(tǒng)的底層硬件由1個CC2431待測節(jié)點和8個CC2430參考節(jié)點以及相關的協(xié)調(diào)器等設備組成。
2.1 基于測距的節(jié)點程序設計
參考節(jié)點的坐標(x,y)是事先確定的,本系統(tǒng)中待測節(jié)點模塊固定在自動移動的機器人上。圖2為待測節(jié)點的定位過程。
由圖2可知,在定位引擎開始之前應使能定位引擎寄存器LOCENG即LOCENG.EN=1;然后讀取坐標,讀取到的參考節(jié)點存放在RF寄存器REFCOORD中,在向寄存器REFCOORD寫入?yún)⒖脊?jié)點坐標之前需將LOCENG.REFLD置1表示一組已知坐標已經(jīng)寫入;8個坐標必須一次性寫入。少于8個的節(jié)點坐標值用0.0填充。所有的測量參數(shù)應寫入RF寄存器MEASPARM中,在寫入寄存器MEASPARM之前,需要將LOCENG.PARLD置1;測量參數(shù)按照[A,n,RSSI1, RSSI2, RSSI3,…, RSSI7]順序?qū)懭爰拇嫫髦校淮涡詫懲旰?,使LOCENG.PARLD=0。當參考節(jié)點和測量參數(shù)都讀取完畢后,使能LOCENG.RUN位,定位引擎開始計算所測的坐標值然后輸出。
2.2 測距定位算法的改進
CC2431使用的寄存器以字節(jié)為單位,對傳感節(jié)點處理的最大區(qū)域可達64 m×64 m,對于很多大的廠房和使用場所,不能滿足定位需求。因此有必要對這一覆蓋范圍進行擴展,擴展的方法一般有兩種途徑:一是改造底層硬件,通過增加擴頻電路等方式;另一種方式就是進行算法改進。硬件電路一旦固化,更改麻煩并增加成本,所以在定位算法上加以改進以滿足實際需要。
圖2 待測節(jié)點定位流程圖
在改進的算法中將2 B的存儲劃分為兩部分:坐標數(shù)據(jù)的低2位存儲小數(shù)點,高14位存儲坐標數(shù)據(jù)的整數(shù)部分,所以橫、縱坐標最大可表示為16 384.75 m。改進算法后節(jié)點的位置示意圖如圖3所示。
圖3 改進算法后節(jié)點的位置示意圖
算法改進后的流程圖如圖4所示。算法步驟如下:
(1) 待測節(jié)點在與相鄰節(jié)點信息交流時,找到 RSSI 絕對值最小的節(jié)點,然后以此節(jié)點為中心建立64×64大小的區(qū)域,并建立相對坐標系。將RSSI絕對值最小的節(jié)點坐標轉(zhuǎn)換為相對坐標(32,32)(圖3中的黑色節(jié)點),同時記錄此節(jié)點坐標相對轉(zhuǎn)換時橫、縱坐標的偏差;
(2) 根據(jù)記錄的坐標轉(zhuǎn)換時的偏差值,將所構造的64×64范圍內(nèi)的所有節(jié)點的坐標加以修正,使其坐標值映射到該區(qū)域內(nèi);
(3) 將區(qū)域內(nèi)的新坐標值寫入待測節(jié)點相應的寄存器內(nèi),根據(jù)新的坐標值,計算出待測節(jié)點新的位置坐標,而此坐標值是待測節(jié)點在相對區(qū)域內(nèi)的值,實際的坐標值需加上第一步所記錄的偏差值,這樣就得到了實際環(huán)境下的定位坐標。
圖4 算法改進后定位流程圖
3 移動機器人的機械系統(tǒng)
移動機器人采用Arduino MEGA2560單片機作為主控芯片,其采用USB與上位PC機進行數(shù)據(jù)傳輸,具有54路數(shù)字輸入/輸出口,16路模擬輸入[6]。主控芯片負責測距傳感器的數(shù)據(jù)采集、定位,驅(qū)動電機以及驅(qū)動舵機轉(zhuǎn)向等。
3.1 電機驅(qū)動模塊
系統(tǒng)采用RS?380SH直流電機作為移動機器人的動力裝置,通過脈寬調(diào)制(PWM)方式以達到控制電機正反轉(zhuǎn)的目的,利用橋式驅(qū)動器MC33886控制H橋通斷控制小車前進的速度,并將MEGA2560的PWM2和PWM3、PWM4和PWM5兩路8位寄存器合成16位寄存器使用,這樣可以提高模糊控制的精度。
3.2 舵機轉(zhuǎn)向模塊
系統(tǒng)采用FUTABA?S3010型舵機完成轉(zhuǎn)向控制功能,脈沖信號由Arduino MEGA2560的PWM0和PWM1級聯(lián)提供。在單片機為24 Hz時,設級聯(lián)PWM周期常數(shù)為60 000,則PWM周期為20 ms,占空比為4 500,對應輸出為1.5 m/s。改變占空比就可以改變輸出脈沖的寬度,相應舵機輸出舵盤的角度也隨之改變。
經(jīng)多次轉(zhuǎn)向?qū)嶒?,在輸入信號?0 Hz,即PWM的周期為20 ms時,舵機的轉(zhuǎn)角與輸入脈寬成線性關系。高電平為1 500 μs時,舵機的轉(zhuǎn)角為0°;高電平為1 900 μs時,舵機轉(zhuǎn)角為右向45°;高電平為1 100 μs時,舵機轉(zhuǎn)向為左向45°。舵機的轉(zhuǎn)角與輸入脈寬的關系如圖5所示。
圖5 舵機轉(zhuǎn)角與輸入脈寬關系圖
4 定位測試
將設計的移動機器人在分布有8個傳感器的無線區(qū)域內(nèi)進行移動定位,圖 6為上位機上看到的定位結果,在圖形窗口上參考節(jié)點用星號表示,待測節(jié)點用黑色圓點顯示,定位計算的坐標用紅色十字表示。
圖6 定位結果
表1是基于RSSI定位算法6次測試的結果,誤差為0.764 9 m,在可以接受的范圍內(nèi)。
表1 定位測試結果 m
誤差出現(xiàn)的原因有以下幾個方面:
(1) 參考節(jié)點少,在實際的應用中,參考節(jié)點越多,定位精度就越高;
(2) 節(jié)點的疏密程度對定位也有影響,過密的節(jié)點排布會使網(wǎng)絡信息交換過于頻繁,網(wǎng)絡容易擁塞;
(3) 定位的區(qū)域范圍大,定位算法是基于RSSI測距的,易受周圍環(huán)境影響,隨著定位范圍的擴大,環(huán)境就會越復雜,對定位結果的影響就越大。
5 結 語
本文主要研究和設計了移動機器人的定位系統(tǒng),給出了部分模塊的硬件結構和軟件流程。系統(tǒng)以Arduino MEGA2560作為主控,負責測距傳感器數(shù)據(jù)采集、定位以及電機和舵機的驅(qū)動等,采用ZigBee無線傳感網(wǎng)絡定位策略并改進了基于RSSI的定位算法。經(jīng)過6次測試,平均誤差為0.764 9 m。誤差在可以接受的范圍內(nèi),滿足系統(tǒng)需求。
參考文獻
[1] 蔡自興,賀漢根,陳虹.未知環(huán)境中移動機器人導航控制研究的若干問題[J].控制與決策,2002,17(4):385?390.
[2] 王俊.移動機器人的定位方法研究[D].沈陽:東北大學,2010.
[3] 鄒宜成,梁紅.室內(nèi)智能移動機器人ZigBee無線網(wǎng)絡定位技術[J].武漢理工大學學報:信息與管理工程版,2012,34(2):151?152.
[4] 章堅武,張璐,應瑛.基于ZigBee的RSSI測距研究[J].傳感技術學報,2009,22(2):285?286.
[5] 宋保業(yè),許琳.帶定位引擎的射頻芯片CC2431[J].單片機與嵌入式系統(tǒng)設計,2007(11):44?45.
[6] 劉南君,毛培宏.基于Arduino Mega2560單片機的簡易智能割草機器人的設計與實現(xiàn)[J].安徽農(nóng)業(yè)科學,2012,40(36):162?167.