Binome2015-11 : Différence entre versions

De Wiki de bureau d'études PeiP
 
(33 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
= Tâches des éléments à réaliser =
+
<include nopre noesc src="/home/pedago/ppeip/include/video-Robot11-2015-iframe.html" />
 +
__TOC__
 +
<br style="clear: both;">
 +
= Robot joueur =
 +
 
 +
Nous avons choisi de réaliser un robot joueur. Cette page le décrira et expliquera son fonctionnement.
 +
Élèves du groupe : BOENS Quentin et GIL Hugo.
 +
 
 +
== Généralités sur le robot joueur ==
 +
 
 +
=== Ses tâches ===
 +
* Actives (dans l'ordre) :
 +
** sortir de son garage, se placer sur le terrain
 +
** trouver la balle et la récupérer
 +
** trouver le but et y lancer la balle
 +
 
 +
* Passives :
 +
** ne pas sortir des limites du terrain
 +
** communiquer avec les buts et les autres robots lors de différents évènements
 +
** éviter les obstacles
 +
 
 +
 
 +
=== Les composants utilisés ===
 +
* 1 châssis deux roues + 1 roue folle
 +
* 1 arduino MEGA
 +
* 2 servos-moteurs
 +
* 1 unité de contrôle des moteurs (motor shield)
 +
* 1 capteur ultrason
 +
* 1 plaque à essais
 +
* 3 capteurs de ligne
 +
* 3 phototransistors
 +
* 1 boîtier à piles
 +
* résistances, câbles
 +
 
 +
 
 +
=== La répartition des composants sur le robot ===
 +
*Robot à trois étages:
 +
**-1 : Moteurs et détecteurs de lignes
 +
**0 : Boîtiers à piles
 +
**1 : Arduino, plaque à essais, motor shield, détecteurs IR et détecteur ultrasons
  
Tâches du robot compétiteur :
 
* trouver la balle
 
* la récupérer
 
* la lancer dans le but
 
* trouver le but
 
* ne pas sortir du terrain
 
  
  
 +
== Actions du robot joueur ==
  
 +
=== Se déplacer ===
 +
* Le robot est capable de se déplacer grâce aux roues entraînées par les servos-moteurs, eux-mêmes contrôlés par le motor shield.
 +
* La roue folle sert à l'équilibre du robot.
 +
* Il est capable de se déplacer en ligne droite et d'effectuer des virages, à vitesses variables.
 +
* Problèmes rencontrés :
 +
** Faire tourner les roues dans le même sens (résolu)
 +
** Régler les vitesses de croisière et de manœuvre (résolu)
  
 +
[[Image:debuts.jpg|thumb|upright=2|center|alt=Photo des premiers branchements|Photo des premiers branchements]]
  
= Matériel disponible =
+
* Le PCB (circuit imprimé) servant aux communications entre l'Arduino et le motor shield :
 +
[[Image:Controle moteurs circuit imprimé.jpg|thumb|upright=2|center|alt=PCB contrôle des moteurs|PCB contrôle des moteurs]]
  
Choix des composants du robot compétiteur:
 
* un châssis deux roues
 
* un arduino MEGA
 
* un capteur ultrason
 
* une plaque d'essais
 
* capteur de couleur
 
* contrôleur (monte)
 
* phototransistor
 
  
 +
=== Détecter les obstacles ===
 +
* Grâce à un détecteur à ultrasons placé à l'avant du robot, celui-ci est capable de détecter et d'éviter les obstacles.
 +
* Lorsqu'un obstacle est détecté, une fonction "contournement()" est appelée. Elle permet au robot d'effectuer une petite séquence de virages et déplacements afin d'éviter l'obstacle.
 +
* Le capteur à ultrasons envoie une onde, puis mesure le temps qu'elle prend pour revenir au robot. Avec un simple calcul nous avons pu déterminer quelle durée correspondait à une distance d'à peu près 15cm, suffisante pour éviter les obstacles.
 +
* Problèmes rencontrés :
 +
** Installation et mise en fonctionnement du capteur (résolu)
 +
*** Les valeurs renvoyées par le capteur se basent sur une différence de courant, or lors des premiers essais tous les composants du robot n'étaient pas installés. Après en avoir ajouté, les valeurs renvoyées ne correspondaient plus et cela nous a pris beaucoup de temps pour comprendre l'origine du problème
 +
** Défectuosité des câbles (résolu)
 +
*** Nous avons du changer plusieurs fois des câbles défectueux, présentant des faux-contacts notamment.
  
 +
* Le PCB (très simple) du détecteur à ultrasons :
 +
[[Image:Detecteur ultasons circuit imprimé.jpg|thumb|upright=2|center|alt=PCB capteur à ultrasons|PCB capteur à ultrasons]]
  
= Robot joueur =
 
  
== Rôle et fonctionnement du robot ==
+
=== Détecter les limites du terrain ===
Un robot compétiteur '''est activé par un message du robot ramasseur de balle'''. Il sort alors de son garage pour rentrer sur le terrain.
+
* Les limites du terrain étant représentées par des lignes au sol, nous nous sommes servis de capteurs de lignes. Ils permettent de détecter une différence de couleur grâce à la réflexion de la lumière.
Une fois sur le terrain le robot s'y promène en changeant de direction lorsqu'il arrive en limite du terrain jusqu'à ce qu'il détecte la balle infrarouge. Il se dirige alors vers la balle et tente de la capturer avec sa pince. '''Il demande alors au but adverse d'activer sa balise IR'''.
+
* Compte tenu du fait que les détecteurs doivent être placés suffisamment près du sol, nous avons réalisé une pièce 3D qui leur sert de support, afin d'obtenir des valeurs correctes. La réalisation s'est faite sur le site de CAD Onshape.com et l'impression, au Frabricarium de Polytech.
Le robot tourne jusqu'à trouver le but adverse et tire pour envoyer la balle dans le but. Après avoir tiré, il demande au but adverse d'arrêter sa balise IR.
+
* Leur nombre de 3 était imposé et permet de différencier les situations : rencontre d'une ligne de face, seulement d'un côté, etc.
Si le robot reçoit un message signalant qu'un but a été marqué, il va se garer. Pour cela il parcourt le terrain jusqu'à trouver une ligne de l'aire de jeu. Il suit cette ligne jusqu'à trouver l'intersection qui correspond à son garage.
+
* Problèmes rencontrés :
Pour détecter la balle infrarouge plusieurs phototransistors '''installés dans des caches réduisant leur angle de détection''' sont nécessaires. A vous de trouver la meilleure répartition sur le châssis pour les détecteurs. Vous pouvez aussi utiliser un plateau rotatif réalisé avec un servo-moteur pour augmenter le champ de vision.
+
** Les valeurs renvoyées différaient selon l'éclairage de la pièce (résolu)
Les éléments de la pince sont à réaliser par impression 3D ou découpe laser de plexiglas ou bois. '''Quand la pince se referme elle doit occulter la balle''' pour que le robot puisse détecter la balise du but.
+
*** Il a fallu prendre des fourchettes de valeurs assez grandes
  
 +
[[Image:portelignes.jpg|thumb|upright=2|center|alt=Photo de la pièce 3D supportant les capteurs de lignes|Photo de la pièce 3D supportant les capteurs de lignes]]
 +
[[Image:PortelignesCAD.png|thumb|upright=2|center|alt=Visuel 3D de la pièce|Visuel 3D de la pièce]]
  
== Plan ==
+
* Le PCB des détecteurs de lignes :
*Robot à trois étages:
+
[[Image:Detecteur de ligne circuit imprimé.jpg|thumb|upright=2|center|alt=PCB détecteurs de lignes|PCB détecteurs de lignes]]
**-1 : Moteurs et détecteurs de lignes
 
**0 : Pince et batterie
 
**1 : Arduino, circuits, détecteurs IR et détecteur ultrasons
 
  
  
== Déplacements ==
+
=== Détecter la balle et le but ===
* Structure du robot : 2 moteurs et une roue folle
+
* La balle émettant des ondes infrarouges, nous avons utilisé des capteurs infrarouges afin de la localiser. Trois capteurs à l'avant du robot (gauche, milieu, droite) sont installés pour avoir un spectre assez large.
* 1ère étape du travail
+
* Le principe de détection est le suivant : lorsque qu'un détecteur IR capte une émission infrarouge, il se comporte comme une résistance, provoquant une discontinuité de tension. Notre Arduino est programmé pour détecter ces discontinuités, et réagir en conséquence.
* Problèmes rencontrés (et résolus) : faire tourner les roues dans le même sens, régler la vitesse de croisière et de contournement d'obstacles
+
* Problèmes rencontrés :
 +
** Régler la fréquence de réception pour avoir des valeurs intelligibles (résolu)
 +
*** Nous avons créé des fonctions (calculA0(), calculA1() et calculA2()) qui permettent de prendre une centaine de valeurs pour en calculer une moyenne qui sert de référence.
 +
** Adapter les valeurs selon les sources de courant (batterie, batterie + usb) (résolu)
 +
*** Les valeurs retournées par un Serial.print n'étaient pas correctes car l'Arduino alimentait les capteurs donc les tensions n'étaient pas les mêmes qu'avec seulement les piles.
 +
** Placer les détecteurs pour pouvoir fonctionner lorsque la balle est prise (non résolu)
  
  
== Détecteur ultrasons ==
+
* Le PCB des détecteurs IR :
* 2ème étape : pouvoir contourner les obstacles
 
* Détection à partir de 20cm
 
* Une fonction "contournement()" est appelée lorsqu'un obstacle est détecté, elle permet de faire un virage, d'avancer un peu puis de se remettre dans l'axe
 
*Pour mesurer la distance entre le capteur et l'obstacle, nous basons sur la réflexion et la vitesse de propagation des ondes dans l'air.
 
Le capteur mesure la durée (en ms) de l'aller et retour de l'onde. Cette durée est divisée par deux, afin de n'avoir que le temps pour la distance voulue.
 
Cette mesure étant en ms, nous la multiplions par 1000, pour l'avoir en secondes. Puis nous multiplions par 340 (vitesse du son dans l'air), ce qui nous donne la distance en mètres. Enfin nous divisons par mille pour finalement obtenir cette distance en cm.
 
* Problèmes : installation et mise en fonctionnement du capteur, défectuosité des câbles
 
  
 +
[[Image:D+®tecteurs infrarouges circuit imprimé.jpg|thumb|upright=2|center|alt=PCB capteurs infrarouges|PCB capteurs infrarouges]]
  
== Détecteurs IR ==
 
* 3ème étape : pouvoir orienter le robot vers la balle
 
* Utilisation de 3 capteurs pour avoir un spectre assez large
 
* Problèmes : Placer les détecteurs pour pouvoir fonctionner lorsque la balle est prise, régler la fréquence
 
* Le principe de détection est le suivant: lorsque qu'un détecteur IR capte une émission infrarouge, il se comporte comme une résistance, provoquant une discontinuité de tension. Notre Arduino est programmée pour détecter une discontinuité, et activer les éléments dépendants de ces détecteurs.
 
  
C'est là qu'intervient le problème majeur de cette méthode. Pour réaliser nos tests, nous avons relié notre Arduino à l'ordinateur, et programmé l'affichage des valeurs de tension mesurés. Hors, comme nous l'avons dit précédemment, cette méthode est basée sur la mesure des discontinuité de tension. Notre Arduino se retrouvant alimentée par l'ordinateur et par la batterie, notre technique de mesure ne s'applique qu'à ce cas précis. Par conséquent, il est difficile de programmer notre robot pour qu'il fasse telle ou telle action, suivant les valeurs mesurées.
+
=== Capturer la balle ===
 +
* La mission du robot joueur étant de capturer la balle pour pouvoir la tirer dans le but, nous avons conçu une pince en CAD.
 +
* Afin de mettre en mouvement la balle, pour mettre un but, nous avons décidé d'utiliser un "percuteur", qui poussera la balle lorsque la pince s'ouvre et lui donnera suffisamment d'élan.
 +
* La pince aurait due être imprimée en 3D. Cependant nous avons attendu un ravitaillement en servos-moteurs pour la finaliser, et une fois reçu, nous nous sommes fait rattraper par le temps ; le cahier de réservation de l'imprimante de Polytech étant très chargé, nous n'avons pu trouver un moment pour imprimer les pièces.
  
 +
[[Image:Pinceonshape.png|thumb|upright=2|center|alt=Visuel 3D de la pince|Visuel 3D de la pince]]
  
== Détecteurs de ligne ==
 
* Nombre : 3 (imposé)
 
* Problèmes: les détecteurs affiches des valeurs qui changent très vite, avec une grande amplitude
 
* Compte tenu du fait que les détecteurs doivent être placés suffisamment près du sol, nous avons réalisé une pièce 3D, afin de respecter cette contrainte.
 
  
 +
== Programmation du robot ==
 +
* Pour réaliser notre robot, et faire fonctionner l'ensemble des systèmes cités ci-dessus, nous avons du utiliser de nombreuses fonctions et boucles. Cependant il est évident que, lors de la présentation, notre robot ne se serait pas comporté comme souhaité, si nous n'avions pas hiérarchisé les fonctions. Afin d'obtenir un résultat valable, nous avons décidé de classer les différentes fonctions du robot selon deux catégories : actives et passives.
 +
** Les fonctions dites passives, sont celles qui sont directement liées aux règles du jeu: ne pas sortir du terrain, par exemple. On pourrait les qualifier de conditionnelles: si les conditions auxquelles elles se rapportent ne sont pas respectées, le robot ne pourra pas appliquer les fonctions actives. Un exemple: pourquoi demander au robot d'attraper la balle, s'il est obliger de sortir du terrain?
 +
** Les fonctions actives sont celles qui sont en rapport avec la balle, que se soit la chercher, l'attraper ou la mettre dans le but. Ces fonctions ne seront appliquées qu'au moment où elles seront nécessaires, à l'inverse des passives qui sont appliquées en permanence.
 +
* Voici donc la logique (simplifiée) qui nous semble la plus adaptée au bon fonctionnement de notre robot:
 +
** Mettre le robot en jeu
 +
Si capteur de ligne détecte vert (couleur du garage):
 +
    Avancer jusqu'à ce que capteur de ligne détecte noir
 +
    Se placer au point de départ des robots 
 +
** Jouer
 +
Tant que 1) la balle est en jeu (l'adversaire ne l'a pas) et 2) la balle n'est pas dans le but :
 +
    Tant que capteur de ligne ne détecte pas noir (=sortie de terrain):
 +
      Trouver la balle
 +
      Saisir la balle
 +
      Chercher le but
 +
      Mettre un but
 +
    Remise en jeu du robot
 +
