Projet Sqyrob : programmation du robot Thymio

Nous avons commencé à programmer le robot Thymio à l’aide d’un logiciel sur l’ordinateur. Dans le logiciel Thymio Suite, nous avons commencé par programmer avec VPL (Langage de Programmation Visuel) qui est parfaitement adapté à la découverte en maternelle, sans avoir besoin de savoir lire.

VPL en mode basique

Nous avons commencé par apprendre les bases du logiciel en VPL :
* Les cases orange situées à gauche représentent les "évènements". Nous les avons appelées les cases "S’il se passe ceci".
* Les cases bleues situées à droite représentent les "actions". Nous les avons appelées les cases "alors fais cela".
* Tout à droite, ce que nous disons au robot avec des images est transcrit en langage de programmation. Nous avons utilisé cette zone occasionnellement pour être précis, par exemple pour bien faire avancer les moteurs des deux roues à la même vitesse de 300 (et non de 300 d’un côté et 250 de l’autre, comme cela arrivait souvent en utilisant la souris). Mais à part cela, cette partie est trop compliquée pour nous, nous la laissons pour les élèves plus âgés.
* La grosse flèche verte située en haut permet d’envoyer le programme dans la mémoire du robot.
* La disquette située en haut à gauche permet d’enregistrer le programme dans l’ordinateur, pour pouvoir le corriger, le réutiliser et le conserver afin de le remettre un autre jour dans la mémoire du robot (laquelle s’efface lorsqu’on éteint le robot). Nous avons au passage découvert ce qu’était une disquette ;-)

Dans notre premier essai, nous avons programmé :
* Le bouton central en tant que « stop » : nous avons constaté qu’il est bien de toujours commencer par programmer un « stop » pour pouvoir arrêter le robot en cas de problème.
* Les flèches de déplacement vers l’avant et l’arrière : nous avons constaté qu’il est plus facile d’utiliser Thymio lorsqu’on ne le fait pas avancer trop vite.
* Les flèches de déplacement vers la gauche et la droite : nous avons testé différentes manières de faire tourner le robot, soit sur lui-même, soit en continuant d’avancer, en fonction du sens de rotation et de la vitesse que l’on donne aux roues.
* Nous avons également ajouté aux déplacements des modifications des couleurs et des sons émis par le robot.
* Nous avons testé des interactions avec le robot qui soient autres que les boutons : nous avons commencé par tester de faire s’arrêter le robot lorsqu’on tape des mains. Mais hélas, cela ne fonctionnait pas bien et nous avons enlevé cette ligne de code.
* Nous avons ensuite programmé le fait que si on touche le robot, il s’arrête. Cette fois-ci, cela a bien fonctionné et nous avons laissé cette ligne de code ; cela fait une 2e manière d’arrêter le robot.
* Pour finir ce premier programme de découverte, nous avons utilisé les capteurs situés sous le robot : lorsque ces capteurs sont cochés en noir, c’est-à-dire lorsqu’ils ne voient plus rien, alors le robot s’arrête. Cela permet au robot de s’arrêter tout seul avant qu’il ne tombe de la table.


VPL en mode avancé

