Ernest IRL
Description :
Le robot a été construit en Lego Mindstorms et son design implémente son système interactionnel : il s'agit d'une base roulante pouvant avancer tout droit ou tourner sur lui-même. Son système sensoriel comprend un capteur de contact à l'avant lui permettant de détecter l'interaction "se cogner", un capteur de luminosité sous le robot détectant le passage sur un carré bleu, qui définit l'interaction "manger une proie". Une caméra panoramique surélevée fournit les interactions visuelles. Cette caméra est constituée d'une webcam pointant vers une surface sphérique réfléchissante donnant un champs de vision de 180°. Les couleurs sont ensuite filtrées, et les éléments "masqués" sont effacés. L'image est ensuite projeté sur une surface plane pour définir les interactions visuelles énactées.
La communication avec le PC s'effectue par infrarouge avec la brique Lego RCX. Un programme en langage Not Quite C (NQC), permet au RCX de recevoir des commandes d'actions et d'envoyer le résultat des interactions.
Ressources :
- Modèle Lego du robot (à ouvrir avec leoCAD) : ernestIRL.lcd
Notons que les pièces non Lego (webcam, miroir et élastiques) ainsi que les pièces souples ne sont pas représentées.
- Modèle Lego Blender : ernestIRL.blend
L'ensemble des pièces peut être manipulé en utilisant l'élément empty nommé "Robot". Le modèle dispose également d'une caméra au niveau de la webacm permettant de simuler l'image produite par celle-ci. Pour choisir une caméra, faire clic droit sur celle-ci, puis
Ctrl+0
.
- interface java-RCX : Interface.java
- programme nqc : ernest.nqc
Sous windows, le programme nqc peut être transféré au RCX à l'aide du programme Bricx Command Center (Bricxcc).
Sous Linux, il suffit d'installer le paquet "nqc", puis, d'ouvrir une console et de taper la commande :
nqc -S"port serie" -d "nom_du_fichier.nqc"
."port serie" correspond au port utilisé. Dans mon cas, j'utilise un convertisseur USB vers port serie (/dev/ttyUSB0).
La commande est donc :
nqc -S/dev/ttyUSB0 -d ernest.nqc
Commandes :
Les commandes sont les suivantes : (les messages utilisés ont été choisi plus ou moins aléatoirement)
- avancer d'un pas : 42. Le robot retourne 2 si il s'est cogné, 3 si il s'est arrêté sur une surface sombre, 1 sinon.
- tourner à gauche de 45° : 64.
- tourner à droite de 45° : 128.
- tourner à gauche de 90° : 164.
- tourner à droite de 90° : 200.
Dans le cas d'une rotation, le robot retourne 1.
Ces commandes peuvent être envoyés avec Bricxcc, avec l'interface java fournie ci-dessus ou avec la commande :
nqc -S"port serie" -msg "commande"
(par exemple, nqc -S/dev/ttyUSB0 -msg 42
) sous Linux.
Expériences :
le robot a permis de mettre en évidence la robustesse de notre système car, même avec une mémoire spatiale peu fiable et des moteurs peu précis, le comportement du robot est très similaire à celui de l'agent simulé : le robot génère des signatures d'interactions pertinentes et se dirige naturellement vers les proies tout en évitant les murs.
On observe sur les signatures d'interactions que la partie visible du robot (reflet de la caméra), n'est pas pris en considération. En effet, cet élément est toujours présent dans le champs visuel, et n'est donc pas pertinente pour prédire le résultat d'une interaction. Le robot ne fait ainsi ''pas attention'' à sa caméra. Une autre observation intéressante est que lorsque la batterie du robot se décharge, et que le pas du robot se réduit, les signatures s'adaptent à cette variation. Le modèle montre ainsi une tolérance et une adaptativité aux pannes.