android enlever la gravité des lectures d'accéléromètre
Je développe une application pour Android, où j'ai besoin de retirer de la gravité de l'accéléromètre lectures. J'ai lu plusieurs discussions sur ce problème, j'ai aussi trouvé un algorithme icimais je n'ai pas vraiment le comprendre.
Je veux filtre de gravité de chaque axe, pas de l'accélération totale.
Pourriez-vous svp m'aider? Mon code doit être quelque chose comme:
public void onSensorChanged(SensorEvent sensorEvent) {
float vals[] = sensorEvent.values;
float accelerationX = filterGravity(vals[0]);
float accelerationY = filterGravity(vals[1]);
float accelerationZ = filterGravity(vals[2]);
}
Quel code dois-je placer dans le filterGravity() la méthode?
source d'informationauteur Gabriel
Vous devez vous connecter pour publier un commentaire.
Pour une solution de base que vous avez besoin d'une filtre passe-bas d'autres approches, comme un filtre de Kalman sont assez dures concernant les mathématiques derrière. Un exemple simple pour Android est en un seul clic à partir de votre lien à http://developer.android.com/reference/android/hardware/SensorEvent.html#values.
Simplement parlé d'un filtre passe-bas construit une moyenne pondérée à partir de l'historique des valeurs. Si vous avez par exemple un filtrage du facteur de 0,1 cela signifie que 10% de votre valeur est ajoutée à la précédente valeur moyenne: newMeanValue = 10% de currentValue + de 90% de oldMeanValue. Cela signifie que même si il y a un brusque pic il ne fera que pousser votre valeur moyenne lentement à cause de la 10%.
Accélération linéaire est ce que vous avez besoin. Contrôlez Le Capteur.TYPE_LINEAR_ACCELERATION ici.
Si vous ne disposez pas d'un téléphone avec TYPE_LINEAR_ACCELERATION, vous êtes coincé avec TYPE_ACCELERATION, qui ne peut pas séparer la gravité (inclinaison) de l'accélération linéaire.
Une option est d'appliquer un filtre passe-bas. Une autre approche est l'utilisation de la fusion des capteurs si le gyroscope est disponible. Les deux approches ont leurs avantages et leurs inconvénients.
J'ai des tas d'exemples dans le projet open source L'Accélération De L'Explorateur.
Pas trop sûr de ce que vous essayez de le mettre à jour mais si vous cherchez le ampleur (ce qui donne un résultat entre 0 et 1) puis tout ce que vous faire est de diviser le résultat par 10
}
Dans un environnement de jeu lorsque le capteur est sur full tilt votre objet sera à son maximum de vitesse