Calcul d'une vitesse en Km/h à partir d'une accélération en g :

Bonjour à tous,

J'utilise un accéléromètre ADXL345 avec une Arduino Nano pour mesurer l'accélération en g, jusque la tout fonctionne, du moins j'ai l'impression...

Mon but est alors, via un calcul simple de trouver la vitesse de mon système embarqué, pour cela, je fais cela:

J'ai une accélération en g que je transforme en m/s² :

Accel(m/s²) = accel(g) * 9.81;

or on sait que la vitesse au temps t2 est égale à :

Vt2(m/s) = Vt1 + Accel(m/s²) * (t2(s)-t1(s));

avec Vt2 la vitesse au temps t2 et Vt1 la vitesse au temps t1

J'obtiens alors une vitesse en m/s que je passe en Km/h

Vt2(Km/h) = Vt2(m/s) * (3600/1000);

Normalement je vois pas d'erreur possible cependant quand je le fais sur quelques secondes, je remarque que ma vitesse dépasse les 15 Km/h alors que je marche avec le système embarqué dans les mains !

voila un tableau avec les données enregistrées :

T(s) AccY(g) Accel(m/s²) V(m/s) V(Km/h)
0 0 0 0 0
1,291 0,031 0,303986 0,404134678 1,4548848408
1,575 0,079 0,774674 0,591615592 2,1298161312
1,831 0,145 1,42187 0,89607228 3,225860208
1,905 0,189 1,853334 1,033218996 3,7195883856
2,106 0,248 2,431888 1,503593204 5,4129355344
2,189 0,185 1,81411 1,654164334 5,9549916024
2,662 0,176 1,725856 2,099896064 7,5596258304
2,753 0,175 1,71605 2,256056614 8,1218038104
2,851 0,145 1,42187 2,395399874 8,6234395464
3,321 0,193 1,892558 2,891858042 10,4106889512
3,419 0,201 1,971006 3,08501663 11,106059868
3,608 0,022 0,215732 3,245962508 11,6854650288
3,703 0,066 0,647196 3,307446128 11,9068060608
4,081 0,126 1,235556 3,837509458 13,8150340488
4,176 0,064 0,627584 3,897129938 14,0296677768
4,271 0,002 0,019612 3,898993078 14,0363750808
4,362 0,046 0,451076 3,940040994 14,1841475784
4,554 0,223 2,186738 4,336830978 15,6125915208
4,649 0,115 1,12769 4,443961528 15,9982615008
4,744 0,159 1,559154 4,592081158 16,5314921688
4,846 -0,045 -0,44127 4,547071618 16,3694578248
5,028 0,128 1,255168 4,669254378 16,8093157608
5,123 0,219 2,147514 4,873268208 17,5437655488
5,217 0,057 0,558942 4,925808756 17,7329115216
5,312 -0,042 -0,411852 4,886682816 17,5920581376
5,403 -0,006 -0,058836 4,88132874 17,572783464

J’espère que vous avez bien compris mon problème...

SI vous avez des idées ou que vous voyez des erreurs, n'hésitez pas ....

Merci d'avance...

As tu remarqué que la vitesse que tu obtiens en m/s est continuement croissante ?
Est tu sûr de ton calcul ou de ton code (que tu caches) ?

Tracer simplement les résultats obtenus dans un tableur est fort utile.

vitesse.png
La courbe fait plus penser à une distance parcourue qu’à une vitesse.

Si tu marches à vitesse constante, et sans changer de direction, l'accélération (dans l'axe du mouvement) est nulle, le capteur n'indiquera pas ta vitesse de marche, quels que soient les calculs.

Seulement l'accélération de la pesanteur verticale vers le bas.

Ca ressemble ici plus à un souci de physique que de code arduino.

Oui j'ai bien remarqué c'est la le soucis ... Une vitesse continuellement croissante alors que je garde le même rythme de marche je trouve ça bizarre...

Pour moi c'est donc plus un problème de physique que de code ...

Cependant je ne savais pas ou poser cette question...

L'adxl345 me donne trois accélération selon x,y et Z. Je positionne donc le sens du vecteur Y dans le sens de la marche et le vecteur X pointe vers la droite ....

Je pensais donc utilisé l'accélération suivant l'axe Y pou retrouver la vitesse de mon système embarqué dans cette direction là .....

J'utilise en réalité un centrale inertielle 9 axes GY-521 qui me permet de récupérer des informations de cap, accélérations et rotations....

Vous avez d'autres idées pour trouver la vitesse sinon ?

Merci,

