2012-06-16 7 views
11

Wenn ich eine einfache Web-Seite und Skript, das wie folgt aussieht:javascript 'deviceorientation' Ereignis - welche Sensoren misst es?

<body> 
    <div id="alpha">a</div> 
    <div id="beta">b</div> 
    <div id="gamma">g</div> 
</body> 

<script> 
window.addEventListener('deviceorientation', function(event) { 
    var alpha = event.alpha; 
    var beta = event.beta; 
    var gamma = event.gamma; 

    document.getElementById("alpha").innerHTML = alpha; 
    document.getElementById("beta").innerHTML = beta; 
    document.getElementById("gamma").innerHTML = gamma; 

}, false); 
</script> 

Ich kann es in mobilen Firefox für Android öffnen und es wird Ausgang 3 Zahlen, die wie folgt aussehen:

89.256125 
3.109375 
0.28125 

Wo, wenn ich das Gerät rotiere, ändern sich die Zahlen basierend auf der Drehachse. Ich habe bemerkt, dass die Werte für "Alpha" wirklich laut sind - sie springen nonstop umher, auch wenn das Telefon auf meinem Schreibtisch ruht, während die anderen beiden ruhig bleiben. Ich verstehe, dass Alpha meine Überschrift ist. Ich bin dann neugierig, bekommt es den "Alpha" -Wert vom Kompass (der Lärmprobleme hat) und die anderen beiden vom Gyroskop?

Ein anderes Problem ist, wenn ich die Tonhöhe ändere, aus irgendeinem Grund ändert sich auch die Überschrift, auch wenn ich die Überschrift eigentlich nicht ändere. Ich bin nur neugierig, warum das so ist und wie es korrigiert werden kann?

Da das Gyroskop die Winkelgeschwindigkeit misst, nehme ich an, dass dieser Ereignis-Listener es automatisch integriert - ist der Integrationsalgorithmus so gut wie jeder? Verwendet es den Beschleunigungsmesser, um die Drift zu korrigieren?

In diesem Google Tech Talk Video, 15.00 bis 19.00 Uhr, der Sprecher spricht über die Drift, die mit der Gyroskop Korrektur durch den accelermoter verwenden, sowie die Ausrichtung in Bezug auf die Schwerkraft Kalibrieren: http://www.youtube.com/watch?v=C7JQ7Rpwn2k Wie Würde ich das machen?

Danke für alle Einsichten, die jemand haben kann.

+3

Haben Sie http://dev.w3.org/geo/api/spec-source-orientation.html gelesen – mplungjan

+0

