2016-08-29 9 views
0

興味深いケース:iPhoneをiBeaconデバイスに移動すると、iPhoneをデバイスから移動するときよりも精度の値がずっと速く変化しました。 この処理をより速くするにはどうすればよいですか?精度計算の時間を増やすには?

答えて

1

ご存知のように、CoreLocationは過去の信号測定値の平均を計算して、accuracy(距離推定値)を算出します。平均化のために使用されたアルゴリズムは未発表ですが、私の測定値は約20秒後に安定する遅れを示しています。私は、近づくか遠ざけるかの違いに気づいていません。

あなたはこの平均化間隔を制御できません。あなたがすることができる唯一のことは、あなたが望むどんな期間であれ自分で平均RSSIです。その後、カスタム計算を使用して、平均RSSIを距離に変換することができます。

これを行うには、ビーコン広告の測定されたパワーキャリブレーション定数にアクセスできないので、すべてが同じ送信機パワーを持つビーコンを持つ必要があります。 (Appleはこの値を読み取ることはできません)。代わりに、この定数はお客様の距離計算にハードコードする必要があります。

あなたはここにこれを実行するサンプルコードを参照することができます:あなたのコードはCoreBluetooth [[RNLBeaconScanner sharedBeaconScanner] calibratedRSSIFor:自己]を使用しています

+(double) distanceForRSSI:(double)rssi forPower:(int)txPower { 
    // use coefficient values from spreadsheet for iPhone 4S 
    double coefficient1 = 2.922026; // multiplier 
    double coefficient2 = 6.672908; // power 
    double coefficient3 = -1.767203; // intercept 

    if (rssi == 0) { 
    return -1.0; // if we cannot determine accuracy, return -1.0 
    } 

    double ratio = rssi*1.0/txPower; 
    double distance; 

    if (ratio < 1.0) { 
    distance = pow(ratio,10); 
    } 
    else { 
    distance = (coefficient1)*pow(ratio,coefficient2) + coefficient3; 
    } 

    if (distance < 0.1) { 
    NSLog(@"Low distance"); 
    } 

    return distance; 
} 

https://github.com/AltBeacon/ios-beacon-tools/blob/master/ios-beacon-tools/RNLBeacon%2BDistance.m

+0

を。私が間違っていないと、CBはバックグラウンドで動作しないので、このコードはフォアグラウンドでしか使用できません。 –

+0

はい、サンプルコードではCoreBluetoothを使用していますが、それは私があなたがしていることではありません。私は単純に、CoreLocationを使用したコード例からカスタム距離の計算を再利用することを提案しています。最後の5コールバックの 'didRangeBeacons:inRegion'コールバックからRSSIの平均を集める必要があります(あなたが望むように時間を微調整することができます)、この平均RSSIを表示されたメソッドに渡す必要があります。 – davidgyoung

+0

Davidしかし、2つのビーコンのメジャーとマイナーが同じであれば、それは同じビーコンか別のビーコンですか?はい、独自の校正を行うことを考えましたが、ユニークなキーの問題です。 –

関連する問題