Falsche Kompasskurswerte mit CoreMotion

8

Ich verwende CoreMotion, um die ccompass-Überschrift zu erhalten, und mir sind einige Probleme mit der Kompassrichtung aufgefallen.

Zuerst meine Initialisierung von CoreMotion. Ich habe ein CMMotionManager-Objekt, locationManager, das eine Instanz des CMMotionManagers ist.

%Vor%

Die Positionsdaten werden alle 1 / 30,0 Sekunden aktualisiert.

Zu Debug-Zwecken habe ich ein UILabel, das mir den aktuellen Kompass-Kurs bei jedem Update-Intervall anzeigt. Während der Anwendung muss ich immer die magische 8 für die Kalibrierung des Kompasses machen.

Nach dem Kalibrieren des Kompasses ist die Richtung für Norden und Süden für fast 2-5 Sekunden korrekt.

Gleich nach ein paar Sekunden geht der Kompass los und die Winkel springen herum. Meist schwimmt es um 10-20 Grad von der Startposition in beide Richtungen. Ich wollte ein seltsames Ergebnis haben. Nach 30-60 Sekunden sind hin und wieder der Süden und der Norden vertauscht oder zeigen nach Osten und Westen.

Auf der WWDC 2011 wurde eine Sitzung darüber diskutiert, wie sie jeden Sensor mit einem anderen berechnen, um diese Probleme zu kompensieren. Gibt es etwas, das ich bei der Konfiguration von CoreMotion vermisse, dass ich diese massiven Probleme mit genauen Kopfzeilenergebnissen habe?

Ich habe den Kompass jetzt mit 3 Geräten (2 iPhone 4s und iPhone 4) in und außerhalb von Gebäuden getestet. Ich war auf Feldern, kleinen Städten und großen Städten. Es passiert ständig. Die Sample Compass App von Apple ist mit 90% Genauigkeit in meinen Tests fast genau. Leider ist es nicht Open Source von Apple.

Danke fürs Lesen.

    
DasFuxx 06.02.2012, 13:22
quelle

1 Antwort

3

Mit CoreMotion bis CoreLocation erhalten Sie, was Sie suchen.

Standardmäßig führt das Mobilteil die Kalibrierungszahl 8 aus. Um dies zu deaktivieren, überschreiben Sie locationManagerShouldDisplayHeadingCalibration: wie folgt:

%Vor%

Es ist nicht klar aus dem Code in Ihrer Frage, wenn Sie startUpdateHeading aufrufen. Wenn nicht, tun Sie das:

%Vor%

Sie können verrückte Ergebnisse erzielen, wenn Sie den Kursfilter nicht einschalten, ich würde Ihnen empfehlen, dies zu tun. Danach erhalten Sie nur die Änderungen der Überschrift in Ihrem Standortmanager-Delegat, wenn didUpdateHeading aufgerufen wird.

Beachten Sie auch, dass Sie, wenn sich das Mobilteil im Querformat befindet, den Kurs um die entsprechende Gradzahl (+/- 90) anpassen müssen, da sich die Überschrift immer im Portrait-Referenzrahmen befindet.

    
quellish 08.02.2012, 21:12
quelle