Projet Robot Coupe GEII : BERTRAND, DUVAUX, GRESSET, PACITTO

De troyesGEII
Aller à : navigation, rechercher

Présentation du projet : Les robots jouent au tennis

Le but du robot est d’envoyer un maximum de balles de tennis dans le camp adverse, sans y entrer et sans jamais contrôler plus d’une balle à la fois. Durant la compétition, deux robots s'affronteront sur le terrain pendant 90 secondes.

Cahier des charges de la compétition

texte alternatif
Aire de jeu

L'aire de jeu

L'aire de jeu a pour dimension 8 x 4 m avec une ligne médiane de 67 cm de large.

Les balles/Les matchs

Les balles utilisées sont des balles de tennis standard. Elles sont placées aléatoirement sur le terrain à l'exception de 3 balles placées systématiquement aux 3 intersections des lignes de notre terrain (points jaunes sur le schéma).

schéma aire de jeu

Le Robot

Le robot doit être autonome. Il peut utiliser les moteurs, la transmission, les roues, le châssis et la batterie officielle de l'événement, mais il est possible d'utiliser aussi ses propres composants. Le robot peut également utiliser un système propulseur. Lors du lancement d'un match, le robot doit être démarré à l'aide d'un lien qu'un utilisateur viendra tirer.

Les Balises

Il est possible de poser jusqu'à 3 balises de dimensions maximales de 20 x 20 x 20 cm sur des emplacements spécifiques (détaillé sur le schéma). Ces balises ainsi que l'ensemble du robot doivent être autonomes.

Homologation : La visite de contrôle

Le robot sera présenté aux membres du jury et il doit répondre aux exigences fixées.
Ces exigences sont les suivantes :
- Un ballon de baudruche est fixé à 30 cm du sol et doit être percé avant la fin du temps imparti des matchs (90 secondes).
- Le robot ne présente aucun danger, ni au repos, ni en fonctionnement (pas de pièces coupantes...).
- Un dispositif permettant de couper le courant doit être mit en place.
- Un dispositif mécanique de mise en marche attaché à un lien de 30 cm minimum permettant de tirer dessus pour le déclencher doit être présent.
- Un système (actif ou passif) permettant de contrôler une seule balle à la fois

La mise en ligne de la documentation technique du robot

Pour que le robot puisse participer, une documentation technique avec tous les composants du robot est demandée afin de vérifier que tout correspond lors de l'homologation du robot devant le jury.

Fonctionnement du robot

Le robot est découpé en plusieurs parties indépendantes les unes des autres. Celles-ci sont visibles sur le schéma ci-dessous.

Fonctionnement du robot

Prototype

Dans un premier temps, le but était de configurer et programmer les différents éléments (capteur, shield....) qui allaient composer notre robot. Pour faire cela, nous nous sommes aidés d'un robot fabriqué l'an dernier. Afin de les tester, nous avons fait un prototype du robot final avec ces éléments. Le prototype doit pouvoir détecter une balle et se diriger vers celle-ci. Pour cela, nous avons fait un prototype incluant une caméra Pixy ainsi qu'un shield moteur L298P. Tout ceci est contrôlé par une arduino Mega. Après quelques programmes et quelques réglages, l'essai fût concluant.
Lien vers une vidéo de fonctionnement du prototype : Vidéo robot prototype

Code général du robot

diagramme algorithme contrôle général robot



Dans un premier temps, le code général du contrôle du robot a été développé sur un Arduino Mega. Tout d'abord, on initialise les valeurs et les variables. Dans un second temps, on va lire les valeurs de tous les capteurs. Ensuite on regarde si le temps est supérieur à 85 secondes. Si c'est le cas, cela signifie que la fin de la partie approche. Il faut donc se diriger dans la direction du terrain adverse. Pour cela, nous utilisons le magnétomètre puis, nous avançons tout droit jusqu'à détecter la ligne à l’aide de la carte capteurs composée des CNY70. Une fois arrivé au milieu du terrain nous crevons le ballon. Dans le cas où le temps ne serait pas encore écoulé, on va alors effectuer la fonction PixySearch qui consiste à rechercher les balles sur le terrain. Si on ne trouve pas de balle à la première boucle et, dans le cas où le temps ne serait pas encore écoulé, on recommence l'opération.
Inversement, si le temps est écoulé alors on retourne au niveau du magnétomètre et on réalise la première partie du programme. Dans le cas où le temps serait toujours inférieur à 85 secondes et que l'on trouve une balle, on effectuera le programme attraper balle. Si une balle est attrapée alors le capteur infrarouge situé dans le réservoir la détectera et on pourra la renvoyer dans le camp adverse. Une fois la balle envoyée, on reboucle si le temps le permet dans la fonction PixiSearch.

