2010-05-04 9 views
5

Ich muss Kompass für meine Anwendung zu bauen.Kompass Genauigkeit Dilemma

Aus der Lektüre der Dokumentation scheint es, gibt es zwei vernünftige Möglichkeiten dies zu tun:

  • Sensor.TYPE_ORIENTATION Methode: Dies ist die einfache Möglichkeit, es zu tun. Das Problem dabei ist, dass es nicht genau ist. Wenn ich meine Lektüre mit Snaptic Compass vergleiche, sind es etwa 10-15 Grad, die für meine Zwecke nicht akzeptabel sind.
  • Sensor.TYPE_ACCELEROMETER, Sensor.TYPE_MAGNETIC_FIELD und getRotationMatrix() in Verbindung mit remapCoordinateSystem() und getOrientation() Methode: Die Dokumentation besagt, dass "in der Regel genauer" ist. Das Problem ist, unabhängig von der Verzögerung, die ich beim Zuhörer registriere, dass der Kompass verrückt wird, selbst wenn das Gerät auf einer flachen Oberfläche steht.

Alle Vorschläge zur Lösung dieses Problems werden sehr geschätzt.

Antwort

8

Sieht aus wie mob1lejunkie dies schon gedacht hat, aber nur für die Zukunft, möchte ich erwähnen, dass das Problem hier ist magnetic declination (die Differenz zwischen dem magnetischen Norden und wahrem Norden). Sie können an online model from NOAA ausprobieren, um einen Sinn dafür zu bekommen, was der Unterschied in Ihrem Teil der Welt ist.

Android enthält ein Modell mit der Bezeichnung GeomagneticField, das zur Berechnung der ungefähren Deklination bei Breiten-, Längen- und Höhenangaben verwendet werden kann. Also, was ich glaube, dass Sie tun müssen, um den wahren Norden zu berechnen, lesen Sie die azimuth value von Sensor.TYPE_ORIENTATION aus und fügen Sie dann die GeomagneticField.getDeclination() hinzu.

+0

Ja das war genau das Problem. – mob1lejunkie

1

Es ist der Nachteil von kompakten Teilen für Telefone. Ein $ 5.000 IMU, das wir gerade benutzen, hat einen Fehler von +/- 2 Grad und in diesem Bereich scheint es auch verrückt zu werden.

Versuchen Sie, von Interferenzen zu entfernen, Metalloberflächen und sehen, ob es verbessert. Wenn nicht, hasse ich es, die schlechten Nachrichten zu brechen, aber das ist die Hardware.

Haben Sie diese gesehen?

http://developer.android.com/reference/android/hardware/SensorManager.html

http://groups.google.com/group/android-developers/browse_thread/thread/bbb0e8b97c673cf9/5c16bc2e49f6e972?lnk=raot

+0

Was ich versuche zu sagen, ist auf dem gleichen Telefon (Nexus One) an der exakt gleichen Stelle auf dem Küchentisch Snaptic Compass, eine Drittanbieter-Anwendung von Android Market, ist genauer als meine Lesung. Ich frage mich, welchen Trick Snaptic verwendet, um genaueres und zuverlässigeres Lesen zu erhalten. – mob1lejunkie

+0

Siehe Links, die ich hinzugefügt habe, um zu antworten. –

+0

Nachdem ich in den Snaptic Compass Einstellungen herumgestöbert habe, habe ich bemerkt, dass es den echten Norden verwendet, während ich den magnetischen Norden benutzt habe. Jetzt, wo ich auch den wahren Norden nutze, haben meine Anwendung und der Snaptic Compass denselben Wert. Natürlich ist das Lesen nicht perfekt, aber das liegt an der Hardware von Nexus One, nicht an meiner Kompass-Implementierung. pinnacler danke für deine hilfe! – mob1lejunkie