【问题标题】:Measure distance to iBeacon from Android device从 Android 设备测量到 iBeacon 的距离
【发布时间】:2014-08-26 07:48:51
【问题描述】:

我正在开发一个必须测量到 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 米。 Accuracy 取自 Estimote SDK 中的 Utils.computeAccuracy。

最大的问题是不同的设备会给出不同的结果。我尝试过的大多数设备(Nexus 4、Nexus 7、HTC One Mine)的结果与 Nexus 4 相似。但是 Nexus 5 表明比其他设备更接近。

有没有办法让所有设备都给出(接近)相似的结果?另一种方法来了解不同设备的测量方式(因此算法可以补偿不同的结果)

还有人找到提高 Android 蓝牙 LE 采样率的方法吗?

我真的很想避免在用户启动应用程序时使用一些校准。

我必须使用 iBeacons(客户需求),但如果这有助于解决问题,可以选择另一个库。

【问题讨论】:

    标签: android distance ibeacon


    【解决方案1】:

    开源Android Beacon Library(@tar 提到的库的后续版本包含一个过滤器,该过滤器保持 20 秒的 RSSI 测量平均值,丢弃顶部和底部 10% 的样本。这给出了一个距离估计,即相当稳定,但它会随着用户相对于信标的移动而延迟时间。也就是说,它类似于 iOS 设备估计的行为。

    Android 设备的另一个挑战是每个型号都有不同的蓝牙天线和不同的增益。这意味着相对于信标处于完全相同位置的两个不同设备型号上的平均接收信号电平将不同。我可以通过测试确认 Nexus 4 和 Nexus 5 的天线增益非常不同。

    Android Beacon 库中的公式是为 Nexus 5 设计的,但它是开源的,因此您可以根据需要为任何设备型号自定义代码。要为不同的设备制定新公式,您需要在不同的距离(0.5m、1m、2m、3m、... 10m、12m ... 20m)进行几次 60 秒的平均 RSSI 测量,然后进行最佳拟合计算.

    开源库的未来计划是为最常见的设备模型内置不同的公式,并根据设备检查键入使用的距离公式。这是很多工作,所以如果你能帮助志愿者,请点击我的照片与我联系!

    【讨论】:

      【解决方案2】:

      好吧,对于初学者来说,距离只是一个估计值,没有任何 SDK 会给你一致的答案,因为 RSSI 取决于许多不受其控制的因素。如果你想要一些阅读材料,Shane Russell 发布了"A Semi-Technical Lowdown on Working with iBeacons"

      Radius Networks 曾经有一个open-source library 用于 Android 和 iOS。尽管他们在今年夏天晚些时候将其删除,但您也许可以很好地向他们提出要求。此外,他们似乎已经替换了AltBeacon library,可能适合您的需求。另外,作为 GitHub……那个 repo 仍然包含它以前的所有代码,所以请随时回顾它并获取你需要的东西。

      至于您担心测量距离 1 米远,这可能是由于信标未校准。查看您的硬件文档,您几乎肯定会找到输入校准值的方法。该值会广播给任何正在收听的设备,以便这些设备可以估计距离。

      请注意,某些 iBeacon 设备具有可配置的功率级别,因此如果您更改它,您还需要重新校准它。

      【讨论】:

      • 是的,Radius 有一个图书馆,他们又新建了一个。不过这次是针对 AltBeacon,它是一个开放的规范标准,不适用于 iBeacon。
      • documentation 说明如下:默认情况下,此库将仅检测符合新 AltBeacon 规范的信标。如果您希望此库与专有或自定义信标一起使用,请参阅 BeaconParser 类。
      • 是的,您可以使用上面提到的 BeaconParser 类轻松配置库以检测任何专有信标。只需要一行代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多