2010-11-23 4 views
2

Ich habe mit dem Android Accelerometer in letzter Zeit mit dem Android SDK und dem Adobe AIR für Android SDK auf meinem Motorola Droid gespielt. Was ich bemerkt habe, ist, dass der Beschleunigungsmesser gut funktioniert, aber ich frage mich, ob es möglich ist, auf irgendeine Weise zu kompensieren, so dass ich das Gerät nicht in einer horizontalen Position verwenden muss. Mit anderen Worten, ich möchte den Beschleunigungssensor verwenden, um meine visuelle Anzeige zu steuern, aber initialisiere sie (oder verändere sie auf irgendeine Weise), so dass ich sie nicht vollkommen flach halten muss (es macht nicht viel Spaß, mich über das Telefon zu beugen).Verwenden des Android Accelerometers ohne das Gerät flach

Weiß jemand, wie ich das Gerät bequem in meiner Hand halten kann, sagen wir 45 Grad, und benutze immer noch den Beschleunigungsmesser, um Vorwärts/Rückwärts-Messwerte zu liefern? Ist das möglich? Gibt es Beispiele dafür?

+0

Hallo, Ich weiß, das ist alt, aber hast du zufällig ein Beispiel gefunden? – xtrimsky

Antwort

1

Sie benötigen dafür eine einfache Matrixmultiplikation. "Kalibriere" die Drehung, indem du die aktuelle Matrix beim Start der App nimmst und sie invertierst, dann multipliziere alle nachfolgenden Matrizen damit - das gibt dir das Delta zur Startposition.

+0

Das klingt großartig! Genau was hast du gerade gesagt? Ich verstehe Transformationen und Matrixmultiplikation. Aber wenn Sie auf die "aktuelle Matrix beim Starten der App" und "alle nachfolgenden Matrizen" Bezug nehmen beziehen Sie sich auf den Beschleunigungssensor oder das Display? Irgendwelche führt an einem Beispiel? Danke EboMike! – Shawn

+0

Grundsätzlich, wenn Sie den Beschleunigungsmesser abfragen, erhalten Sie eine Matrix. (Überprüfen Sie alle aktuellen Code-Beispiele, sie werden alle mit einer Matrix enden. Sie enden mit mehr Juju-Magie, um euler Winkel daraus zu machen, aber gehen Sie nicht so weit - nehmen Sie einfach die rohe Matrix vom Beschleunigungsmesser und invertieren Sie es). Dann, jedes Bild, wenn Sie den Beschleunigungsmesser erneut abfragen, multiplizieren Sie das mit der ursprünglichen Matrix, die Sie gespeichert haben. Das wird dir eine schöne Delta-Matrix geben - DANN kannst du weitergehen und euler Winkel bekommen. – EboMike

+0

Ich nehme an, Sie meinen die x, y, z-Werte vom Beschleunigungssensor, richtig? Vielleicht würde ein Codebeispiel zur Klärung beitragen? Danke EboMike! – Shawn

0

Ich hatte vor langer Zeit eine Anwendung geschrieben, die sich mit Relativdrehungen beschäftigte. Ich habe vergessen, was der Code getan hat, aber von dem, was ich sehe, scheint es -

1) Ich bekomme die anfängliche Rotationsmatrix mit - SensorManager.getRotationMatrix (R, I, gravity.clone(), geomagnetischen. Klon()); (Schwerkraft und Erdmagnetfeld sind die entsprechenden Beschleunigungs- und geomagnetischen Matrizen. Weiß nicht, warum ich Klone verwende, aber es muss einen Grund geben.) 2) Jetzt in jedem Stadium die aktuelle Rotationsmatrix erhalten und sie R nennen. 3) Berechne das Inverse von die anfängliche Matrix und nenne sie "initialInverse". 4) Multiplizieren Sie R mit initialInverse (oder anders herum, Sie müssen es herausfinden). 5) Holen Sie sich Ihre endgültige Orientierung mit SensorManager.getOrientation (Delta, Werte)

Es tut mir leid, aber ich habe total vergessen, was der obige Code tut. Ich denke, ich erinnere mich, dass ich die Wörter Euler Transform irgendwo gelesen habe, als ich diese App geschrieben habe, also könnte es das tun. Leider kann ich Ihnen den kompletten Code nicht geben, da ich diese App wahrscheinlich auf dem Markt veröffentlichen werde. Wenn Sie jedoch weitere Informationen benötigen, lassen Sie es mich wissen - ich werde den Code prüfen und zu Ihnen zurückkommen.

0

Ich arbeite in einem Projekt mit ähnlicher Natur, wo die Beschleunigungsmesserfunktion nicht durch die Position eingeschränkt wird. Meine Art der Handhabung ist sehr einfach, initialisiere den Beschleunigungssensor mit dem aktuellen Messwert als Standard. Mit anderen Worten, Sie haben eine Taste, die Sie drücken, sobald Sie das Telefon in der richtigen Position haben, wenn Sie die Taste drücken, werden die aktuellen Messwerte des Beschleunigungsmessers (Maße von G) Ihre Referenz (Nullwerte) und Änderungen vornehmen Du gehst über oder unter diese Messwerte ... Hoffe, das hilft jedem ... Prost

Verwandte Themen