1. Introduction

Génération Robots commercialise des robots autonomes programmables, c'est-à-dire des robots dont on peut programmer le comportement en fonction des informations qu'il perçoit de son environnement, mais également dont le code du comportement se situe sur le robot, c'est le sens du terme autonome. Il existe dans le commerce des robots qui ne sont pas autonomes mais qui sont pilotables, via par exemple radiocommande ou tout autre moyen de connexion. Outre les kits de robots personnels autonomes, Génération Robots propose également une large gamme de capteurs, d'accessoires, de supports interactifs de formation et le logiciel de développement.


Cet article présente un robot autonome simple qui communique certaines des données qu'il perçoit à un PC, de sorte qu'il soit possible de réaliser une interface sur le PC qui affiche les mesures du robot en temps réel.


L'article présenté ici s'appuie sur un robot Lego Mindstorms NXT et un code sur le PC réalisé à l'aide de Microsoft Visual Programming Language, l'interface de programmation visuelle pour la robotique incluse dans Microsoft Robotics Developper Studio.


L'objectif de cet exemple simple est de présenter comment un robot utilisant son propre langage de développement peut être autonome (ici, se déplacer dans l'environnement tout en évitant les obstacles, effectuer des mesures de contact et de distance à l'aide d'un sonar ultrason), et dialoguer via une connexion Bluetooth avec un PC.


Cet article utilise deux environnements de programmation graphiques, de sorte qu'il ne soit pas nécessaire de connaître la programmation d'un robot. Si vous souhaitez aller plus loin, il est possible de faire générer le code C# par Visual Programming Language, l'environnement de programmation robotique utilisé pour le programme tournant sur le PC.

2. Le dialogue avec un robot autonome

Avant de commencer, je prends pour hypothèse que les grands principes de NXT-G, l'environnement de développement graphique fourni par Lego, ainsi que Microsoft Robotics Developper Studio sont connus. Pour en savoir plus, se reporter au site Génération Robots qui propose des articles de présentation de ces environnements de programmation.


Voici un schéma simplifié du fonctionnement présenté dans cet article.

Image non disponible

Les codes sources des programmes utilisés sont disponibles.

3. Le robot utilisé

Un robot très simple a été réalisé à l'aide du Kit Lego Mindstorms NXT. Il est composé de deux servomoteurs connectés sur les entrées A et C de la brique intelligente, gérant chacun une roue (principe du « differential drive »), d'un troisième servomoteur permettant une rotation horizontale du capteur ultrason (entrée B). Ce capteur ultrason, connecté au port n°1 de la brique intelligente effectue des mesures de distance (en centimètres). Un capteur de contact est situé sous le robot, connecté au port n°2.

Robot_Lego_Mindstorms_NXT_1.jpg Robot_Lego_Mindstorms_NXT_2.jpg


Le respect de la forme exacte du robot n'est pas indispensable, il est suffisamment simple pour qu'une multitude de robots différents puissent être utilisés.

4. Le code NXT-G

Commençons tout d'abord avec le code NXT-G, il s'agit du code qui s'exécutera sur le robot. Le schéma ci-dessous présente le code réalisé.

Image non disponible

Le code présenté ci-dessus comporte deux branches qui s'exécutent donc en parallèle sur le robot. La branche supérieure gère le comportement du robot. Le premier bloc commande les deux moteurs affectés au mouvement du robot et leur indique de tourner à la même vitesse, le robot avance donc en ligne droite. Ensuite, deux conditions (IF) se déclenchent si le capteur de contact est activé (premier test) ou si le capteur de distance à ultrason détecte un obstacle à moins de 20 centimètres. Le tout est dans une boucle infinie afin que le robot continue d'avancer indéfiniment.

Lorsque l'un des capteurs est activé dans les commutateurs IF, il fait appel à un bloc personnalisé nommé "Déroutage". Nous avons en effet choisi d'externaliser ce code dans un bloc personnel afin de le modulariser. La figure suivante présente le code de ce bloc NXT-G personnel.

Image non disponible

Le principe de ce bloc est relativement simple. Il doit arrêter le robot, faire pivoter le capteur de distance ultrasons d'abord à droite, et si le capteur ne détecte pas d'obstacle à droite, alors il se dirige vers la droite, sinon, il pivote le capteur ultrasons à gauche et il se dirige vers la gauche. Cet algorithme n'est pas un algorithme d'exploration de l'espace qui soit optimisé ou très performant, mais là n'est pas le propos. Durant chaque étape de ce code, un texte spécifique est affiché sur l'écran du robot Lego Mindstorms NXT.

4-A. Envoi de messages Bluetooth à l'ordinateur par le robot

