Nous allons nous intéresser aux interfaces Homme-Machine (IHM). Une IHM permet à un utilisateur d'interagir avec une machine, la souris et le clavier sont des exemples d'IHM, mais il en existe bien d'autres (par exemple les écrans tactiles des smartphones). Par "machine", on entend bien évidemment "ordinateur", comme dans le cas du duo clavier-souris, mais pas seulement. En effet, les "machines" peuvent aussi être des objets connectés, des systèmes embarqués ou encore des robots. Nous allons justement nous intéresser ici à cette dernière catégorie : les robots.
Qu'est-ce qu'un robot ?
Le mot robot a été utilisé pour la première fois par l’écrivain tchécoslovaque Karel Čapek dans sa pièce de théâtre "Rossum's Universal Robots" en 1920, il a pour origine le mot russe "rabota" qui signifie travail, corvée. La notion de robot a été ensuite développée par l'écrivain américano-russe Isaac Asimov dans son recueil de nouvelles "Les Robots" (1950).
Pour simplifier à l'extrême, un robot est constitué de 2 choses :
Au niveau IHM, il est possible d'interagir avec le robot avec une simple télécommande : l'opérateur donne des ordres au robot par l'intermédiaire de cette télécommande ("aller à gauche", "avancer de 3 mètres", "prendre un objet avec une pince"...), par exemple, les robots qui interviennent dans des milieux dangereux (centrale nucléaire) sont télécommandés à distance par des opérateurs.
Il est aussi possible d'interagir avec un robot non pas directement, mais en le programmant afin de lui donner une certaine autonomie. La programmation consiste à donner au robot la marche à suivre en fonction des situations rencontrées : "si le capteur X détecte quelque chose alors arrête les moteurs".
Nous allons nous initier à ce genre de programmation à l'aide du robot Thymio
Afin de mieux faire connaissance avec Thymio, visionnez la vidéo ci-dessous
Le lycée ne possédant pas assez de Thymio, nous allons utiliser dans un premier temps un simulateur de robot nommé Webots. Webots est un logiciel libre et gratuit, il simule énormément de robots, du plus simple au plus complexe, nous allons l'utiliser pour simuler Thymio.
Voici une vidéo qui va vous permettre de configurer le simulateur webots et d'écrire votre premier programme pour Thymio. Visionnez cette vidéo, configurez le simulateur et écrivez votre premier programme pour Thymio. Testez votre programme avec le simulateur.
Voici le programme proposé dans la vidéo :
onevent buttons
if button.forward==1 then
motor.right.target=300
motor.left.target=300
end
if button.center==1 then
motor.right.target=0
motor.left.target=0
end
if button.backward==1 then
motor.right.target=-300
motor.left.target=-300
end
Il faut bien comprendre que nous avons ici affaire à ce que l'on appelle de la programmation événementielle alors que d'habitude nous utilisons plutôt la programmation séquentielle. Notre programme va simplement définir les actions à effectuer en fonction des événements (dans le cas d'un robot, les événements seront souvent liés aux informations obtenues grâce aux capteurs). Notre programme sera donc une succession de "onevent" (voir la première ligne) que l'on pourrait traduire par "quand l'événement au lieu". Dans le cas qui nous intéresse ici nous avons un "onevent buttons" que l'on peut interpréter par "exécute le code ci-dessous en cas d'appui sur un bouton". À chaque fois que l'utilisateur appuiera sur un des boutons situés sur le dessus du robot, le code situé sous le "onevent" sera exécuté. Étudions une partie de ce code :
if button.forward==1 then
motor.right.target=300
motor.left.target=300
end
Le code est très simple à comprendre : si le bouton qui a été pressé est le bouton "avant" ("button.forward==1"), alors mettre les moteurs des roues (droite et gauche) en fonctionnement à la vitesse 300.
Le reste du code est aussi facile à comprendre : si c'est le bouton "central" qui est pressé, les 2 moteurs sont arrêtés, si le bouton "arrière" est pressé les moteurs sont mis en marche, mais en sens inverse (-300).
Il faut bien comprendre qu'à chaque fois qu'un bouton est pressé (et seulement quand un bouton est pressé), ce code est entièrement exécuté. Il n'est pas nécessaire de maintenir le bouton pour que le robot avance, en effet, un appui sur le bouton "avant" mettra les moteurs en fonctionnement. Tant qu'un nouvel événement "bouton pressé" n'aura pas été déclenché, les moteurs continueront à fonctionner, puisqu'en l'absence d'événement le programme ne fait strictement rien (à part surveiller la survenue d'éventuels événements).
Il est aussi possible d'utiliser d'autres événements, par exemple, la frappe dans les mains ou encore la (petite) tape sur le robot :
Il est possible d'allumer des LEDs. Thymio possède plusieurs séries de LEDs mais dans le simulateur seules certaines LEDs sont visibles.
Par exemple, la ligne :
call leds.bottom.right(255,0,0)
permet d'allumer une LED située en bas et à droite en rouge.
Les 3 nombres situés entre parenthèses correspondent aux canaux Rouge, Vert et Bleu. La valeur de chaque canal est comprise entre 0 et 255. Pour éteindre une LED il suffit de mettre les 3 canaux à zéro.
Étudiez, saisissez et testez le programme ci-dessous à l'aide du simulateur :
onevent mic
call leds.bottom.left(0,255,0)
call leds.bottom.right(0,255,0)
onenvent tap
call leds.bottom.left(0,0,0)
call leds.bottom.right(0,0,0)
Il est possible d'utiliser des variables :
var i = 600
...
...
if i < 400 then
i = i+1
call leds.bottom.right(0,255,0)
end
Il est nécessaire d'utiliser le mot-clé "var" pour déclarer une variable ("var" doit être utilisé uniquement au moment de la déclaration d'une variable)
Visionnez la vidéo suivante et analysez le comportement du robot présent dans cette vidéo
Programmez Thymio afin qu'il reproduise ce comportement dans une simulation avec Webots.
Comme déjà dit plus haut Thymio possède des capteurs de proximité. Il est évidemment possible d'utiliser ces capteurs de proximité pour déclencher des événements. Quand un capteur de proximité détecte quelque chose cela un événement "prox", on aura donc dans notre programme un "onevent prox".
Visionnez la vidéo suivante et essayez de répéter les opérations présentées dans cette vidéo dans le simulateur Webots.
Voici le programme proposé dans la vidéo :
onevent buttons
if button.forward==1 then
motor.right.target=300
motor.left.target=300
end
if button.center==1 then
motor.right.target=0
motor.left.target=0
end
if button.backward==1 then
motor.right.target=-300
motor.left.target=-300
end
onevent prox
if prox.horizontal[2]>10 then
motor.right.target=0
motor.left.target=0
end
Seule nouveauté, le code qui suit "onevent prox" :
if prox.horizontal[2]>10 then
motor.right.target=0
motor.left.target=0
end
"prox.horizontal" correspond aux capteurs de proximité situés sur l'avant du robot. Il y a 5 capteurs de proximité situés sur l'avant, numéroté de 0 à 4. "prox.horizontal[2]" correspond au 3e capteur (le capteur situé au centre). Quand "prox.horizontal[X]" (X correspond à n° du capteur) est égal à 0, cela signifie que le capteur ne détecte rien. Plus "prox.horizontal[X]" est grand et plus l'objet détecté est proche.
Voici quelques liens qui vous permettront d'approfondir le sujet :
Auteur : David Roche