* Rentrer au garage
 +
Si 1) balle dans un but ou 2) adversaire a la balle
 +
    Retourner au garage
  
== Pince ==
+
== Problèmes divers rencontrés ==
* Utilise un servo-moteur : besoin de place !!
+
* La valeurs renvoyées par le détecteur à ultrasons dépendent du nombre de composants installés sur le robot. Le programme de détection des obstacles, premier pas important du projet, fonctionnait parfaitement lors de sa création mais le nombre de composants ayant évolué ensuite, nous avons eu à le modifier plusieurs fois
* Afin de mettre en mouvement la balle, pour mettre un but, nous avons décidé d'utiliser une "percuteur", qui poussera la balle et lui donnera suffisamment d'élan.
+
* Le stock de boucliers x-bee étant limité à 1 nous n'avons pas pu nous en procurer
* '''QUELS GENRES DE SERVOS DISPONIBLES ?'''
+
* La hiérarchie des fonctions pose un problème de conflit entre les différentes conditions à respecter, à savoir : rester dans le terrain (capteurs de ligne), ne pas rentrer dans des obstacles (capteur ultrasons) etc.

Version actuelle datée du 20 mai 2016 à 17:00


Vidéo HD


Robot joueur

Nous avons choisi de réaliser un robot joueur. Cette page le décrira et expliquera son fonctionnement. Élèves du groupe : BOENS Quentin et GIL Hugo.

