Fil d'Ariane
Mis à jour le mercredi 5 avril 2017
  • 10 heures
  • Facile

Ce cours est visible gratuitement en ligne.

Ce cours est en vidéo.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

J'ai tout compris !

Y a-t-il plusieurs manières de programmer un robot ?

Connectez-vous ou inscrivez-vous pour bénéficier de toutes les fonctionnalités de ce cours !

Vous savez qu’il existe plusieurs langages de programmation, y compris bien sûr pour les robots. Pour le Thymio, par exemple, il y en a 5 (pour le moment) : Thymio VPL (Visual Programming Language), Aseba Studio, Thymio Blockly, Thymio Scratch et Thymio Snap! (les deux derniers étant encore en développement).

Jusqu’à maintenant, nous avons programmé en Thymio VPL que vous commencez à bien connaître ! Mais vous allez voir que ces différents langages ne permettent pas toujours de faire la même chose, de même que les langues selon les pays ne permettent pas toujours de dire ou de décrire les mêmes choses…

Et plus intéressant encore : ils manipulent des concepts différents. 

Programmation événementielle vs programmation séquentielle 

En programmation séquentielle (on dit aussi programmation impérative), on enchaîne les actions sous forme de séquences d’instructions (sortes de listes ordonnées d'instructions), avec des tests, des boucles et en utilisant des variables : nous en avons l’habitude depuis le premier module de Class'Code, on implémente ainsi les algorithmes usuels.

En programmation événementielle, il y a des événements qui déclenchent des actions.

Un exemple : vous voulez détecter une touche au clavier ? Regardez les deux méthodes, à gauche on teste si la touche espace est pressée, à droite on reçoit l’événement correspondant : 

Séquence comprenant une instruction conditionnelle à gauche, Gestion d'évènement à droite
Séquence comprenant une instruction conditionnelle à gauche, Gestion d'évènement à droite

À gauche, on guette l'arrivée du facteur en allant voir sans cesse à la fenêtre, à droite c'est le facteur qui frappe à la porte ! Le résultat est finalement le même (rencontre avec le facteur) mais dans le 2e cas, on n'a pas besoin d'attendre le facteur. 😀

La programmation événementielle est fondamentale pour les robots. En effet une caractéristique principale des robots est qu’ils captent des informations de leur environnement par le biais de leurs capteurs. Toute modification de leur environnement constitue alors un événement qui peut être traité par le programme informatique implémentant leur comportement, ce qui leur permet de “s’adapter” à leur environnement.

La programmation Aseba

La programmation Aseba (Thymio VPL et Aseba Studio) fournit une interface de programmation purement événementielle, où chaque instruction est construite sur la base d’un événement et d’une action qui doit en découler, sans avoir recours à aucun autre ingrédient usuel (ni boucle, ni variable). Ce qui est remarquable c’est que l’on peut faire énormément de choses avec cette façon de spécifier les choses, cette logique événementielle. 

Mieux encore, on peut détecter des problèmes de logique. Regardez l’exemple ci-dessous, impossible :

Un programme impossible
Un programme Aseba VPL impossible 

Quand on appuie sur le bouton flèche avant, le robot doit faire quoi ? Avancer et tourner, reculer et tourner, un mix des deux ? Non, ça n’a pas de sens. En fait on demande deux action simultanées qui sont incompatibles. Et du reste, le langage VPL détecte bien ce problème et nous alerte (essayez !).

Que manque-t-il alors à notre histoire ? Le temps ! Ce que la personne souhaite peut-être faire, c’est avancer à droite puis reculer vers la gauche. Par exemple :

Faire avancer le robot en tournant à droite pendant 3 secondes.
Faire reculer le robot en tournant à gauche.

Rien de très compliqué n'est-ce pas ? Pourtant ça, on ne sait pas encore vraiment le faire en Aseba VPL pour l'instant...

Il existe cependant un mode avancé de VPL , dont nous n'avons pas vraiment parlé jusque là. Et, en VPL avancé, il y a des timers qui permettent de gérer le temps avec de nouveaux évènements : 

bla
Une fois l’action lancée par l’événement "Appui sur le bouton flèche avant", le déplacement dure pendant 2s (la valeur se règle sur le timer par un curseur). Quand l’événement "Fin du temps du timer" arrive, on effectue un autre déplacement

Qu’en est-il de la programmation avec Thymio Scratch  ?

Scratch est quant à lui doué pour la programmation séquentielle. Rappelez-vous du premier module de Class'Code : il permet d’enchaîner les instructions, de faire des boucles, des branchements vers d’autres séquences, etc. Thymio Scratch ajoute à Scratch des blocs qui vont permettre de lire les informations d'un capteur, ou d'actionner un actionneur (allumer une lampe par exemple). On va donc pouvoir faire de la programmation séquentielle avec Thymio !

Un petit exemple : avec Thymio Scratch et ses blocs spécifiques au Thymio, allumer successivement les LEDS du robot de couleurs différentes devient très simplement :

Séquence de blocs permettant d'allumer successivement toutes les LEDS (
Séquence de blocs permettant d'allumer successivement toutes les LEDS ("all") de couleurs différentes (les couleurs sont représentées par des chiffres allant de "1" à "7")

Comme vous le savez, Scratch sait aussi utiliser un peu de la programmation événementielle : on peut programmer des scripts indépendants sur la scène, ou dans des lutins qui s'exécutent en parallèle, et quand un évènement de l'ordinateur survient (par exemple "Quand espace est pressé"), si un script est prévu pour le gérer, alors ce script se lance. 

Mais il y un "mais" : aujourd'hui, Thymio Scratch ne reçoit pas les événements du robot. Ici Scratch pilote le robot instruction par instruction seulement, dans des séquences, pour garder le contrôle sur lui. 

Par exemple, on ne peut pas écrire un script qui, à l’appui sur un bouton flèche directionnelle du robot, fait avancer le robot (car il n'y a pas de bloc “Quand bouton Thymio est appuyé") mais on peut écrire un script qui, à l’appui sur la barre d’espace, fait avancer le robot (en utilisant le bloc "Quand espace est pressé" de Scratch).

Faisons un petit test : est-il plus facile de programmer les comportements suivant avec VPL ou avec Scratch ?

  1. Faire tourner le robot trois fois sur lui-même.

  2. Faire l’instrument musicouleur de la partie 1 : à chaque capteur sa couleur de robot et sa note de musique.

  3. Parcourir une zone d’obstacles sans les toucher.

  4. Effectuer une chorégraphie avec le robot.

Alors, avez-vous trouvé ?

Les réponses sont :

  1. Scratch : on enchaîne un mouvement trois fois de suite, il faut donc attendre qu’un des mouvements soit fini avant de passer au suivant. Ce n'est pas complètement impossible en VPL mode avancé, nous le verrons dans la prochaine partie, mais ce sera tout de même plus simple et plus naturel en Scratch, grâce aux séquences.

  2. VPL : une instruction par capteur suffit alors qu’en Scratch c’est autrement plus compliqué à gérer.

  3. VPL : idem !

  4. Scratch : une chrorégraphie nécessite des enchaînements de mouvements. Qui dit enchaînements dit séquences...

Programmation visuelle vs programmation textuelle

Pour conclure sur les langages de programmation, en plus de cette histoire de logique plutôt événementielle ou plutôt séquentielle, on peut aussi distinguer trois grandes familles :

  • Programmation visuelle : Thymio VPL est un bon exemple ! On manipule des cartes illustrées pour définir des instructions. Mais vous connaissez aussi peut être Scratch junior ?

  • Programmation mixte visuelle/textuelle : dans ce cas on mélange une interface visuelle avec des blocs textuels. C'est le cas de Scratch (et Thymio Scratch), mais également de Snap et Blockly.

  • Programmation textuelle : là les programmes sont simplement des suites de lignes, constituées de mots. Et c'est à nous d'écrire ces lignes ! 

La programmation textuelle est celle qui est souvent la plus effrayante... 😨 On imagine volontiers que seuls les geeks passionnés (et un peu fous) peuvent la manipuler. Évidemment, c'est faux ! D'ailleurs, vous en avez vous-même déjà un peu manipulé. Rappelez vous dans la première partie, quand nous avons fait de l'Arduino... Je vous ai donné un programme textuel (vous l'avez peut être même modifié vous-même pour adapter les numéros de pin que vous aviez branchés).

Il existe de nombreux langages textuels (java, javascript, python sont peut-être des noms familiers ?), chacun ayant leurs usages et leurs applications. Pour programmer Thymio, il existe aussi un tel langage : Aseba Studio. D'ailleurs tous les programmes que vous avez confectionnés avec Thymio VPL peuvent être écrits en Aseba Studio (vous avez dû remarquer le texte qui s'affichait dans la zone à droite)... 

