Aller au contenu


Photo
- - - - -

Gestion des axes d'un Gyroscope


5 réponses à ce sujet

#1 Kiblue

Kiblue

    Nouveau membre

  • Membres
  • 4 messages

Posté 01 juin 2013 - 05:40

Bonjour à tous !

Je réalise un petit robot bipède.
Afin de pouvoir gérer son équilibre, j'ai acheté un MPU6050. C'est un capteur qui possède un accéléromètre 3 axes et un gyroscope 3 axes d'une résolutions de 16bits.
J'aurais voulu savoir comment utiliser les axes, x,y et z de mon gyroscope afin d'avoir la position du robot dans l'espace?
Y a t il des formules générales pour les gyroscopes ?

Merci pour vos réponses :)/>

#2 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 02 juin 2013 - 08:25

Bonjour à tous !

Je réalise un petit robot bipède.
Afin de pouvoir gérer son équilibre, j'ai acheté un MPU6050. C'est un capteur qui possède un accéléromètre 3 axes et un gyroscope 3 axes d'une résolutions de 16bits.
J'aurais voulu savoir comment utiliser les axes, x,y et z de mon gyroscope afin d'avoir la position du robot dans l'espace?
Y a t il des formules générales pour les gyroscopes ?

Merci pour vos réponses Image IPB/>


Salut,

Un gyroscope te fourni une vitesse angulaire, c'est à dire le nombre de degré que ton robot à parcouru en une seconde.
Pour obtenir l'orientation du robot, il faut intégrer les valeurs que tu reçois du gyro.

angle = intégrale{vitesse_angulaire.dt} = somme{vitesse_angulaire / fréquence_échantillonnage}

Tu dois donc récupérer la vitesse_angulaire du gyro à une fréquence précise (tous les 20ms par exemple, ça te fait une fréquence d'échantillonnage à 50Hz)
Tu divises cette vitesse_angulaire par 50Hz.
Tu sommes toutes ces vitesses_angulaire pour avoir un angle.

Si tu veux obtenir une position, il faut faire la même chose avec l'accéléromètre, deux fois.

++
Black Templar

Mon site internet : http://ferdinandpiette.com/


#3 Kiblue

Kiblue

    Nouveau membre

  • Membres
  • 4 messages

Posté 02 juin 2013 - 01:41

Salut,

Un gyroscope te fourni une vitesse angulaire, c'est à dire le nombre de degré que ton robot à parcouru en une seconde.
Pour obtenir l'orientation du robot, il faut intégrer les valeurs que tu reçois du gyro.

angle = intégrale{vitesse_angulaire.dt} = somme{vitesse_angulaire / fréquence_échantillonnage}

Tu dois donc récupérer la vitesse_angulaire du gyro à une fréquence précise (tous les 20ms par exemple, ça te fait une fréquence d'échantillonnage à 50Hz)
Tu divises cette vitesse_angulaire par 50Hz.
Tu sommes toutes ces vitesses_angulaire pour avoir un angle.

Si tu veux obtenir une position, il faut faire la même chose avec l'accéléromètre, deux fois.

++
Black Templar


Bonjour Black Templar,

Merci pour ta réponse.

Si je te suis bien, j'ai une fréquence d'échantillonnage de 500hz. Les données de mon gyroscope sont donc mise à jours toutes les 2ms.
Lorsque tu dis "Tu sommes toutes ces vitesses_angulaire pour avoir un angle" je dois faire la somme des valeurs données par mon capteur pendant 1 secondes ? donc faire la somme de 500 valeurs de vitesse_angulaire ?

Puis tu dis "Si tu veux obtenir une position, il faut faire la même chose avec l'accéléromètre, deux fois " c'est a dire ?

Encore merci !

#4 ChristianR

ChristianR

    Habitué

  • Membres
  • PipPip
  • 474 messages
  • Gender:Male
  • Location:Isère (38)
  • Interests:Arduino, programmation, électronique...

Posté 02 juin 2013 - 07:44

L'accéléromètre fournit une accélération sur 3 axes.
La première intégration fournit une vitesse.
La seconde intégration fournit une position.

Ca, c'est la théorie. En pratique, on cumule vite les erreurs de dérive.
Christian

#5 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 02 juin 2013 - 11:23

Si je te suis bien, j'ai une fréquence d'échantillonnage de 500hz. Les données de mon gyroscope sont donc mise à jours toutes les 2ms.
Lorsque tu dis "Tu sommes toutes ces vitesses_angulaire pour avoir un angle" je dois faire la somme des valeurs données par mon capteur pendant 1 secondes ? donc faire la somme de 500 valeurs de vitesse_angulaire ?

500Hz, c'est beaucoup.
50Hz, c'est souvent très suffisant.

Angle = 0
Angle = Angle + échantillonGyro1 / 50Hz
Angle = Angle + échantillonGyro2 / 50Hz
Angle = Angle + échantillonGyro3 / 50Hz
Angle = Angle + échantillonGyro4 / 50Hz
Angle = Angle + échantillonGyro5 / 50Hz
...
Angle = Angle + échantillonGyroN / 50Hz

Puis tu dis "Si tu veux obtenir une position, il faut faire la même chose avec l'accéléromètre, deux fois " c'est a dire ?


vitesse = 0
position = 0

vitesse = vitesse + échantillonAcc1 / 50Hz
position = position + vitesse/50Hz

vitesse = vitesse + échantillonAcc2 / 50Hz
position = position + vitesse/50Hz

...

vitesse = vitesse + échantillonAccN / 50Hz
position = position + vitesse/50Hz


Mais comme l'a dit ChristianR, ça dérive rapidement. Au bout d'un certain temps, l'erreur est trop importante.
Néanmoins, essaye déjà de faire comme ça. Ensuite seulement, on pourra réfléchir à des solutions.

Mon site internet : http://ferdinandpiette.com/


#6 Kiblue

Kiblue

    Nouveau membre

  • Membres
  • 4 messages

Posté 03 juin 2013 - 08:50

Merci pour cette mise au point :)
Je test et je vous transmet mes résultats au plus vite.



Répondre à ce sujet



  


1 utilisateur(s) li(sen)t ce sujet

0 members, 1 guests, 0 anonymous users