Programmation d'un gyroscope

Pour expliquer certains fonctionnements, principes et fondements.
Simon Marti
Level 1
Level 1
 
Messages: 3

Messagepar Simon Marti » Sam Fév 11, 2012 10:22 pm

Bonsoir,
Je suis nouveau sur ce forum, je m'appelle Simon Marti j'ai 17 ans et suis actuellement en terminale S-SI dans laquelle, pour mon PPE nous avons à notre disposition la mallette 8547 complète + un capteur de notre choix (en l’occurrence le gyroscope) pour monter une piste avec différents obstacles comme un ralentisseur, un quadrillage, plusieurs pentes, des plots et une plaque de verre, la piste étant ouverte il faut faire aussi attention au vide. Pour la programmation nous utilisons le logiciel fourni avec la mallette (LEGO MINDSTORMS NXT 2.0) et n'avons aucune connaissance en C ou C++

Notre idée était la suivante : utiliser le gyroscope pour déterminer précisément l'angle parcouru durant la rotation pour réaliser précisément des virages à 90° et repérer précisément notre position par rapport à notre placement de départ en retournant via le gyroscope l'angle parcouru.

Or, erreur stratégique, nous n'avons pas cherché au préalable comment utiliser ce gyroscope ce qui nous pose des problèmes depuis 2 semaines maintenant.
Sur le forum nous avons déjà cherché si notre problème avait déjà été traité et nous avons déjà trouvé un post qui nous a peu éclairé puisque l'on y traite principalement en NXTC chose dans laquelle nous n'avons aucune compétence.
Une partie qui nous semble intéressante semble être celle-ci mais nous n'arrivons pas à réaliser cette méthode et à la traduire en blocs LEGO :


Après tout le capteur te donne une vitesse et une direction et tu envoie au moteur une vitesse et une direction donc c'est du même genre.
Pour simplifier il faut trouver un coefficient multiplicateur entre la valeur lue et la valeur à envoyer au moteur, tout ça dans une boucle rapide et sans te préoccuper de l'angle. Dans la pratique il faudra certainement ajouter une constante au final donc :
vitesse moteur = constante + coefficient x vitesse angulaire.
Il faut aussi certainement corriger en prenant en compte la vitesse du moteur (sinon cela oscille), cette vitesse doit être la même que la vitesse mesuré si le coef est bon :
vitesse moteur = constante + coefficient x (vitesse angulaire - vitesse angulaire précédente).
Tu peux aussi filmer tes expériences pour les regarder ensuite, à tête reposée.
dans un programme NXC:
old_v=0;
while (1)
{
v_ang= -lecture vitesse angulaire-;
v_mot=const + coef * ( v_ang - old_v );
old_v=v_ang;
moteur(v_ang);
}



Quant au gyroscope nous avons une chose qui fonctionne : le réglage du 0 deg/sec ou offset si nous ne nous trompons pas.
Nous avons lu la doc sur le site du constructeur hightechnic qui ne nous a point beaucoup aidé:
http://www.hitechnic.com/cgi-bin/commer ... ey=NGY1044
Sur d'autres forums français l'utilisation du gyroscope traite principalement du système segway et pour le reste c'est en anglais, et déjà que notre anglais n'est pas parfait en plus avec du vocabulaire technique c'est encore plus difficile de comprendre quelque chose.
Nous avons déjà testé plusieurs choses qui, bien sûr, ne fonctionnent pas dont nous pouvons vous faire des screens si cela peut vous aider à nous aider.

Voilà nous espérons nous être correctement et dans le détail expliqué.
Toute aide est la bienvenue, merci d'avance pour tous ceux qui y contribueront, bonne soirée à tous.

parsodark
Level 3
Level 3
 
Messages: 22
Localisation: Rimouski, Québec, Canada
Âge: 28 ans

Messagepar parsodark » Dim Fév 12, 2012 2:36 am