Nous avons ensuite repris notre 1er programme (pour ne pas avoir à refaire ce que nous avions déjà programmé) et nous avons testé de nouvelles fonctionnalités pour tenter de reproduire le mode « explorateur » de Thymio.
* Nous avons dit au robot que si son capteur situé à l’avant au milieu détecte un obstacle, alors il tourne à droite.
* Nous nous sommes rendu compte que le robot se mettait alors à tourner sans s’arrêter. Il nous fallait donc lui dire une phrase du type : « Tourne un petit peu puis continue à avancer. »
Pour cela, il nous fallait un minuteur. Nous l’avons obtenu en activant le « mode avancé » de VPL.
* Nous avons alors pu dire au robot : « Lorsque tu détectes un obstacle, tourne à droite et démarre le minuteur », puis sur une autre ligne : « Lorsque le minuteur sonne, roule à nouveau tout droit. »
* Le mode avancé de VPL fait apparaître des précisions concernant les capteurs. Nous avons ainsi réglé plus finement la distance à laquelle les capteurs du dessous regardent, pour faire arrêter le robot au plus tôt lorsqu’il arrive en bordure de table. Cela permet d’éviter que le robot ne soit bloqué par son "support avant" qui auparavant sortait de la table avant l’arrêt de Thymio.
* Nous avons ensuite configuré un 2e capteur avant, celui situé sur la droite de Thymio. Nous avons reproduit à peu près la même ligne que pour le capteur central : « Lorsque tu détectes un obstacle, tourne à gauche et démarre le minuteur », puis sur une autre ligne : « Lorsque le minuteur sonne, arrête-toi. »
Mais le logiciel nous a affiché un message d’erreur reliant les 2 lignes des minuteurs. Nous avons alors compris qu’il n’est pas possible de donner 2 consignes différentes (« Avance » ou « Arrête-toi ») pour un même évènement (« Le minuteur sonne »). Il nous fallait réussir à marquer une différence entre les 2 minuteurs, pour que le robot sache quel minuteur sonnait.
Pour cela, nous avons utilisé les cases vertes représentant des lumières affichées sur le dessus du robot. Lorsque nous activons un minuteur, nous allumons en même temps une lumière puis, sur la ligne suivante, nous écrivons : « Lorsque le minuteur sonne ET que cette lumière-là est allumée, alors fais cela. »
Nous avons ainsi appris à enchaîner des évènements distincts et/ou semblables en fonction d’une condition supplémentaire : l’état des lumières situées sur le haut du robot.

Fiers d’avoir réussi à résoudre ce problème, nous avons ensuite joué avec ce programme en laissant Thymio découvrir tout seul un territoire, tout en évitant les obstacles mis sur la table.

Régulièrement, les démarches et modifications faites par les différentes équipes sont présentées à l’ensemble de la classe, afin que tout le monde puisse suivre ce qui a été trouvé par les autres équipes.


Hélas, nous commençons à découvrir qu’en programmation, lorsqu’on résout un problème, une nouvelle difficulté apparaît ! Ou du moins, on peut toujours améliorer ce qu’on a programmé.

Dans notre cas, il était désagréable que le robot se mette à tourner tout seul dès qu’on le prenait dans notre main, parce qu’un capteur avait vu notre main. Il fallait expliquer au robot que ce n’était pas le moment d’utiliser ses capteurs. Nous avons alors ajouté des critères de lumières :
* Lorsqu’on appuie sur le bouton « stop » ou que le robot s’arrête pour une autre raison, on éteint toutes les lumières.
* Lorsqu’on appuie sur la flèche pour avancer, la lumière située en bas à gauche s’allume.
* Si un capteur voit quelque chose ET que la lumière en bas à gauche est allumée (c’est-à-dire si le robot voit un obstacle alors qu’il est déjà en mouvement), alors il tourne et déclenche un minuteur en allumant une 2e lumière située en haut à gauche.
* Puis, sur la ligne suivante, si le minuteur sonne ET que les deux lumières de gauche sont allumées, alors il se remet à avancer tout droit.
* Nous avions au départ mis 3 minuteurs différents pour les 3 capteurs que nous avions configurés. Mais nous nous sommes rendu compte que nous avions alors 3 fois la même ligne (« si le minuteur sonne ET que deux lumières sont allumées, alors le robot se remet à avancer tout droit »). Nous avons donc regroupé ces 3 lignes identiques en une seule ligne. Pour cela, nous avons dû modifier les lumières que nous allumions, pour qu’elles soient identiques dans les 3 cas.

Ainsi, en programmation, non seulement de nouvelles difficultés peuvent apparaître, mais pour les résoudre il existe plusieurs manières de coder, certaines étant plus courtes que d’autres (et donc préférables).

Après avoir amélioré ce programme, nous avons de nouveau pu jouer avec, en laissant Thymio avancer tout seul en évitant les obstacles mis devant lui.


1e partie du parcours Sqyrob : avec le robot Thymio

Les jours avancent rapidement et il est grand temps de réfléchir plus spécifiquement aux défis du projet Sqyrob.

