Robot - Concours Vierzon GEII 2014 : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
(Schéma électrique Ardumoto)
(Schéma électrique Ardumoto)
 
Ligne 252 : Ligne 252 :
 
:Ajout connecteur boussole,<br />
 
:Ajout connecteur boussole,<br />
 
:Ajout condensateurs de découplages C1 et C5 pour limiter les perturbations électromagnétiques,<br />
 
:Ajout condensateurs de découplages C1 et C5 pour limiter les perturbations électromagnétiques,<br />
:Ajout condensateurs de lissages C2 et C3 (en générale de 10 à 200nF, valeurs plus couramment utilisées), qui comme leur nom l'indique, lisse le signal à l'entrée du régulateur (12V) puis à sa sortie (5V),<br />
+
:Ajout condensateurs de lissages C2 et C3 (en général de 10 à 200nF, valeurs plus couramment utilisées, les docs techniques des régulateurs souvent donnent les valeurs), qui comme leur nom l'indique, lisse le signal à l'entrée du régulateur (12V) puis à sa sortie (5V),<br />
 
:Ajout de C4, comparable à une réserve d'énergie, ça valeur est discutable (en µF) car il ne doit pas être sous dimensionné afin qu'il puisse être utile mais aussi ne doit pas être surdimensionné afin de ne pas déstabilisé le système lors de la mise en marche.
 
:Ajout de C4, comparable à une réserve d'énergie, ça valeur est discutable (en µF) car il ne doit pas être sous dimensionné afin qu'il puisse être utile mais aussi ne doit pas être surdimensionné afin de ne pas déstabilisé le système lors de la mise en marche.
  

Version actuelle datée du 15 avril 2014 à 23:45

Introduction

Dans le cadre de notre projet d’Étude et Réalisation de deuxième année de GEII, et en vue du concours de robotique des IUT GEII se déroulant à Vierzon le 00/00/2014, nous avons pour objectif de réaliser un robot autonome. Autrement dit, concevoir un robot totalement indépendant devant partir d'une zone A vers une zone B tout en évitant les obstacles parsemés sur le terrain, avec pour mission de percer un ballon à l'arrivé.
Le site officiel du concours est disponible à l'adresse suivante : http://www.gesi.asso.fr/coupe_robotique_des_iut/
Une étude menée par DEMYTTENAERE Justin et PECORARO Arnaud, épaulés par deux autres groupes composés de PLOUVIEZ Florian et ELABASSI Soufiane ,ainsi que de JOLLY-Aarif Anïs et DEROUET Alexis, étudiants en 2ème année de GEII à l'Institut Universitaire de Troyes.


Synthèse Règlement

Le règlement officielle est disponible à l'adresse suivante : http://www.gesi.asso.fr/coupe_robotique_des_iut/images/2014/reglement_Vierzon_2014_V002.pdf

Règles générales

La compétition se déroulera à Vierzon et opposera 4 robots différents. L'objectif est de traverser le terrain pour rallier la base d'arrivée, située en diagonale du point de départ et ce dans un temps imparti de 90 secondes. Le terrain comprend de multiples obstacles à la position variable entre les différentes étapes de qualifications, que le robot doit éviter.
Le départ des robots se fait par le retrait d'un connecteur Jack et l'arrivée est matérialisée par l'arrêt complet dans la zone prévue à cette effet puis par l'explosion du ballon transporté.
Les robots sont totalement autonomes, et peuvent uniquement se guider à l'aide d'une balise présente dans la zone d'arrivée.
Un nombre de point est attribué en fonction des performances de chaque concurrent.
Les collisions sont à éviter entre les concurrents et les obstacles ne doivent pas être altérés ou déplacés.
La rencontre se composera d'une présentation orale, d'une phase d'homologation et d'une phase de qualification à l'issue de laquelle commenceront les phases d'élimination.


Caractéristiques du robot