Je vois mal en quoi un gyroscope peut vous aider à faire des virages de 90° degrés exactement (à moins que j'ai mal compris ce que vous voulez faire)
Le gyroscope indique où est le sol par rapport au capteur. Ce qu'il vous faudrait, je crois, c'est un capteur magnétique.

http://www.hitechnic.com/cgi-bin/commer ... ey=NMC1034

Il renvoie une valeur entre 0 et 359° par rapport au nord. Je pense que ce serait plus efficace dans votre cas. Mais je ne sais pas s'il fonctionne bien, s'il gère bien les interférences, car je n'ai jamais travaillé avec.

J'espère que ça pourra vous aider !

efjie2002
Level 10
Level 10
 
Messages: 1752
Localisation: Bar Sur Seine, Aube, champagne-Ardennes
Âge: 49 ans
collectionneur

Messagepar efjie2002 » Dim Fév 12, 2012 10:07 am

+1 pour, il me semble, une utilisation erronée du gyroscope. En faisant simple: par x calculs, il permet de trouver un angle par rapport à une référence...verticale (axe Oz si tu es en term : tu comprends ;) ). Or ce que tu cherches est un repérage en "OxOy": capteur inadapté : une boussole est plus conseillée même si les servomoteurs peuvent peut être faire l'affaire seuls.

Si un des éléments du cahier des charges de ton pfe est l'utilisation du gyro, il faut je pense trouver une autre idée d'application...

Simon Marti
Level 1
Level 1
 
Messages: 3

Messagepar Simon Marti » Dim Fév 12, 2012 1:24 pm

Pour ce qui est de la boussole, dans notre cahier des charges nous avions le droit d'échanger un des 4 capteurs de la mallette originelle contre un de notre choix, et notre choix s'est porté sur le gyroscope. Il n'y a pas possibilité de revenir en arrière et si nous n'utilisons pas notre gyroscope nous avons un malus pour la note finale.

Si je comprend bien le gyroscope peut nous donner un indication quant à la pente (Oz) qu'a monté le robot selon un référentiel donné au préalable? Ceci me fait plus penser à un accéléromètre.
Nous avons tester un petit peu notre gyroscope et lors de rotation sur lui même selon OxOy il nous indiquait la vitesse de rotation (°/s), de gauche à droite, une vitesse positive et de droite à gauche une vitesse négative.
En réfléchissant j'ai imaginé ceci : On détermine une vitesse de nos moteurs où le gyroscope nous donne un vitesse utile (ex: 45°/s) puis on demande à notre robot d’effectuer la rotation selon une durée qui, multipliée à notre vitesse de rotation nous offre l'angle désiré (ici avec notre exemple de 45°/s je demanderais à mon robot de tourner pendant 2 secondes ce qui nous donne 45x2= 90°)