Quel est le cahier des charges, piéton, véhicule à roues... ?
En intérieur ou en milieu ouvert ?
Conditions initiales connues ? Trajectoire purement rectiligne, avec rotations ?
Plage de vitesse et précision voulue ?

Christian_R:
Quel est le cahier des charges, piéton, véhicule à roues... ?
En intérieur ou en milieu ouvert ?
Conditions initiales connues ? Trajectoire purement rectiligne, avec rotations ?
Plage de vitesse et précision voulue ?

Tu penserais pas à remplacer l'adxl par un gps?

Bonjour,

A vrai dire le but est de pouvoir suivre des coureurs ou sports de course en général lors de mouvement rectiligne ou avec rotations ponctuelles et d'analyser leur vitesse, le dénivelé etc....

J'arrive à obtenir des informations correctes au niveau de l'attitude du sportif (inclinaison, dévers, rotation...) cependant je cherche maintenant à avoir une idée de sa vitesse en fonction de accélération en g....

Ce capteur aura pour but de suivre les sportifs uniquement en extérieur alors vous direz pourquoi pas du gps.... j'ai travaillé pendant 2 ans sur des traceurs GPS, je connais tres bien leurs contraintes et leurs limites (précision limité à 3-5m d'un position si le système ne contient pas de liaison gsm).

Je recherche à avoir une précision sur la vitesse du coureur à 2-3km/h près sur une vitesse instantanée et 1km/h sur la vitesse moyenne...

Je reste à votre disposition pour plus de questions ...

le GPS avec filtrage du bruit permet ça.

Certe mais l'ajout d'un récepteur GPS va considérablement augmenter le cout de mon projet ainsi que son encombrement...

Voila pourquoi j'essaye de ne pas utiliser de recepteur GPS.

Pas d'idées pour mon calcul ?

