Afin d'explorer la totalité du labyrinthe, le robot suit le mur à sa droite et tourne à gauche si un mur se trouve face à lui. Ainsi, la construction du robot suit le principe de fabrication proposé dans le manuel LEGO MINDSTORMS Education afin d'obtenir un assemblage mobile basique muni de deux servomoteurs et d'une roue folle pour les déplacements. Pour tourner dans une direction, le servomoteur correspondant ralentit, s'arrête ou change de sens de rotation suivant l'angle et la position finale recherchée. Par exemple pour tourner à droite à 90°, le servomoteur droit s'arrête complètement. Comme l'une des roues est entrainée plus rapidement que l'autre elle parcourt une plus grande distance ce qui se traduit par une rotation du robot. Lorsque les deux moteurs tournent dans un sens contraire à la même vitesse, le robot tourne sur lui-même.
Afin de détecter les murs latéraux, un capteur à ultrasons est placé sur le robot. Ainsi, d'après les caractéristiques du capteur, celui-ci relève la présence d’un mur ou non et la distance par rapport au robot. Le fait que le capteur soit placé sur la face gauche du robot et dirigé vers la droite de ce dernier résout le problème de zone aveugle car cela permet d’éviter que les murs soient trop proches du capteur.
Pour détecter les murs devant le robot, un capteur de contact est positionné à l’avant de celui-ci. Dans le but d’agrandir la surface de détection, une large tige est placée sur une plate-forme mobile. Lorsque le robot entre en contact avec un mur, cette plate-forme vient appuyer sur le bouton poussoir du capteur.
Les balles sont repérées et identifiées par un capteur photosensible placé sur un support à l’avant du robot, perpendiculairement au sol du labyrinthe. Ainsi, les balles passent sous le capteur, dans sa surface de détection, pour être détectées.
Le robot possède finalement cette apparence dans SolidWork :
Une photographie du robot final :La saisie de la balle est gérée par une pince placée à l'avant du robot sur une plate-forme mobile qui, lorsque le préhenseur touche un mur à l'avant, vient appuyer sur le capteur de contact afin qu'il détecte l'obstacle. Elle entoure la zone de détection du capteur photosensible et s’ouvre horizontalement afin d’avoir le plus grand champ d’action possible pour attraper la balle.
Le servomoteur qui gère la fermeture de la pince est quant à lui installé sur le support du capteur photosensible au dessus de la pince et est statique. Ceci amène donc l’utilisation d’élastiques (jaunes) pour transmettre la rotation du moteur par un système de poulies à un ensemble de roues dentées sur la plate forme mobile qui transmettent la rotation d’un plan vertical à un plan horizontal et entraîne les pinces. Deux autres élastiques rouges plus courts et donc moins extensibles ont été placés afin de retenir la plate-forme mobile et empêcher qu’elle soit tirée vers le haut par les élastiques jaunes. Ainsi le servomoteur peut gérer les mouvements du préhenseur et celui-ci reste mobile lorsqu’il touche un mur et appuie sur le capteur de contact. La pince en elle-même est composée de deux pièces identiques comprenant un décalage au bout afin qu'une fois en face l'une de l'autre elles s'assemblent lors de la fermeture en se superposant. Aussi, lorsque la pince est en position ouverte, elle dépasse suffisamment vers l'avant du robot pour que lorsque celui-ci rencontre un mur, le mur ne touche pas le capteur photosensible. Une butée en pièces LEGO bloque l'ouverture de la pince à un angle maximum. En position fermée, les deux pièces s'assemblent et forment une surface plane et large pour le contact avec les murs à l'avant. La butée en LEGO est allongée pour venir protéger la pince de contact avec des murs latéraux et non de face ce qui peut amener son ouverture et la perte de la balle. La butée complète aussi la largeur de la surface de détection des murs avants.
La pince a été modélisée en trois dimensions sous le logiciel de CAO Solidworks ( logiciel de Conception Assistée par Ordinateur) à partir d'un modèle crée en pièce de LEGO convertie au format STL puis imprimée à l’aide d’une prototypeuse rapide par l’ajout successif de couches de plastique. La maquette virtuelle tridimensionnelle est découpée en de multiples lamelles bidimensionnelles qui sont imprimés les unes par-dessus les autres par la prototypeuse pour reformer l’objet de base.
Pour économiser le plastique une gorge a été créée le long de la pièce, ce qui permet d'enlever de la matière et de garder la rigidité de la pince. Le poids de ce système (support, capteur photosensible, servomoteur et préhenseur) étant trop important à l’avant il cause le basculement du robot autour de l’axe des roues. Pour compenser et mieux répartir les masses sur l’ensemble de l’assemblage, ces roues et leurs servomoteurs ont été avancés vers l’avant et la roue folle légèrement reculée.
Voici la forme de la pince :
Comme il a été dis précédemment, le fonctionnement du robot peut se décomposer en trois grandes parties : l'exploration du labyrinthe, la détection suivie de l'identification et la saisie de la balle, et enfin le transport de celle-ci jusqu'à la sortie. Chacune de ces étapes a nécessité une recherche sur l'aspect mécanique du robot, et surtout sur sa programmation et la résolution de problèmes rencontrés afin d'automatiser le comportement et de rendre le robot entièrement autonome. Ces trois étapes sont l'objet des sous-parties suivantes.
Afin d'explorer la totalité du labyrinthe, le robot suit le mur à
sa droite et tourne à gauche si un mur se trouve face à lui. Ainsi,
le capteur à ultrason placé sur le robot dirigé face au mur à sa
droite contrôle la présence de celui-ci ou non à moins de 40 cm.
Tant qu'un obstacle est détecté à une distance inférieure à cette limite,
le robot avance tout droit. Il tourne à droite perpendiculairement
dès que la mesure dépasse cette limite. Le capteur de contact est
placé à l'avant du robot et détecte s’il se trouve face à un mur et
qu'il ne peut aller à droite. Il tourne alors à gauche. Ainsi dans
la théorie le robot peut explorer la totalité du labyrinthe.
Or,
dans la pratique, là où il devrait aller tout droit, des éléments
mécaniques et physiques le font dévier de sa trajectoire. La réponse
à ce problème est que le robot corrige sa trajectoire en fonction de
sa distance par rapport au mur. C'est cette dernière option qui a
été au final adoptée. Ainsi, lorsque le robot détecte à l'aide du
capteur à ultrason qu'il se trouve à une distance inférieure à 21 cm
du mur, il tourne légèrement à gauche et si la mesure est supérieure,
il tourne légèrement à droite. Il avance donc en zigzaguant mais
cela se passe sur une distance parcourue assez longue pour que ce
soit presque imperceptible et que le robot donne l'illusion
d'avancer parfaitement droit.
La programmation de la brique
intelligente suivant la chaîne d’énergie correspondant à cette étape
et cette stratégie de déplacement est représentée par cet
algorigramme :
Le capteur photosensible placé à l'avant du robot et dirigé vers
le sol mesure en continu la réflexion de la lumière rouge qu'il émet
sur celui-ci. Dans le cas où une balle s'interpose dans cet espace,
la luminosité change car sa couleur absorbe plus ou moins la lumière
rouge. Par conséquent, le robot est programmé pour reconnaître que
cela traduit la présence d'une balle.
Il doit ensuite
l'identifier grâce au taux de luminosité qu'il reçoit d'elle. La
création d'un petit programme qui amène le robot à indiquer la
valeur numérique mesurée par le capteur photosensible permet de
dresser ce tableau :
Objet | Couleur perçus |
---|---|
Balle rouge | < 45% |
Balle bleue | ~ 38% |
Sol du labyrinthe | ~ 35% |
Le robot identifie la balle rouge lorsque la valeur qu'il reçoit
du capteur photosensible dépasse 45 %, une valeur élevée due au fait
que le rouge n‘absorbe pas la lumière rouge émise par la diode du
capteur. Mais la valeur perçue par la balle bleue est trop proche de
celle du sol du labyrinthe car ils ont presque la même absorbance et
au moindre écart de luminosité dans la pièce, s'il fait plus sombre
ou plus clair ou si un mur du labyrinthe fait de l'ombre, le robot
confond la balle et le sol. À cause du manque de précision du
capteur, l'objectif qui a été choisi pour le robot est la détection,
l’identification et la saisie de la balle rouge uniquement. Le sol
du labyrinthe ayant une valeur perçue bien moins importante, le
seuil de détection de la balle est placé à 40%. Ainsi, malgré les
variations de luminosité, la balle rouge sera toujours détectée et
ne sera pas confondue avec le sol du labyrinthe ou avec la balle
bleue.
Toute ces valeurs changent en fonction de la luminosité
de la pièce et de la couleur de la lumière sur le labyrinthe, ce qui
amène un réglage des valeurs avant chaque utilisation du robot.
La saisie de la balle est gérée par le préhenseur placé à
l'avant du robot décrit dans la partie précédente. La programmation
de cette étape qui suit la chaine d’information et d’énergie
correspondante fonctionne en parallèle avec le programme de
l’exploration du labyrinthe et est représentée par cette
algorigramme :
Cette étape arrive après la saisie de la balle et en parallèle avec l’exploration du labyrinthe. En effet, lorsque le robot trouve la balle rouge et l’attrape, les examinateurs retirent la plaque en bois obstruant la sortie. Afin de la détecter, le capteur photosensible contrôle en continu la présence de la balle dans le préhenseur pendant qu’il explore le labyrinthe car lorsque le robot arrive à son terme celle-ci tombe à cause de la surélévation. Comme la pince est placée à l’avant du robot, celui-ci ne bascule pas et s’arrête. La valeur de luminosité perçue par le capteur à l’extérieur du labyrinthe est inférieure à 30%. Comme celle du labyrinthe est de 35%, si la balle se déplace dans les pinces et vient à disparaître de la zone de détection puis revenir le robot ne détecte pas la sortie du labyrinthe. Ainsi, cette étape ne demande pas de changement dans le mécanisme et la forme du robot mais un travail de programmation uniquement. Ce programme suit donc celui de la saisie de la balle vu précédemment en parallèle avec l’exploration du labyrinthe. À son terme, il stoppe le robot et le programme complet car il ne faut pas que le robot poursuive son exploration, l’objectif final ayant été rempli. Il est représenté par l’algorigramme suivant :
Voici un aperçu du programme utilisé :