Dimensions du robot
  • Le kit mécanique imposé par le comité d’organisation doit être obligatoirement utilisé :
    • 1 Châssis (support métallique en U),
    • 2 Moteurs DC,
    • 2 Roues,
    • 4 Engrenages,
    • 1 Batterie 12V 1.2Ah au plomb gélifié (pouvant être remplacé à l’identique).
  • La batterie est obligatoirement utilisée pour la partie motorisation. Alimentation totalement libre pour la partie commande, « ordinateur ».
  • Un connecteur jack 3.5 doit être prévu afin de pouvoir y accueillir sa prise qui au top départ sera déconnecté par un étudiant pour que le robot s’élance.
  • Design libre, mais doit respecter les dimensions imposées (coque plastique blanc non obligatoire):
    • Le gabarit du robot ne doit pas excéder 30cm H*40cm L*30cm l,
    • Un tube vertical doit être équipé sur le robot et dont l’extrémité haute est située entre 30 et 31 cm du sol,
    • Le ballon mesurera au moins 10 cm de diamètre lorsqu’il sera donné. Il doit être accroché dans les 5 derniers centimètres du tube vertical et doit donc disposé d’un système d’accrochage.
  • Une balise peut être disposé dans le coin d’arrivé. Celle-ci ne doit pas excéder un cube de 20cm de côtés. Une prise de 240V est mise à disposition.
  • Les dispositifs actifs (ondes etc.) doivent être totalement inoffensifs et respecter la règlementation française.


Caractéristiques du terrain

Terrain 2014
  • Carré de dimension totale 9m*9m, la piste mesurant 8mx8m.
  • Revêtement moquette bleu.
  • Éclairage important, environ égale à 3000lux.
  • Obstacles :
    • Au nombre de 15, leur position évolue selon les parties. Disposition simpliste au départ puis difficulté d'évitement croissante au fil des épreuves
    • Dimensions maximum : 15cm*20cm*40cm,
    • Toujours répartis de façon symétriques,
    • Leur couleur est unie, mais peut varier selon les obstacles.
  • Zones de départs et d'arrivées :
    • Quatre quarts de disque blanc,
    • Dimension : 70cm de rayon au minimum.
  • Quatre zones de balise 20cm*20cm disposées dans les coins externes d'arrivée.


Conception du Robot

Logigramme général

Logigramme général.jpg

Choix des composants du Robot

Carte Mère

Notre choix s'est porté vers la plateforme Arduino pour contrôler notre robot. Cette dernière étant l'équivalent d'un petit ordinateur capable de réaliser divers calculs, communiquer avec le monde extérieur... En effet, tout comme un PC, celle-ci est architecturée autour d'un processeur, ici le microcontrôleur Atmel ATmega. Mais est aussi accompagnée de mémoire morte, de mémoire vive, de RAM, d'interfaces diverses de communication externes ainsi que de toute la circuiterie électronique pour le bon fonctionnement du tout. Elle offre une gestion des entrées/sorties relativement aisée et se programme facilement (langage proche du C) à l'aide d'un IDE simple, mais très efficace. De plus, il existe déjà de nombreuses bibliothèques et programmes préconçus sur le net, notamment pour les écrans, moteurs, capteurs, l'ethernet, le wifi...
Pour ce projet, nous avons hésité entre l'Arduino UNO rev3 et l'Arduino Mega 2560 rev3.
Comparatif
Arduino Processeur Flash ko EEPROM ko SRAM ko Broches d'E/S numériques ...avec PWM Broches d'entrée analogique Courant E/S mA Dimensions mm Prix
ArduinoUno R3.jpg
UNO
ATmega328 32 1 2 14 6 6 40 68,6*53,3 ≈20,00€
ArduinoMega2560.jpg
Mega2560
ATmega2560 256 4 8 54 15 16 40 101,6*53,3 ≈36,00€
Au final, bien qu'elle dispose de moins d'entrées/sorties nous avons opté pour la carte UNO sachant qu'il nous est possible de multiplier les entrées sorties notamment avec des multiplexeurs de type 74HC595.



Alimentation

