SuiveurLigne2011-1 : Différence entre versions
(→Il n'y a pas que le physique qui compte : le programme a aussi son importance...) |
(→Il n'y a pas que le physique qui compte : le programme a aussi son importance...) |
||
Ligne 12 : | Ligne 12 : | ||
== Il n'y a pas que le physique qui compte : le programme a aussi son importance...== | == Il n'y a pas que le physique qui compte : le programme a aussi son importance...== | ||
− | [[File:rotation.jpg|Pour mieux comprendre ? | + | [[File:rotation.jpg|thumbs|Pour mieux comprendre ?]] |
Voici une version simplifiée de l'algorithme que nous avons créé afin de donner au moins une âme, sinon une raison de vivre, à notre nouveau rejeton.<br/> | Voici une version simplifiée de l'algorithme que nous avons créé afin de donner au moins une âme, sinon une raison de vivre, à notre nouveau rejeton.<br/> | ||
S'il capte la couleur qui lui a été demandé de rechercher, il avance selon la direction qu'il suivait. Sinon, il tourne (d'un angle représenté ici par 50) par à-coups successivement à gauche puis à droite (ou l'inverse, mais le résultat est le même !), en continuant à rechercher le ruban de couleur qu'il suivait avec tant d'ardeur. S'il atteint un certain angle par rapport à sa position d'origine (représenté ici par 200 du côté droit du robot) sans avoir perçu de couleur, il revient à sa position de départ (en effectuant donc une rotation de 200 vers la gauche) puis avance tout droit. Il s'arrête si, hélas, il n'a rien capté au bout de 5 secondes. Si, lors de son avancée ou de sa recherche du ruban autour de lui, il capte de la couleur, il revient au début de l'algorithme.<br/> | S'il capte la couleur qui lui a été demandé de rechercher, il avance selon la direction qu'il suivait. Sinon, il tourne (d'un angle représenté ici par 50) par à-coups successivement à gauche puis à droite (ou l'inverse, mais le résultat est le même !), en continuant à rechercher le ruban de couleur qu'il suivait avec tant d'ardeur. S'il atteint un certain angle par rapport à sa position d'origine (représenté ici par 200 du côté droit du robot) sans avoir perçu de couleur, il revient à sa position de départ (en effectuant donc une rotation de 200 vers la gauche) puis avance tout droit. Il s'arrête si, hélas, il n'a rien capté au bout de 5 secondes. Si, lors de son avancée ou de sa recherche du ruban autour de lui, il capte de la couleur, il revient au début de l'algorithme.<br/> |
Version du 22 mars 2012 à 14:17
Sommaire
Introduction
Que peut-on faire avec une boite de Legos, un capteur de couleurs et un logiciel informatique ? Bien plus de choses qu'on ne l'imagine, comme par exemple un robot suiveur de ligne !
Cette page a pour but de vous présenter LignoBear, un robot construit en Lego MindStorms et que nous avons programmé afin qu'il sache suivre un ruban de couleur fixé au sol, représentant un circuit changeant et même discontinu.
LignoBear : un peu d'anatomie.
Quelques Legos, un emplacement pour une Foxboard afin de communiquer avec le robot à distance et un boitier de piles, trois câbles et un mouchoir en papier sommairement bricolé afin de protéger le capteur des lumières extérieures qui pourraient fausser la mesure : vous avez là une bête étrange mais parfaitement apte à accomplir le travail pour lequel elle a été créée. (voir les photos jointes)
Toutefois, cette construction rudimentaire nous semblant tristement dénuée de vie, nous lui avons fait don d'un visage et d'une plaque d'immatriculation arborant fièrement le nom du courageux robot : LignoBear.
Il n'y a pas que le physique qui compte : le programme a aussi son importance...
Voici une version simplifiée de l'algorithme que nous avons créé afin de donner au moins une âme, sinon une raison de vivre, à notre nouveau rejeton.
S'il capte la couleur qui lui a été demandé de rechercher, il avance selon la direction qu'il suivait. Sinon, il tourne (d'un angle représenté ici par 50) par à-coups successivement à gauche puis à droite (ou l'inverse, mais le résultat est le même !), en continuant à rechercher le ruban de couleur qu'il suivait avec tant d'ardeur. S'il atteint un certain angle par rapport à sa position d'origine (représenté ici par 200 du côté droit du robot) sans avoir perçu de couleur, il revient à sa position de départ (en effectuant donc une rotation de 200 vers la gauche) puis avance tout droit. Il s'arrête si, hélas, il n'a rien capté au bout de 5 secondes. Si, lors de son avancée ou de sa recherche du ruban autour de lui, il capte de la couleur, il revient au début de l'algorithme.
Pourquoi 50 ? Il s'agit d'une unité non homologuée que nous avons créée et adaptée par rapport aux moteurs actionnant les chenilles du robot : elle correspond environ à 10°. (voir schéma représentant les rotations)
Nul n'est parfait : erreurs et échecs
Capter la couleur
Dans la première version de l'algorithme, LignoBear ne tournait pas par à-coups mais par grands angles. Ceci le faisait reculer et il arrivait donc qu'il repasse au-dessus d'une ligne de couleur, sans la capter puisque toute son énergie était dirigée vers sa rotation. Nous avons donc inclus le principe de "petits angles" qui lui permettaient de sagement rester sur place quand il cherchait la couleur.
Ivre ?
Nous avons très tôt observé que la trajectoire de LignoBear était loin d'être droite, et qu'il tournait davantage d'un côté que de l'autre. Avions-nous mis trop de vin dans son biberon ? Fières de notre rôle de mère, nous avons rejeté cette solution avec fougue et avons préféré croire que ses moteurs étaient réglés d'une façon différente et que l'un était donc plus puissant que l'autre, gênant son déplacement. Nous avions pallié à ce défaut en changeant le virage de 50 vers la droite par un virage de 15, mais nous nous sommes finalement rendues compte qu'en éloignant ou rapprochant les roues du corps du robot, sa trajectoire se retrouvait corrigée...
Afin de vérifier si les roues sont correctement emboîtées, la méthode est simple : il suffit de poser le robot sur une couleur qu'il ne captera pas et marquer sa direction de départ, puis lancer le programme. Si, à l'issue de ses rotations, il repart dans la direction précédemment marquée, les roues sont bien mises. S'il tire à droite, il faut rapprocher la roue avant droite du châssis, et vice-versa.
Un bon informaticien est un informaticien paresseux
Nous avions au début oublié ce précieux adage, et avions créé un très long programme, qui risquait donc davantage de comporter des erreurs et serait plus long à modifier. Grâce à une astuce, nous avons finalement divisé la taille de ce programme par deux, en réunissant les commandes de rotation droite et gauche, et en les différenciant par une variable qui était tour à tour positive et négative et qui déterminait dans quelle direction le robot tournerait.