10 November 2013 22:04

Android Orientation Drift

Heute mal ein Beitrag, der lediglich ein (lästiges) Phänomen zeigt, aber leider keine Lösung nennt. Bitte nicht hauen.

Viele moderne Smartphones haben eine Vielzahl von Sensoren. Mein Nexus 4 hat zum Beispiel nicht nur einen Kompass, sondern auch einen Helligkeitssensor, ein Barometer und ein Gyroskop. In diesem Beitrag geht es um den Kompass sowie das Gyroskop.

Sensor API

Android macht es dem Entwickler einfach und abstrahiert die meisten Sensoren (wer es genauer wissen möchte, kann einen Blick in die Doku werfen). So hat man eine Vielzahl von angebotenen Sensoren. Die App Sensor Readout zeigt mir bei meinem Nexus 4 folgende Sensoren an:

  • LGE Accelerometer Sensor
  • LGE Magnetometer Sensor
  • Orientation
  • LGE Proximity Sensor
  • LGE Light Sensor
  • LGE Gyroscope Sensor
  • LGE Barometer Sensor
  • Gravity
  • Linear Acceleration
  • Rotation Vector
  • Rotation Vector Sensor
  • Gravity Sensor
  • Linear Acceleration Sensor
  • Orientation Sensor
  • Corrected Gyroscope Sensor

Nicht alle davon sind echte Sensoren. Viele haben einfach nur unterschiedliche Namen oder sind Kombinationen aus mehreren Sensoren.

Kompass

Oder: Wo ist Norden? Die meisten Leute würden nun vorschlagen, den "LGE Magnetometer Sensor" zu nehmen, da dieser das Magnetfeld misst. Das erzeugt dann etwa sowas:

Ruhig liegend … … oder gleichmäßig gedreht

Wie man sieht, sind die Daten ungefiltert, der Kompass würde ohne zusätzliche Glättung zittern. Android bietet nun abstrakte Sensoren, um es dem Entwickler einfacher zu machen. Diese nutzen aber das Gyroskop (so scheint es mir jedenfalls) und das kann ohne Korrektur schnell mal einen Drift bekommen. Zwar wird korrigiert, aber nicht in jeder Situation. (Wem das Ganze noch nicht so recht klar ist: ThinkPad-Nutzer können ihren Trackpoint ganz langsam in eine Richtung bewegen, sodass sich der Mauszeiger nicht bewegt. Wenn man ihn dann loslässt, bewegt sich der Zeiger in die entgegengesetzte Richtung.) Hier ein paar Beispiele:

Und das war es auch schon mit diesem Beitrag. Aufgefallen ist es mir beim Kompass von GPS Status & Toolbox, als ich das Smartphone nach Süden zeigend auf dem Tisch liegen hatte und sich der Kompass langsam drehte. (Apropos Kompass: Selbst nach einer sorgfältigen Kalibrierung zeigt er bei mir fast nie nach Norden. Bei einer Autofahrt ist es besonders schlimm. In Google Maps schaut man dann immer 30-90° in die falsche Richtung.) Eine Lösung, wie man dieses Problem beseitigen kann, habe ich nicht.

Kommentare

Blaubär, 04.12.2013 18:09
Guten Abend,

ich habe mich im Rahmen meiner Bachelorarbeit mit dem Thema Magnetfeldsensor in dem Nexus 4 befasst, bzw. befasse mich immer noch damit und muss dich leider korrigieren:

Die Werte des Magnetfeldsensors werden - trotz bereit gestellter Methode - nicht gefiltert und haben mitunter erhebliche Schwankungen. Das Phänomen mit dem Drift auf dem Tisch habe ich bereits mitbekommen, besonders schlimm wird es, wenn metallische oder magnetische Gegenstände sich in unmittelbarer Nähe befinden. Ich vermute, dass dies etwas mit dem Aufbau des Sensors zu tun hat, welcher vermutlich auch mit anderen Sensoren gekoppelt ist.

Eine einfache Lösung für dieses Problem gibt es leider nicht, da muss man ganz viel Mathematik und Statistik betreiben.
SammysHP, 04.12.2013 18:19
Dass die Werte vom Magnetfeldsensors gefiltert werden, habe ich ja nicht geschrieben (sogar explizit widersprochen). Ich schrieb, dass die Daten vom abstrakten "Orientation Sensor" wohl eine Kombination aus Magnetfeldsensor und Gyroskop (oder nur vom Gyroskop) sind. Und bei einem Gyroskop ist ein Drift ein bekanntes Phänomen.

Etwas erschreckend finde ich aber, dass deiner Beobachtung nach auch der Magnetfeldsensor an sich eine Drift hat (bei möglichst gleichbleibender Umgebung). Eigentlich sollte der ja absolut sein.

Vielen Dank auf jeden Fall für deinen Kommentar!
Blaubär, 10.12.2013 23:51
Verzeihung, dann habe ich dich falsch verstanden. Aber Ja es ist eine Kombination aus Gyroskop und Magnetfeldsensor. Zum Beiweis kannst du ja einfach mal einen Laptop oder einen anderen "Metallgegenstand" in greifbarer Nähe in die Nähe legen und sich über die Orientierung freuen ;)

Der Drift ist unter anderem ziemlich erheblich und kann sich auch einfach mal spontan ändern... Da kommen leider nicht immer die gleichen "absoluten" Werte raus ;)

Viele Grüße :)
Powered by BetaBlog
Login | RSS Beiträge RSS Kommentare Impressum