Pour la 1e partie, presque tous les élèves voyaient bien comment faire pour pousser les 3 déchets avec l’abeille Beebot (même si le fait qu’elle n’avance pas droit et qu’elle n’arrive pas à tourner en poussant un déchet aurait posé quelques problèmes), mais tout le monde a trouvé dommage d’avoir appris à programmer Thymio pour ne pas l’utiliser. A ce moment-là de la découverte de Thymio, il y avait un tel engouement pour l’utiliser que de nombreux élèves dédaignaient l’abeille, trouvant qu’elle était davantage faite « pour les petits » ;-))

Nous avons commencé par accrocher des Légos sur le robot Thymio, pour lui permettre d’attraper des déchets et de les pousser. Nous connaissions déjà les difficultés de l’abeille à ce sujet, donc nous avons dès le départ réfléchi à ce que les « bras » de Thymio ne le gênent pas pour tourner et qu’ils puissent contenir les déchets même lorsque le robot allait devoir tourner sur lui-même.

Nous avons fabriqué à Thymio des bras en Légos et les avons testés. Le problème est que Thymio ne roule pas très droit (même si c’est moins flagrant que pour l’abeille). Pour compenser ce défaut, nous avons décidé de mettre plus de poids d’un côté que de l’autre (en fabriquant un bras plus lourd que l’autre) et cela a plutôt bien fonctionné. Comme quoi, des solutions aux problèmes de Thymio peuvent aussi être trouvées hors programmation.

Nous avons aussi ajouté des ailes au bout des bras, mais elles n’étaient pas très efficaces donc nous sommes revenus à des bras plus longs et plus simples.

Après avoir encore fait de nombreux tests et modifications des bras de Thymio, nous avons finalement trouvé une configuration qui semble convenir.

Côté programmation, nous avons repris notre précédent programme en y apportant quelques modifications pour que Thymio fasse l’intégralité du parcours de la zone 1 après un seul appui sur la flèche de départ. Nous avons modifié les lumières du dessus et les minuteurs pour que tous les différents mouvements s’enchaînent automatiquement.


VPL 3

Mais nous avons été confrontés à un nouveau problème : il manque de lumières pour pouvoir différencier suffisamment de mouvements et aller au bout du parcours. Nous devons alors découvrir un nouveau logiciel de programmation intitulé VPL3.

L’interface de programmation en VPL3 ressemble beaucoup à celle de VPL. Il n’y a plus le vrai langage de programmation écrit à droite. En revanche, on peut choisir d’afficher de nombreux nouveaux paramètres du robot. Les élèves ont insisté pour qu’on affiche dès le départ tous les paramètres possibles, même si nous n’en utiliserons que quelques uns.
* 1er gros avantage de VPL3 par rapport à VPL : il y a désormais la possibilité d’éclairer les 8 lumières du dessus de Thymio (on n’est plus limité à 4 lumières). En jouant sur l’ordre d’éclairage des lumières, on peut même avoir beaucoup plus que 8 éclairages différents. Nous pouvons donc  désormais sans problème enchaîner de très nombreux mouvements. Nous avons fait le choix de configurer pour chaque évènement l’ensemble des lumières au lieu de seulement modifier les lumières une par une, afin d’éviter toute erreur dans notre programme.
* 2e gros avantage : on peut régler bien plus précisément qu’avant la durée du minuteur. Nous avons fait de nombreux tests et observé que Thymio, à vitesse maximale, parcourait la longueur d’une case du parcours en 1s et 1/10. De même, nous avons observé qu’en réglant les roues à vitesses maximales vers l’avant et l’arrière pour que Thymio tourne sur lui-même, le robot tournait à angle droit en 0s et 5/10. Hélas, suivant les essais et suivant les objets qu’il pousse, Thymio n’avance jamais droit et ne tourne jamais du même angle. Nous avons donc fait de nombreux essais en modifiant d’1/10s la durée de tel ou tel mouvement et nous pensons avoir réussi, en poussant comme déchets des morceaux de Légo.


2e partie du parcours Sqyrob : avec l’abeille Beebot

