Orientierungssensor korrekt auslesen?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Kernle 32DLL, 28.03.2011.

  1. Kernle 32DLL, 28.03.2011 #1
    Kernle 32DLL

    Kernle 32DLL Threadstarter Neuer Benutzer

    Beiträge:
    23
    Erhaltene Danke:
    0
    Registriert seit:
    06.01.2010
    Moin,

    Ich kämpfe seit kurzem mit einem kleinen Sensorproblem das ich einfach nicht in den Griff bekomme. Ich will einfach nur den Z-Roll Wert im Landscape Mode (also wenn man das Handy vor sich hat, und dann nach Rechts und Links neigt) auslesen. Dabei stellen sich mir zwei große Probleme, aber erst mal ein kurzer Einblick wie ich den Sensor bisher auslese:

    Code:
    mSensorEventListener = new SensorEventListener()
    {
        @Override
        public void onSensorChanged(SensorEvent event)
        {
            mMapRotationZ = event.values[1];
        }
        
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy)
        {
        }
    };
    (Ich weiß das diese Methode deprecated ist, aber ich habe kein funktionierendes Tutorial für die "neue" Methode mit Rotation Matrix, etc. gefunden)

    Das erste Problem ist, das ich beim Neigen des Handy zu mir hin (also das die Obere Handykante zu mir zeigt) der ausgelesene Sensorwert auf einmal um -180°C verdreht wird, und ich kriege nicht raus wie ich das abfangen bzw. verrechnen kann. Mache ich was elementar falsch, oder ist das in der neueren Methode mit der Rotation Matrix vielleicht korrekt(er)?

    Das zweite Problem ist, dass die Werte ziemlich "unruhig" sind, und die Rotation ziemlich zittrig wirkt. Meine versuche das mit ne‘m Buffer "auszugleichen" waren nicht sehr erfolgreich, die Ausgabe wurde einfach zu stark verzögert, oder ich war gezwungen den Sensor mit SENSOR_DELAY_FASTEST zu registrieren (was mir ein wenig übers Ziel hinaus geschossen scheint). Es gibt genügend Apps die beweisen das es geht, also wie "smoothe" ich meine Sensordaten damit‘s nicht so unruhig wirkt?

    Wäre für alle Gedankenanstöße sehr dankbar =)

    So long,
    Kernle
     
  2. Zanny, 30.03.2012 #2
    Zanny

    Zanny Neuer Benutzer

    Beiträge:
    6
    Erhaltene Danke:
    0
    Registriert seit:
    30.03.2012
    Ich bin mir grad nicht sicher, ob du den richtigen Wert benutzt. values[0] = azimith, 1 = pitch, 2=roll für den SensorType Orientation (der ja leider veraltet ist)...

    Ich habe ein ähnliches Problem. Ich will ermitteln, in welche Richtung meine Kamera guckt (im Landscape-Mode) und in welchem Winkel ((Kompass + 90° für Kamera)%360). Hatte bisher auch TYPE_ORIENTATION benutzt und hübsche Werte erhalten, aber mein Versuch, das jetzt umzubauen auf die anderen Sensortypen scheiterte kläglich.
    1. Ich weiß nicht, welche Sensoren ich für mein Ziel wirklich brauche.
    2. Die Werte, die von den Sensoren zurückkommen, kann ich nicht vernünftig interpretieren, weil ich nicht so genau weiß, was sie mir sagen sollen (habe schon tagelang die API angestarrt).
    3. Ich nehme an, damit mir z.B. ein vernünftiger Winkel angezeigt wird, muss ich die Werte irgendwie manipulieren oder miteinander kombinieren, aber wie???

    Wäre super, wenn mir jemand helfen könnte. Man findet zwar immer, wie man die Werte ausliest, aber nie wie man sie richtig interpretiert. Oder man findet nur Beispiel zu TYPE_ORIENTATION.
     
  3. Kernle 32DLL, 30.03.2012 #3
    Kernle 32DLL

    Kernle 32DLL Threadstarter Neuer Benutzer

    Beiträge:
    23
    Erhaltene Danke:
    0
    Registriert seit:
    06.01.2010
    Ich weise mal dezent darauf hin das du ein 1 Jahr alten Thread ausgegraben hast ;-) Oh well, mein Problem habe ich damals dann mit der Matrix Geschichte gelöst. Hatte irgendwo auf stackoverflow nen funktionierendes Code snippet mit Interpolation (wichtig!) gefunden, und das tat seinen Job :)

    Mittlerweile ist das für mich aber auch nicht mehr wichtig, da ich für meine Games Libgdx benutze, was den ganzen Sensorkram kapselt, so dass ich nur noch sowas in der Art wie Input.getPitch() aufrufen muss ;-)

    Für dein Problem habe ich ergo derzeit keine Lösung mehr im Kopf :D
     
  4. Zanny, 30.03.2012 #4
    Zanny

    Zanny Neuer Benutzer

    Beiträge:
    6
    Erhaltene Danke:
    0
    Registriert seit:
    30.03.2012
    Hihi, du hast recht. Hab mich schon gefreut, weil der Post von vorgestern war :p

    Vielleicht hat ja doch noch jemand ne Idee. Arbeite mit der API 2.3.3. auf dem 7 Zoll Galaxy Tab GT-P1000.
    Lieder geht mir die ganze Mathematik völlig ab. Steige da gar nicht durc´h und weiß auch gar nicht wirklich, was ich davon eigentlich brauche.
     

Diese Seite empfehlen