關於APIT定位演算法的討論

來源:互聯網
上載者:User

標籤:max   鄰居   find   分析   class   說明   之一   app   poi   

關於APIT定位演算法的討論

【摘要】   無線感應器網路節點定位機制的研究中,基於距離無關的定位技術得到快速發展,其中基於重疊地區的APIT定位技術在實際環境中的定位精度高,被廣泛研究和應用。

【關鍵詞】 無線感應器網路;定位演算法;APIT;

 

 

【本文】

在感測網路中的許多應用中,使用者一般都會關心一個重要問題,即特定時間發生的具體位置或地區。例如,目標跟蹤,入侵檢測,環境監控等,若不知道感應器自身的位置,感知的資料是沒有意義的。因此,感應器網路及誒單必須知道自身所在的位置,才能夠有效地說明被檢測物體的位置,從而實現對外部目標的定位,跟蹤等。

 

作為一種全新的技術,無線感應器網路具有許多挑戰性的研究課題,定位技術就是其中之一,定位也是大多數應用的基礎和前提。

 

目前定位技術主要有兩個類型:給予測距的定位技術和基於非測距定位技術。

 

基於測距的定位技術涉及幾何中的圖形問題,已知節點的位置,求另幾個節點的位置,比較常用的方法是三邊定位和角度定位,這類演算法比較簡單,實現容易,但是他們受到電磁幹擾,多徑幹擾等因素的影響。

 

基於非測距定位技術,無需利用這些基礎設施來測量位置節點同信標節點之間的距離和角度這些資訊,只需要根據未知節點是否連通,或者未知節點之間的跳數來度量。極大地降低了對環境的依賴性。在這篇文章中,我選取了其中具有代表性的APIT定位演算法來進行討論。

 

 

APIT定位演算法

1.   初始

APIT(Approximate PIT) 定位演算法的理論基礎是最佳三角形內點測試法PIT(Perfect Point-In-Triangulation Test)。

 

 

PIT理論為判斷某一點M是否在三角形ABC內,假如存在一個方向,沿著這個方向M點會同時遠離或者接近三角形ABC的三個頂點,那麼M位於三角形ABC,否則位於三角形ABC外。

 

2.   最佳化

但是無線感測網路中大部分節點是靜止的,不可能隨意的像上述一樣通過移動節點測試是否在三角形中,為了在靜態網路中執行PIT測試,定義了APIT測試。

 

 

 

APIT定位演算法最關鍵的步驟是測試未知節點是否在三個信標節點所組成的三角形內部。APIT演算法是基於PIT測試原理的改進,可以領用WSN較高的節點密度和無線資訊的傳播特性來判斷是否遠離和靠近信標節點。通常在給定方向上,一個節點距離信標節點越遠,接收訊號的強度越弱。通過與鄰居節點資訊交換,來效仿PIT測試的節點移動。例如:

 

 

 

圖a中,位置未知節點M通過與鄰居節點1交換資訊,得知自身如果運動到節點1,將遠離信標B和C,但是會接近信標節點A,同樣通過與鄰居節點2,3,4交換資訊,最終確定自身位於三角形ABC中。

 

 

 

 

圖b中,當節點通過鄰居節點2得知,將會同時遠離信標節點ABC,故判斷自身不在三角形ABC中。

 

 

3.   確認

在APIT演算法中,一個未知節點任選三個相鄰信標節點,若通過測試發現自己位於他們所組成的三角形中,則認為該三角形的質心即為未知節點的位置,然後進一步選用不同信標節點的組合重複測試,直到窮盡所有組合或者達到所需定位精度為止;最後計算包含目標節點所有三角形的交集質心,並以此為未知節點的最終位置。

 

 

 

源碼分析

本次實驗均用matlab程式編寫:

 

1.   初始化布局
C_random(area,node n,anchors_n,GPS_error):參數:地區,節點數,信標節點,GPS誤差。 function C_random(area,nodes_n,anchors_n,GPS_error)% deploy the nodes over a C-shaped region% area: the sensing region [200 40 40 160]%   the side is 200m-long, x=40,y=40,y=160: the edge of C-shaped region% nodes_n: the number of nodes% anchors_n: the number of anchors%   if anchors_n<1, it means the ratio;%   if anchors_n>1, it means the number% GPS_error:the max location error of anchor raised by GPS, default is 0;%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% C_random([200 40 40 160],150,0.1)C_random([1000,100,1000,0],240,0.2);

 

 

 

 