Voyons un exemple de programme écrit en VPL et en Aseba Studio (il devrait vous rappeler quelque chose) :

Programme Aseba VPL
Programme Aseba VPL

Et son équivalent en Aseba Studio :

call sound.system(-1)
call leds.top(0,0,0)
call leds.bottom.left(0,0,0)
call leds.bottom.right(0,0,0)
call leds.circle(0,0,0,0,0,0,0,0)

onevent prox
    when prox.horizontal[0] <= 1000 and prox.horizontal[1] <= 1000 and prox.horizontal[2] <= 1000 and prox.horizontal[3] <= 1000 and prox.horizontal[4] <= 1000 do
            motor.left.target = 200
            motor.right.target = 200
            emit pair_run 0
    end

    when prox.horizontal[2] >= 2000 do
        motor.left.target = 0
        motor.right.target = 0
        emit pair_run 1
    end

    when prox.horizontal[4] >= 2000 do
        motor.left.target = 100
        motor.right.target = 250
        emit pair_run 2
    end

    when prox.horizontal[0] >= 2000 do
        motor.left.target = 250
        motor.right.target = 100
        emit pair_run 3
    end

On constate que l’édition du programme se fait de manière différente. Aseba Studio permet de régler beaucoup plus de choses et est nettement plus puissant, mais dans les deux cas ici on retrouve une même logique évènementielle

