2010-04-23 3 views
2

J'essaie de mapper mes mouvements avec un appareil Android dans une scène OpenGL. J'ai enregistré des valeurs d'accéléromètre pour un mouvement simple: Déplacer le téléphone (à plat sur une table) de 10 cm vers l'avant (+ x), puis de 10 cm vers l'arrière (-x).Accéléromètre Valeurs à partir de l'appareil Android/iPhone

Le problème est que ces valeurs, utilisées pour calculer la vitesse et la position, ne font que déplacer le cube opengl. On dirait que l'accélération négative enregistrée n'était pas suffisante pour réduire la vitesse et inverser son mouvement.

Quel peut être le problème?

C'est ma fonction qui met à jour la vitesse et la position à chaque fois que de nouvelles données est disponible en:

void updatePosition(double T2) { 
    double T = 0.005; 
    Vec3 old_pos = position.clone(), old_vel = velocity.clone(); 

    velocity = old_vel.plus(acceleration.times(T)); 
    position = old_pos.plus(old_vel.times(T).plus(acceleration.times(0.5 * Math.pow(T, 2)))); 

} 

Ceci est X, Y, les valeurs de l'accéléromètre Z sur l'ensemble du temps capturé:

alt text http://img25.imageshack.us/img25/7528/forces.jpg

Répondre

1

Votre fonction prend le paramètre T2 que je suppose être l'entrée de l'accélérateur? mais vous utilisez T que vous avez déclaré comme double T = 0,005; Ainsi, votre fonction évoluera toujours à un rythme statique.

+0

T2 est la durée du mouvement (temps entre différents échantillons de l'accéléromètre). À des fins de test j'utilise une constante, mais même en utilisant les valeurs réelles, produit les mêmes résultats. – fabiopedrosa

+0

Pensez plus de votre code est nécessaire pour comprendre le problème. Avez-vous vérifié votre quadrature de la valeur et perdu le signe? – stealthcopter

Questions connexes