(D'autres camarades ont opté pour la boussole et il est vrai que son utilisation serait parfaite avec notre cas :fire: )

Voilà, si vous trouvez des compléments qui pourraient nous être utiles ce serait vachement sympa (on testera tout ce que vous nous aurez apporté lundi, interdiction de sortir le robot de l'enceinte du lycée)

phi
Level 6
Level 6
 
Messages: 245
Localisation: Lyon

Messagepar phi » Dim Fév 12, 2012 2:13 pm

Le principe du gyroscope (ou du moins du gyroscope électronique) est d'indiquer l'accélération ou la vitesse angulaire.

Il faut d'abord connaître s'il indique l'un ou l'autre.
Le savez vous?
Quand vous avez testé votre gyroscope, l'avez-vous testé à vitesse constante?



Votre objectif est de connaître votre "position" angulaire si je comprends. En supposant que le gyroscope vous indique une vitesse angulaire, il "suffit" d'intégrer la vitesse.
Je ne sais plus du tout quel est le programme de maths de Terminal, donc je vais partir du principe que vous ne connaissez pas l'intégration.

Idée:
Vous choisissez une petite durée, normalement la période entre deux acquisitions de capteur (il faut faire des expériences je crois, je ne me rappelle plus s'il y a un chronomètre précis sur le NxT). On l'appellera dt.

Si la vitesse angulaire est désignée par omega, et la position par théta

Alors theta(t) = theta(t-dt) + omega*dt.

Je reformule. La nouvelle position angulaire s'obtient à partir de l'ancienne position angulaire à laquelle on ajoute la vitesse fois le temps écoulé.

Une fois que vous avez mis cette boucle en place, vous connaitrez ainsi votre position angulaire à tout instant.
Veuillez regarder ailleurs

Avatar de l’utilisateur
furynick
Level 6
Level 6
 
Messages: 440
Localisation: Toulouse
Âge: 47 ans

Messagepar furynick » Dim Fév 12, 2012 9:12 pm

Perso quand j'entends parler de gyroscope je pense à l'horizon artificiel ou le moyen de savoir si on est penché ou horizontal.

Autre utilité du gyroscope est de savoir quand on est en train de tourner (en modélisme hélico les gyro gèrent automatiquement l'anticouple).

Après un petit tour sur Wikipédia il s'avère qu'un gyro peut être utilisé pour déterminer un angle (si vous savez à quelle vitesse vous tournez et pendant combien de temps vous savez quel angle vous avez parcouru).

Théoriquement je dirais que votre projet est faisable mais sans avoir pris la peine de vous documenter avant c'est mal barré car il est possible que le gyro ne donne pas suffisamment d'info pour déterminer l'angle parcouru.

Ensuite, je crois savoir que le NXT ne sait pas faire de calcul en virgule flottante et ne sais pas si les fonctions mathématiques sont implémentées, roboleo repondrait surement bien mieux à cette question (par encore lu tous ses tutos :grad: )

Avatar de l’utilisateur
Plastik
Level 6
Level 6
 
Messages: 330
Âge: 41 ans

Messagepar Plastik » Dim Fév 12, 2012 10:38 pm

De mon coté, je ne suis pas du tout d'accord avec (presque) tout ce qui à été dit au dessus.

Tout d'abord la définition de wikipédia :

Wikipédia a écrit: Dans les capteurs : un gyroscope est un capteur de position angulaire et un gyromètre un capteur de vitesse angulaire. Le gyroscope donne la position angulaire (selon un, deux ou les trois axes) de son référentiel par rapport à un référentiel inertiel (ou galiléen).


Un gyroscope ne mesure absolument pas la gravité !

Cependant, il est vrai qu'on le retrouve dans la confection des segway car il permet de connaitre l'orientation du véhicule par rapport à une certaine position de référence qui dans le cas présent se trouve être la position où le véhicule est vertical...

Donc pour en revenir à nos vos moutons, je pense que ce type de capteur peut tout à fait vous donner l'orientation de votre véhicule à un instant donné et ainsi savoir si vous avez tourné de 90° ou non...

donc positionner votre véhicule avec une méthode du style : J'ai fait tant de tours de roues dans telle direction, puis tant de tours dans cette autre direction, etc... ça doit marcher!
Il suffit juste de placer le gyro de telle sorte qu'il mesure la rotation autour d'un axe vertical (c'est à dire avoir le capteur à plat si l'on se réfère à la doc technique...
Après je ne connais ni la précision du capteur en question, ni celle que vous recherchez pour positionner votre robot..

N'ayant pas de NXT je ne pourrais pas non plus vous aider plus que ça, mais je reste convaincu que le capteur peut faire l'affaire...

Avatar de l’utilisateur
Alban42800
Level 11
Level 11
 
Messages: 2473
Localisation: Loire (42)
Âge: 51 ans
expertgbbexpertnxtvainqueurconcours

Messagepar Alban42800 » Lun Fév 13, 2012 12:16 am

Le capteur d'angle/accéléromètre permet de donner l'angle par rapport à l'horizontal, cela correspond aussi à une accélération (l'eau dans un verre indique l'horizontale mais si on glisse le verre alors l'eau indique l'accélération).

Le gyroscope permet de connaitre la vitesse à laquelle le robot tourne sur lui même, le capteur d'angle/accéléromètre en est incapable.

Votre programme devra faire une boucle dans laquelle vous mesurez la valeur du gyro (G) et le temps (T). En comparant ces valeurs avec les valeurs lues dans l'itération précédente dans la même boucle (AncienT et AncienG) vous pourrez déduire de combien de degrés le robot a tourné.

Mais sincèrement il vaut mieux utiliser les valeurs des capteurs de rotation qui sont dans les moteurs de vos roues motrice. Si vous réduisez un peu la vitesse des roues pour que le robot ne patine pas vous aurez une bonne précision et la mise au point sera plus facile. J'ai déjà réussi plusieurs robots avec cette méthode, cela peut même être très précis : http://blogotechnic.blogspot.com/2009/09/moc-robot-nettoyeur-de-table-v2.html

parsodark
Level 3
Level 3
 
Messages: 22
Localisation: Rimouski, Québec, Canada
Âge: 28 ans

Messagepar parsodark » Lun Fév 13, 2012 3:02 am

Grâce à l'expérience, je sais que faire des virages de 90° exactement est très difficile. Le glissement peut être différent selon les différentes surfaces. Alors là, selon la nature de la surface, et selon qu'elle est propre ou non, on peut faire des virages 90° plus ou moins 5-10°. Faire tourner les moteurs de x degrés fera faire un quart de tour parfait sur une surface, mais pas sur une autre.

Une solution possible, c'est de mettre une constante "virage" au début du programme, à une valeur de 1. À chaque fois que vous devez faire tourner le robot sur lui-même, vous prenez un nombre de degrés fixe multiplié par la constante. C'est le nombre de degrés que devront faire les moteurs. Lorsque vous arrivez au test final, testez vos virages avant. Si le robot ne tourne pas assez, augmentez la constante à 1,1. Comme ça, le robot tournera plus. Et pareil s'il tourne trop.

J'espère que ce n'est pas trop confus.

Par contre, avec cette solution, vous n'utilisez pas du tout le gyroscope. Je ne sais pas si ça vous fait perdre des points.

Avatar de l’utilisateur
roboleo
Level 8
Level 8
 
Messages: 955
Localisation: Hauts de Seine
expertnxt

Messagepar roboleo » Lun Fév 13, 2012 3:20 pm

furynick a écrit:
Ensuite, je crois savoir que le NXT ne sait pas faire de calcul en virgule flottante et ne sais pas si les fonctions mathématiques sont implémentées, roboleo repondrait surement bien mieux à cette question (par encore lu tous ses tutos :grad: )


Dans la version 2.0 du NXT-G, le calcul en virgule flottante est prévu. Pour s'en assurer il suffit d'ouvrir un programme. Si le bloc MATH par exemple, ressemble à ceci,
Image
alors on a la certitude que le bloc ne manipule que des entiers.
Si le point d'exclamation dans le cercle n'apparaît pas, on est alors dans le cas de la virgule flottante.
Enfin, à l'intérieur d'un programme il est possible de remplacer un bloc de calcul en valeur entière par un bloc à virgule flottante. Dans ce cas, prendre soin de dérouler les plots de données, et de rétablir si nécessaire, les fils de données d'une manière identique.

Tous les blocs de Fonctions Mathématiques et autres de la version 2.0, faisant appel aux calculs acceptent la virgule flottante. ;)
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso

Simon Marti
Level 1
Level 1
 
Messages: 3

Messagepar Simon Marti » Mer Fév 15, 2012 11:48 pm

@Phi:
Nous utilisons les servomoteurs tout le temps à vitesse constante.
Donc pour trouver la position angulaire il faut entre chaque détermination du capteur gyroscopique le multiplier par le delta de temps entre deux prises de valeurs et l'ajouter à la position précédente donc si je pars d'un angle que je définis comme mon 0 j'ai : theta(t)= omega*dt1 + omega2*dt2 + omega3*dt3... pour autant de valeur que pourra calculer le gyroscope et autant de précision sur le temps écoulé que pourra nous donner l'horloge NXT, pendant notre virage.
Ai-je bien compris ?

@furynick:
J'ai récupéré les valeurs du gyroscope toutes les 1 seconde pour essayer, empiriquement, de trouver un % de la puissance du moteur qui nous donne en moyenne 90°/sec, j'ai trouvé 41% mais l'état de la batterie peut influer sur la vitesse donc je pense définir un encadrement de % de puissance que je vérifierai avant chaque test pour ajuster les vitesse dans le virage.

@ Alban42800:
tu reprends ce que me disais Phi avec d'autres mots, en gros si je te comprend bien, tu prends la valeur de °/sec donnée par le gyroscope que tu multiplies par la durée du virage et tu compares le résultat au résultat du virage précédent tu les soustrais et tu obtiens ta valeur de rotation pour le dernier virage. Ai-je bien compris ce que tu voulais me dire ?

@parsodark:
On a remarqué aussi cette imprécision d'où le fait que nous pensions que le gyroscope pourrait nous aider à palier cette imprécision.
J'ai bien compris ton principe, on verra si on l'utilise si jamais notre gyroscope reste une impasse.

@roboleo:
Merci pour la précision.


Merci à tous, on lance encore une batterie de tests demain mais je pense qu'avec tout ça on tient le bon bout.

phi
Level 6
Level 6
 
Messages: 245
Localisation: Lyon

Messagepar phi » Jeu Fév 16, 2012 12:07 am

Si ton gyroscope donne une information de vitesse, c'est exactement ça. (ou du moins, exactement ce que je voulais dire)

Bien sûr, plus dt est petit, plus le résultat est précis

Faîtes bien mumuse :)
Veuillez regarder ailleurs


Retourner vers De la théorie à la pratique

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 3 invités