0

Je fais un programme expérimental. J'ai un smartphone fixé sur le tableau de bord de la voiture avec un support, pendant le voyage je lis d'une application une valeur de capteur inertiel.Accélération au déplacement

J'ai lu précisément, Accéléromètre Data Time (à intervalle fixe) de chaque enregistrement en secondes.

Alors maintenant je voudrais passer de l'accélération verticale au déplacement vertical, pour ce faire je devrais faire une double intégration.

J'ai essayé la méthode d'Euler. De la condition initiale comme:

v0=0.v0=0 c'est la vitesse initiale au temps zéro.

x0=0.x0=0 c'est la position initiale au temps zéro.

définir,

deltaT=registrationinterval.deltaT=registrationinterval (dans mon cas 0,04s)

puis pour chaque inscription faite, je ferai:

vi=vi−1+ayi∗deltaT.vi=vi−1+ayi∗deltaT

xi=xi−1+vi∗deltaT.xi=xi−1+vi∗deltaT

i représente la current, et i-1 précédent.

Mais le graphique que je reçois n'est pas très réaliste, en fait la vitesse et le déplacement ne font qu'augmenter, l'effet que j'ai dû obtenir est que le déplacement vertical est similaire au graphique d'accélération. Étant donné que l'application de cette procédure, je ai aussi une erreur élevée, il est possible que le graphique ne fait que croître, et je ne vois aucune sorte d'oscillation verticale?

J'ai aussi lu le filtre de Kalman peut être appliqué à l'avance pour nettoyer le signal, pourrait être une solution?

Ou devrais-je changer la méthode d'intégration et passer à l'Euler de Runge Kutta? (Le dernier, cependant, je n'ai pas la moindre idée de la façon dont il pourrait être réglé).

Ou quelqu'un connais un algorithme qui peut m'aider?

Ici, il y a une example des données enregistrées peuvent être utiles si:

Répondre

0

deux Euler et Runge Kutta sont des intégrateurs numériques. L'un peut être plus précis que l'autre, selon les types d'équations que vous intégrez, mais les deux devraient donner le même résultat quantitatif. Si l'un vous donne une vitesse toujours croissante et l'autre pas, alors vous avez un bug. Je pense que c'est plus un problème de physique qu'un problème de programmation. D'après les données, il semble que les données de l'accéléromètre vertical incluent l'accélération due à la gravité, qui est d'environ 9,8 m/s^2 à la surface de la Terre. Bien sûr, votre voiture est soutenue par la route, donc elle n'accélère pas vraiment.Les équations que vous utilisez supposent qu'il n'y a pas d'autres forces en jeu, elles indiquent donc correctement que la vitesse et la position de la voiture augmenteraient constamment (comme si vous aviez laissé tomber la voiture d'un hélicoptère). Mais il y a d'autres forces en jeu (la route qui pousse sur les pneus), alors vous devez trouver un moyen de modéliser ces forces. Une chose que vous pourriez faire est de faire la moyenne des premières mesures en tant que ligne de base (qui devrait être proche de 9.8 m/s^2), et soustraire cette valeur des lectures suivantes. Lorsque la voiture monte et descend dans les collines, les valeurs des capteurs varient en fonction de la ligne de base, et ces différences sont ce qui vous intéresse.

C'est une bonne première approximation. Mais quand vous montez ou descendez une colline, le téléphone n'est plus de niveau par rapport au champ gravitationnel, donc une partie de la force gravitationnelle sera reflétée dans le capteur horizontal. Pour des résultats précis, vous devrez en tenir compte.