Partie Commande
  • Solutions proposées:
    • Batterie 12V 1.2Ah au plomb gélifié. Utiliser la même que celle pour la partie motorisation forcément présente (avantage moins de poids).
    • Ajouter une autre batterie.
  • Solution retenue.
Partie Motorisation
  • Solution retenue: Batterie 12V 1.2Ah au plomb gélifié (imposé).


Moteurs

Il faut que notre robot puisse se mouvoir, pour cela nous utiliserons les 2 Moteurs DC imposés.
Ces moteurs à courant continue ont l'avantage de pouvoir être facilement raccordables à une batterie, facilement contrôlables en vitesse et en sens de rotation grâce à un petit dispositif supplémentaire.



Commande moteurs

Afin de commander les deux moteurs DC, nous avons choisi d'utiliser le shield Ardumoto - Motor Driver Shield de chez Sparkfun, qui est basé sur le circuit L298 et deux ponts en H. Celui-ci a pour avantage de pouvoir piloter deux moteurs à courant continue, consommant jusqu'à un maximum de 2 ampères sous une tension pouvant atteindre 48 volts. Le sens des moteurs étant piloté par des signaux logiques et la vitesse étant régulé par le rapport cyclique des entrées PWM de l'arduino, ça en fait une carte de choix pour piloter une base robotique.

Capteurs position

Les deux moteurs utilisés étant à courant continu, il nous est impossible de connaître l'angle de rotation, la position exacte du rotor contrairement à des moteurs pas à pas ou servomoteurs. C'est pour cette raison qu'il nous est nécessaire d'ajouter des détecteurs de rotation, de position afin de pouvoir éviter les obstacles au mieux, et arriver dans un court laps de temps à l'arrivée.
  • Solutions proposées:
    • Capteurs à fourches + roues codeuses sur moteurs(Principe d'une LED et d'un photo-transistor avec une route dentée qui coupe le faisceau de la LED).
    • Boussole.
  • Solution retenue:
Pour connaître l'angle de rotation des moteurs, nous utiliserons deux roues codeuses accompagnées de leur opto-coupleur, plus précisément des fourches optiques. Elles consistent à émettre un faisceau lumineux grâce à une LED qui se trouve être coupé ou non par les fentes du disque en rotation. Chaque coupure est alors réceptionnée par un photorécepteur (photo-transistor), qui à chaque impulsion d'onde lumineuse se bloque ou non, ce qui correspond à une impulsion TTL. De ce fait et notamment grâce à la division précise en degrés de la roue codeuse, il est très facile de se repérer dans l'espace puisque entre chaque impulsion correspond à une angle en degrés (α°).


Capteur de proximité

Ces capteurs nous servirons à détecter la présence d'obstacles, d'autres robots et les bords du terrain. Ces derniers étant en matériaux non conducteurs et non magnétiques, par conséquent les capteurs de type inductif et à effet Hall sont naturellement éliminés.
  • Solutions proposées:
Comparatif
Capteur infrarouge.jpg
Capteur infrarouges
Capteur ultrason.jpg
Capteur ultrasons
Capteur capacitif.jpg
Capteur capacitif
Capteur fin de course.jpg
Capteur fin de course
- Aucun contact physique avec l'obstacle. Av
- Sensible couleur et nature matériaux. Inc
- Sensible fortes sources lumineuses/autres infrarouges/poussières. Inc
- Cône d'environ 5°. Av/Inc
- Détection ≈ 1cm à 80cm. Av
- Conso: quelques milliampères et quelques volts. Av
- Peu cher. Av
- Aucun contact physique avec l'obstacle. Av
- Répercution ultrasons sur tout matériaux. Av
- Sensibilité pression, température, même fréquences utilisées. Inc
- Cône d'environ 30°. Av/Inc
- Détection ≈ 1cm à quelques mètres. Av
- Conso: quelques milliampères et quelques volts. Av
- Peu cher. Av
- Aucun contact physique avec l'obstacle. Av
- Détecter tout type d'objet. Av



- Détection ≈ 1cm à 3cm. Inc