Le choix du robot pour la 2e partie du parcours a été litigieux : il a fallu faire voter à main levée les élèves. C’est finalement l’abeille Beebot qui a remporté le vote, pour « changer un peu, quand même », comme l’a dit une élève ;-)

En nous aidant du plan du parcours, nous avons tracé de petites croix au crayon à papier sur le support du parcours, à l’emplacement des déchets. Nous avons mis le chiffre 2 à côté des croix, pour les différencier de celles que nous avions déjà mises pour la 1e partie du parcours. À ces emplacements, nous avons posé des Légos qui représentent les déchets à pousser. Nous avons choisi la même taille de Légos que pour les déchets de la 1e partie. Nous avons aussi écrit une petite flèche avec le chiffre 2 pour marquer de quelle case de la bordure l’abeille va démarrer le parcours de la zone 2.

Nous avons de nouveau accroché sur l’abeille avec du scotch le téléphone-jouet et ses pinces en Légos, que nous avions fabriqués en début d’année et qui s’étaient désolidarisés depuis lors.
Programmer les déplacements de l’abeille pour pousser les 3 déchets dans les 3 différentes zones de la déchèterie n’a pas été aussi simple que nous le pensions.
Le principal problème, comme toujours, a été le fait que l’abeille n’avance vraiment pas droit. Nous avons quand même à peu près réussi malgré cette difficulté.
Mais hélas, impossible d’aller pousser le dernier déchet jusqu’au bout car le nombre d’instructions que l’on peut programmer dans l’abeille est limité.

Nous avons finalement quand même réussi en faisant démarrer l’abeille d’une case du parcours située moins loin des déchets, ce qui a économisé les quelques cases de déplacement qui nous manquaient.
Voici le déplacement prévu pour l’abeille (A=avance, 2A=avance de 2 cases, R=recule, G=tourne à gauche, D=tourne à droite) :
2A, D, 5A (nous avions au départ 7A car nous partions de plus loin), 5R, G, 4A, D, 5A, 5R, G, 3A, D, 5A.


3e partie du parcours Sqyrob : avec le robot Thymio

Pour la 3e partie du parcours, le choix entre Thymio et l’abeille a été plus simple, car tout le monde souhaitait que ce soit l’abeille qui fasse la 4e et dernière partie (pour que ce soit une abeille qui rentre dans sa ruche). Afin de répartir équitablement les parcours entre les 2 robots, il a paru évident à tout le monde que ce serait Thymio qui s’occuperait de la 3e partie. Au final, il y aura donc une alternance entre les 2 robots.

Avant de commencer à programmer, nous avons scotché sur les robots Thymio des étiquettes avec les chiffres 1 et 3, afin de différencier les 2 robots lorsque nous leur aurons mis en tête les programmes des parcours 1 et 3.

Nous avons commencé un nouveau programme pour Thymio, en VPL3.
Comme d’habitude, nous avons commencé par programmer un bouton « stop », pour pouvoir arrêter le robot en cas de soucis.

Puis, comme pour le précédent programme, nous avons programmé la "flèche avant" pour faire démarrer tout le parcours du robot. Un élève a alors dit que, même si nous ne pourrons pas faire tous les parcours d’affilée (puisque nous devrons changer le décor pour réutiliser le même quadrillage sur les différents parcours), il serait bien de programmer le Thymio du parcours 3 de manière à ce que ce soit l’abeille du parcours 2 qui le fasse démarrer. Ce même élève a eu l’idée d’utiliser les capteurs arrière du Thymio pour détecter l’arrivée de l’abeille à la fin de son parcours n°2 (je suis très fier de cet élève !)
Nous avons alors fait plusieurs tests de programmation des capteurs arrière du Thymio. Au début, nous voulions que les 2 capteurs voient l’abeille pour faire démarrer Thymio. Mais cela créait des situations dans lesquelles les capteurs ne voyaient pas l’abeille exactement en même temps et Thymio ne démarrait pas, considérant que la condition « les 2 capteurs voient l’abeille » n’était pas satisfaite.
Nous avons ensuite conditionné le démarrage de Thymio à la détection de l’abeille par son seul capteur arrière droit. Comme il est possible de modifier la distance à laquelle le capteur observe et se déclenche, nous avons fait plusieurs essais pour choisir la configuration du capteur dans laquelle le robot démarre sans problème le plus souvent possible.