240個節點,其中48個錨節點

紅色*表示錨節點,藍色O表示未知節點

 

 

2.   計算未知節點座標
if neighboring_anchor_n>=3            gridmap=zeros(row_n,col_n);            grid_covered_flag=zeros(row_n,col_n);            for a=1:neighboring_anchor_n-2                for b=a+1:neighboring_anchor_n-1                    for c=b+1:neighboring_anchor_n                        % 判斷未知節點i是否在三角形abc內部                        % Approximate P.I.T Test: "If no neighbor of M is further from/close to all three anchors A, B and C simultaneously,                        % M assumes that it is inside triangle abc. Otherwise,M assumes it resides outside the triangle."                        neighboring_node_index=setdiff(find(neighbor_matrix(i,:)==1),neighboring_anchor_index([a b c]));                        neighboring_node_rss_of_abc=neighbor_rss(neighboring_node_index,neighboring_anchor_index([a b c]));                        in_out_judge=neighboring_node_rss_of_abc>repmat(neighbor_rss(i,neighboring_anchor_index([a b c])),length(neighboring_node_index),1);                        if any(sum(transpose(in_out_judge))==0|sum(transpose(in_out_judge))==3)%outside                                                   Grid_in_triangle_abc=inpolygon(centroid_x,centroid_y,all_nodes.estimated(neighboring_anchor_index([a b c]),1),all_nodes.estimated(neighboring_anchor_index([a b c]),2));%被三角形abc覆蓋到網路                            gridmap=gridmap-Grid_in_triangle_abc;                                                     else%inside                            Grid_in_triangle_abc=inpolygon(centroid_x,centroid_y,all_nodes.estimated(neighboring_anchor_index([a b c]),1),all_nodes.estimated(neighboring_anchor_index([a b c]),2));%被三角形abc覆蓋到網路                            gridmap=gridmap+Grid_in_triangle_abc;                                                   end                        grid_covered_flag=grid_covered_flag|Grid_in_triangle_abc;                    end                end            end           

 

 

3.   定位誤差

 

 

紅色*表示錨節點

藍色O表示未知節點的估計位置

黑色O表示不能被定位的未知節點

藍色-表示未知節點的定位誤差(串連未知節點的估計位置和真實位置)

一共300個節點:60個錨節點,240個未知節點,0個不能被定位的未知節點

定位誤差為0.17819

 

 

演算法總結

APIT定位的具體步驟如下所示:

l  收集資訊:未知節點收集鄰近信標節點的資訊。

l  APIT測試:測試未知節點是否在不同的信標節點群組合的三角形內部。

l  計算重疊地區:統計包含未知節點的三角形,計算所有三角形的重疊地區。

l  計算未知節點位置:計算重疊地區的質心位置,作為位置節點的位置。

 

 

展望與發展

在整個無線感應器網路的邊緣地區,感應器的數量相對比較少,信標節點較少,這樣組成的三角形的數量也會降低。在進行APIT測試定位時,會出現由於重疊地區過大而造成實際位置與定位位置偏差過大的現象。,是運用APIT定位誤差較大的一種情況。

 

為了提高無線感應器網路的定位精度,APIT演算法需要繼續改進,現已有很多專家學者進行過討論,這裡只舉例其中兩種:

l  將三角形進行中垂線分割成4個或者6個小區間,通過對各個目標節點收到目標節點訊號的強度進行比較,判斷目標節點位於哪一個小區間中。

l  通過任意一個信標節點對另外兩個信標節點所在直線作垂線得到垂直交點,通過比較這個信標點到交點的距離和他與位置節點的距離的關係,初步判斷未知節點未知,同時,通過加權質心定位演算法得到未知節點的精確估計。

 

參考文獻

【1】      劉偉榮,何雲. 物聯網與無線感應器網路

【2】      唐明虎,張長宏. 無線感應器網路APIT定位演算法

【3】      張冬冬,常用定位技術的實現

【4】      海子,www.cnblogs.com/dolphin0520

【5】      戴天虹,李昊,基於改進APIT演算法的無線感應器網路節點定位

【6】      楊淩雲,馮友宏,垂直交點APIT定位改進演算法

關於APIT定位演算法的討論

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.