2014-06-10 93 views
0

我正在研究將多個iBeacons用於室內定位的可能性。我已經嘗試了三邊測量公式。但我認爲它沒有給出調整位置有一些問題。iBeacon檢測不能給出準確的室內導航位置

我有在特定位置

CGPoint a=CGPointMake(100, 0); 
CGPoint b=CGPointMake(160, 270); 
CGPoint c=CGPointMake(0, 145); 

3個iBeacons在didRangeBeacons我得到下面的距離

float ra =0.0f; 
    float rb=0.0f ; 
    float rc=0.0f ; 

    for (CLBeacon *beacon in beacons) { 
     if ([beacon.minor floatValue]==57726) { 
      //ra = beacon.accuracy; ra=5.33124 
      ra = beacon.proximity; 
     } 
     if ([beacon.minor floatValue]==31901) { 
      // rb = beacon.accuracy; rb=0.185142 
      rb = beacon.proximity; 
     } 
     if ([beacon.minor floatValue]==53482) { 
      // rc = beacon.accuracy; rc=3.23776 
      rc = beacon.proximity; 
     } 
    } 

在結束我使用三邊測量公式。

float S = (pow(c.x, 2.) - pow(b.x, 2.) + pow(c.y, 2.) - pow(b.y, 2.) + pow(rb, 2.) - pow(rc, 2.))/2.0; 

    float T = (pow(a.x, 2.) - pow(b.x, 2.) + pow(a.y, 2.) - pow(b.y, 2.) + pow(rb, 2.) - pow(ra, 2.))/2.0; 
    float y = ((T * (b.x - c.x)) - (S * (b.x - a.x)))/(((a.y - b.y) * (b.x - c.x)) - ((c.y - b.y) * (b.x - a.x))); 
    float x = ((y * (a.y - b.y)) - T)/(b.x - a.x); 

輸出的位置

point = (x=138.025452, y=133.269165) 

但它不是一個完美的。它應該給點靠近點b。我不知道什麼是錯的。

請幫忙。

回答

0

我不確定您將能夠獲得非常準確的位置。蘋果文檔的CLBeacon accuracy property狀態 -

討論 表示,以米爲一個西格瑪水平精度。使用 此屬性來區分具有相同接近度的信標值。不要用它來確定信標的精確位置。 準確度值可能因RF干擾而波動。

由於它是一個西格馬精度,它只有大約68%的精度。

這是可能的,你可能會得到更好的結果,如果你校準你的信標,但即使如此,從環境的射頻干擾(人特別多),會影響你的閱讀

+0

對蘋果的文檔我看了一下附近,但它也給予同樣的結果。有沒有更好的方法來準確的重建 –

+0

我認爲這個問題是準確的,並不表示可以精確地用於三角測量的指南針方向。有3分,每一分都有不準確的程度會導致一個不準確的圈子 - 又名維恩圖,但甚至沒有那麼準確。 – JavaCoderEx