Généralités sur le robot joueur

Ses tâches

  • Actives (dans l'ordre) :
    • sortir de son garage, se placer sur le terrain
    • trouver la balle et la récupérer
    • trouver le but et y lancer la balle
  • Passives :
    • ne pas sortir des limites du terrain
    • communiquer avec les buts et les autres robots lors de différents évènements
    • éviter les obstacles


Les composants utilisés

  • 1 châssis deux roues + 1 roue folle
  • 1 arduino MEGA
  • 2 servos-moteurs
  • 1 unité de contrôle des moteurs (motor shield)
  • 1 capteur ultrason
  • 1 plaque à essais
  • 3 capteurs de ligne
  • 3 phototransistors
  • 1 boîtier à piles
  • résistances, câbles


La répartition des composants sur le robot

  • Robot à trois étages:
    • -1 : Moteurs et détecteurs de lignes
    • 0 : Boîtiers à piles
    • 1 : Arduino, plaque à essais, motor shield, détecteurs IR et détecteur ultrasons


Actions du robot joueur

Se déplacer

  • Le robot est capable de se déplacer grâce aux roues entraînées par les servos-moteurs, eux-mêmes contrôlés par le motor shield.
  • La roue folle sert à l'équilibre du robot.
  • Il est capable de se déplacer en ligne droite et d'effectuer des virages, à vitesses variables.
  • Problèmes rencontrés :
    • Faire tourner les roues dans le même sens (résolu)
    • Régler les vitesses de croisière et de manœuvre (résolu)
Photo des premiers branchements
Photo des premiers branchements
  • Le PCB (circuit imprimé) servant aux communications entre l'Arduino et le motor shield :
PCB contrôle des moteurs
PCB contrôle des moteurs


Détecter les obstacles

  • Grâce à un détecteur à ultrasons placé à l'avant du robot, celui-ci est capable de détecter et d'éviter les obstacles.
  • Lorsqu'un obstacle est détecté, une fonction "contournement()" est appelée. Elle permet au robot d'effectuer une petite séquence de virages et déplacements afin d'éviter l'obstacle.
  • Le capteur à ultrasons envoie une onde, puis mesure le temps qu'elle prend pour revenir au robot. Avec un simple calcul nous avons pu déterminer quelle durée correspondait à une distance d'à peu près 15cm, suffisante pour éviter les obstacles.
  • Problèmes rencontrés :
    • Installation et mise en fonctionnement du capteur (résolu)
      • Les valeurs renvoyées par le capteur se basent sur une différence de courant, or lors des premiers essais tous les composants du robot n'étaient pas installés. Après en avoir ajouté, les valeurs renvoyées ne correspondaient plus et cela nous a pris beaucoup de temps pour comprendre l'origine du problème
    • Défectuosité des câbles (résolu)
      • Nous avons du changer plusieurs fois des câbles défectueux, présentant des faux-contacts notamment.
  • Le PCB (très simple) du détecteur à ultrasons :
PCB capteur à ultrasons
PCB capteur à ultrasons


Détecter les limites du terrain

  • Les limites du terrain étant représentées par des lignes au sol, nous nous sommes servis de capteurs de lignes. Ils permettent de détecter une différence de couleur grâce à la réflexion de la lumière.
  • Compte tenu du fait que les détecteurs doivent être placés suffisamment près du sol, nous avons réalisé une pièce 3D qui leur sert de support, afin d'obtenir des valeurs correctes. La réalisation s'est faite sur le site de CAD Onshape.com et l'impression, au Frabricarium de Polytech.
  • Leur nombre de 3 était imposé et permet de différencier les situations : rencontre d'une ligne de face, seulement d'un côté, etc.
  • Problèmes rencontrés :
    • Les valeurs renvoyées différaient selon l'éclairage de la pièce (résolu)
      • Il a fallu prendre des fourchettes de valeurs assez grandes
Photo de la pièce 3D supportant les capteurs de lignes
Photo de la pièce 3D supportant les capteurs de lignes
Visuel 3D de la pièce
Visuel 3D de la pièce
  • Le PCB des détecteurs de lignes :
PCB détecteurs de lignes
PCB détecteurs de lignes


Détecter la balle et le but

  • La balle émettant des ondes infrarouges, nous avons utilisé des capteurs infrarouges afin de la localiser. Trois capteurs à l'avant du robot (gauche, milieu, droite) sont installés pour avoir un spectre assez large.
  • Le principe de détection est le suivant : lorsque qu'un détecteur IR capte une émission infrarouge, il se comporte comme une résistance, provoquant une discontinuité de tension. Notre Arduino est programmé pour détecter ces discontinuités, et réagir en conséquence.
  • Problèmes rencontrés :
    • Régler la fréquence de réception pour avoir des valeurs intelligibles (résolu)
      • Nous avons créé des fonctions (calculA0(), calculA1() et calculA2()) qui permettent de prendre une centaine de valeurs pour en calculer une moyenne qui sert de référence.
    • Adapter les valeurs selon les sources de courant (batterie, batterie + usb) (résolu)
      • Les valeurs retournées par un Serial.print n'étaient pas correctes car l'Arduino alimentait les capteurs donc les tensions n'étaient pas les mêmes qu'avec seulement les piles.
    • Placer les détecteurs pour pouvoir fonctionner lorsque la balle est prise (non résolu)


  • Le PCB des détecteurs IR :
PCB capteurs infrarouges
PCB capteurs infrarouges


Capturer la balle

  • La mission du robot joueur étant de capturer la balle pour pouvoir la tirer dans le but, nous avons conçu une pince en CAD.
  • Afin de mettre en mouvement la balle, pour mettre un but, nous avons décidé d'utiliser un "percuteur", qui poussera la balle lorsque la pince s'ouvre et lui donnera suffisamment d'élan.
  • La pince aurait due être imprimée en 3D. Cependant nous avons attendu un ravitaillement en servos-moteurs pour la finaliser, et une fois reçu, nous nous sommes fait rattraper par le temps ; le cahier de réservation de l'imprimante de Polytech étant très chargé, nous n'avons pu trouver un moment pour imprimer les pièces.
Visuel 3D de la pince
Visuel 3D de la pince


Programmation du robot

  • Pour réaliser notre robot, et faire fonctionner l'ensemble des systèmes cités ci-dessus, nous avons du utiliser de nombreuses fonctions et boucles. Cependant il est évident que, lors de la présentation, notre robot ne se serait pas comporté comme souhaité, si nous n'avions pas hiérarchisé les fonctions. Afin d'obtenir un résultat valable, nous avons décidé de classer les différentes fonctions du robot selon deux catégories : actives et passives.
    • Les fonctions dites passives, sont celles qui sont directement liées aux règles du jeu: ne pas sortir du terrain, par exemple. On pourrait les qualifier de conditionnelles: si les conditions auxquelles elles se rapportent ne sont pas respectées, le robot ne pourra pas appliquer les fonctions actives. Un exemple: pourquoi demander au robot d'attraper la balle, s'il est obliger de sortir du terrain?
    • Les fonctions actives sont celles qui sont en rapport avec la balle, que se soit la chercher, l'attraper ou la mettre dans le but. Ces fonctions ne seront appliquées qu'au moment où elles seront nécessaires, à l'inverse des passives qui sont appliquées en permanence.
  • Voici donc la logique (simplifiée) qui nous semble la plus adaptée au bon fonctionnement de notre robot:
    • Mettre le robot en jeu

Si capteur de ligne détecte vert (couleur du garage):

   Avancer jusqu'à ce que capteur de ligne détecte noir
   Se placer au point de départ des robots  
    • Jouer

Tant que 1) la balle est en jeu (l'adversaire ne l'a pas) et 2) la balle n'est pas dans le but :

   Tant que capteur de ligne ne détecte pas noir (=sortie de terrain):
      Trouver la balle
      Saisir la balle
      Chercher le but
      Mettre un but
   Remise en jeu du robot
  • Rentrer au garage

Si 1) balle dans un but ou 2) adversaire a la balle

   Retourner au garage 

Problèmes divers rencontrés

  • La valeurs renvoyées par le détecteur à ultrasons dépendent du nombre de composants installés sur le robot. Le programme de détection des obstacles, premier pas important du projet, fonctionnait parfaitement lors de sa création mais le nombre de composants ayant évolué ensuite, nous avons eu à le modifier plusieurs fois
  • Le stock de boucliers x-bee étant limité à 1 nous n'avons pas pu nous en procurer
  • La hiérarchie des fonctions pose un problème de conflit entre les différentes conditions à respecter, à savoir : rester dans le terrain (capteurs de ligne), ne pas rentrer dans des obstacles (capteur ultrasons) etc.