jeudi 11 juin 2009

Fribot 2009 : Challenge the Moon

Voici un long article passionnant agrémenté de photos et films, je conseille de regarder les films avec le son, bonne lecture !

Notre participation au concours de robotique LEGO Mindstorms NXT « Fribot 2009 » :

Thibaud, Norbert, Philippe et moi étions l'équipe invitée d'honneur au concours qui s'est déroulé en Suisse à Fribourg.

Nous ne nous connaissions pas, nous nous sommes rencontrés la première fois la veille du concours et cela a étonné les organisateurs Suisses !

Heureusement les exercices des mois précédents sur le forum SETECHNIC nous ont permis de nous entraîner et de connaître mutuellement nos qualités de mécanicien LEGO ou de programmeur Java.

Arrivé sur place nous assistons à un super show sur grand écran, avec sono, lumières et pour finir présentation de la piste recouverte d'un nuage de fumée artificielle.

Le thème était la conquête de la Lune avec bien entendu un drapeau à planter ! Une base d'atterrissage ou le robot se trouve au départ et une station lunaire ou le robot doit se rendre à l'arrivée. Entre les deux il doit traverser un champ d'astéroïdes, activer l'énergie de sa base et planter le drapeau. Chaque action rapporte des points.

Tout de suite la vidéo de présentation de Fribot pour se mettre dans l'ambiance, je vous conseille de la regarder avec le son :


Je continue avec la piste redessinée par Philippe, elle fait 3,60 M de long pour 2,10 M de large :


Deux robots participent ensemble, chacun partant de la base noire ou blanche qui est connue avant le départ.
Le robot doit passer les astéroïdes, c'est à dire trouver celui qui manque parmi les 4 emplacements (qui est aléatoire au départ) et passer par l’emplacement libre. Ensuite il doit appuyer sur son bouton pour éclairer la ligne lumineuse jusqu’à la base.
Après cela se complique, l'un des deux blocs de mousse est éclairé par un projecteur (aléatoire au départ). Si le robot est parti de la case blanche il doit y planter son drapeau, sinon il doit le planter sur le bloc de mousse non éclairé. Enfin le robot rejoint la base d'arrivée correspondant à sa couleur.
Il est autorisé d'aller appuyer sur le bouton de l'autre pour annuler son point et d'aller déterrer son drapeau pour annuler ses points.

Vers 8h30 heures nous commençons à définir notre stratégie pour remplir la mission.
Le planté du drapeau ne nous fait pas peur et en plus il rapporte 2 points, nous savons faire un robot qui peut ramasser un gobelet.
Appuyer sur l'interrupteur semble plus difficile, il faut viser juste et appuyer fort. Cela risque de déstabiliser le robot et ne rapporte qu'un point.
Nous donnons priorité au drapeau.
Philippe et Norbert attaquent le montage du robot pendant que Thibaud et moi écrivons l'algorithme et le programme. J'effectue des mesures sur le terrain pour préparer les déplacements du robot.
Nous savons que nous commencerons sur la base blanche, on prévoit le programme ainsi et on prévoit une variable dans le programme pour partir de la partir noire, en fait cela consiste à inverser les deux moteurs droite et gauche car la piste est symétrique, il faut aussi inverser le test de la lumière sur le bloc de mousse, sombre au lieu d'éclairé.

Vers 11 heures nous effectuons le premier test catastrophique : Le robot n'avance pas droit. Nous passerons la première manche de qualification à 15h05...
Nous échangeons le moteur le plus faible avec celui du bras, vérifions le bon positionnement des pneus sur les jantes et changeons un pneu à la gomme un peu plus molle : Le robot dérive moins mais cela reste insuffisant, au bout de 2 mètres le cap varie de plusieurs degrés et sa position est décalé de 5 centimètres.
La solution est d'aller se positionner contre un mur pour se repérer (dans un axe) et de faire patiner les roues en "poussant" le mur pour que le robot se mette bien perpendiculaire. Ainsi nous avons une position connue et un cap corrigé. Cela nécessitera de monter un pare choc à l'avant du robot, tant qu'à faire nos mécanos intègrent un capteur de contact et un autre derrière.
Ces modifications mécaniques font un robot plus long et les manouvres de rotation ne sont plus bonnes car la "queue" du robot va heurter des obstacles : Il faut modifier toutes les trajectoires, nous terminons ces modification à 15h00 et le plantage du bâton dans l’une des base n'est pas encore au point. Le robot part ainsi pour la première qualification. Une chance sur deux d'avoir l'autre base éclairée...

Photo de notre robot (à droite) juste après avoir planté le drapeau (photo piquée sur le site perso de Philippe). Avec le flash de la photo on ne voit pas que l'un des blocs de mousse est éclairé et pas l'autre, le capteur orienté vers le haut permet au robot de savoir si la zone est éclairée (la zone éclairée est plus grande que le bloc de mousse). On constate aussi que le drapeau se tient par 2 axes technics, il est porté par le robot avant le départ. On voit aussi le moteur et le système de bras chargé de planter le drapeau :