Le programme réalisé pour le moment ne réussissait qu'à faire l'initialisation, la lecture des valeurs des capteurs, la partie magnétomètre, chercher des balles à l'aide de la caméra pixy, et détecter la présence de balles dans le réservoir. Cependant, certaines fonctions étaient simulées telles que la présence d'une balle dans le réservoir. En effet, les pièces mécaniques permettant l'installation de ces capteurs n’étaient pas encore réalisées. Afin de déboguer le programme, nous utilisions un module Xbee qui renvoyait les valeurs des variables en direct sur le moniteur série des applications.











Robot final

Alimenter

Batterie utilisée


La batterie

Notre robot comprend une batterie lithium ion 4S1P pour permettre d'alimenter les différents éléments. Cette batterie délivre une tension de 15V.











Réguler

Carte d'alimentation


Réalisation d'une carte d'alimentation

Nous avons réalisé une carte de puissance sur plaque pastillée qui permettait à la fois de distribuer la tension suivant différents voltages à partir de la batterie du robot, elle permettait d'abaisser et d'élever la tension. Elle comprenait également un module régulateur de courant et des sorties directes pour brancher le moteur faisant tourner le disque du crève ballon par exemple. La carte avait donc des sorties en 5 volts ainsi qu’une sortie en 12 volts pour contrôler les moteurs gérant la direction et l'avancée du robot.










Gérer

Carte de contrôle


Réalisation de la carte générale de contrôle à base d'un ATmega 2560

Nous avons réalisé une carte de contrôle générale du robot constituée d'un ATmega 2560. Il s'agit du microcontrôleur que l'on retrouve dans les Arduino Mega. Le schéma ainsi que le routage ont été réalisés respectivement par notre professeur encadrant ainsi que les élèves de la promo précédente. La principale difficulté rencontrée lors de cette réalisation fût la soudure du microcontrôleur car, même avec les machines du laboratoire, cela a été très compliqué et nous avons été obligés de nous y reprendre à trois fois.

Cette carte dispose de nombreuses entrées/sorties ainsi qu'un Shield moteur intégré constitué d'un L298N. Il s'agit d'un double pont en H qui nous permet de contrôler les moteurs servants à la propulsion et à la direction du robot. Il y a aussi un emplacement pour le module Xbee, ainsi que pour la carte capteur CNY70, des servomoteurs, la caméra Pixy... Dès lors que la carte a fini d'être réalisée, nous sommes rentrés en phase de test afin de vérifier que l'ensemble des parties fonctionnaient correctement. Nous avons commencé par nous assurer de l'absence de court-circuit au sein de la carte. Puis la transmission de données à l'aide d'un programmateur ISP. Nous avons ensuite testé de L298 N ainsi que la partie module Xbee qui fonctionnait de même correctement. Dans un troisième temps nous avons vérifié le bon fonctionnement de la partie caméra Pixy.



Détection

Détecter ligne

CNY70
Placement des capteurs
Carte capteurs CNY70

Pour la détection de la ligne médiane, nous avons décidé d'utiliser des capteurs CNY70.
Ces capteurs sont composés d'une LED et d'un transistor. Le principe, c'est que la LED va émettre une lumière et, en fonction de la couleur sur laquelle va réfléchir cette lumière, plus ou moins de courant passera dans le transistor. Le blanc étant la couleur qui réfléchit le plus et le noir celle qui réfléchit le moins.

Pour le nombre et le placement des capteurs, nous avons choisi d'en prendre 5 : 3 centraux et 2 pour les extrémités. Il est préférable qu'ils soient tous espacés d'au moins 1 cm pour qu'il n'y ai pas plus de 2 capteurs à la fois sur une même ligne. Les capteurs placés aux extrêmes doivent également être placés 2 cm plus haut pour ne pas confondre la ligne médiane et une ligne du terrain. En effet, les lignes font 1,9 cm de large. Ces capteurs sont reliés à des comparateurs pour permettre d'avoir des données numériques et non analogiques. Afin de positionner les capteurs a l'endroit souhaité sur le robot, on a réalisé une carte comprenant ces capteurs et les comparateurs. Le schéma électrique est représenté ci-dessous :

Schéma électrique de la carte capteurs CNY70

Détecter balle

Caméra Pixy
Algorigramme caméra Pixy




Pixy

Afin de pouvoir détecter si on a une balle devant le robot, on a décidé d'utiliser une caméra pixy, qui est plus précise qu'un lidar sur de petites distances. La caméra pixy se branche directement sur la borne ICSP d'une carte arduino . On configure la caméra directement sur une application externe afin de pouvoir régler différents paramètres : le nombre minimum de pixel afin de détecter un objet, la distance minimum entre deux objets pour qu'ils ne soient pas considérés comme un seul objet, le nombre d'objet maximum qui peut être affiché à la fois, la luminosité de la LED placée au-dessus de la caméra et d'autres paramètres plus complexes.

