INTRODUCTION |
On considère généralement comme un robot toute machine contrôlée par ordinateur capable de réaliser une activité d’ordinaire réservée à l’être humain. Si la machine est également capable de percevoir son environnement à l’aide de caméras et de capteurs et si elle peut y réagir de manière appropriée par ses actuateurs (moteurs, synthèse vocale, leds, …), on parle de système intelligent. Si le comportement d’un tel système imite l’humain, on parle de robot androïde.
L’intelligence artificielle (IA), en anglais Artificial Intelligence (AI), traite de la question fondamentale consistant à décrire de manière précise ce qui caractérise un système intelligent. Pour répondre à cette question, il est nécessaire de définir au préalable ce que l’on entend par machine « intelligente ». Une approche possible à cette problématique reside dans le test de Turing. Dans ce chapitre, nous nous pencherons sur des questions plus terre-à-terre et verrons comment gérer un robot équipé de capteurs tactile, photosensible, infrarouge et ultrasonique ainsi que de roues actionnées par deux moteurs électriques capables de faire avancer, reculer et même tourner le robot. Les moteurs et les capteurs sont contrôlés par l’ordinateur de bord, raison pour laquelle un robot est parfois qualifié de système embarqué. S’il s’agit d’une simple puce électronique, on parle de microprocesseur ou microcontrôleur. De nos jours, les systèmes embarqués jouent un rôle très important et la plupart des appareils électroniques courants comme les smartphones en sont dotés. Il faut savoir que la plupart des machines à café, lave-linges, lave-vaisselles, télévisions, appareils photo et autres appareils électroniques sont des systèmes embarqués. Les voitures modernes sont équipées en moyenne d’une centaine de microcontrôleurs différents jouant le rôle de systèmes embarqués permettant de contrôleur le moteur, les gaz, le système ABS et autres. Sachez donc qu’en apprenant à comprendre le fonctionnement des robots, vous apprendrez les principes généraux qui régissent tous ces systèmes embarqués dont vous dépendez quotidiennement. Avec le fameux kit éducatif de robotique LEGO Mindstorms, il est possible d’étudier les aspects importants de la robotique en s’amusant. Le kit est constitué d’une brique intelligente contenant le microcontrôleur et plusieurs composants permettant l’élaboration de différents modèles de robots. Ce kit a subi plusieurs révisions : le premier de la série était le RCX, suivi par le NXT et, plus récemment, par le EV3. La brique EV3 est un système embarqué constitué de moteurs et de capteurs pilotés par un processeur ARM semblable à ceux qui se trouvent dans les smartphones. Voici les composants électroniques observables si l’on ouvre la brique intelligente.
Une fois la brique allumée, le micrologiciel (firmware) va démarrer sur le microcontrôleur (il s’agit d’un OS Linux complet sur le EV3) faisant apparaître un menu très simple sur l’écran. Cela permet déjà d’exécuter des programmes stockés dans la mémoire de la brique en mode autonome. Pour permettre un contrôle à distance, il faut, dans le cas du EV3, lancer un programme annexe, BrickGate, chargé d’interpréter les commandes reçues par Bluetooth demandant par exemple de tourner un moteur d’un certain angle ou de lire les valeurs mesurées par l’un des capteurs. Sur le NXT, ce programme est déjà inclus dans le firmware.
|
Robots, robots androïdes, intelligence artificielle, systèmes embarqués, microprocesseurs, microcontrôleurs, méthodes bloquantes / non bloquantes |
PRÉPARATIFS |
Avec TigerJython, il est possible de simuler le robot (mode simulation) ou d’utiliser le mode autonome ou de contrôle à distance (mode réel). On passe d’un mode à l’autre en utilisant différentes bibliothèques de classes Python qui présentent cependant toutes exactement la même interface de programmation (API = Application Programming Interface) de sorte que les programmes seront pratiquement identiques quel que soit le mode d’exécution utilisé. Les seuls ajustement à apporter résident dans la ligne d’importation de modules et éventuellement dans certaines valeurs temporelles utilisées dans le programme. Mode simulation : Mode réel :
Avec la brique LEGO NXT: Pour jumeler la brique au PC, on procède exactement de la même manière que pour tout périphérique Bluetooth tel que smartphone, casque d’écoute ou imprimante Bluetooth. Comme il n’est pas possible d’exécuter l’interpréteur Python directement sur le microcontrôleur du NXT en raison de ses ressources trop limitées, il faut obligatoirement utiliser le mode de contrôle à distance pour piloter le NXT à l’aide de Python. Pour ce faire, on développe un programme comme d’habitude dans TigerJython en important le module ch.aplu.nxt et en l’exécutant à l’aide du bouton vert « Exécuter ». Une boîte de dialogue demande alors le nom Bluetooth de la brique à laquelle la connexion doit être établie. Une fenêtre affichant les informations de connexion reste ouverte durant toute l’exécution du programme. La fermeture de cette fenêtre cause l’interruption de la communication entre le PC et la brique NXT. Si la salle contient plusieurs briques NXT, il est indispensable de leur attribuer des noms uniques tels que NXT1, NXT2, etc … Un outil permettant de changer le nom des briques est disponible ici. Il est également possible d’utiliser l’identifiant unique Bluetooth du périphérique au lieu d’utiliser son nom. L’identifiant est indiqué dans la fenêtre de connexion montrée ci-dessus et peut également se découvrir avec divers outils à disposition sur le Web. La bibliothèque BlueCove est nécessaire pour assurer la communication Bluetooth. Pour l’installer, il faut télécharger l’archive compressée disponible ici et la décompresser dans le sous-dossier Lib du dossier dans lequel l’archive tigerjython2.jar est située. Avec la brique LEGO EV3: Une fois la brique démarrée avec LeJOS et correctement connectée par un réseau PAN Bluetooth, il faut y démarrer le serveur BrickGate qui se trouve dans le menu « programs ». Pour exécuter le programme en contrôle à distance, il faut cliquer sur le bouton vert comme pour le NXT et entrer les informations de connexion à la brique par Bluetooth. Pour exécuter le programme en mode autonome directement sur la brique, il faut cliquer sur le bouton « Télécharger vers EV3 ». Le script Python est alors téléchargé sur le EV3 et exécuté de manière autonome par l’interpréteur Python installé sur la brique. Le nom du script apparaît également sur l’écran du EV3 et peut être relancé à tout moment, sans nécessité de connexion avec le PC, en appuyant sur le bouton « Enter » de la brique. Les programmes exemples montrés dans ce chapitre supposent l’utilisation d’une brique EV3 et des nouveaux capteurs et moteurs de la série EV3. Le capteur de couleur EV3 joue également le rôle de capteur photosensible. Les anciens moteurs et capteurs NXT sont cependant encore supportés par la brique EV3. Il faut juste préfixer tous les noms de classes par « Nxt », à savoir NxtMotor, NxtGear NxtTouchSensor, etc. |
AVANCER ET RECULER EN LIGNE DROITE, TOURNER |
Dans votre premier programme, le robot devra avancer pendant une durée définie codée en dur dans le programme. La bibliothèque permettant de contrôler le robot est orientée objets et représente la réalité par un modèle. Ainsi, alors que dans la réalité on utilise la brique intelligente LEGO pour construire le robot, on crée une instance de la classe LegoRobot() du point de vue logiciel avec la ligne robot = LegoRobot(). Ensuite, on va prendre deux moteurs et les coupler à des roues dans la réalité alors que dans le monde logiciel, on instancie la classe Gear pour modéliser l’essieu de deux roues avec gear = Gear(). Ensuite, on connecte les moteurs à la brique avec des fils électriques dans le monde réel alors que, dans le monde logiciel, on « connecte » le couple des roues au robot avec l’appel addPart().
Dès qu’une nouvelle commande est envoyée au robot, l’état d’exécution actuel est terminé et remplacé par un nouvel état. Lorsque l'on travaille en mode de contrôle à distance, il faut toujours appeler la méthode exit() en fin de programme car elle est responsable de couper tous les moteurs et d’interrompre la connexion Bluetooth afin que le prochain programme puisse s’exécuter sans encombre. De ce fait, si le programme s’interrompt de manière brutale suite à une erreur d’exécution, il n’aura pas le temps d’appeler la méthode exit() et il sera nécessaire d’éteindre et de redémarrer la brique.
|
MEMENTO |
Un essieu est constitué de deux moteurs synchronisés. Au lieu de les contrôler individuellement, il est possible d’utiliser certaines commandes qui les contrôlent en tant que paire solidaire. Les bibliothèques de classes gérant le mode simulé et réel sont conçues de telle manière que les programmes soient pratiquement identiques dans les différents cas, à la ligne d’importation près. Ainsi, il est possible de commencer par développer le programme en mode simulation pour mettre en place et tester son comportement et, avec quelques adaptations mineures, l’exécuter ensuite en mode réel sur le robot physique. La brique EV3 peut se programme en mode autonome ou en contrôle à distance mais dans les deux cas, le serveur BrickGate doit être démarré sur le EV3 car c’est lui qui reçoit et interprète les commandes transmises par le programme Python. Du fait que les erreurs ne sont pas signalées en mode autonome, il faut toujours commencer par contrôler la brique à distance en exécutant le programme sur le PC (bouton vert) avant de passer au mode autonome et exécuter le programme Python directement sur le EV3 (bouton EV3). |
FAIRE BOUGER LE ROBOT AVEC DES MÉTHODES BLOQUANTES |
|
MEMENTO |
Il faut faire la distinction entre les méthodes bloquantes et les méthodes non bloquantes. Les méthodes non bloquantes ne font que de changer l’état d’exécution du robot en retournant immédiatement à l’appelant. Autre contraire, dans le cas d’un appel bloquant, l’exécution du programme est suspendue pendant l’intervalle de temps spécifié, jusqu’à ce que l’appel bloquant soit complètement terminé et que le temps indiqué soit écoulé. À première vue, il peut paraître plus facile d’utiliser systématiquement de méthodes bloquantes mais il faut savoir qu’elles comportent un inconvénient majeur. Pendant que le programme est bloqué en attendant la fin de l’exécution de la fonction bloquante, il lui est impossible de faire autre chose d’utile comme lire les valeurs d’un capteur ! Si le programme se plante durant l’exécution, il est possible de l’interrompre en fermant la fenêtre de connexion à la brique présente dans TigerJython sur le PC. En cas d’urgence durant une exécution en mode autonome, on peut interrompre le programme en appuyant simultanément sur les boutons BAS+ENTER du EV3. |
EXERCICES |
|
MATÉRIEL BONNUS |
CONTRÔLE À DISTANCE PAR INFRAROUGE |
Le EV3 est livré avec un capteur infrarouge assez polyvalent présentant de nombreux usages. Ce capteur est déjà livré dans le kit EV3 grand public mais doit être acheté séparément pour les kits éducatifs. Le tableau synoptique suivant montre les trois usages possibles du capteur IR (Infra Rouge).
|
MEMENTO |
Les méthodes isEscapeHit(), isEnterHit(), isDownHit(), isUpHit(), isLeftHit(), isRightHit() retournent True si les boutons correspondants de la brique EV3 sont actionnés en mode autonome. En mode contrôle à distance, ces fonctions sont par contre liées aux touches suivantes du clavier : ESCAPE, ENTER, BAS, HAUT, GAUCHE, DROITE à condition que la fenêtre de connexion à la brique soit active et possède le focus (il faut donc cliquer dessus pour que cela fonctionne). |