- Cher. Inc
- Contact physique avec l'obstacle. Inc
- Détecter tout type d'objet. Av



- Détection 0cm. Inc
- Mise en œuvre simple (semblable interrupteur). Av
- Peu cher. Av
  • Solution retenue:
    • 1 télémètre à ultrason HC-SR04, détecter les obstacles éloignés comme proche tout en récupérant la distance.
    • 2 LED infrarouges couplés à 2 photo-transistors, permettant de détecter les obstacles proches


Capteur arrivée

Le robot devant être totalement arrêté et entièrement dans la zone d'arrivée pour pouvoir percer le ballon, il nous est donc nécessaire d'ajouter au minimum un capteur au dessous du robot qui détecte la zone blanche.
  • Solutions proposées:
    • Photocoupleur.
    • LED + photo-transistor.
  • Solution retenue :
Pour réaliser cette fonction, nous pensons utiliser un ou plusieurs photocoupleur(s) CNY70. Semblable à un optocoupleur, il est composé en interne d'une diode émettrice et d'un photo-transistor qui a été notamment utilisé en première année pour un robot suiveur de ligne. La LED émet une onde lumineuse qui une fois réfractée par la surface (rayon plus ou moins dissipé suivant la couleur de la surface) est capté par la base du photo-transistor et qui bloque donc plus ou moins le transistor. Permettant ainsi de connaître la couleur de la surface. Nous pensons le fixer à l'arrière du robot, afin que celui-ci soit totalement à l’intérieur de la zone blanche pour s'arrêter. Ou-bien, le fixer à l'avant et ajouter un delay avant l’arrêt complet.

Perçage Ballon

  • Solutions proposées:
    • Décharge d'un condensateur qui mit en court-circuit provoque une étincelle.
    • Levage d'une pointe grâce à un servomoteur.
    • Compression puis extension d'un ressort avec pointe.
  • Solution retenue:


Boussole

Pour connaître avec certitude la direction à suivre pour atteindre la zone d'arrivée et ce peu importe l'orientation du robot, nous pouvons nous servir d'une boussole.
Les boussoles sont en général des capteurs magnéto-résistif. Ils se comportent comme des potentiomètres. En effet ils sont composés de Permalloy, alliage magnétique de fer et de Nickel dont la résistance varie en fonction du champ magnétique appliqué. On peut donc connaître à chaque instant la direction du nord magnétique.
Dans notre cas précis, il est nécessaire durant une phase d'étalonnage de définir une direction à partir du nord magnétique que le robot devra suivre. On agira directement sur les moteurs pour se placer dans l'angle imposé. Il existe de nombreux dispositifs de ce type, parmis lesquels figurent le LSM303, un module couplant un accéléromètre 3 axes et un magnétomètre 3 axes. Il est de plus largement documenté.
Pour les phases plus avancées, la boussole pourra servir de complément de direction jusqu'à l'arrivée du robot à portée de la balise.

Balise

La mise en place d'une balise est prévue pour une phase de développement très avancée du projet.
Le rôle de la balise est d'émettre un signal en destination du robot dans le but de la guider vers elle.
Distance départ du robot-balise
  • Solutions proposées:
    • Envoie de code par IR.
    • Émissions ultrasons.
  • Solution retenue:
Notre choix se portera sur l'utilisation de capteurs et de récepteurs à ultrasons.
En effet, la balise se trouve à la position exactement opposée du point de départ du robot sur la piste.
Le carré mesurant 8 mètres de côté, la distance maximum séparant le robot de sa balise est donnée par la formule
d=a * 21/2 avec a la longueur du côté application directe du théorème de Pythagore ce qui nous donne approximativement une distance maximum de plus de 11.3m !


Cette distance dépasse largement la portée maximale des émetteurs infrarouges que l'on trouve généralement. La portée peut être améliorée en augmentant la puissance d'émission ( on injecte plus de courant dans la Del infrarouge et on module plus vite.)
Les émetteur/récépteurs à ultrasons ont, comme vu précédemment une portée supérieure. Il est possible d'en trouver dans le commerce avec une portée dépassant les 7-8 mètres, mais pas plus en restant dans des gammes de prix correctes. En conséquences il ne sera pas possible de se servir de la balise dés le début de la course.


