Contrôle d’un robot Thymio à l’aide de machines d’états finis
Thymio est produit, distribué et vendu par l’association à but non-lucratif Mobsya basée à Lausanne en Suisse.
1. Aseba: l’outil de programmation
Pour programmer Thymio, vous devez d’abord télécharger Aseba. Aseba est un ensemble d’outils qui permet aux novices de programmer facilement et efficacement des robots.
2. Aseba: Démarrer l’outil
Avec Aseba, on peut programmer Thymio de manière visuelle ou avec du texte. Dans ce laboratoire, on va s’initier dans le langage texte de programmation de Thymio. Pour démarrer Aseba Studio:
- 2.1 Branchez Thymio à votre ordinateur, puis lancez “Aseba Studio pour Thymio”.
- 2.2 Si vous lancez “Aseba Studio” ou Aseba vous demande de choisir
une cible: clickez sur “port série”, sélectionnez Thymio-II
Robot et sur “Connecter”.
3. Programmer Thymio avec Aseba
- 3.1 Familiarisation
- 3.2 Allumer une LED et jouer avec les boutons
- 3.3 Faire bouger le robot
- 3.4 S’arrêter au bord de la table
- 3.5 Réagir aux chocs
4. Machines d’états finis et langage de programmation haut-niveau
Une machine d’état peut être réalisée en utilisant un langage de programmation de haut-niveau en utilisant une structure SWITCH-CASE et des instructions IF-THEN-ELSE pour définir les conditions pour les transitions entre les états. En supposant une machine de Moore, les sorties ne changent qu’en fonction de l’état présent de la machine d’états. La figure ci-dessous illustre un exemple en pseudo-code.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
etat = 00; while(1) { switch (etat) { case 00: if(start_bouton == true) etatFutur = 01; else etatFutur = 00; color = white; case 01: if(on_tappe == true) etatFutur = 10; else etatFutur = 01; color = red; case 10: if(on_tappe == true) etatFutur = 11; elsif(start_bouton == true) etatFutur = 01; else etatFutur = 10; color = green; case 11: if(on_tappe == true) etatFutur = 01; else etatFutur = 11; color = blue; } etat = etatFutur; } |
Le code en Aseba est légèrement différent à celui-ci. Utilisez le code Aseba exemple qui réalise cette machine d’états pour traiter les challenges proposés ci-dessous.
5. Exercices
5.1 Concevoir une machine d’états en utilisant l’exemple précédent et les fonctions en Aseba permettant de lire les capteurs et d’agir sur les actuateurs (moteurs, LEDs et haut parleurs) pour contrôler le robot Thymio de manière à ce que celui-ci augmente sa vitesse chaque fois que vous pressez sur le bouton “avant”, mais seulement jusqu’à trois fois (vitesse maximum: 500). Ensuite, si vous pressez à nouveau le bouton, le robot diminue sa vitesse de la même manière
qu’elle a été augmentée. Par exemple:
v0 -> bouton -> v1 -> bouton-> v2 -> bouton -> v3 -> bouton -> v2 -> bouton -> v1
-> bouton v0 -> bouton -> v1 … etc.
5.2 Concevoir une machine d’états pour programmer le robot Thymio pour qu’il démarre à une vitesse constante en pressent sur le bouton “avant”. Il doit pouvoir éviter les obstacles de manière réactive (p.ex., si obstacle à gauche, tourner à droite, etc.), si après 1000 ms de déplacement il ne rencontre aucun obstacle, il augmente sa vitesse, mais revient à la vitesse de base lorsqu’il doit activer l’évitement d’obstacles. Pour un exemple d’utilisation d’un timer, veuillez vous référer au point 5.4.
5.3 Supposez que vous utilisez les deux capteurs de Thymio qui pointent vers le sol pour lire deux séquences de bits par terre. A gauche, le signal périodique 0-1-0-1… peut être interprété comme un signal d’horloge et le signal à droite comme une entrée binaire. Concevoir une machine d’états qui lit un bit par cycle d’horloge et qui détecte la séquence 0-1-0-1-1. Pour signaler la détection de la séquence indiquée, changez la couleur de Thymio en rouge pendant un seul cycle d’horloge. Utilisez le programme exemple sur ce lien pour lire les bits en entrée.
5.4. Thymio joue le jeu du téléphone arabe.
Programmez Thymio pour écouter un autre Thymio (utilisez le code exemple sur ce lien) et utilisez une machine d’états pour que chaque Thymio réponde de la manière suivante:
– Il démarre dans un état 0 où il émet une valeur quelconque via ses capteurs infra-rouges frontaux dès qu’il perçoit un robot en face. Il est à l’écoute d’un autre robot et il n’affiche aucune couleur.
– Dès qu’il communique avec un autre Thymio (c.a.d., il reçoit la donnée transmisse par un autre via ses capteurs infra-rouges), il affiche la couleur rouge pendant 5 secondes et ensuite redevient disponible pour recevoir un nouveau message.
– Si le Thymio reçoit une donnée d’un autre Thymio et il est dans l’état “rouge”, il affiche maintenant bleu pendant 5 secondes et ensuite redevient disponible pour recevoir un nouveau message.
– Si le Thymio reçoit une donnée d’un autre Thymio et il est dans l’état “bleu”, il affiche maintenant vert pendant 5 secondes et ensuite redevient disponible pour recevoir un nouveau message.
– Si le Thymio reçoit une donnée d’un autre Thymio et il est dans l’état “vert”, il affiche maintenant rouge pendant 5 secondes et ensuite redevient disponible pour recevoir un nouveau message.
6. Evaluation
Réaliser le graphe des états des machines d’états finis (vous pouvez le faire à la main sur une feuille blanche) pour les différents exercices et à la fin de chaque exercice, le présenter au professeur ou à l’assistant.
Remerciements
Merci à Sandy Vibert pour les exemples, explications et suggestions sur l’utilisation d’Aseba avec Thymio et merci à Hector Satizabal pour le brainstorming sur les exercices et la concrétisation de l’exercice 5.3. Merci à Eric et à Sandy pour nous accompagner lors de ce laboratoire.
ARO1 2015/2016