Comment faire pour supprimer le facteur de gravité des lectures Accéléromètre dans Android accéléromètre 3 axes
Peut aider quelqu'sur la suppression du facteur g de l'accéléromètre lectures?
Je suis en utilisant SensorEventListener avec onSensorChanged()
méthode pour obtenir du Capteur.TYPE_ACCELEROMETER de données. J'ai besoin de pures valeurs de l'accélération dans toutes les directions. En tout état si l'appareil est stable (ou à vitesse constante), elle devrait donner (0.0,0.0,0.0) environ.
Actuellement, selon son tangage et de roulis, il me donne de la variable de sortie en fonction de la g des forces agissant sur chaque axe.
J'espère qu'il y est une formule à enlever, comme je l'ai également obtenir des valeurs d'orientation (tangage et roulis) du Capteur.TYPE_ORIENTATION auditeur. J'ai utilisé certains, mais il ne fonctionne pas.
source d'informationauteur Pritam
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un filtre passe-bas.
Le faire pour chacun de vos valeurs de capteur:
Où
v
est votre capteur de courant de valeur etg
une variable globale est initialement réglé à zéro. L'esprit que vous aurez besoin d'autant de variables que vous avez axes.Avec
v = v - g
vous pouvez éliminer le facteur de gravité de votre capteur de valeur.Consultez le lien suivant.
http://developer.android.com/reference/android/hardware/SensorEvent.html
Utilisation Du Capteur.TYPE_LINEAR_ACCELERATION au lieu de Capteur.TYPE_ACCELEROMETER
De différenciation par rapport au temps d'une fonction de temps vous débarrasse des constantes.
Donc, en prenant la dérivée de l'accéléromètre du signal que vous obtiendrez le "Jerk", que vous pouvez ensuite ré-intégrer afin d'obtenir le non-partie constante de l'accélération que vous cherchez.
En d'autres termes, prendre un échantillon de l'accéléromètre toutes les 1 seconde, et le soustraire de l'exemple précédent. Si la réponse est (très proche de zéro, vous n'êtes pas l'accélération relativement à la terre. Si le résultat est non nul, l'intégrer (dans ce cas, multipliez par seconde), vous avez votre accélération.
Deux choses :
-Cherchez-le bruit dans le signal, terminez votre saisie.
-Ne vous attendez pas hyper-des résultats précis de sur-puce d'accéléromètres. Vous pouvez les utiliser pour détecter des tremblements, des changements dans l'orientation, mais pas vraiment pour savoir combien de G vous êtes en train de vivre tout en faisant des virages dans votre voiture.
Une façon (pour les périphériques seulement avec accéléromètre) est de supprimer vecteur gravité de l'accéléromètre de données en soustrayant les valeurs qui viennent dans le cas statique pour la même orientation. Mais que l'orientation est à nouveau calculée en tenant compte de l'accélération des lectures et pas de façon indépendante, ce n'est pas très précis.
Gyroscope peut aider dans ce cas. Mais quelques androïdes ont encore un véritable gyroscope. Et à l'aide de ses premières lectures n'est pas si simple.
Juste soustraire g (~9,8 m/s^2) fois la direction z de la matrice de rotation.
Ou, pour être plus explicite à ce sujet, permettez -
Alors ce que vous voulez est
vous avez besoin pour assumer les deux systèmes de coordonnées:
1 - correction d'un système global.
2 - le déplacement du système de coordonnées dont l'origine se déplace & tourne comme capteur.
dans le système mondial, g est toujours parallèle à l'axe z, mais le système en mouvement, il ne l'est pas.
donc tout ce que vous avez à faire est de calculer 3*3 matrice de rotation à partir d'angles d'orientation ou
yaw, pitch & roll. (vous pouvez trouver des formules un peu partout).
ensuite multiplier cette matrice de rotation par 3*1 vecteur accélération mesurée par le capteur.
cela va transformer les coordonnées et déclarer les valeurs fixes du système mondial.
la seule chose qui par la suite est tout simplement de soustraire g de z valeur.