如何在iOS中更快地为CLProximityImmediate制作iBeacon前景测距?

时间:2014-06-02 09:51:44

标签: ios bluetooth core-location ibeacon estimote

我正在尝试使用iPad应用程序(iPad Air,在前台运行的应用程序,而非背景)和几个信标(来自Estimote和Bluecat)来开发室内和室外游戏,人们必须按照正确的顺序扫描信标。信标被放置在5 x 5m的区域内,参与者必须接近它们(在近距离范围内)。

然而,发现信标在CLProximityImmediate范围内可能需要几秒钟(这很好)到30-60秒(这太长),即使在iPad实际接触信标的情况下也是如此。根据我的实验,信标的范围大约为每秒一次,但报告的是直接范围,并且经常报告CLProximityUnknown

我的测距设置如下(我处于测距模式,进入/退出区域没有打开/关闭):

CLBeaconRegion *estimoteRegion = [[CLBeaconRegion alloc] initWithProximityUUID:estimoteUUID identifier:estimoteIdentifier];
CLBeaconRegion *bluecatRegion = [[CLBeaconRegion alloc] initWithProximityUUID:bluecatUUID identifier:bluecatIdentifier];
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
[self.locationManager startRangingBeaconsInRegion:estimoteRegion];
[self.locationManager startRangingBeaconsInRegion:bluecatRegion];

测距事件处理程序与下面的类似:

- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
    for(CLBeacon *beacon in beacons) {
        if (beacon.proximity == CLProximityImmediate) {
             // Handle it
             break;
        }
    }

我已经尝试了Core Location和Estimote SDK,但它们的结果非常相似。

您是否有任何关于如何加速信标即时距离感应的实用技巧? 应该更深入的核心蓝牙承诺任何重大的改进?

1 个答案:

答案 0 :(得分:2)

您提到的延迟可能是由四个因素引起的:

  1. CoreLocation为您提供单一测距更新所需的时间: 1秒
  2. CoreLocation对"准确性的滚动平均估计所花费的时间" (距离)从旧位置结算新位置的值。 My experiments表明这是 20秒。
  3. 在给定无线电波动的情况下立即阅读所需的时间最多 2-3秒。
  4. 信标的校准常数。如果您的信标没有正确校准,CoreLocation可能会高估距离,导致(3)花费更长的时间,直到发生随机变化,以便立即阅读。
  5. 为了加快上述速度,首先要确保正确校准。接下来,您可能希望abandon iOS' distance estimation in favor of your own,基于每次测距回调获得的RSSI读数。优点是你可以摆脱滚动平均值造成的20秒滞后。但真正的权衡是你会看到你的距离估计变化更大。当你离你想远的时候会导致误报。