Nous avions besoin d’un système de détection de la couleur des cercles entourant les trous pour plusieurs raisons :
identifier si le trou était à nous ou pas
utiliser le cercle pour recaller la position et le cap du robot, afin de passer correctement sur le trou.
Il existe des détecteurs industriels capables de donner précisément les composantes de la couleur de l’objet qu’ils regardent. Mais ils valent une fortune.
Une autre solution était d’utiliser une CMUcam pour cela (d’autres l’ont fait je crois), mais nous en avions déjà besoin pour le repérage des totems, et elle n’avait donc pas l’orientation adéquate. Quant à en mettre une deuxième, ça commençait à coûter un peu cher, et se posait aussi le problème de place. Sans compter que vu la résolution, nous n’étions pas convaincus que la précision aurait été suffisante pour atteindre les objectifs.
Nous avons donc conçu un capteur maison, adapté au problème. En fait, il n’est pas nécessaire d’obtenir une information de couleur précise et générique, mais juste de savoir si on se trouve au-dessus d’une zone rouge, bleue ou autre.
Vu que les couleurs qui nous intéressent se trouvent être des primaires (au sens synthèse additive), le problème se simplifie grandement. En effet, il suffit alors d’éclairer la surface analysée avec la couleur recherchée et de mesurer la quantitié de lumière reçue par réflexion. Celle-ci sera maximale lorsque couleur de la surface et couleur de l’éclairage seront les mêmes (ou presque), en vertu du principe de physique qui explique pourquoi on voit un object d’une certaine couleur (en gros, parce qu’il absorbe toutes les autres longeurs d’onde).
Le capteur utilisé est un HAMAMATSU S6986 dont vous trouverez datasheet et note d’application dans la rubrique Datasheets / Détecteurs et capteurs optiques.
Il fonctionne comme le SHARP IS471F, sauf qu’il travaille dans le visible et non dans l’infra-rouge. Il est lui aussi équipé d’une sortie modulation destinée à piloter l’éclairage et ainsi s’affranchir des interférences avec d’autres capteurs et des conditions de luminosité ambiante. Il sort un signal binaire indiquant s’il y a eu détection ou non. Pour régler la sensibilité de détection, il suffit de régler le courant traversant la LED par un simple ajustable.
Puisque nous avons deux couleurs à détecter, la source de lumière est multi-chromatique. Pour des raisons de compacité, une LED RGB haut-rendement a été utilisée (encore que le prototype fonctionnait avec deux LEDs standard). Les anodes rouge et bleue sont pilotées par une paire de transistors complémentaires (BC547 et BC557) de manière à avoir un allumage exclusif des couleurs avec un seul signal de commande.
Le schéma électronique est le suivant :
L’ensemble a été packagé dans un raccord pour tube électrique de 16mm, de manière à protéger les composants, permettre une fixation facile et réglable et offrir également une protection vis à vis de l’éclairage ambiant. A noter sur ce point, que le détecteur fonctionnait très bien à l’air libre également, et qu’il a fallu peindre l’intérieur du tube en noir mat pour réduire les réflexions (qui ont engendré quelques réactions erratiques).
La photo ci-dessous montre un détecteur sorti de son tube.
Il est constitué de 2 platines :
la première, visble ici, et portant le capteur, la LED RVB et le condesnsateur de découplage de l’alim (au plus près du capteur comme conseillé par le fabricant)
la deuxième, qu’on devine à l’arrière de l’entretoise, portant le reste des composants de la logique de commande
Ces deux platines sont reliées par simple enfichage, de manière à pouvoir être séparées facilement en cas d’intervention. L’entretoise grise qui les sépare est un bout de tube électrique, donc la fonction est de maintenir l’ensemble à l’intérieur du tube protecteur, par simple friction.
On notera l’inévitable gainage de la LED avec de la gaine thermo afin d’éviter qu’elle n’éclaire le capteur en direct. On se rend compte de son importance quand plus rien ne marche et qu’on en cherche la raison comme un malade, jusqu’au moment où on se rend compte que le bout de gaine s’est fait la malle...
Pour faciliter les manipulations, les résistances ajustables de réglage de la puissance d’éclairage ont été déportées.
Cela s’est avéré très utile, car la peinture rouge des tables de la Coupe était un peu limite (il aurait fallu une ou deux couches de plus pour couvrir correctement le vert), et la détection de la frontière rouge/vert était peu fiable. Un petit coup de tournevis à l’ajustable correspondant avec le robot sur une des tables a résolu le problème de manière définitive.
Deux capteurs de ce type ont été installés en alignement avec l’axes des roues motrices, espacés d’environ 8 cm.
Ils sont tenus en place par des lyres de fixation murale pour tube électique, permettant ainsi un réglage facile de la position par rapport au chassis du robot. Ces lyres sont elles-même montées sur une pièce en alu qui coulisse le long de l’axe des roues et s’immobilise dessus par une simple vis de pression.
Les algorithmes de calage du robot utilisent les transitions couleur/vert pour faire pivoter le robot de manière à amener les 2 détecteurs sur la limite du disque, et aligner ainsi l’axe du robot avec un diamètre du trou. Selon la position relative du robot par rapport au trou au moment de son approche, plusieurs cas de figure ont été identifiés, et des séquences de mouvements adaptées ont été élaborées. Contrairement à l’idée initiale, la solution définitive utilise la sortie de la zone de couleur et non son entrée, et ce pour les raisons suivantes :
évite de faire 3/4 tour dans certains cas d’approche
effectue le calage juste avant que le dispositif de dépose ne soit au niveau du trou, réduisant ainsi l’ajustement final effectué par les capteurs I/R placés à l’arrière.
Pour tous les détails, se reporter à l’article Dépose des balles
capteur HAMATSU : $4 chez Junun
LED RGB : 1,39€ chez TotalStyles
transistors : 0,30€ les 2
ajustables : 0,60€ les 2
résistances et composants divers : < 1€
Total : environ 7€ par détecteur
Le recalage optique n’est pas recalé :-) 100% de réussite : nous n’avons pas raté une seule dépose.
De plus, le robot nous a fait une surprise de taille (mais logique si on y réfléchit). Les stratégies employées débutaient par un parcours prédédini, passant par les trous de la couronne externe. Lors d’un match, nous avons été heurtés et déviés de notre trajectoire, et le robot s’est dirigé vers le centre du terrain. A ce moment, nous pensions que tout était perdu, car en l’absence d’odométrie, il n’avait plus aucune connaissance de sa position. Il se trouve que chemin faisant il a rencontré un trou de la couronne interne, s’est recallé dessus, a déposé sa balle et a commencer à parcourir cette nouvelle trajectoire. C’est pas beau ça ?
Bonjour,
j’ai un souci avec votre montage. En faite, toute les couleurs sont detectés par les 2 LED. Je ne sais pas d’ou ca vient.
Cordialement
Bonjour,
Il me faudrait plus de précision sur la nature des modifications apportées au montage. Le mieux serait de m’envoyer le schéma électronique (en cliquant sur "Eric" dans la liste des auteurs en haut de l’article ou en envoyant un mail à eric at pobot dot org).
Les transistors offrent un gros avantage : ça prend moins de place qu’un boitier DIL qui ne serait pas rentré dans le carénage souhaité (tube électrique D16). C’est vrai qu’à l’heure du tout numérique, on a tendance à oublier les services qu’ils peuvent rendre ;-)
Par contre je ne suis pas certain de comprendre la remarque sur l’utilisation de transistor interne. En fait, il n’est pas utilisé pour gérer l’alternance des couleurs, mais la modulation des LEDs, sur laquelle le détecteur interne est synchronisé (comme pour les IS471 de chez SHARP). C’est l’utilisation standard pour ce type de capteur à modulation de la source. L’alternance des couleurs est pilotée par le signal SELECT, géré par le MCU.
Merci pour ta visite ;-)
PS : fais-tu partie de l’équipe ENISE (Coupe de France de Robotique) ?
Bonjour,
je ne comprend pas trop votre schema car les 2 leds sont relier sur la meme commandes ! Comment on peus s avoir la couleur si on l’éclaire de bleu et de rouge.
Mercie en vous souhaitant un bon concour
Bonjour,
Si on regarde bien le schéma, on voit qu’il y a un transistor PNP et un transistor NPN pour commander les LEDs. Par conséquent quand le signal de commande est tel que l’un est passant, l’autre ne l’est pas. Et réciproquement.