Revenons au premier code (cf. le premier schéma ci-dessus). La seconde branche de ce programme est chargée de générer toutes les deux secondes un message Bluetooth contenant la mesure actuelle du capteur ultrason en centimètres. Les messages Bluetooth générés par un robot LEGO Mindstorms NXT sont stockés sur le robot dans une boîte aux lettres (sorte de file d'attente), le code Visual Programming Language que nous verrons après, et qui lui s'exécute sur le PC, sera chargé d'aller récupérer le contenu de ces messages. Notez que la distance mesurée est transformée en texte avant d'être incluse dans le message Bluetooth. Nous avons en effet constaté que le code VPL n'interprétait pas l'information lorsqu'elle était passée au format numérique dans le bloc NXT-G.


Le code nommé "Evitement d'obstacle.rbt" est compilé et téléchargé depuis l'interface de programmation NXT-G vers le robot (voir le fonctionnement de NXT-G). Le bloc personnel "Deroutage.rbt" est automatiquement compilé et transféré avec le code précédent.

5. Le code VPL

Le code VPL (Visual Programming Language) s'exécute sur le PC et dialogue avec le robot via une connexion Bluetooth. Un article prochain détaillera la connexion Bluetooth avec les robots programmables. Le paradigme de VPL s'appuie sur la notion de service s'exécutant dans un nœud DSS (Decentralized Software Service), qui s'appuie lui-même sur la bibliothèque CCR (Concurrency et Coordination Runtime). Ces deux bibliothèques, chargées de l'exécution asynchrone et parallèle des programmes robotiques, ont été créées par Microsoft et sont incluses dans Microsoft Robotics Developper Studio. Pour en savoir plus sur les briques de Microsoft Robotics Developper Studio, se reporter à l'article correspondant sur le site Génération Robots.

Image non disponible

Comme nous le disions, VPL s'appuie sur la notion de services. Dans le code présenté ci-dessus, nous utilisons deux services spécifiques à Lego Mindstorms NXT. Le premier se nomme LegoNXTBrickV2 (V2 parce que c'est la seconde version des services NXT apparus avec la version précédente de Microsoft Robotics Developper Studio). Ce service assure la connexion au robot via Bluetooth. Un paramètre important de ce service est le port COM de la communication Bluetooth qu'il faut bien positionner (lorsque vous configurez une connexion Bluetooth, celle-ci s'établit sur un port COM qu'il faut reporter dans les paramètres de service).


Le second service NXT est LegoBrickIOv2 qui permet d'effectuer des requêtes sur la brique intelligente, notamment pour échanger des messages Bluetooth.


Le principe du programme est relativement simple. Toutes les deux secondes, le programme va vérifier si des messages Bluetooth sont disponibles sur la boîte aux lettres n°1 du robot et si c'est le cas, en affiche le contenu dans une boîte de dialogue sur le PC. Une gestion d'erreur simple permet de continuer le programme lorsqu'aucun message n'est trouvé.


Le cours de ce que nous souhaitions présenter se trouve donc dans le service LegoBrickIOv2 qui permet en temps réel, alors que le robot exécute un programme autonome de déplacement, de récupérer de l'information (ici la distance mesurée en centimètres par le capteur ultrasons). Certes, l'utilisation qui est faite de cette valeur est ici limitée à un simple affichage mais nous pourrions tout à fait imaginer une utilisation plus pertinente dans une version plus évoluée de ce programme.


Pour que le tout fonctionne, il faut activer le code "Évitement d'obstacle" manuellement sur le robot puis lancer l'exécution du code VPL sur l'ordinateur.

6. Pour aller plus loin

Les préceptes établis ici sont simples et n'ont pour but que de présenter les principes de la communication entre deux dispositifs (un PC et un robot) et surtout d'expliquer quel programme fonctionne sur quoi. Dans une version plus évoluée du programme, nous pourrions :

  • créer sur le PC une interface graphique exploitant les données reçues du robot comme un radar ;
  • calibrer mieux les moteurs pour la rotation de la tête et éventuellement, générer une représentation de l'environnement ;
  • gérer les exceptions si le programme NXT-G ne tourne pas sur le robot ;
  • proposer un code plus performant pour le "déroutage" ;
  • etc.

7. Conclusion

En conclusion, nous pouvons dire que l'utilisation d'environnements graphiques facilite particulièrement le développement en robotique pour plusieurs raisons. Tout d'abord pour ne pas se perdre dans les différents langages de développement et leur interconnexion, il est en effet à noter que la robotique n'est pas (encore ?) aussi unifiée en termes d'environnement ou de systèmes d'exploitation que l'est le monde de l'ordinateur. Ensuite, les environnements de développements proposés abstraient parfaitement toute la difficulté de la programmation asynchrone et parallèle, typique du développement en robotique. Enfin, les bibliothèques proposées permettent de prototyper rapidement un programme et de se concentrer sur l'algorithme général sans être bloqué par des questions techniques comme la connexion Bluetooth, la gestion de files d'attente ou la programmation parallèle.

8. Génération Robots

Génération Robots est un site spécialisé dans la commercialisation de kits robotiques programmables, d'accessoires et capteurs. Des articles et autres tutoriels y sont régulièrement publiés.

Image non disponible

9. Remerciements

Je voudrais remercier Mahefasoa, _Max_ et dourouc05 pour la relecture orthographique.