Ich habe eine App, die Orientierungsdaten verwendet, die sehr gut mit der pre API-8-Methode der Verwendung eines Sensor.TYPE_ORIENTAITON
funktioniert. Das Glätten dieser Daten war relativ einfach.Wie bekomme ich glatte Orientierung Daten in Android
Ich versuche, den Code zu aktualisieren, um die Verwendung dieses veralteten Ansatzes zu vermeiden. Der neue Standardansatz besteht darin, die einzige Sensor.TYPE_ORIENTATION
durch eine Sensor.TYPE_ACCELEROMETER
und Sensor.TYPE_MAGENTIC_FIELD
Kombination zu ersetzen. Wenn diese Daten empfangen werden, wird sie (über SensorManager.getRotationMatrix()
) an SensorManager.getOrientation()
gesendet. Dies liefert (theoretisch) die gleichen Informationen wie Sensor.TYPE_ORIENTATION
(abgesehen von verschiedenen Einheiten und Achsenausrichtung).
Dieser Ansatz scheint jedoch Daten zu erzeugen, die viel nervöser sind als die veraltete Methode (die immer noch funktioniert). Wenn Sie also dieselben Informationen auf demselben Gerät vergleichen, bietet die veraltete Methode wesentlich weniger verrauschte Daten als die aktuelle Methode.
Wie bekomme ich die gleichen (weniger lauten) Daten, die die veraltete Methode verwendet?
Um meine Frage ein wenig klarer zu machen: Ich habe verschiedene Antworten zu diesem Thema gelesen, und ich habe alle Arten von Filter ausprobiert: einfache KF/IIR Tiefpass wie Sie vorschlagen; Median-Filter zwischen 5 und 19 Punkten, aber bis jetzt habe ich noch nie annähernd die Glätte der Daten erreicht, die das Telefon über TYPE_ORIENTATION liefert.
Sie benötigen Tiefpass-Filter sowie Durchschnitt eine Geschichte.Wenn Sie TYPE_ORIENTATION und meine Antwort unter http://stackoverflow.com/questions/17979238/android-getorientation-azimuth-gets-polluted-when-phone-is-tilt/17981374#17981374 vergleichen, werden Sie sehen, dass sie ziemlich gleich sind . –