Wie kommt es mit den Zahlen: [So ist ] (http://dev.w3.org/geo/api/spec-source-orientation.html#worked-example) (Warnung, beängstigende Mathe voraus) –

+0

Diese W3-Spezifikation ist definitiv hilfreich. Ich denke, ich hätte es wissen müssen. Ich verstehe die Mathematik darin, nachdem ich vorher lineare Algebra genommen habe. – Joey

Antwort

2

Die Ausrichtung des Geräts wird durch Sensorfusion erhalten. Genau genommen misst keiner der Sensoren es. Die Ausrichtung ist das Ergebnis einer intelligenten Verschmelzung der Beschleunigungsmesser-, Gyro- und Magnetometerdaten.

ich die Werte für „alpha“ bemerkt sind wirklich laut - sie hüpfen um non-stop, auch wenn das Telefon im Ruhezustand auf meinem Schreibtisch, während die beiden anderen stabil bleiben.

Dies ist ein common problem with the Euler angles, versuchen Sie, sie zu vermeiden, wenn Sie können.

Übrigens, die Sensor Fusion auf Android-Geräten: Eine Revolution in Motion Processing Video Sie Link zu erklärt es um 38:25 Uhr.

Da auch die Gyroskop Maßnahmen Winkelgeschwindigkeit, nehme ich an diesem Ereignis-Listener automatisch integriert - wird die Integration Algorithmus so gut wie jeder? Verwendet es den Beschleunigungsmesser, um die Drift zu korrigieren?

Ja, die Gyro Drift wird mit Hilfe der Beschleunigungsmesser (und ggf. Magnetometer) korrigiert. Dies wird als Sensorfusion bezeichnet.

In diesem Google Tech Talk Video, 15.00 bis 19.00 Uhr, die Redner sprechen über die Drift, die mit den Gyroskop Korrektur des accelermoter durch Verwendung sowie die Ausrichtung in Bezug auf Kalibrieren Schwerkraft: http://www.youtube.com/watch?v=C7JQ7Rpwn2k Wie würde ich gehen über dies tun?

Wenn Sie Orientierung haben, hat jemand schon alles für Sie getan. Du musst nichts tun.

+0

Danke für die Erklärung. Ich bin eigentlich ziemlich erleichtert, dass ich die Sensorfusion nicht neu erfinden muss. Was ich immer noch nicht verstehen kann, ist, wie es gelingt, auf den wahren Norden statt auf den magnetischen Norden zu zeigen? Es kennt meinen Breiten- oder Längengrad nicht. – Joey

+0

Gute Frage, ich kann nur raten. Du hast Recht, es kann nur den magnetischen Norden messen. Jedoch kann der Winkel zwischen der Schwerkraft und dem magnetischen Norden verwendet werden, um den Breitengrad zu schätzen. Außerdem kann das GPS oder der Dienstanbieter dem Gerät den (ziemlich genauen) geografischen Standort mitteilen. Also, ich weiß es nicht. Was lässt dich denken, dass es den wahren Norden kennt? Wie sehr unterscheiden sich der wahre und der magnetische Norden an deiner Stelle? – Ali

+0

Nun, es gibt mir eine Lesung von Norden (Alpha = 0 oder 360) bei ein paar Grad im Uhrzeigersinn von wo meine Kompass-App mir sagt, ist Norden. Und ich lebe in der Nähe von Seattle, wo der Unterschied zwischen magnetischem Norden und wahrem Norden bedeutend ist, da der magnetische Norden über Alaska liegt. – Joey

3

Alle Orientierungswerte sind auch sehr laut für mich. Wackelige Hand, Euler-Winkel, magnetische Störung, Herstellungsfehler, ... Wer weiß?

Ich machte eine small exponential smoothing. Das heißt, ich ersetzt die fluktuierende event.alpha durch einen geglätteten Wert, die bequem alpha genannt wurden:

alpha = event.alpha + s*(alpha - event.alpha), with 0 <= s <= 1;

Mit anderen Worten, jedes Mal, wenn eine neue Beobachtung empfangen wird, der geglättete Wert ist aktualisiert mit einer Korrektur proportional zum Fehler.

  • Wenn s = 0 ist, das geglättete genau dem beobachteten Wert und es gibt keine Glättung.
  • Wenn s = 1, bleibt Alpha konstant, was in der Tat eine zu effiziente Glättung ist.
  • Sonst liegt Alpha irgendwo zwischen dem beobachteten und dem geglätteten Wert. In Fakten ist es ein (gewichteter) Durchschnitt zwischen der letzten Beobachtung und der Geschichte. Es folgt somit Änderungen der Werte mit einer bestimmten Dämpfungswirkung.
  • Wenn s ist klein, dann ist der Prozess in der Nähe der letzten Beobachtung und passt sich schnell an die jüngsten Änderungen (und auch zufällige Schwankungen). Die Dämpfung ist gering.
  • Wenn s ist in der Nähe von 1, ist der Prozess mehr viskose. Es reagiert träge auf zufällige Fluktuationen (und verändert auch die zentrale Tendenz). Die Dämpfung ist groß.
  • Versuchen Sie nicht s außerhalb der 0..1-Bereich, da dies zu einer negativen Rückkopplungsschleife führt und Alpha beginnt bald mit größeren und größeren Schwankungen zu divergieren.

  • verwendet I s = 0,25, nach der Prüfung, dass es für s keinen signifikanten Unterschied zwischen 0,1 und 0,3 war.

Wichtig: Wenn Sie diese Methode verwenden, vergessen Sie nicht, Alpha zu initialisieren, außerhalb der addEventListener Funktion:

var alpha = guestimate (= here 0);

Beachten Sie, dass diese einfache adaptive Glättung in vielen anderen Fällen funktioniert, und ist wirklich einfach zu programmieren.

+0

Glättung über mehr als zwei Proben könnte helfen? – ErikE

0

Verwenden Sie eine gerichtete Cosinus-Matrix oder einen Kalman-Filter. Sie können den Beschleunigungsmesser verwenden, um es oder das Gyroskop oder eine Kombination von beiden zu zeichnen. Die Drift kann mit etwas maschinellem Lernen berechnet werden. Ich denke, dass Bewegungsfusion ein Teil von Texas Instruments Kalibrierungspaket ist. Ich könnte falsch liegen. Aber es ist nicht schwer zu überprüfen. multiplizieren Sie 3 Rotationsmatrizen, seien Sie grand. http://www.itu.dk/stud/speciale/segmentering/Matlab6p5/help/toolbox/aeroblks/euleranglestodirectioncosinematrix.html