Démonstration du suivi de la balle : Lien Vidéo

Lidar Garmin et algorigramme
VL53L1X et algorigramme





Lidar Lite V3, Garmin

Bien que notre robot comporte une caméra Pixy pour détecter les balles, celle-ci ne permet pas de voir à longue distance. Pour pallier à ça, nous avons mis en place un Lidar. Ce Lidar permet de détecter les balles jusqu'à 5 m. En revanche, à courte distance (40 cm) les mesures sont fausses. Pour fonctionner correctement, ce Lidar doit être parfaitement parallèle au sol et placé à mi-hauteur des balles. Le Lidar ne captant que les obstacles, il sert à diriger grossièrement le robot vers un obstacle et la caméra l'emmènera précisément sur une balle.Le lidar en question est un lidar Garmin Lite V3. Il se branche sur un bus SDA - SCL et est alimenté en 5 V. L'algorigramme de fonctionnement de celui-ci est présenté ci-contre.

Lidar VL53L1X

Afin de détecter les murs du terrain et s'il y a une balle dans le robot, on a choisi d'utiliser des petits lidars. Ces lidars sont des VL53L1X. Ils ont l'avantage d'être petits et arrivent à détecter à des distances allant jusqu'à 2 m avec une bonne précision. Ils sont aussi efficaces à courte distance. Ces lidars se branchent sur un bus SDA - SCL et sont alimentés en 5 V. Il est aussi nécessaire de les brancher à une broche tout ou rien afin de pouvoir modifier l'adresse de chacun.



Tous les lidars communiquent en SDA - SCL avec le microcontrôleur. On a donc réalisé une petite carte annexe pour relier tous ces éléments dessus. Ceci permet de ne pas surcharger la carte du microcontrôleur et d'éviter un travail important en cas de problème. Cette carte comprend un Bus SDA - SCL et l'alimentation nécessaire. Le schéma est ci-dessous :

Schéma électrique de la carte de branchement des lidars.

Détecter suivant Y/Détecter angle

Magnétometre
Magnétomètre

Dans ce projet nous avons choisi d'utiliser un magnétomètre afin de pouvoir orienter le robot dans la direction du camp adverse. Pour cela nous avons utilisé un module MPU 9250.

Dans un premier temps, nous avons utilisé une Arduino pour pouvoir maîtriser ce composant. Dans un second temps, nous avons dû l'intégrer dans le circuit général et, le contrôler avec la carte fabriquée par nos soins.

Il ne faut surtout pas oublier d'utiliser un abaisseur puisque le composant fonctionne en 3,3 volts. Par conséquent, les niveaux logiques des pins sont aussi à 3,3 volts. Celles de l'Arduino fonctionnent en 5 volts de même pour l'alimentation. Pour obtenir des valeurs correctes, il ne faut pas oublier d'étalonner le capteur en fonction de son environnement. Pour cela, il faudra réaliser des cercles ainsi que des huits, suivants les 3 axes pendant une trentaine de secondes. Une fois cette opération exécutée, on peut lire que les valeurs ont été remplacées dans le code général. Il faudra faire attention à ne pas être dans un environnement trop magnétique. Cela entraînerait des mesures fausses. Lors de son utilisation, il faudra faire attention à ce que le composant soit le plus possible à l'horizontal.






Actionneurs

Piloter

Moteurs
Moteurs

On a choisi d'utiliser les moteurs existants sur le robot. Afin de les contrôler, on a besoin d'utiliser un Shield L298P. Il s'agit d'un Shield Arduino de type pont en H, pouvant contrôler 2 moteurs.












Gérer balle

Modélisation du support du propulseur
Photo du propulseur
Système de propulsion

Le robot est équipé d'un système de propulsion et de réception des balles placé à l'avant. Il est constitué d'un cône permettant l'envoi des balles. Celui-ci est entraîné en rotation par un moteur et un système poulie-courroie. Il est fixé par des roulements à billes au support. Le moteur est commandé par un L298P mis en parallèle afin de maximiser le courant. Le cône d'envoi a été modélisé aux dimensions d'une balle de tennis et le système de propulsion est fait pour respecter le cahier des charges dimensionnelles. Des élastiques seront mis sur le cône de lancement afin d'avoir la meilleure adhérence possible.










Gérer crève-ballon

Tube support servo-moteur