Comme pour le précédent programme, nous avons ensuite fait s’enchaîner les déplacements, les minuteurs et les codes de lumières. Puis nous avons fait plusieurs tests et modifications pour que le robot fasse bien le tour du récupérateur d’eau et se dirige bien vers la 4e et dernière zone. D’un test à l’autre, les déplacements de Thymio variaient énormément, même si on utilisait plusieurs fois les mêmes paramètres. Nous avons alors fait une pause car cela a démoralisé plusieurs élèves qui disaient que cela ne servait à rien de programmer le robot s’il ne respectait pas le programme…

Après une recherche d’astuce sur Internet, nous avons appris à entrer dans les paramètres de base du robot pour régler ses moteurs afin qu’il roule droit. Nous avons mis de très grands espoirs dans ce paramétrage. Une fois la vitesse des moteurs réglée au mieux, la programmation des déplacements de Thymio en a été un peu facilitée, mais cela n’a pas non plus été parfait, le robot faisant encore parfois des écarts à gauche ou à droite, suivant son humeur du moment.

Nous avons quand même réussi à plusieurs reprises à lui faire faire le tour du récupérateur d’eau et nous avons pris le plus de marges possibles pour nous assurer qu’il y arrive malgré ses écarts.

Et, comme les autres fois, un petit changement de couleur du robot et une petite musique de notre cru sont déclenchés à l’arrivée du robot.


4e partie du parcours Sqyrob : avec l’abeille Beebot

Pour cette partie, l’abeille doit faire le tour de la ruche puis rentrer à l’intérieur. Nous savons que nous allons y arriver puisque nous l’avons déjà fait plus tôt dans l’année.
Nous avons malgré tout besoin de plusieurs essais pour contrer les écarts de déplacement de l’abeille, laquelle roule encore nettement moins droit que les Thymio.

Voici le déplacement prévu pour l’abeille (A=avance, 2A=avance de 2 cases, R=recule, G=tourne à gauche, D=tourne à droite) :  8A, D, 4A, D, 3A.


Parcours Sqyrob final, avec décors

Comme nous avons choisi dès le départ de faire un quadrillage réutilisable pour les 4 parties du parcours, ce qui nous impose de changer les décors entre chaque partie, nous ne pouvons pas prendre une unique vidéo du parcours final avec les décors. Voici donc les 4 vidéos finales, puis les mêmes vidéos regroupées en une seule.

Pour cette 1e partie, nous ne nous rendons compte qu'après avoir tout fini que nous avons fait une petite erreur dans le décor. Nous n'avons plus le temps de filmer à nouveau le parcours, donc comme il ne s'agit que d'une petite erreur qui ne change rien à la prestation du robot, nous avons juste rapidement pris une photo en remplaçant une zone d'arbres par un banc et en ajoutant la poubelle (nous avions bien évité cette poubelle dans le tracé du robot).

Pour la 2e partie, la petite poussée que nous avons été obligés de faire est due à la différence de hauteur entre deux tables que nous n’avons pas réussi à combler parfaitement et qui bloquait l’abeille.

La 3e partie s'est déroulée sans aucun problème. Mais lorsque nous vérifions la vidéo sur l'ordinateur, horreur ! Nous nous rendons compte que nous nous sommes trompés de côté pour la sortie de Thymio. Aujourd'hui est le dernier jour pour terminer le projet, il nous faut reprogrammer le robot au plus vite ! Finalement, nous nous étions compliqué l’existence, cela a été très facile de supprimer quelques mouvements pour sortir du bon côté.
Voici la 3e partie en sortant du mauvais côté :

Voici notre programme modifié :

Voici la 3e partie avec une sortie du bon côté :

La 4e partie n'a présenté aucun souci :

Vidéos fusionnées en une seule :

Au final, nous pouvons dire que ce projet nous a vraiment pris beaucoup de temps, mais que nous sommes ravis de l’avoir fait et que nous avons beaucoup appris !