Interessanter Fall: Wenn wir das iPhone zum iBeacon Gerät bewegen, ändert sich der Wert der Genauigkeit viel schneller als wenn wir das iPhone vom Gerät bewegen. Wie kann ich diesen Prozess beschleunigen?Wie kann man die Zeit der Genauigkeitsberechnung erhöhen?
Antwort
Wie Sie bereits erwähnt haben, berechnet CoreLocation die vergangenen Signalmessungen, um eine accuracy
Berechnung (Entfernungsschätzung in Metern) zu erhalten. Der für die Mittelung verwendete Algorithmus ist unveröffentlicht, aber meine Messungen haben eine Verzögerung gezeigt, die sich nach ungefähr 20 Sekunden stabilisiert. Ich habe keinen Unterschied in der Verzögerung zwischen näher oder weiter weg bemerkt.
Sie haben keine Kontrolle über dieses Mittelungsintervall. Das einzige, was Sie tun können, ist RSSI selbst über den gewünschten Zeitraum zu mitteln. Sie können dann eine benutzerdefinierte Berechnung verwenden, um den durchschnittlichen RSSI in die Entfernung zu konvertieren.
Dazu müssen Sie Beacons haben, die alle die gleiche Sendeleistung haben, da Sie keinen Zugriff auf die gemessene Leistungskalibrierungskonstante in der Beacon-Werbung haben. (Apple erlaubt das Lesen dieses Wertes nicht.). Stattdessen muss diese Konstante in Ihrer Kundenabstandsberechnung fest codiert sein.
können Sie Beispielcode sehen, dass dies hier tut:
+(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
- 1. Wie kann man die Geschwindigkeit erhöhen?
- 2. Wie kann man die Seitendrehzahl erhöhen?
- 3. Wie kann man die Ausführungszeit der Laravel-Controller-Methode erhöhen?
- 4. imageio: Wie kann man die Qualität der ausgegebenen Gifs erhöhen?
- 5. Tensorflow, Multi-Label-Genauigkeitsberechnung
- 6. Wie kann man bestimmen, wann man die Parallelität eines einzelnen Arbeiters erhöhen oder die Arbeiter im Sturm erhöhen kann?
- 7. Wie kann man die Zeit zum Hochladen von Dateien für große Dateien im Code-Signierer erhöhen?
- 8. Wie kann man die verbleibende Zeit in der Digitaluhr anzeigen?
- 9. Um die Timeout-Zeit zu erhöhen
- 10. Wie kann man die Breite der Spalte für den Namen der Statistiken in OpenSceneGraph erhöhen?
- 11. Wie kann man die Multidimension des Arrays im Tensorflow erhöhen?
- 12. Wie kann man die Größe einer Verbindung erhöhen?
- 13. Wie kann man die Bildlaufgeschwindigkeit in tmux erhöhen?
- 14. Wie kann man die Länge eines Post Ajax Calls erhöhen?
- 15. Wie kann man eine Nummer für die gleiche Klasse erhöhen?
- 16. Wie kann man die Scroll-Geschwindigkeit von UIWebView erhöhen?
- 17. Wie kann man die Antwortzeit in Laravel 5.2 erhöhen?
- 18. Wie kann man die linke Position dynamisch mit jquery erhöhen?
- 19. Wikitude AR.RelativeLocation, wie kann man die Gyroskoppräzision erhöhen?
- 20. Wie kann ich meine Timeout-Zeit im Docker erhöhen?
- 21. Wie kann man die Bildgröße um einen Wert erhöhen?
- 22. wie die Zeit zu erhöhen, durch Skript unty3d
- 23. Wie kann man die Geschwindigkeit der sächsischen Auswertung in C# erhöhen?
- 24. Wie berechnet man die Zeit?
- 25. Wie kann ich die Scrollgeschwindigkeit erhöhen?
- 26. Wie kann ich die Seitenladegeschwindigkeit erhöhen?
- 27. Wie kann man den Benutzer daran hindern, die zukünftige Zeit aus der aktuellen Zeit auszuwählen?
- 28. Wie kann ich die Geschwindigkeit der Implementierung von Fotofiltern erhöhen?
- 29. Wie kann ich die Anzahl der Standardzeilen pro Seite erhöhen?
- 30. Wie kann ich die Kapazität der PostGreSQL-Textindizierung erhöhen?
Ihr Code verwendet CoreBluetooth [[RNLBeaconScanner sharedBeaconScanner] calibratedRSSIFor: self]; Wenn ich mich nicht irre, CB funktioniert nicht im Hintergrund, so dass wir diesen Code nur im Vordergrund verwenden können. –
Ja, der Beispielcode verwendet CoreBluetooth, aber das ist nicht das, was ich Ihnen vorschlage. Ich schlage einfach vor, dass Sie die benutzerdefinierte Entfernungsberechnung (in meiner obigen Antwort eingefügt) aus diesem Codebeispiel mit CoreLocation wiederverwenden. Sie müssen den Durchschnitt des RSSI aus dem 'didRangeBeacons: inRegion' Callback für die letzten 5 Callbacks sammeln (Sie können die Zeit wie gewünscht ändern) und dann diese durchschnittliche RSSI in die gezeigte Methode übertragen. – davidgyoung
David, aber wie kann ich verstehen, ist es das gleiche Beacon oder ein anderes, wenn zwei Beacons Majors und Minderjährigen gleich sind? Ja, ich dachte darüber nach, meine eigene Art der Kalibrierung zu machen, aber das Problem in einem einzigartigen Schlüssel. –