Il existe donc plusieurs façons de programmer un robot : en utilisant un langage de programmation visuel, textuel ou mixte par exemple, mais aussi en utilisant une logique événementielle ou bien séquentielle. Rendez-vous dans la dernière partie de ce cours pour parler plus en détails de ces alternatives concernant Thymio. Je peux déjà vous annoncer que vous allez vous-mêmes vous confronter à différentes façons de programmer un même comportement !

En résumé

  • La programmation événementielle et la programmation séquentielle sont deux logiques de programmation différentes.

  • En programmation événementielle, les actions sont déclenchées par des évènements, alors qu’en programmation séquentielle, les actions s’enchaînent dans des séquences.

  • En robotique, la programmation évènementielle est très présente !

  • Certains langages, comme Aseba (Thymio VPL ou Aseba studio), font essentiellement de la programmation événementielle. Dans ce cas, programmer un comportement séquentiel est possible, mais pas simple. Alors que Scratch a plus une logique séquentielle ! Et permet de faire aussi un peu de programmation évènementielle, avec les évènements de l'ordinateur.

  • Certains comportements sont plus simples à programmer avec une logique évènementielle et d’autres avec une logique séquentielle.

  • Les langages de programmation se divisent également en 3 grandes familles : visuelle, textuelle, et mixte textuelle/visuelle

 

Exemple de certificat de réussite
Exemple de certificat de réussite