Notre équipe en pleine action :


Notre robot:


Voici une photo du tout début de la journée pendant le show d'introduction. Cela donne une idée des moyens déployé par l’association pour nous bluffer !


Première vidéo : Les premiers tests et la première manche de qualifications :


Nous avons marqué 3 points, 5 si le robot avait planté le drapeau... mais nous étions très contents de ce résultat, je crois que c'est la première fois que le robot a atteint la base d'arrivée, ouf. Vous pouvez voir le bloc de mousse éclairé et l'autre non éclairé.
Entre cette première manche et la suivante nous disposons d'un peu plus d'une heure. Nous décidons de fiabiliser les trajectoires pour ne pas risquer de heurter les blocs de mousse. Aussi de revoir ce problème de planté de drapeau et si on a le temps de s'attaquer au bouton à appuyer.
Nous avons écrit le code permettant d'aller appuyer sur l'interrupteur pendant que nos meccanos ont ajouté un bumper au dessus du capteur US. L'interrupteur est en hauteur et nous constatons que les autres équipes ont des difficultés car le bumber glisse au dessus de l'interrupteur au lieu de le presser.
Au moment des tests nous constatons un problème grave : Le robot n'arrive plus à détecter correctement les astéroïdes.
Nous écrivons alors un petit programme pour afficher la valeur lue par le capteur US et il s'avère qu'il voit toujours un objet même s'il n'y en a pas. On change de capteur US mais c'est pareil. A ce stade c'est la panique à bord, notre robot est aveugle. Le robot placé sur la piste voit mal, pourtant quand je le porte il détecte correctement un champ libre devant lui... A ce stade la partie "interrupteur" n'est pas finie ni testée, on ne l'utilisera pas. Le temps passe et il faut se présenter au départ de la deuxième manche de qualif, nous ne comprenons toujours pas pourquoi notre robot est aveugle. Avec beaucoup de chance (une chance sur 4 en fait) le robot passera le champ d'astéroïdes, nous comptons tout de même planter le drapeau et arriver à la base sain et sauf.

Quelques photos prises par Philippe :
L'équipe Steam Bot au grand complet :

Prise de mesures :

Thibaud et moi en pleine action :
Le public :

Voici la film d'un essai avec notre robot aveugle suivi de la seconde manche de qualification :


Comme vous pouvez le constater le robot détecte systématiquement un objet. L'algorithme est conçu pour tester les 3 premiers astéroïdes et par déduction passer à l'emplacement du 4éme si les 3 autres sont là.
Dés les premières secondes de la 2éme manche nous comprenons que tout est perdu, le robot s'accroche à l'astéroïde et patine, sort de sa trajectoire, ne peut plus se repérer contre le mur. Pire, il percute l'autre robot ce qui vaut -2 points. Le minimum étant 0 pour une manche cela limite les dégâts.
A ce stade nous sommes désolés et bien conscients que cette erreur risque de nous faire échouer aux qualifications. Il y a 3 manches et c'est le total des points qui compte. Le "pool" compte 4 équipes, il faut être parmi les 2 meilleures. Un rapide calcul des points des autres et une estimation de leurs points à venir nous montre qu'il faut absolument faire les 6 points sur la 3éme manche.
Nous commençons par comprendre que le robot est aveuglé par le "bumper" situé au dessus du capteur US, il est légèrement en avant par rapport au capteur. Si devant un champ libre cela n'est pas gênant (robot porté par exemple), cela devient perturbant quand le robot est au sol ou quand il y a des objets même sur les côtés. En fait les ondes ultra sons doivent rebondir sur le bumper puis sur le sol et finalement réussir à revenir au capteur.
Philippe remarque aussi le problème de la batterie que nous n'avons pas rechargé depuis le matin. Il s'assure de la recharger chaque fois que le robot est sur notre table.
Sans bumper impossible d'appuyer sur le bouton et d'avoir les 6 points, c'est un problème. Il nous reste 20 minutes avant le départ...
Nous remettons en place le bumper et en fait il est trop bas pour appuyer sur le bouton : GENIAL. Afin que le bumper ne glisse pas sur le bouton nous y ajoutons deux petites poulies avec pneus caoutchouc, le résultat est probant.
Malgré la rehausse le capteur US est encore perturbé pour bien voir le premier astéroïde, cela est du au mur qui est derrière. Nous décidons, afin de ne pas refaire tout l'algorithme d'ajouter un test du 4éme astéroïde avant de foncer dessus bêtement. S'il est là le robot considère que c'est le premier astéroïde qui est absent est fait demi-tour. De toute manière il vaut mieux prendre un risque et tenter 6 points que d'assurer 5 points qui seront certainement insuffisants.
Voici les photos de ce fameux bumper rehaussé :



Voici le film de la 3éme manche de qualifications, filmé par Norbert :