Avant la fin du temps imparti, on doit éclater un ballon qui se situe sur notre robot à 30 cm du sol. On a donc conçu un tube afin de pouvoir fixer le ballon et le système pour crever le ballon. Celui-ci est composé d'un servomoteur qui permet d'élever un moteur. Ce dernier fait tourner un disque de disquette à haute vitesse et vient crever le ballon dès qu'il le touche.

Pièce reliant le moteur au servo-moteur
Branchement du moteur entraînant la disquette


Servomoteur

On utilise un servomoteur classique avec des engrenages métalliques afin de mieux résister au poids du moteur. On peut aussi voir sur l'image située sur la gauche le trou pour insérer le moteur.

Attache ballon
Moteur

On utilise un moteur classique monophasé qui est commandé par un transistor (RF540). On peut voir les branchements réalisés sur une plaque à essais.

Attache ballon

La pièce sur la gauche que l'on peut voir permet d'attacher le nœud du ballon en le faisant glisser dans l'encoche. Ensuite on place cette pièce en haut du tube.

Schéma électrique du moteur continu pour le système de crève ballon.

Communiquer

Module xbee
Module Xbee implanté sur la carte du robot


Module XBEE

Afin d'avoir un retour sur le fonctionnement du robot (capteurs, actionneurs...) le robot comprendra un module Xbee. Ce module se branche sur une liaison série (serial1) du microcontrôleur. Afin de recevoir les informations sur un ordinateur, un deuxième module est branché par une interface USB. La communication est alors sans fil et les informations sont transmises sous forme de code ASCII. Un logiciel permet alors de retranscrire le message sur l'ordinateur.












L'armature du robot

Le châssis

Emplacements des différents éléments

Le robot dispose d'un châssis aux dimensions 280 x 200 x 5 mm.
Ce châssis a été dimensionné pour respecter le cahier des charges attribuées et pour accueillir les différents éléments.
Afin de l'alléger et pour gagner en temps d'impression, des trous ont été réalisés sur ce chassis.
TopRobot.png BotRobot.png

Les roues folles

Afin d'avoir une hauteur correcte, on a réalisé des supports pour les roues folles. Ceux-ci sont composés de deux pièces qui s'emboîtent. La première pièce est attachée au châssis par 4 vis. La deuxième, qui aura la roue folle dessus, est attachée à la première pièce grâce à une vis qui traverse l’ensemble.
Nous avons préféré mettre 2 roues folles pour que le robot puisse avoir une meilleure stabilité.
SupportRoueFolle.png

Le support batterie

Enveloppe batterie
Support batterie
Enveloppe batterie



Le robot est équipé d'un support de batterie permettant de retirer et d'insérer la batterie facilement. Celui-ci se trouve à l'arrière du robot et les bornes de branchement y sont insérées. Les batteries sont mises dans une enveloppe protectrice constituée d'un fusible.

Les bornes de branchement sont sur la partie inférieure de cette enveloppe.

Ainsi, il y a juste à glisser cette enveloppe dans les glissières du support et la connectique se fait.

















Les supports pixy et lidars

Afin de fixer les lidars et la caméra sur notre robot, on a réalisé des supports en impression 3D. Ceux-ci ont été dimensionnés afin d'avoir une vision optimale pour la caméra et que l'axe des lidars soit parallèle au sol.

Support lidar CNY70 réservoir balle vue de coté
Support lidar CNY70 réservoir balle vue de face
Support caméra pixy

Assemblage des différents modules

Afin d'avoir le robot fini, on a assemblé les différents modules (envoyeur, support caméra, support lidar, crève ballon...). On a également ajouté un bouton d'arrêt d'urgence et un interrupteur directement après la sortie de la batterie. Le support lidar et les roues folles viennent se fixer en-dessous du châssis du robot, au même niveau que le support caméra. Une photo détaillée se trouve ci-dessous ainsi que le schéma électrique :

Schéma électrique du robot.







Montage du robot











































Poursuite du projet

Afin d'avoir un robot fonctionnel pour la compétition, il reste encore du travail à réaliser :

  - Les parties mécaniques sont presque finies. Il reste à fixer la dernière version du support batterie (déjà imprimé) et à fixer les différentes cartes électroniques réalisées.
  - Au niveau électronique, il reste la fin de la programmation du microcontrôleur ainsi que la fabrication d'une petite carte permettant de brancher les lidars.
  - A la fin de ceci, il faudra réaliser des tests qui permettront d'avoir les bons réglages.

Tous les fichiers (programmes, modélisation...) sont regroupés sous ce lien : https://drive.google.com/open?id=1bu82SR4aXORQbGZPKh7aMQNmwcRNpVAf

Ensuite, nous pourrons accéder à la compétition dans l'objectif de la remporter, bien évidemment !


BERTRAND Gaétan

DUVAUX Kévin

GRESSET Matthieu

PACITTO Anthony