测量从Android设备到iBeacon的距离
作者:互联网
我正在开发一个必须测量到iBeacon距离的应用程序.当用户在距离(1米)内时,应通知用户.
它在iOS上工作正常,但在Android上我得到了各种结果.我正在使用Estimote Android SDK(https://github.com/Estimote/Android-SDK)和Android 4.3.
以下是来自Nexus 4和Nexus 5的测量结果.iBeacon距离手机一米远(测量结果与更多样本一致):
Nexus 4:
08-25 11:39:04.788: : Major: 27485 Accuracy: 0.36351308115918884 Power: -74 Rssi: -67
08-25 11:39:05.880: : Major: 27485 Accuracy: 0.31923897946172497 Power: -74 Rssi: -66
08-25 11:39:06.911: : Major: 27485 Accuracy: 0.31923897946172497 Power: -74 Rssi: -66
08-25 11:39:07.962: : Major: 27485 Accuracy: 0.41856988869951295 Power: -74 Rssi: -68
08-25 11:39:09.003: : Major: 27485 Accuracy: 0.31923897946172497 Power: -74 Rssi: -66
Nexus 5:
08-25 11:35:31.443: : Major: 27485 Accuracy: 0.14058401218665711 Power: -74 Rssi: -61
08-25 11:35:32.483: : Major: 27485 Accuracy: 0.14058401218665711 Power: -74 Rssi: -61
08-25 11:35:33.513: : Major: 27485 Accuracy: 0.17333602268971005 Power: -74 Rssi: -62
08-25 11:35:34.553: : Major: 27485 Accuracy: 0.17333602268971005 Power: -74 Rssi: -62
08-25 11:35:35.593: : Major: 27485 Accuracy: 0.17333602268971005 Power: -74 Rssi: -62
如上所述,它们都不接近一米. Nexus 4的最接近结果为0.42米.精度取自Estimote SDK中的Utils.computeAccuracy.
最大的问题是不同的设备会产生不同的结果.我尝试的大多数设备(Nexus 4,Nexus 7,HTC One Mine)给出的结果与Nexus 4类似.但Nexus 5表明它比其他设备更接近.
有没有办法让所有设备给出(接近)类似的结果?另一种了解不同设备如何测量的方法(因此算法可以补偿不同的结果)
还有没有人找到一种方法来提高Android蓝牙LE的采样率?
我真的想在用户启动应用程序时阻止使用某些校准.
我必须使用iBeacons(客户需求),但如果这有助于解决问题,可以选择其他库.
解决方法:
开源Android Beacon Library(@tar提到的库的后继包含一个过滤器,保持RSSI测量的20秒运行平均值,丢弃最高和最低10%的样本.这使得距离估计非常稳定,当用户相对于信标移动时,它会在时间上滞后.这就是说,它类似于iOS设备估计的行为.
Android设备的另一个挑战是每个型号都有不同的蓝牙天线和不同的增益.这意味着相对于信标在完全相同位置的两个不同设备模型上的平均接收信号电平将是不同的.我可以从测试中确认Nexus 4和Nexus 5的天线增益非常不同.
Android Beacon Library中的公式是为Nexus 5设计的,但它是开源的,因此您可以自定义任何设备型号的代码.要为不同的设备制作新的公式,您需要在不同的距离(0.5米,1米,2米,3米,… 10米,12米…… 20米)进行几次60秒的平均RSSI测量,然后进行最佳拟合计算.
开源库的未来计划是为最常见的设备模型建立不同的公式,并根据设备检查键入使用的距离公式.这是很多工作,所以如果你能帮助志愿者,请点击我的照片与我联系!
标签:android,distance,ibeacon 来源: https://codeday.me/bug/20190612/1224703.html