Aller au contenu


Photo
- - - - -

Position et orientation précises d'un robot (à l'aide !)


5 réponses à ce sujet

#1 ysalis

ysalis

    Nouveau membre

  • Membres
  • 2 messages
  • Gender:Male

Posté 20 mai 2018 - 04:54

Bonjour,

 

Je suis en train de travailler sur un robot controlé par une carte Arduino et censé se déplacer précisément dans un labyrinthe mais je me heurte à 2 problèmes :

 

- les déplacements doivent se faire pr case de 30cm

- les virages doivent être précisément de 90°

 

Pour le premier, j'ai bien compris qu'un système d'encodage permettait de connaître le déplacement angulaire et donc la distance parcourue par la roue bien que je ne l'ai pas encore testé.

 

Pour le second, je suis complètement dans le flou. Je me suis d'abord dirigé vers un magnétomètre mais la proximité des moteurs et de l'électronique perturbe tellement la boussole que c'est inutilisable.

 

Ensuite, j'ai tenté le coup avec un accéléromètre 3 axes (ADXL335) et, pas de chance, je n'arrive pas à récupérer d'info exploitable concernant le lacet (axe Z). Je n'ai pas dû bien comprendre le fonctionnement...

 

Je suis en train de tester un gyroscope mais j'arrive au même résultat, rien d'exploitable pour m'assurer que ce robot tourne précisément de 90°.

 

J'accepte tout conseil, suggestion, explication  ou idée fabuleuse pour m'aider à avancer.

 

Merci d'avance



#2 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 20 mai 2018 - 05:33

La solution odométrie est bonne pour tourner aussi.

Si tu prend le cas simple : tourner sur lui-même. Un moteur dans un sens, l'autre moteur dans l'autre sens. L'axe vertical de rotation serait placé au milieu entre les 2 roues. Selon la distance entre cet axe et une roue, tu peux déterminer la distance à parcourir pour faire un quart de cercle.

Cela fonctionne très bien, à condition de bien contrôler la vitesse de tes moteurs avec un PID.

 

Tu peux aussi imaginer de n'actionner qu'une des 2 roues. L'axe de rotation serait placé sur la roue arrêtée.

 

Plus complexe mais tout à fait faisable, si tu veux laisser le robot avancer tout en tournant, c'est d'imbriquer 2 PID. Un pour la vitesse linéaire, l'autre pour la vitesse angulaire. Hors concept des PID, pour comprendre, il faut imaginer l'axe de rotation placé en dehors du robot ;)



#3 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 333 messages
  • Gender:Male

Posté 20 mai 2018 - 05:44

Si tu as la possibilité de mettre une camera au dessus du labyrinthe tu peux aussi utiliser 2 leds pour le guider.



Au final tu as juste à lui donner les coordonnées de la prochaine case où il doit se rendre et il y va ^^

#4 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 20 mai 2018 - 05:46

@Ashira, je le connaissais pas celui-là ^^



#5 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 333 messages
  • Gender:Male

Posté 20 mai 2018 - 06:42

Il est tout nouveau ^^

 

Le carré fait 15cm de côté, donc pour 30cm de côté ce serait suffisant pour que ça fonctionne. Et ça fonctionne d'autant mieux que le robot est gros (écartement des leds).



#6 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 965 messages
  • Gender:Male
  • Location:Anglet

Posté 20 mai 2018 - 06:44

En effet uniquement l'odométrie avec des codeurs optique ( Beaucoup de pulses par tours de roue ) permet de mesurer une position 2D sans trop de problèmes. 
C'est la technique majoritairement employez pour les robots de la coupe de robotique =) 

 

les formules intéressantes pour ce genre de chose sont présentées rapidement sur ce sujet : 

 

Robot 2WD homologable pour la coupe de france de Robotique plus précisément cette partie : 
 

  x += ((speedDroit + speedGauche) * PERIMETREROUE * cos(theta)) / ROUEPPR ; // variable en mm
  y += ((speedDroit + speedGauche) * PERIMETREROUE * sin(theta)) / ROUEPPR ;
  theta += atan2((speedDroit - speedGauche) * PERIMETREROUE / (ROUEPPR ), ENTRAXE);  // Peu précis préférer utiliser un Imu si on a le temps ...
  if( theta> 2* PI) theta -= 2 * PI;
  else if (theta < 0) theta += 2 * PI;

Après comme indiquée en commentaire dans le code, au vu des moteurs utilisé dans le sujet cette méthode est peu précise est utiliser une IMU serait beaucoup mieux ... 

 

 

L'accéléromètre mesure les accélération dont la force exercé par la gravité, cela permet donc de connaitre un angle pour les deux autres axes mais pas pour le lacet malheureusement. 

Une boussole magnétique ( magnétomètre 3 axe ) pourrait être utilisée mais ce genre de composant est facilement perturbé.. 
Si votre environnement est " clair " de toute perturbation ce capteur peut être exploité =) 

Pour l'utilisation du Gyro, un gyromètre mesure une vitesse angulaire il faut donc " intégrer le résultat " ... 
 

// En faisant très rapidement des mesures 
angle + = vitesseAngulaire * dt;    // dt étant l'intervalle de temps entre deux prise de mesure

if( angle > 2 * PI) angle -= 2 * PI;
else if (angle < 0 ) angle += 2 * PI;



Le seule inconvénient c'est que bien que cela soit plus précis puis qu'on fait une " intégration " cela intègre les erreurs ... 
Il est important de recaler ce résultat si on veut l'utiliser très longtemps ...


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 




Répondre à ce sujet



  


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

0 members, 0 guests, 0 anonymous users