iBeacon检测不能为室内导航提供准确的位置

时间:2014-06-10 09:47:53

标签: ios iphone objective-c ibeacon triangulation

我正在研究使用多个iBeacons进行室内定位的可能性。我尝试过三边形配方。但我认为有一些问题是它没有给出调整位置。

我在特定位置有三个iBeacons

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

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);

位置的OutPut

point = (x=138.025452, y=133.269165)

但它并不完美。它应该给点点接近点b 。我知道什么是错的。

请帮忙。

1 个答案:

答案 0 :(得分:0)

我不确定你是否能够获得一个非常准确的位置。 CLBeacon accuracy property州的Apple文档 -

  

<强>讨论   以米为单位表示一西格玛水平精度。使用   此属性用于区分具有相同接近度的信标   值。不要用它来识别信标的精确位置。   由于RF干扰,准确度值可能会波动。

由于它是一个西格玛精度,它只有大约68%准确。

如果您校准信标,可能会获得更好的结果,但即使这样,来自环境(特别是人)的RF干扰也会影响您的读数