过去几天我一直在玩Estimote Beacons。我开始怀疑iBeacons的有效性,因为它们在确定Beacons位置时具有很高的延迟。
当你移动2-3米时,它需要几秒钟才能到达正确的位置。 一个用例场景,如捕捉一个人走过灯塔的人可能很难确定。
是否可以操纵CLLocationManager或CLBeaconRegion的更新/刷新率?例如每0.1秒
答案 0 :(得分:8)
你看到iOS距离测量(他们称之为CLBeacon对象中的“准确度”)需要很长时间才能稳定的原因是因为它基于RSSI的运行平均值 - 接收信号强度。这种信号强度测量本身就是噪声,它会四处反弹。这就是为什么需要收集多个样本来平滑它。
但由于这种平均,存在滞后。最近的估计是基于几秒钟前的测量结果。
您无法更改CLLocationManager或CLBeaconRegion的刷新率,但您可能能够获得比1s基线更频繁传输的iBeacon。更多的传输可以为您提供更多的RSSI测量,它可以帮助消除噪声。因为我不确定CoreLocation的内部实现,所以我不能肯定更高的iBeacon传输速率是否会降低距离测量的噪声。
您也可以根据RSSI和iBeacon发出的功率校准值计算自己的距离测量值。如果您使用单个RSSI样本,那么通过早期测量的平均值将没有滞后,但您将具有高度的可变性。您基本上必须接受在滤除噪声和根据不同位置滤除旧测量之间的权衡。
如果您想尝试自己的计算,可以使用以下内容(有关详细信息,请参阅我对this question的回答)。
distanceInMeters = 0.89976 * (rssi/txPower)**7.7095 + 0.111
您必须对此估算的准确程度设定切合实际的期望。 Apple通常建议您不要在CLBeacon内部使用它们的“精确度”测量,除非它与其他更粗糙的测量相结合,例如将“距离测量”划分为“立即”,“近”和“远”分组的“接近”。 / p>