Autre problème : la hauteur des blocs. En effet il convient de placer les récepteurs à une hauteur suffisante pour ne pas être obstrué par les blocs obstacles de la piste. Ils seront donc placés sur le robot à une hauteur de plus de 18cm (hauteur des blocs = 15 cm).
De plus, il est nécessaire de pouvoir réceptionner le signal dans n'importe quelle orientation du robot. Le choix qui semble de plus judicieux est de fabriquer une couronne de récepteurs ultrasons (5-6 récepteurs maximum).
Au niveau de la balise, se trouveront 2 ou 3 émetteurs pour couvrir un angle suffisant. La balise sera pilotée par Arduino.
Emetteurs retenus :
Récepteurs rentenus :
Pour finir il sera également nécessaire dans la partie programmation d'établir une règle de codage pour la transmission des informations.



Assemblage Robot et programmation

Disposition grossière des différents éléments

Partie moteurs et magnétomètre

Tache effectué par DEMYTTENAERE Justin et PECORARO Arnaud.
Nous avons désosser le projet de l'année précédente afin d'en récupérer le socle principal ainsi que les deux moteurs et la batterie. L'électronique n'as pas été conservée à l'exception du shield Ardumoto qui s'est révélé ensuite défaillant.
Connection des modules


Démarche de mise au point de la commande moteur
Après récupération des moteurs, du shield moteur Ardumoto sur l'un des robots construits l'année ainsi que d'une première lecture sur le fonctionnement de la carte, nous avons entrepris des tests qui nous ont permis de mettre en évidence une panne sur ce shield. En effet, le moteur droit ne fonctionnait que dans un seul sens de rotation. Nous avons rapidement pensé à une erreur de codage. Mais après une simplification à l’extrême du programme, nous nous sommes mis en quête d'un problème sur la carte elle-même.
A l'aide d'un testeur de continuité nous avons pu nous rendre compte que le pin13 auquel correspondait le branchement du moteur était en contact avec la masse. Nous avons donc testé successivement les pistes à la sortie du microcontrôleur jusqu'au pin13. Il en est advenu que ce problème était du à une porte logique CMS défaillante. Ce composant n'étant pas disponible à l'IUT, nous nous somme munis d'un autre shield ardumoto présent sur un autre robot de l'année précédente.
Pour adapter la tension de 12V en provenance de la batterie aux 5 volts nécessaire à alimenter l'arduino nous nous sommes servis d'un régulateur 5V (ref : ) et deux condensateurs de découplage.
Le régulateurs a été soigneusement plié afin de permettre l'ajout d'un shield additionnel au dessus de l'ardumoto. Des câbles fins ont été utilisés pour relier les composants proprement les uns aux autres.
Schéma électrique Ardumoto
Piste VIN sectionné afin d'utiliser une alimentation extérieur,
Ajout connecteur boussole,
Ajout condensateurs de découplages C1 et C5 pour limiter les perturbations électromagnétiques,
Ajout condensateurs de lissages C2 et C3 (en général de 10 à 200nF, valeurs plus couramment utilisées, les docs techniques des régulateurs souvent donnent les valeurs), qui comme leur nom l'indique, lisse le signal à l'entrée du régulateur (12V) puis à sa sortie (5V),
Ajout de C4, comparable à une réserve d'énergie, ça valeur est discutable (en µF) car il ne doit pas être sous dimensionné afin qu'il puisse être utile mais aussi ne doit pas être surdimensionné afin de ne pas déstabilisé le système lors de la mise en marche.
Démarche de mise au point de la boussole
Après réception du gyroscope/accéléromètre/boussole LSMS303 de chez Pololu, nous avons commencé par lire les différentes documentations et étudier les différents programmes fourni par le constructeur. Puis nous avons gardé la partie de programme qui nous intéressait, soit le code concernant la boussole. Une fois simplifié au maximum nous avons vérifié sont bon fonctionnement, et regardé qu'il transitait bien des données sur le port série lorsque que l'on tournait celle-ci.
Problèmes lors de l'utilisation conjointe de la boussole et de la commande moteur
Les tests séparés de la boussole et des moteurs étant concluant, nous avons commencé à écrire le programme de guidage du robot selon la logique suivante :
Dans un premier temps nous avons seulement cherché à obtenir un suivi de ligne droite avec cette méthode. Cependant, le robot ne parvenais pas à maintenir une trajectoire mais en adoptait une totalement aléatoire. En lisant les données de mesure d'angle sur le port série, nous nous sommes aperçu que lorsque les moteurs étaient en fonctionnement, la valeur mesurée était erronée. En effet on pouvait constater des écart de plus de 100 degrés entre deux mesures successives.
Hypothèse des perturbations CEM par le hacheur du shield Ardumoto
Mise en place d'un mat
Pour se prévenir des rayonnements émis par les hacheurs nous avons choisi de placer la boussole au sommet d'un mas d'environ 30cm vissé au socle.