(trouver la vitesse actuelle à partir de la vitesse initiale et de l'accélération en g)

Merci

L'enregistrement que tu présentes est très court. 4 secondes c'est le début de ta marche. Donc tu es en pleine accélération. D'ailleurs sur la fin de l'enregistrement on a l'impression que la courbe s'infléchit (l'accélération diminue). N'est-ce pas un simple problème de programmation d'échelle dans l'accéléromètre.

Salut,

Il y a un petit soucis, si ta vitesse est quasi constante ou ayant une faible variation de vitesse tu n'auras pas d'accélération , car celle-ci est :

Donc si Dv est petit ou inexistant pas de a, est tu sur que l’accéléromètre retourne bien un valeur en m/s2 et pas autre chose avec un facteur multiplicateur ?.
@+

Si on regarde ces deux lignes :

4,744 0,159 1,559154 4,592081158 16,5314921688
4,846 -0,045 -0,44127 4,547071618 16,3694578248

la variation d’accélération est de 2 m/s2, tu passes de 1.55 à -0.44 m/s2 en l'espace de 0.1 s, si tu fait le calcul :

a = (4.54 - 4.59 ) / (4.84-4.74) = -0.5 m/s2, ce qui ne correspond pas a ce qui ce passe ??.

Il doit y avoir un soucis quelque part.

Voila pour ce qui veulent un enregistrement complet sachant que celui-ci a démarré à l’arrêt et a fini à l’arrêt :

T(s) AccY(g) Accel(m/s²) V(m/s) V(Km/h)
0 0 0 0 0
1,192 0,032 0,313792 0,374040064 1,3465442304
1,291 0,031 0,303986 0,404134678 1,4548848408
1,386 0,052 0,509912 0,452576318 1,6292747448
1,48 0,071 0,696226 0,518021562 1,8648776232
1,575 0,079 0,774674 0,591615592 2,1298161312
1,667 0,079 0,774674 0,6628856 2,38638816
1,831 0,145 1,42187 0,89607228 3,225860208
1,905 0,189 1,853334 1,033218996 3,7195883856
1,999 0,228 2,235768 1,243381188 4,4761722768
2,106 0,248 2,431888 1,503593204 5,4129355344
2,189 0,185 1,81411 1,654164334 5,9549916024
2,28 0,185 1,81411 1,819248344 6,5492940384
2,378 -0,006 -0,058836 1,813482416 6,5285366976
2,472 0,052 0,509912 1,861414144 6,7010909184
2,568 0,081 0,794286 1,9376656 6,97559616
2,662 0,176 1,725856 2,099896064 7,5596258304
2,753 0,175 1,71605 2,256056614 8,1218038104
2,851 0,145 1,42187 2,395399874 8,6234395464
2,946 0,204 2,000424 2,585440154 9,3075845544
3,041 -0,074 -0,725644 2,516503974 9,0594143064
3,135 0,09 0,88254 2,599462734 9,3580658424
3,23 0,129 1,264974 2,719635264 9,7906869504
3,321 0,193 1,892558 2,891858042 10,4106889512
3,419 0,201 1,971006 3,08501663 11,106059868
3,514 0,151 1,480706 3,2256837 11,61246132
3,608 0,022 0,215732 3,245962508 11,6854650288
3,703 0,066 0,647196 3,307446128 11,9068060608
3,794 0,079 0,774674 3,377941462 12,1605892632
3,893 0,18 1,76508 3,552684382 12,7896637752
3,987 0,183 1,794498 3,721367194 13,3969218984
4,081 0,126 1,235556 3,837509458 13,8150340488
4,176 0,064 0,627584 3,897129938 14,0296677768
4,271 0,002 0,019612 3,898993078 14,0363750808
4,362 0,046 0,451076 3,940040994 14,1841475784
4,46 0,199 1,951394 4,131277606 14,8725993816
4,554 0,223 2,186738 4,336830978 15,6125915208
4,649 0,115 1,12769 4,443961528 15,9982615008
4,744 0,159 1,559154 4,592081158 16,5314921688
4,846 -0,045 -0,44127 4,547071618 16,3694578248
4,93 -0,001 -0,009806 4,546247914 16,3664924904
5,028 0,128 1,255168 4,669254378 16,8093157608
5,123 0,219 2,147514 4,873268208 17,5437655488
5,217 0,057 0,558942 4,925808756 17,7329115216
5,312 -0,042 -0,411852 4,886682816 17,5920581376
5,403 -0,006 -0,058836 4,88132874 17,572783464
5,501 0,04 0,39224 4,91976826 17,711165736
5,596 0,04 0,39224 4,95703106 17,845311816
5,69 0,181 1,774886 5,123870344 18,4459332384

21,165 0,106 1,039436 10,410559512 37,4780142432
21,259 -0,201 -1,971006 10,225284948 36,8110258128
21,354 -0,058 -0,568748 10,171253888 36,6165139968
21,456 0,039 0,382434 10,210262156 36,7569437616
21,543 0,079 0,774674 10,277658794 36,9995716584
21,638 0,033 0,323598 10,308400604 37,1102421744
21,732 0,152 1,490512 10,448508732 37,6146314352
21,827 -0,134 -1,314004 10,323678352 37,1652420672
21,921 -0,024 -0,235344 10,301556016 37,0856016576
22,012 0,02 0,19612 10,319402936 37,1498505696
22,111 0,064 0,627584 10,381533752 37,3735215072
22,206 0,08 0,78448 10,456059352 37,6418136672
22,3 0,086 0,843316 10,535331056 37,9271918016
22,394 -0,091 -0,892346 10,451450532 37,6252219152
22,486 -0,036 -0,353016 10,41897306 37,508303016
22,584 0,031 0,303986 10,448763688 37,6155492768
22,679 0,11 1,07866 10,551236388 37,9844509968
22,773 0,067 0,657002 10,612994576 38,2067804736
22,868 0,233 2,284798 10,830050386 38,9881813896
23,034 -0,033 -0,323598 10,776333118 38,7947992248
23,112 -0,025 -0,24515 10,757211418 38,7259611048
23,211 0,037 0,362822 10,793130796 38,8552708656
23,305 0,085 0,83351 10,871480736 39,1373306496
23,4 -0,018 -0,176508 10,854712476 39,0769649136
23,494 -0,231 -2,265186 10,641784992 38,3104259712
23,589 -0,022 -0,215732 10,621290452 38,2366456272
23,688 -0,006 -0,058836 10,615465688 38,2156764768
23,778 0,072 0,706032 10,679008568 38,4444308448
23,873 0,146 1,431676 10,815017788 38,9340640368
23,967 0,019 0,186314 10,832531304 38,9971126944
24,062 0,079 0,774674 10,906125334 39,2620512024
24,154 -0,217 -2,127902 10,71035835 38,55729006
24,251 -0,114 -1,117884 10,601923602 38,1669249672
24,346 0,001 0,009806 10,602855172 38,1702786192
24,44 0,078 0,764868 10,674752764 38,4291099504

On remarque que la vitesse augment de manière constante alors que sa valeur devrait diminué à l’arrêt voir même être nulle…

Je suis d’accord avec toi hameau, pour moi si le coureur garde le même rythme ou la même vitesse, l’accélération est censé être quasi-nulle. Enfin à l’arrêt accélération doit être nulle voir négative si l’on sort d’une phase d’accélération.

Pour ce qui est de mon accéléromètre, il me donne des mesures en g que je convertis en m/s² en multipliant simplement par 9.81 sachant que 1g=9,81m/s²…

Cependant quand je calcule ma vitesse, quand on sait que l’accélération est la dérivé de la vitesse, ne faut-t-il pas faire cela :

Vactuel(m/s) = Vinitial + Intégration(Accel(m/s²))Tactuel - Tinitial

Qu’en pensez-vous ?

(Je pense que la solution que je vous ai présenté précédemment qui correspond à simple équation aux dimensions est un peu trop simpliste…)

Si vous avez d’autres idées de formules ??

(petite précision pour essayer mes formules, je réalise mes essais sous libre office calc)

Ps: merci pour toute vos remarques constructives, ça m’aide beaucoup !

Tu travailles directement sur les valeurs RAW? Ces valeurs ont une forte tendance à dériver dans le temps et de manière assez rapide et en s’incrémentant, et justement ton log me fait penser à ça.

As tu pensé à appliquer un filtre style Kalman?

  1. Pas besoin de garder 10 chiffres (non significatifs) après la virgule.

  2. Le Tinitial est bien T0 à la première itération, mais ensuite c’est T1, puis T2

Attention aux bornes d’intégration :
à l’étape i, on utilise le petit écart temporel entre les deux derniers ( Ti - Ti-1) , soit environ 0.1 seconde à chaque fois, qui correspond à l’accélération à ce petit moment précis.

Et pas le temps total écoulé depuis le début (Ti - T0) .
Sinon ca va tendre vers l’infini !

Jambe, Oui je travaille directement sur les valeurs cracher par l’adxl345 à savoir l’accélération en g, je vois ce que tu veux dire cependant on peux dire que les accélérations vu leurs faibles valeurs et leur comportement (1 coup positif puis un peu après negatif) sont plausibles étant donnée que la mesure se fait en marchant ici.

Euh pour ce qui est du filtre kalman, je l’utilise effectivement pour calculer le roulis et le tangage cependant je ne vois pas son utilité au niveau des accélérations … mais je suis tout ouïe :slight_smile:

Christian_R , excuse moi pour toutes ces décimales j’aurai pu faire le tri…
Je suis bien d’accord avec toi et c’est bien le fonctionnement que je réalise cependant je n’ai pas encore testé la dernière équation que j’ai présenté au dessus où je pense ajouter l’intégrale de l’accélération sur le dernier intervalle de temps à la vitesse précédente pour trouver la valeur actuelle de la vitesse …

soit en math : Vactuel(m/s) = Vinitial + Intégration(Accel(m/s²))Tactuel - Tprec

Penses-tu que cela est plausible comme calcul ??

segondo, pour réaliser une intégrale sur excel j’utilise la méthode de simpson, vous avez d’autres idées pour faire une intégration numérique sinon ?

merci,

Le Vinitial est ici le Vprécédent, pas le V0

L’intégration se fait simplement sur chaque intervalle sans méthode de calcul particulière.

A l’étape i (et en déplacement sur un seul axe)

Vi+1 = Vi + (Ti+1 - Ti)*Ai

Attention, une intégration produira une dérive de précision au fil du temps par accumulation de petites erreurs de mesure.

Bonjour,

Je viens d’essayer mon nouveau calcul comportant une intégration numérique comportant le modèle de simpson à savoir celui-ci:

Intégrale(A)t2-t1= ((t2-t1)/6) . [A(t1)+2*(A(t2)-A(t1))+A(t2)]

Je transpose ensuite ça à mon idée de calcul soit :

V(t2)[m/s] = V(t1)[m/s] +( Accel(t1)[m/s²] + 2 * (Accel(t2)[m/s²] - Accel(t1)[m/s²]) + Accel(t2)[m/s²] )

Cependant je me retrouve le même problème que précédemment à savoir une vitesse qui augmente de manière croissante et qui me fait terminer à 15km/h en marchant …

Pour ceux qui veulent essayer directement sous libreoffice je vous donne ma feuille de calcul avec ce dernier calcul que je viens d’effectuer …

Si vous avez d’autres idées de calcul ou de méthodes n’hésitez pas …

Merci

voila la feuille de calcul :

la feuille :

Désolé, je n’ai pas pu vous la fournir autrement qu’en .txt…

calcul_vitesse_libreoffice.txt (7.84 KB)