A deux reprises le robot utilise le mur pour se réindexer dans l'axe des Y et aussi une fois l'îlot central pour caler l'axe des X avant de viser l’interrupteur.
Notre robot est devenu fiable et précis.
Avec les 6 points de cette manche nous voilà propulsés en première position pour la qualification. Nos adversaires ne se sont pas améliorés et certains ont rencontrés des problèmes.
La prochaine manche (1/4 de finale) sera éliminatoire, ce sera un duel avec le robot adverse : celui qui a le plus de point passe en 1/2 finale et l'autre est éliminé. En cas d'égalité c'est le plus rapide aux astéroïdes qui l'emporte.
Sur la photo ci-dessous le raccord des deux planches représente la ligne à passer le premier :

On voit aussi les "bumpers" de ces robots adverses, comme l'interrupteur est haut le robot se cabre en appuyant sur le bouton et cela ne fonctionne pas.
Nous allons donc pousser les moteurs au maximum pour cette ligne droite (à partir du moment où le robot à trouvé le passage dans les astéroïdes).
Nous faisons à nouveau de nombreux tests sur la piste d'essai : Le robot est bien fiable.
Nous avons pris connaissance de notre adversaire qui est "Wall-e". Ils n'ont jamais marqués les 6 points donc nous sommes confiants pour cette manche. Au cas où nous devrions être les plus rapides au passage des astéroïdes.

¼ de finale : Nous étions relativement surs de nous, pourtant vous allez assister à quelques imprévus :


Voilà, on ne sais pas le résultat, l'arbitre décidera si nous avons poussé l'autre ou pas, d'un autre côté l'autre à perdu une roue mais comme c'est sous le robot on le découvre après le match.
Finalement l'arbitre accorde les 2 points à chaque équipe pour les astéroïdes passés et nous gagnons car nous étions plus rapides à les passer.
Notre robot était programmé pour éviter les collisions sur certains trajets : Si le capteur US détecte un obstacle à moins de 20cm le robot s'arrête et attend que l'obstacle disparaisse. Cette programmation est dangereuse : Si le robot adverse s'arrête définitivement sur la piste alors le notre aussi. De plus il faut faire attention à ne pas détecter les bords de la piste ou les objets fixes. Pour cette raison ce programme est peu utilisé. Dans cette manche cela n'a pas été efficace.
Pour la manche suivante nous allons éviter de rentrer dans l'autre, mais nous estimons qu’à ce stade de la compétition l'autre ne se bloquera pas bêtement sur un obstacle. Notre stratégie est simplement d'attendre que l'autre ait fini ses actions pour effectuer les nôtres. Le temps maximum est de 3 minutes, actuellement nous terminons en 1m30s donc le robot a du temps devant lui. Il restera 45 secondes contre le mur avant d'aller planter son drapeau, le voici tout de suite en vidéo pour la demi-finale :


L'autre équipe n'a pas réussi à appuyer sur le bouton, cela suffit à offrir la victoire de cette demi-finale à notre équipe et notre robot bien obéissant.
Nous constatons que notre adversaire pour la grande finale a beaucoup d'avance sur nous :
- Dés le début des qualifications il faisait 5 ou 6 points
- Lors de la demi-finale son robot est allé appuyer sur le bouton de l'autre pour lui couper son énergie. A ce sujet il a offert un point à l'autre puisque celui-ci n'avait pas appuyé correctement sur le bouton.
- Il attend aussi 45 secondes avant d'aller au centre du terrain.
- Il semble tester un programme qui déterre le drapeau de l'autre, brrr.

Nous disposons de peu de temps pour modifier le programme, très peu en fait. On estime qu'il y a une chance sur deux pour qu'il essaie encore d'appuyer sur notre bouton, soit il change sa stratégie soit il ne change pas. Il prépare un déterreur de drapeau mais est-ce juste pour nous amener à croire qu'il ne vas pas s'attaquer au bouton ?
Nous décidons simplement de déplacer l'attente de 45 secondes plus tard dans le programme : après avoir appuyé sur le bouton :
- Nous devrions avoir le champs libre s'il attend toujours au même endroit
- En restant devant le bouton nous le protégeons, s'il vient s’attaquer à notre bouton il nous rentrera dedans et perdra 2 points.
- Le programme est très peu modifié et reste fiable.
Malgré cela nous sentons bien que l'adversaire est plus fort, les chances de gagner sont faibles, voici la vidéo de cette grande finale :


Voilà, le robot adverse était plus rapide aux astéroïdes (nous avons oublié d'enlever des tempos à certains endroits, arf...). Mais il loupe son drapeau, pas de chance ou manque de fiabilité, ou encore modification de dernière minute ? Tant mieux pour nous !

C'était une journée vraiment formidable et très bien orchestrée, la confiance dans l'équipe a permis un travail en commun impressionnant. Nous étions vraiment complémentaires tous les 4. La journée commence par des difficultés techniques et se termine en exquis jeux de stratégies et bluffs.

Podium par Philippe :

1 commentaire:

Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.