Nous n'avons pas constaté d'améliorations.

Utilisation d'une nappe entre la boussole et l'Arduino
Nous avons pensé que les conducteurs reliant la boussole à l'arduino pouvaient être perturbé par le rayonnement. On les a donc remplacé par une nappe avec deux connecteurs à sertir. L'un connecté à la boussole, le deuxième soudés sur le shield Ardumoto.

Cela n'a pas non plus apporté d'améliorations.

Réalisation d'une cage de Faraday
Il nous a été conseillé d'isoler complètement l'Arduino et son shield. Nous avons entrepris la réalisation d'une cage isolée relié à la masse à partir d'une boîte en carton recouverte intégralement de papier aluminium. les jointures ont été fermées avec un scotch isolant métallique. La surface a été connecté à la masse.

Là non plus nous n'avons pas constaté d'amélioration.

Remplacement de la nappe par un câble RJ45 blindé
Finalement nous avons choisi de remplacer la nappe par un câble réseau blindé.
Hypothèse des perturbations par défaut d'alimentation
Changement de la partie alimentation
Nous avons mis en évidence des problèmes d'alimentations. En effet la mise en marche des moteurs perturbe grandement la tension qui alimente la boussole (importantes oscillations à l'oscilloscope). Nous avons donc remplacé tous les condensateurs de notre circuit d'alimentation par des condensateurs avec capacité supérieures. Un condensateur a même été soudé à même le LSM303 entre la masse et le VIN.
Les oscillations ont un peu diminués, mais cela n'a pas résolu le problème de mesure d'angle.
Alimentation de la boussole en 3.3V
Afin de s'isoler complètement de la tension perturbée, nous avons connecté la boussole sur l'alimentation 3.3V de l'arduino. Pas d'amélioration sur les mesures d'angle.
Alimentation externe
Pour finir, nous avons effectué un test avec une alimentation externe réglable. Les perturbations d'alimentations étaient nulles mais les mesures d'angles prises moteurs en marche toujours aberrantes.
Conclusion
Si les erreurs ne proviennent ni de la CEM, ni d'un défault d'alimentation, peut être que cela est du à des perturbations sur le Bus I2c... (à vérifier!)
Afficheur LCD
Si nous n'avions pas rencontré autant de problèmes sur les moteurs et la boussole, nous avions pensé ajouter un afficheur LCD RGB de chez adafruit, qui nous aurait permis de visualiser différentes informations comme la mise en marche, l'angle mesuré de la boussole, rotation des moteurs, détection des obstacles par les capteurs, etc.

Partie capteurs

Tache effectué par JOLLY-AARIF Anïs et DEROUET Alexis

Partie balise

Tache effectué par PLOUVIEZ Florian et ELABBASSI Soufiane

Design

Tests

Coût de revient

Justin pec (discussion) 23 janvier 2014 à 23:45 (CET)