我们正在与零售客户合作,他们想知道在整个商店中使用多个iBeacons是否有助于跟踪客户在商店内的确切位置(当然,当他们安装了客户端的应用程序时)。
我想知道为此目的已经有哪些软件工具可供使用?
显而易见的是,在基本级别,设备的位置可以基于它与多个(至少2个)iBeacons的相对距离来确定。如果是这样,是否有工具可以帮助解决这个问题?
由于
答案 0 :(得分:23)
显然,由于RSSI值(蓝牙信号)的不一致,这不太可能正常工作。但是,这是你可能想要的方向(改编自大量的stackoverflow研究):
过滤RSSI
每当信标范围很大时,我使用滚动过滤器,使用0.1的kFilteringFactor:
rollingRssi = (beacon.rssi * kFilteringFactor) + (rollingRssi * (1.0 - kFilteringFactor));
我使用它来获得滚动的精度值(以米为单位)。 (谢谢大卫!)
- (double)calculateAccuracyWithRSSI:(double)rssi {
//formula adapted from David Young's Radius Networks Android iBeacon Code
if (rssi == 0) {
return -1.0; // if we cannot determine accuracy, return -1.
}
double txPower = -70;
double ratio = rssi*1.0/txPower;
if (ratio < 1.0) {
return pow(ratio,10);
}
else {
double accuracy = (0.89976) * pow(ratio,7.7095) + 0.111;
return accuracy;
}
}
使用三边测量计算XY(信标1,2和3是信标子类,其中位置和距离的预设X和Y值计算如上)。
float xa = beacon1.locationX;
float ya = beacon1.locationY;
float xb = beacon2.locationX;
float yb = beacon2.locationY;
float xc = beacon3.locationX;
float yc = beacon3.locationY;
float ra = beacon1.filteredDistance;
float rb = beacon2.filteredDistance;
float rc = beacon3.filteredDistance;
float S = (pow(xc, 2.) - pow(xb, 2.) + pow(yc, 2.) - pow(yb, 2.) + pow(rb, 2.) - pow(rc, 2.)) / 2.0;
float T = (pow(xa, 2.) - pow(xb, 2.) + pow(ya, 2.) - pow(yb, 2.) + pow(rb, 2.) - pow(ra, 2.)) / 2.0;
float y = ((T * (xb - xc)) - (S * (xb - xa))) / (((ya - yb) * (xb - xc)) - ((yc - yb) * (xb - xa)));
float x = ((y * (ya - yb)) - T) / (xb - xa);
CGPoint point = CGPointMake(x, y);
return point;
答案 1 :(得分:9)
获得确切位置的最简单方法是在您关注的每个点放置一个iBeacons,然后让一个支持iBeacon的应用程序比较“准确度”字段(实际上为您提供了一个粗略的距离估计),以及假设用户处于具有最低“准确度”读数的iBeacon点。显然,这种方法需要大量的iBeacons才能在大型平面图上提供精确的位置。
许多人提出了仅使用少量iBeacons的类似三角测量的策略。这要复杂得多,并且没有预先构建的软件可以做到这一点。虽然我已经阅读了很多关于想要或试图这样做的人,但我还没有听到任何有关人们将其拉下来的报道。
如果您想亲自尝试一下,那么您应该意识到自己正在进行一项科学项目,并且可能需要花费大量的时间和精力来实现这一目标。
答案 2 :(得分:2)
确切位置是不可能实现的,但某些容差值内的某些东西当然是可能的。我还没有对此进行过广泛的测试,但是在一个小的3x4m区域,有三个信标,你可以在理想的情况下获得良好的定位,问题是我们通常没有理想的情况!
困难的部分是从接收器到iBeacon获得准确的距离,RSSI(接收信号强度)是我们拥有的唯一信息,将其转换为距离我们使用基于各种距离的已知信号强度的测量来自发射机e.g. Qiu, T, Zhou, Y, Xia, F, Jin, N, & Feng, L 2012。这个位运行良好(and is already implemented with an average accuracy in the iOS SDK),但遗憾的是,接收器和发射器之间的环境条件(如湿度和其他物体(如人))会不可预测地降低信号质量。
You can read my initial research presentation on SlideShare,它涵盖了一些基本的环境影响并显示了对测量精度的影响,它还引用了解释RSSI如何转变为距离的文章,以及一些克服环境因素的方法。然而,在零售情况下,顶端是将iBeacons定位在天花板上,因为这会减少人体障碍物的数量。
无论你做什么,三边测量基本相同,我一直在使用Gema Megantara's版本。为了进一步改善定位,需要一种将环境条件考虑在内的技术e.g. Hyo-Sung & Wonpil 2009。
答案 3 :(得分:1)
解决方案是一种名为trilateration的技术。有一篇不错的维基文章。
如果您假设所有信标和接收器都在同一平面上,您可以忽略Z维度,它可以简化为圆形。
数学仍然有点混乱。您必须对信标的位置进行一些矩阵数学运算才能将一个信标移动到原点并在x轴上放置第二个信标,然后将矩阵的逆矩阵应用于结果以将其转换回“真实” “坐标。
最大的问题是“准确度”(又名距离)值不是准确的。即使在没有干扰的宽敞空间中,距离信号也会变化很大。添加任何干扰(就像你的身体拿着手机一样),它会变得更糟。添加墙壁,家具,金属表面,其他人等,它真的很不稳定。
我有我要做的事情来编写三角测量代码,在我的院子里测量一个网格(当天气变暖时),拿一个卷尺,然后做一些测试。
答案 4 :(得分:1)
所有这一切的问题在于你得到的RSSI信号非常不稳定。如果您只是采用原始RSSI,您将得到非常不可靠的答案。在运行任何三角测量之前,您需要以某种方式处理您获得的数据,这意味着1)平均,或2)过滤(或两者)。如果不这样做,即使您在边缘地区,也可能会获得“立即”的接近响应。
答案 5 :(得分:1)
仅蓝牙低功耗(4.0)不是一种强大的室内定位和地图技术,它很可能成为室内定位技术结构的一部分,就像使用Wi-Fi信号为GPS增加保真度一样城市中的信号。目前iBeacon实际上只能用于室内相当模糊的节点,比如“鞋子部门”(假设有大型商店)
我希望通过'iBeacon'服务(或者另类命名),Apple正在为应用程序开发人员开发高分辨率的室内位置。您需要在2013年中期购买WifiSLAM,以获取证据。到目前为止,iBeacon和任何其他单独的BLE技术都无法为您提供精确的室内定位。 (也许如果你用信标覆盖商店,并将概率模型与物理模型相结合,你可以做到,但不能用任何实际可实现的信标策略。)
另外值得注意的是围绕诺基亚下一代BLE HAIP(高精度室内定位)版http://conversations.nokia.com/2012/08/23/new-alliance-helps-you-find-needle-in-a-haystack/
的讨论基本上准确的室内定位在野外尚不存在,但它即将......
答案 6 :(得分:1)
我们确实使用万向节的ibeacons在6mx11m的区域进行室内定位。 RSSI波动是我们通过粒子滤波处理的主要问题。该项目的代码可以在https://github.com/ipapapa/IoT-MicroLocation/找到。 github存储库包含iOS应用程序以及基于Java的apache tomcat服务器。虽然我们确实获得了高达0.97米的精度,但使用信标进行微观定位仍然非常具有挑战性。查看已在IEEE Globecom会议上接受发布的论文http://people.engr.ncsu.edu/ipapapa/Files/globecom2015.pdf。
答案 7 :(得分:0)
要根据周围的iBeacons(必须保持固定位置)确定用户的位置,可以通过信号强度三角测量来实现。看一下关于Bluetooth Indoor Positioning; - )
的论文答案 8 :(得分:0)
当然,如果您可以测量任何单个iBeacon的确切位置(纬度/经度) - 可以包含在信标消息中。但假设一个固定的位置 - 显然这只需要做一次。一种独立的“校准”练习 - 它本身可以自动化。
答案 9 :(得分:0)
我没有做过我认为进入菲尔的硕士论文之外的广泛研究,但......
另一支团队声称已经使用各种AI算法解决了这个问题。请参阅此帖子:https://www.linkedin.com/groups/6510475/6510475-5866674142035607552
作为开发信标(http://www.getgelo.com)的人,我可以直接分享,几乎任何对象都会彻底改变RSSI的一致性和准确性,这将使计算成为一个精确的位置。 (菲尔,我希望你证明我错了,我还没读过你的论文)。
如果是广阔空间中唯一拥有信标网格的人,那么你很可能会让它工作,但只要你添加其他人,墙壁,物体等,那么你就是SOL
你可以估算出iBeacons所做的和非常糟糕的位置,但它是无方向的。
你可以部署足够的信标,这样,无论你身处零售地点,你都可以站在离灯塔非常近的地方,你可以很自信地在5英尺左右的地方完成任务(如同反对走在过道的另一边,过道6,向下20英尺)。成本可能会成为一个问题。
有些团队将BLE与Wifi和其他技术相结合,以创建更准确的室内定位解决方案。
简而言之,这将是对已经发布的内容的回应,BLE不是一种仅用于极其精确定位的好技术。
答案 10 :(得分:0)
在讨论定位时,您需要首先更具体地定义您的需求。
计算机/ GPS爱好者会假设你想要精确到毫米,如果不是更精细,那么他们会为你提供你需要的更多信息 - 或者告诉你它不能完成[两个可行的答案]。 / p>
然而,在真实世界中,大多数人都在寻找最多3英尺(或1米)的准确度 - 并且很可能愿意接受10英尺内的准确度[即视距]。
iOS已经为您提供了这样的准确度 - 他们的api为您提供了“近,中,远”的距离 - 所以您需要检查的是在10英尺内,距离是“接近”还是“中等”。
如果您的需求超出了这个范围,那么您可以非常轻松地提供自定义功能。你有32位的信息[主要代码和次要代码]这是足够的信息,使用Morton编码将每个ibeacon的经度和经度存储在信标本身,http://www.spatial.maine.edu/~mark.a.plummer/Morton-GEOG664-Plummer.pdf
只要高度[高度]不是一个因素,并且在另一个信标的1米范围内不会部署信标 - 您可以将每个纬度/长度对编码为单个32位整数并将其存储在主要和次要代码中
仅使用主要代码,您可以确定信标[以及手机]的位置在[保守] 100米范围内。这意味着在相同的100米半径范围内的许多信标将具有相同的主要代码。
使用次要代码,您可以确定信标的位置在1米以内,手机的位置在10英尺范围内。
这个代码已经编写并且可以广泛使用 - 只需查看演示如何“不可能”执行此操作的代码,忽略对它的评论不可能,因为他们更专注于精度而不是你关心。
**注意:如后面的帖子所述,外部因素会影响信号强度 - 但这可能与您的需求无关。 iphone sdk提供了3个“距离”,“近,远,远”。
问题很严重。假设一个150英尺范围的信标。用iphone检查以确定理想情况下2个近距离是什么...假设5英尺内是“接近”而15英尺是“接近”。
如果手机A靠近信标B [具有已知位置],那么您知道该人在距离X点15英尺的范围内。如果有很多干扰,它们可能在3英尺之外,或者它们可能是15英尺,但在任何一种情况下都是“15英尺内”。这就是你所需要的一切。
出于同样的原因,如果您需要知道它们是否在5英尺范围内,那么您可以使用“关闭”测量。
我坚信,80%的定位需求都是由当前的方案提供的 - 然后你不会在初始实施时将限制作为概念证明,然后联系众多ibeacon专家中的一位来提供最后一点准确性。
答案 11 :(得分:-2)
使用结合了Wi-Fi三边测量技术和手机传感器数据的技术可以解决上述问题。当公司将我们的SDK与他们的应用程序集成时,我们可以在适当配备的空间内获得1米的精度。这些方法的准确性在去年有了显着提高。