Javascript 'deviceorientation' événement – quels détecteurs mesure-t-il?

Si j'ai une simple page Web et un script qui ressemble à ceci:

<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> 

Je peux l'ouvrir dans Firefox mobile pour Android et il affichera 3 nombres qui ressemblent à ce qui suit:

  • Android utilise V8 sans WebView
  • Android WebView Javascript getSelection
  • Problème de performance mobile Google Maps API Javascript
  • Algorithme JavaScript pour déterminer l'orientation de la tablette
  • Quel est votre flux de travail pour tester Cloud Code sur Parse?
  • Android EPSON thermique Imprimez les données à partir de la vue web sur le clic? Si l'imprimante n'est pas trouvée?
  •  89.256125 3.109375 0.28125 

    Où lorsque je tourne l'appareil, les chiffres changent en fonction de l'axe de rotation. J'ai remarqué que les valeurs pour "alpha" sont vraiment bruyantes – elles rebondissent non-stop même si le téléphone est au repos sur mon bureau, tandis que les deux autres restent stables. Je comprends que l'alpha est mon en-tête. Je suis curieux alors, est-ce que l'on obtient la valeur "alpha" de la boussole (qui a des problèmes de bruit) et les deux autres du gyroscope?

    Un autre problème est lorsque je change le pitch, pour une raison quelconque, le titre change également, même si je ne modifie pas vraiment l'en-tête. Je suis curieux de savoir pourquoi et comment cela peut-il être corrigé?

    En outre, puisque le gyroscope mesure la vitesse angulaire, je présume que cet auditeur d'événements l'intègre automatiquement: l'algorithme d'intégration est-il aussi bon que n'importe quel? Utilise-t-il l'accéléromètre pour corriger la dérive?

    Dans cette vidéo google tech talk, de 15h00 à 19h00, l'orateur parle de la correction de la dérive inhérente au gyroscope en utilisant l'accéléromètre, ainsi que sur l'orientation de la gravité: http://www.youtube .com / watch? V = C7JQ7Rpwn2k Comment pourrais-je faire cela?

    Merci pour toutes les idées que quelqu'un peut avoir.

  • La fusion de capteurs est-elle mise en œuvre sur Android?
  • Android accélère normalement
  • Obtenir une direction vectorielle dans Android
  • 3 Solutions collect form web for “Javascript 'deviceorientation' événement – quels détecteurs mesure-t-il?”

    L'orientation du dispositif est obtenue par fusion de capteur. À strictement parler, aucun des capteurs ne le mesure. L'orientation est le résultat de la fusion des données d'accéléromètre, de gyroscope et de magnétomètre d'une manière intelligente.

    J'ai remarqué que les valeurs pour "alpha" sont vraiment bruyantes – elles rebondissent non-stop même si le téléphone est au repos sur mon bureau, tandis que les deux autres restent stables.

    C'est un problème commun avec les angles d'Euler , essayez de les éviter si vous le pouvez.

    Par ailleurs, le Sensor Fusion sur les appareils Android: une vidéo de Revolution in Motion Processing que vous liez pour l'expliquer à 38h25.

    En outre, puisque le gyroscope mesure la vitesse angulaire, je présume que cet auditeur d'événements l'intègre automatiquement: l'algorithme d'intégration est-il aussi bon que n'importe quel? Utilise-t-il l'accéléromètre pour corriger la dérive?

    Oui, la dérive des gyroscopes est corrigée à l'aide des mesures d'accéléromètre (et du magnétomètre, le cas échéant). C'est ce qu'on appelle la fusion des capteurs.

    Dans cette vidéo google tech talk, de 15h00 à 19h00, l'orateur parle de la correction de la dérive inhérente au gyroscope en utilisant l'accéléromètre, ainsi que sur l'orientation de la gravité: http://www.youtube .com / watch? V = C7JQ7Rpwn2k Comment pourrais-je faire cela?

    Si vous avez une orientation, quelqu'un a déjà fait tout cela pour vous. Vous ne devez rien faire.

    Toutes les valeurs d'orientation sont également très bruyantes pour moi. Shakily hand, angles d'Euler, interférence magnétique, bug de fabrication, … Qui sait?

    J'ai fait un petit lissage exponentiel . C'est-à-dire, j'ai remplacé l' événement fluctuant par une valeur lissée, qui était commodément appelée alpha :

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

    En d'autres termes, chaque fois qu'une nouvelle observation est reçue, la valeur lissée est mise à jour avec une correction proportionnelle à l'erreur.

    • Si s = 0, le lissage est exactement la valeur observée et il n'y a pas de lissage.
    • Si s = 1, l'alpha reste constant, ce qui est en effet un lissage efficace.
    • Sinon, l'alpha est quelque part entre la valeur observée et la lissée. En fait, c'est une moyenne (pondérée) entre la dernière observation et l'histoire. Cela suit les changements de valeurs avec un certain effet d'amortissement.
    • Si s est petit, le processus est proche de la dernière observation et s'adapte rapidement aux changements récents (et aussi aux fluctuations aléatoires). L'amortissement est petit.
    • Si s est proche de 1, le processus est plus visqueux . Il réagit paresseusement aux fluctuations aléatoires (et aussi à la tendance centrale). L'amortissement est important.
    • N'essayez pas s en dehors de la plage 0..1, car cela conduit à une boucle de retour négative et l'alpha commence à diverger avec de plus grandes fluctuations.

    • J'ai utilisé s = 0,25, après avoir testé qu'il n'y avait pas de différence significative pour s entre 0,1 et 0,3.

    Important: lorsque vous utilisez cette méthode, n'oubliez pas d'initialiser l'alpha, en dehors de la fonction addEventListener:

    var alpha = guestimate (= here 0);

    Notez que ce lissage adaptatif simple fonctionne dans de nombreux autres cas, et c'est une programmation vraiment simple.

    Utilisez une matrice de cosinus directionnel ou un filtre kalman. Vous pouvez utiliser l'accéléromètre pour le tracer ou le gyroscope ou une combinaison des deux. La dérive peut être calculée avec un peu d'apprentissage par machine. Je pense que la fusion de mouvement fait partie du paquet d'étalonnage des instruments du Texas. Je peux me tromper. Mais il n'est pas difficile de vérifier. Multipliez 3 matrices de rotation, soyez grand … http://www.itu.dk/stud/speciale/segmentering/Matlab6p5/help/toolbox/aeroblks/euleranglestodirectioncosinematrix.html

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.