2010-11-27 5 views
4

Je suis à l'écoute des valeurs de capteur, et les obtenir OK dans mon gestionnaire avecobtenir les informations des capteurs magnétiques

if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { 
     for (i=0;i<3; i++) mag[i] = event.values[i]; 

Le développeur docs pour dire Sensor.TYPE_MAGNETIC_FIELD vous obtenez: « Toutes les valeurs sont en micro- Tesla (uT) et mesurer le champ magnétique ambiant dans les axes X, Y et Z. " Comment puis-je transformer cette information en azimut, tangage et roulis? Comment puis-je le transformer en cap magnétique?

Est-ce que vous fournissez simplement les mêmes informations que vous pouvez obtenir du capteur ORIENTATION et du capteur ACCELEROMETER une fois que vous avez effectué la transformation de la matrice?

Répondre

3

Si vous avez accès à l'accéléromètre, vous pouvez utiliser la méthode getOrientation() , qui retourne l'azimut, tangage et roulis déterminé à partir des deux capteurs, et calculée par la méthode getRotationMatrix().

Permet de modifier

Réponse aux commentaires ... Je vois votre question maintenant. Pardon. Avec seulement le magnétomètre à 3 axes, vous ne pouvez pas obtenir d'azimut, de tangage et de roulis avec précision, sauf si l'appareil est parallèle à la surface de la terre. Rappelez-vous d'utiliser une boussole à aiguille et de l'avoir a) sur une broche pour que vous puissiez voir et corriger manuellement l'inclinaison, ou b) scellée dans un liquide afin que vous puissiez obtenir le niveau de la bulle au centre? Pour obtenir l'azimut:

azimuth = arctan(y/x) 

Maintenant, si vous inclinez le téléphone, les erreurs dans la détection de plan x/y peut obtenir grand. Maintenant, vous devez comprendre l'inclinaison (avec l'accéléromètre), puis mesurer la force magnétique de l'axe Z, puis utiliser les trois pour compenser. C'est essentiellement ce que vous connaissez comme getRotationMatrix() et getOrientation().

Une partie de la raison pour laquelle je pense que Sensor.TYPE_ORIENTATION a été dépréciée dans l'API 8 était parce qu'il n'y a pas un capteur d'orientation séparée en soi. C'est une combinaison de champ magnétique et de détection d'accélération.

Un bon papier que je dégoté qui couvre tout:

http://www.ssec.honeywell.com/position-sensors/datasheets/sae.pdf

+0

Entendue. Ma question est plus proche de "comment faites-vous quelque chose d'utile avec des valeurs pour le champ magnétique ambiant dans les axes X, Y et Z?" –

+0

Vous n'avez pas !! Au lieu de réinventer la roue, utilisez simplement le capteur d'orientation et la matrice de rotation. – TheCodeArtist

Questions connexes