Je suis arrivé à la conclusion qu'il est impossible de déterminer la vitesse donnée par l'accéléromètre dans un appareil Android. En supposant que ma vitesse initiale à zéro le schéma d'intégration utilisé pour obtenir la vitesse seraitVitesse de l'accéléromètre
v_ib_b = old_v_ib_b + f_ib_b * dt ,
où v_ib_b est la vitesse dans le cadre du corps d'inertie résolu le long des axes du corps et f_ib_b est la force mesurée par l'accéléromètre.
Si je veux calculer la vitesse du smartphone dans le cadre de navigation locale ENU la formule suivante peut être utilisée (équation Bortz simplifiée en négligeant coriolis/godille et la vitesse de transport):
v_eb_n = old_v_eb_n + (C_b_n * (f_ib_b + 0.5 * cross(omega_ib_b, f_ib_b)) - g) * dt
où C_b_n est la matrice de rotation corps à ENU.
J'ai essayé d'utiliser le Sensor.TYPE_ROTATION_VECTOR
, MadgwickAHRS et ma propre fusion de capteurs pour obtenir l'orientation et donc la matrice de rotation dans la trame ENU, respectivement. Peu importe que l'on a utilisé c'est un ouput d'intégrer la vitesse en quelques minutes alors qu'il circulait avec un vélo (téléphone intelligent a été monté sur le ciel en direction du guidon):
et ce sont les données brutes intégrées:
Je suppose que l'accéléromètre est médiocre, bruyant et annule toutes les mesures dans le temps, ce qui ne permet pas d'obtenir la vitesse. Des idées?
Si vous parlez de fusion de capteurs, je l'ai déjà fait pour obtenir l'orientation. – optional