王 鑫,田 藝,蔣 華,覃 琴
(1. 桂林電子科技大學(xué) 計(jì)算機(jī)與信息安全學(xué)院,廣西 桂林 541004;2. 桂林電子科技大學(xué) 海洋信息工程學(xué)院,廣西 北海 536000)
水下無線傳感器網(wǎng)絡(luò)的定位技術(shù)在水下無線傳感器網(wǎng)絡(luò)(UWSN)中扮演著至關(guān)重要的角色[1,2],只有當(dāng)傳感器節(jié)點(diǎn)位置已知時(shí),傳感器節(jié)點(diǎn)采集的數(shù)據(jù)才具有意義[3]。網(wǎng)絡(luò)中的節(jié)點(diǎn)被隨機(jī)部署在水下,部署的傳感器節(jié)點(diǎn)在水中形成三維體系結(jié)構(gòu),節(jié)點(diǎn)在水下的隨機(jī)部署給水下無線傳感器網(wǎng)絡(luò)定位帶來了很多挑戰(zhàn)[4]。
水下無線傳感器網(wǎng)絡(luò)中節(jié)點(diǎn)隨機(jī)部署導(dǎo)致傳感器節(jié)點(diǎn)稀疏和錨節(jié)點(diǎn)分布不均勻[5]。水的流動(dòng)性會(huì)造成UASN結(jié)構(gòu)的非均勻,常魯杰等[6]提出了基于迭代粒子群優(yōu)化的RQ-PSO定位算法,利用MDS-MAP算法[7]進(jìn)行定位,提出的PQ-PSO算法減少了定位誤差,使得算法更具有魯棒性。針對(duì)錨節(jié)點(diǎn)隨機(jī)分布導(dǎo)致傳感器網(wǎng)絡(luò)定位率低、定位誤差大的問題,黃炎等[8]提出基于錨節(jié)點(diǎn)連通度的無線傳感器網(wǎng)絡(luò)定位算法,引入平均錨節(jié)點(diǎn)連通度的概念,根據(jù)節(jié)點(diǎn)實(shí)時(shí)分布來劃分網(wǎng)絡(luò),實(shí)時(shí)控制移動(dòng)錨節(jié)點(diǎn)分布,提高了定位算法的精度。陳友榮等[9]將網(wǎng)絡(luò)劃分成多個(gè)六邊形,提出一種輔助信標(biāo)節(jié)點(diǎn)的路徑規(guī)劃算法,分析對(duì)比了SCAN算法、CIRCLES算法等移動(dòng)路徑靜態(tài)規(guī)劃算法,降低了定位時(shí)間和平均定位誤差。汪晗等[10]提出基于幾何精度因子的靜態(tài)錨節(jié)點(diǎn)優(yōu)化布設(shè)方法,但定位精度受到錨節(jié)點(diǎn)幾何面積的大小的約束。黃冰倩等[11]提出寬度優(yōu)先搜索(BFS)算法選取虛擬錨節(jié)點(diǎn),減少了虛擬錨節(jié)點(diǎn)數(shù)量和錨節(jié)點(diǎn)移動(dòng)路徑長(zhǎng)度。程向紅等[12]提出運(yùn)用柵格法對(duì)已知地圖進(jìn)行建模,在算法中引入向量指導(dǎo)路徑方向,通過多次獎(jiǎng)勵(lì)與懲罰措施來進(jìn)行路徑規(guī)劃。這些算法均在某一方面減少了錨節(jié)點(diǎn)數(shù)量和移動(dòng)路徑長(zhǎng)度,但缺乏對(duì)網(wǎng)絡(luò)整體定位率和定位精度的考慮。
針對(duì)已有的基于移動(dòng)錨節(jié)點(diǎn)的定位算法,提出基于錨節(jié)點(diǎn)移動(dòng)路徑動(dòng)態(tài)規(guī)劃的水下無線傳感器網(wǎng)絡(luò)定位算法(underwater wireless sensor network localization algorithm based on dynamic planning of anchor node moving path,BMAP)。采用節(jié)點(diǎn)信息列表,通過錨節(jié)點(diǎn)與普通節(jié)點(diǎn)之間的雙向互動(dòng),保存采集到的網(wǎng)絡(luò)中節(jié)點(diǎn)的信息。利用路徑動(dòng)態(tài)規(guī)劃,解決錨節(jié)點(diǎn)的移動(dòng)路徑規(guī)劃問題。通過RSSI測(cè)距算法和三邊定位算法,實(shí)現(xiàn)了網(wǎng)絡(luò)中普通節(jié)點(diǎn)的定位,仿真結(jié)果表明,BMAP算法有較好的節(jié)點(diǎn)定位率和較低的平均定位誤差,并降低了定位能耗。
由于水下的特殊環(huán)境,水下無線傳感器網(wǎng)絡(luò)具有三維結(jié)構(gòu),以水平面為XOY平面向下建立一個(gè)三維坐標(biāo)系,如圖1所示。傳感器節(jié)點(diǎn)隨機(jī)分布在水中,水下的傳感器節(jié)點(diǎn)受到環(huán)境的限制,它們無法遠(yuǎn)程充電,普通傳感器節(jié)點(diǎn)的能源主要因?yàn)橥ㄐ藕陀?jì)算而耗盡。在監(jiān)控區(qū)域中布置適量數(shù)目的錨節(jié)點(diǎn)和普通的傳感器節(jié)點(diǎn),錨節(jié)點(diǎn)用于輔助定位和網(wǎng)絡(luò)數(shù)據(jù)采集,傳感器節(jié)點(diǎn)用于采集水下相關(guān)數(shù)據(jù)。
圖1 水下無線傳感器網(wǎng)絡(luò)三維模型
如圖2所示將水下無線傳感器網(wǎng)絡(luò)三維空間定位轉(zhuǎn)換成二維平面定位。假設(shè)每個(gè)傳感器節(jié)點(diǎn)都可以通過自身攜帶的壓力傳感器獲得自身的深度信息,當(dāng)未定位的傳感器節(jié)點(diǎn)接收到水下錨節(jié)點(diǎn)廣播的信息后,通過RSSI測(cè)距算法計(jì)算出自身與錨節(jié)點(diǎn)的距離L,結(jié)合自身的深度數(shù)據(jù)h,將未定位節(jié)點(diǎn)與錨節(jié)點(diǎn)投影在同一二維平面,可計(jì)算出該節(jié)點(diǎn)與錨節(jié)點(diǎn)的平面投影距離d。
圖2 三維空間轉(zhuǎn)換二維平面
第i個(gè)節(jié)點(diǎn)投影后與錨節(jié)點(diǎn)的距離為
(1)
式中:Li為第i個(gè)節(jié)點(diǎn)與錨節(jié)點(diǎn)的實(shí)際距離,hi為第i個(gè)節(jié)點(diǎn)的深度值。在圖2中,傳感器節(jié)點(diǎn)A和傳感器節(jié)點(diǎn)B通過已知的數(shù)據(jù)L1、L2和h1、h2利用式(1)計(jì)算出節(jié)點(diǎn)A的投影與錨節(jié)點(diǎn)投影的距離d1、節(jié)點(diǎn)B與錨節(jié)點(diǎn)投影的距離d2。
路徑規(guī)劃方法應(yīng)用在眾多領(lǐng)域,可以拓?fù)浠癁辄c(diǎn)、線的問題基本都可以采用路徑規(guī)劃的方法解決。基于對(duì)信息的動(dòng)態(tài)或靜態(tài)獲取可以把路徑規(guī)劃分為靜態(tài)規(guī)劃和動(dòng)態(tài)規(guī)劃。該文采用動(dòng)態(tài)規(guī)劃方法,實(shí)時(shí)獲取普通節(jié)點(diǎn)的動(dòng)態(tài)信息,生成必經(jīng)虛擬錨節(jié)點(diǎn)集合,通過蟻群算法求出最短路徑。
2.1.1 基于廣度優(yōu)先搜索算法選取
根據(jù)虛擬錨節(jié)點(diǎn)到未定位節(jié)點(diǎn)之間的距離L判斷未定位節(jié)點(diǎn)的類型。先行錨節(jié)點(diǎn)隨機(jī)選取一個(gè)未定位的節(jié)點(diǎn)進(jìn)行訪問,在移動(dòng)的過程中廣播信息,并判斷未定位節(jié)點(diǎn)的類型。算法核心流程如下:
步驟1 當(dāng)L 步驟4 在錨節(jié)點(diǎn)遍歷網(wǎng)絡(luò)的過程中,當(dāng)未定位節(jié)點(diǎn)接收到3個(gè)或者3個(gè)以上的廣播信息,若該節(jié)點(diǎn)在集合Vinter中,則通過三邊定位算法定位,并將該節(jié)點(diǎn)加入已定位節(jié)點(diǎn)集合Vd。 步驟5 先行錨節(jié)點(diǎn)遍歷完整個(gè)網(wǎng)絡(luò)之后,從集合Vneig中刪除集合Vd中出現(xiàn)的節(jié)點(diǎn)ID。 步驟6 輸出最終的集合Vneig,即為必經(jīng)虛擬錨節(jié)點(diǎn)集合。 2.1.2 BMAP算法選取 通過兩個(gè)階段來規(guī)劃移動(dòng)錨節(jié)點(diǎn)在網(wǎng)絡(luò)中的移動(dòng)路線。第一階段為錨節(jié)點(diǎn)移動(dòng)遍歷網(wǎng)絡(luò)發(fā)布信息、采集信息階段。如圖3所示,圓形代表虛擬錨節(jié)點(diǎn),三角形代表未定位的節(jié)點(diǎn),未定位節(jié)點(diǎn)隨機(jī)分布,將水下無線傳感器網(wǎng)絡(luò)以步長(zhǎng)Lr為單位劃分成柵格形狀。 圖3 先行錨節(jié)點(diǎn)移動(dòng)軌跡 水下無線傳感器網(wǎng)絡(luò)中的每一個(gè)節(jié)點(diǎn)都擁有一個(gè)信息列表Ginfor,先行錨節(jié)點(diǎn)信息列表包含發(fā)布信息時(shí)所在的虛擬錨節(jié)點(diǎn)ID號(hào),標(biāo)識(shí)符S(發(fā)送信息為0,接收信息為1),深度值,接收到的未定位節(jié)點(diǎn)返回的信息。未定位節(jié)點(diǎn)信息列表包括節(jié)點(diǎn)自身的ID,深度值,接收到的信號(hào)強(qiáng)度以及發(fā)送信息的虛擬錨節(jié)點(diǎn)ID,標(biāo)識(shí)符。 水下無線傳感器網(wǎng)絡(luò)中有兩個(gè)移動(dòng)錨節(jié)點(diǎn),第一個(gè)錨節(jié)點(diǎn)負(fù)責(zé)發(fā)布信息,第二個(gè)錨節(jié)點(diǎn)負(fù)責(zé)采集信息與輔助定位。 步驟1 第一個(gè)錨節(jié)點(diǎn)沿著圖3中虛線從下至上,從左至右移動(dòng)遍歷網(wǎng)絡(luò),當(dāng)錨節(jié)點(diǎn)運(yùn)動(dòng)到虛擬錨節(jié)點(diǎn)的位置時(shí)廣播一次信息。第二個(gè)錨節(jié)點(diǎn)在t時(shí)刻之后開始沿著同一路線移動(dòng)。 步驟2 未定位節(jié)點(diǎn)接收到信息后,將接收到的虛擬錨節(jié)點(diǎn)ID號(hào)和與其對(duì)應(yīng)的信號(hào)強(qiáng)度Sinten保存到Ginfor,ID與Sinten屬于一對(duì)一關(guān)系。 步驟3 當(dāng)未定位節(jié)點(diǎn)不能再接收到第一個(gè)錨節(jié)點(diǎn)廣播的消息時(shí),Ginfor只保留Sinten最大的3個(gè)信號(hào)對(duì)應(yīng)的ID,將自身的信息列表Ginfor發(fā)送給到達(dá)其通信范圍內(nèi)的第二個(gè)錨節(jié)點(diǎn)。 步驟4 第二個(gè)錨節(jié)點(diǎn)將接收到的信息保存到自身的信息列表Ginfor,將其中的虛擬錨節(jié)點(diǎn)ID保存到必經(jīng)虛擬錨節(jié)點(diǎn)集合Vindis。 如圖4所示,網(wǎng)絡(luò)中每一個(gè)虛線柵格的頂點(diǎn)即為虛擬錨節(jié)點(diǎn)的位置,柵格的長(zhǎng)度為L(zhǎng)r,錨節(jié)點(diǎn)的通信半徑為R,Q1和Q2為位置未知的節(jié)點(diǎn)。 圖4 必經(jīng)虛擬錨節(jié)點(diǎn) 執(zhí)行步驟1,先行錨節(jié)點(diǎn)M移動(dòng)到虛擬錨節(jié)點(diǎn)的位置時(shí),信號(hào)范圍如圖中的圓圈所示,執(zhí)行步驟2。未知節(jié)點(diǎn)Qi執(zhí)行步驟3,未知節(jié)點(diǎn)Q1接收到先行錨節(jié)點(diǎn)從A、B、C、D這4個(gè)虛擬錨節(jié)點(diǎn)廣播的信息,保存信號(hào)強(qiáng)度最強(qiáng)的A、B、D這3點(diǎn)的ID,未知節(jié)點(diǎn)Q2接收到從C、E、F、G廣播的信息,保存C、E、F這3點(diǎn)的ID。執(zhí)行步驟4,完成第一階段的必經(jīng)虛擬錨節(jié)點(diǎn)選擇,產(chǎn)生必經(jīng)虛擬錨節(jié)點(diǎn)集合Vindis。 錨節(jié)點(diǎn)移動(dòng)路徑規(guī)劃問題是一個(gè)旅行商問題[13](trave-lling salesman problem,TSP),必經(jīng)虛擬錨節(jié)點(diǎn)集合Vindis等價(jià)于旅行家必須經(jīng)過的旅游景點(diǎn)集合,移動(dòng)錨節(jié)點(diǎn)等價(jià)于旅行家,移動(dòng)錨節(jié)點(diǎn)經(jīng)過每一個(gè)必經(jīng)虛擬錨節(jié)點(diǎn)等價(jià)于旅行家經(jīng)過每一個(gè)旅游景點(diǎn)。設(shè)計(jì)移動(dòng)路線使得移動(dòng)錨節(jié)點(diǎn)經(jīng)過所有的必經(jīng)虛擬錨節(jié)點(diǎn),并且移動(dòng)路徑最短。 目前,學(xué)者們提出遺傳算法、蟻群算法、禁忌搜索算法、模擬退火算法等眾多啟發(fā)式優(yōu)化搜索算法解決TSP問題。蟻群算法是模擬螞蟻覓食的方式,通過螞蟻覓食時(shí)在路徑上釋放的信息素來選擇下一條路徑。 已得必經(jīng)虛擬錨節(jié)點(diǎn)集合Vindis,將必經(jīng)虛擬錨節(jié)點(diǎn)存放在數(shù)組A和B中,其中aij=bij A=aij(i=1,2,3,…,j=1,2) (2) B=bij(i=1,2,3,…,j=1,2) (3) 必經(jīng)虛擬錨節(jié)點(diǎn)a到必經(jīng)虛擬錨節(jié)點(diǎn)b的距離 (4) 通過式(4)得到必經(jīng)虛擬錨節(jié)點(diǎn)的加權(quán)矩陣Di,j (5) 設(shè)定整個(gè)蟻群中有m只螞蟻,有n個(gè)城市,各個(gè)城市之間的距離為Di,j(i,j=1,2,3…n)。 (6) 式(6)中的ηij(t)是啟發(fā)函數(shù),β是啟發(fā)函數(shù)重要程度因子,α是信息素重要程度因子,allowk是螞蟻K可以選擇的城市集合,τij(t)是城市i和城市j之間的路徑上t時(shí)刻的信息素濃度 allowk={0,1,…,n-1-tabk (7) 當(dāng)所有螞蟻完成一次循環(huán)后按式(8)更新信息素 (8) 本文定位算法步驟如圖5所示。 圖5 BMAP算法流程 實(shí)驗(yàn)仿真選擇在Windows 10 PC機(jī)上通過MATLAB工具模擬海洋環(huán)境下的無線傳感器網(wǎng)絡(luò),實(shí)現(xiàn)基于錨節(jié)點(diǎn)移動(dòng)路徑動(dòng)態(tài)規(guī)劃的水下無線傳感器網(wǎng)絡(luò)定位方法,對(duì)本文的BMAP算法與基于BFS算法的定位算法、SCAN算法和錨節(jié)點(diǎn)隨機(jī)的RSSI定位算法從虛擬錨節(jié)點(diǎn)數(shù)量、錨節(jié)點(diǎn)移動(dòng)路徑長(zhǎng)度、定位覆蓋率和平均定位誤差4個(gè)方面進(jìn)行比較。 表1 實(shí)驗(yàn)參數(shù)設(shè)置 水下無線傳感器網(wǎng)絡(luò)中節(jié)點(diǎn)定位率的計(jì)算方式如式(9)所示 (9) 其中,Plocation是節(jié)點(diǎn)定位率,Nlocnode是水下無線傳感器網(wǎng)絡(luò)中能夠被定位的節(jié)點(diǎn)總數(shù),N是水下無線傳感器網(wǎng)絡(luò)中節(jié)點(diǎn)的總數(shù)。 在仿真區(qū)域?yàn)?0 m×90 m的正方形區(qū)域,隨機(jī)布置傳感器節(jié)點(diǎn)50個(gè),傳感器節(jié)點(diǎn)隨機(jī)分布在監(jiān)控區(qū)域之中,傳感器節(jié)點(diǎn)的分布及錨節(jié)點(diǎn)移動(dòng)路徑如圖6所示。SCAN算法中錨節(jié)點(diǎn)按照從下至上、從左至右沿著箭頭所示路徑移動(dòng)。BFS算法根據(jù)廣度優(yōu)先搜索算法選取虛擬錨節(jié)點(diǎn),錨節(jié)點(diǎn)沿著規(guī)劃的路徑移動(dòng)。錨節(jié)點(diǎn)隨機(jī)算法隨機(jī)部署錨節(jié)點(diǎn)。BMAP算法中錨節(jié)點(diǎn)沿著動(dòng)態(tài)規(guī)劃的路徑移動(dòng)。 圖6 傳感器節(jié)點(diǎn)分布 圖7為SCAN算法、BFS算法和BMAP算法3個(gè)基于錨節(jié)點(diǎn)移動(dòng)路徑規(guī)劃的定位算法的虛擬錨節(jié)點(diǎn)個(gè)數(shù)與網(wǎng)絡(luò)區(qū)域邊長(zhǎng)關(guān)系對(duì)比圖。通過改變網(wǎng)絡(luò)區(qū)域邊長(zhǎng)來改變水下傳感器節(jié)點(diǎn)的稀疏程度,區(qū)域邊長(zhǎng)越大,網(wǎng)絡(luò)中節(jié)點(diǎn)越稀疏。在傳感器節(jié)點(diǎn)稀疏的水下無線傳感器網(wǎng)絡(luò)中,BMAP算法選取的虛擬錨節(jié)點(diǎn)數(shù)量少于SCAN算法,略大于BFS算法,BMAP算法減少了虛擬錨節(jié)點(diǎn)數(shù)量,從而降低了節(jié)點(diǎn)之間的通信能耗。 圖7 虛擬錨節(jié)點(diǎn)個(gè)數(shù) 圖8為SCAN算法、BFS算法和BMAP算法3個(gè)基于錨節(jié)點(diǎn)移動(dòng)路徑規(guī)劃的定位算法的錨節(jié)點(diǎn)移動(dòng)路徑長(zhǎng)度與網(wǎng)絡(luò)區(qū)域邊長(zhǎng)關(guān)系對(duì)比。在傳感器節(jié)點(diǎn)稀疏的水下無線傳感器網(wǎng)絡(luò)中,BMAP算法的虛擬錨節(jié)點(diǎn)移動(dòng)路徑長(zhǎng)度遠(yuǎn)小于SCAN算法,略大于BFS算法的虛擬錨節(jié)點(diǎn)移動(dòng)路徑長(zhǎng)度。BMAP算法降低了錨節(jié)點(diǎn)移動(dòng)能耗、減少了網(wǎng)絡(luò)定位時(shí)間。 圖8 錨節(jié)點(diǎn)移動(dòng)路徑長(zhǎng)度 圖9為SCAN算法、BFS算法和BMAP算法3個(gè)基于錨節(jié)點(diǎn)移動(dòng)路徑規(guī)劃的定位算法和錨節(jié)點(diǎn)隨機(jī)的RSSI定位算法的節(jié)點(diǎn)定位率與網(wǎng)絡(luò)區(qū)域邊長(zhǎng)關(guān)系對(duì)比圖。在傳感器節(jié)點(diǎn)稀疏的水下無線傳感器網(wǎng)絡(luò)中,BMAP算法的節(jié)點(diǎn)定位率最高,且節(jié)點(diǎn)定位率穩(wěn)定,優(yōu)于其它3種定位算法。BFS算法在網(wǎng)絡(luò)區(qū)域邊長(zhǎng)為90 m和120 m時(shí)定位率優(yōu)于其它3種算法,但當(dāng)網(wǎng)絡(luò)區(qū)域邊長(zhǎng)增加時(shí),定位率急劇下降到最低。 圖9 節(jié)點(diǎn)定位率 圖10為SCAN算法、BFS算法和BMAP算法3種基于錨節(jié)點(diǎn)移動(dòng)路徑規(guī)劃的定位算法和錨節(jié)點(diǎn)隨機(jī)的RSSI定位算法的平均定位誤差與網(wǎng)絡(luò)區(qū)域邊長(zhǎng)關(guān)系對(duì)比圖。BMAP算法平均定位誤差略高于SCAN算法,但遠(yuǎn)低于BFS算法和錨節(jié)點(diǎn)隨機(jī)的RSSI算法。BMAP算法的平均定位誤差隨著網(wǎng)絡(luò)區(qū)域邊長(zhǎng)的增加能夠穩(wěn)定在1 m以內(nèi)。BFS算法和錨節(jié)點(diǎn)隨機(jī)的RSSI算法的平均定位誤差隨著網(wǎng)絡(luò)區(qū)域邊長(zhǎng)的增加在不斷地增大。在網(wǎng)絡(luò)區(qū)域邊長(zhǎng)為210 m時(shí),BFS算法和錨節(jié)點(diǎn)隨機(jī)的RSSI算法的平均定位誤差是BMAP算法的7倍,BMAP算法具有較高的定位精度。 圖10 定位誤差 在傳感器節(jié)點(diǎn)稀疏的水下無線傳感器網(wǎng)絡(luò)中,BMAP算法選取的虛擬錨節(jié)點(diǎn)個(gè)數(shù)和錨節(jié)點(diǎn)移動(dòng)路徑長(zhǎng)度小于SCAN算法,節(jié)點(diǎn)定位率高于BFS算法和錨節(jié)點(diǎn)隨機(jī)的RSSI算法,平均定位誤差遠(yuǎn)低于BFS算法和錨節(jié)點(diǎn)隨機(jī)的RSSI算法。因此,BMAP算法整體具有較好的定位性能。 針對(duì)水下無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)稀疏、隨機(jī)部署錨節(jié)點(diǎn)導(dǎo)致定位誤差大、網(wǎng)絡(luò)定位率低的問題。提出一種基于錨節(jié)點(diǎn)移動(dòng)路徑動(dòng)態(tài)規(guī)劃的水下無線傳感器網(wǎng)絡(luò)定位算法。采用動(dòng)態(tài)路徑規(guī)劃,通過雙移動(dòng)錨節(jié)點(diǎn)選擇必經(jīng)虛擬錨節(jié)點(diǎn),利用蟻群算法規(guī)劃錨節(jié)點(diǎn)移動(dòng)的最短路徑,結(jié)合RSSI測(cè)距算法和三邊定位算法完成節(jié)點(diǎn)定位。對(duì)BMAP算法、BFS算法、SCAN算法和錨節(jié)點(diǎn)隨機(jī)的RSSI算法進(jìn)行定位性能對(duì)比,結(jié)果表明BMAP算法整體具有較低的能耗、較高的定位率和定位精度。2.2 基于錨節(jié)點(diǎn)移動(dòng)路徑動(dòng)態(tài)規(guī)劃的定位算法
3 實(shí)驗(yàn)仿真
3.1 實(shí)驗(yàn)設(shè)置
3.2 實(shí)驗(yàn)結(jié)果和分析
4 結(jié)束語