0

私は iPad アプリ (iPad Air、バックグラウンドではなくフォアグラウンドで実行されるアプリ) といくつかのビーコン (Estimote と Bluecat から) を試して、ビーコンを適切な順序でスキャンする必要がある屋内および屋外ゲームを開発しています。ビーコンは 5 x 5m 程度のエリア内に配置され、参加者はビーコンに近づかなければなりません (至近距離)。

ただし、ビーコンがCLProximityImmediate範囲内にあることを検出するには、iPad が実際に物理的にビーコンに触れている場合でも、数秒 (これは問題ありません) から 30 ~ 60 秒程度 (長すぎます) かかる場合があります。私の実験によると、ビーコンは 1 秒に 1 回のように範囲指定されますが、即時の範囲を遅延で報告し、頻繁に報告し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 の両方を試しましたが、非常によく似た結果が得られます。

ビーコンの即時範囲センシングを高速化するための実用的なヒントはありますか? コア Bluetooth をさらに深くすることで、重大な改善が見込めるでしょうか?

4

1 に答える 1

2

あなたが言及している遅延は、次の 4 つの要因が原因である可能性があります。

  1. CoreLocation が単一の範囲更新を提供するのにかかる時間: 1
  2. CoreLocation の "accuracy" (距離) のローリング平均推定値が、古い場所から新しい場所の値に落ち着くまでにかかる時間。 私の実験では、これが約20 秒であることを示しています。
  3. 電波の変動を考慮して、すぐに読み取り値を取得するのにかかる時間は、最大で2 ~ 3 秒です。
  4. ビーコンのキャリブレーション定数。ビーコンが適切に調整されていない場合、CoreLocation は距離を過大評価する可能性があり、ランダムな変動が発生してすぐに測定値が得られるまで (3) に時間がかかります。

上記を高速化するには、まず適切なキャリブレーションを確認します。次に、測距コールバックごとに取得する RSSI の読み取り値に基づいて、独自の を優先して iOS の距離推定を放棄することをお勧めします。利点は、ローリング平均によって生じる 20 秒のラグを取り除くことができることです。しかし、実際のトレードオフは、距離の推定値の変動性がはるかに高くなることです。必要以上に離れていると、誤検知につながります。

于 2014-06-02T10:40:13.723 に答える