Communication Robot Lego NXT avec un PC

Génération Robots commercialise des robots autonomes programmables, c'est à dire qu'il est possible de programmer le comportement du robot en fonction des données qu'il perçoit de son environnement mais aussi que le code de ce 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 radio-commande ou tout autre moyen de connexion.

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'appuit 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 robotique visuelle inclue 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, effectuer des mesures de contact et de distance à l'aide d'un capteur 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 connaitre 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.

Le dialogue avec un robot Lego Mindstorms NXT autonome

Avant de commencer, je fais l'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.

Schéma organisationnel du programme robotique

Les codes sources des programmes utilisés sont disponibles ici

Le robot Lego Mindstorms NXT utilisé

Un robot très simple a été réalisé à l'aide du Kit Lego Mindstorms NXT. Il est composé de deux servo-moteurs connectés sur les entrées A et C de la brique intelligente, gérant chacun une roue (principe du différential drive), d'un troisième servo-moteur permettant un rotation horizontale du capteur ultrasons (entrée B). Ce capteur ultrasons, 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 Robot Lego Mindstorms NXT

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.

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é.

Code NXT-G

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 NXT-G commande les deux moteurs affectés au mouvement du robot Lego Mindstorms NXT 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ères. Le tout est dans une boucle infinie afin que le robot continue d'avancer indéfiniement.

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

Code NXT-G

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 chaque étape de ce code, un texte spécifique est affiché sur l'écran du robot Lego Mindtorms NXT.

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 ultrasons en centimères. Les messages bluetooth générés par un robot LEGO mindstorms NXT sont stockés sur le robot dans une boite 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 ce message. 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é "Evitemment 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.

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 noeud DSS (Decentralized Software Service) qui s'appuie lui même sur la librairie CCR (Concurrency et Coordination Runtime). Ces deux librairies chargées de l'exécution asynchrone et parallèle des programmes robotiques ont été créées par Microsoft et son 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.

Programme réalisé avec Microsoft Visual Programming Language

Commme nous le disions, VPL s'appuit sur la notion de services. Dans le code présenté ci-dessus, nous utilisons deux services spécifiques à Lego Mindstorms NXT. La premier, nommé LegoNXTBrickV2 (V2 parceque 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 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 boite 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 coeur 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 "Evitemment d'obstacle" manuellement sur le robot puis lancer l'exécution du code VPL sur l'ordinateur.

Pour aller plus loin

Les principes établis ici sont simples et n'ont pour but que de présenter les principes de la communication entre deux devices (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 par exemple 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.

En conclusion, nous pouvons dire que l'utilisation d'environnements graphiques aide 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éveloppements et leur interconnexion, il est en effet à noter que la robotique n'est pas (encore ?) aussi unifiée en terme 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 librairies 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.


Génération Robots (http://www.generationRobots.com)

Tout usage et reproduction soumis à autorisation explicite préalable.

Recherche
Comportement NAO joue... au puissance 4
Roues omnidirectionnelles Rotacaster pour NXT

Roues Omnidirectionnelles Rotacaster pour NXT
46,35 €

Roues omnidirectionnelles Rotacaster pour NXT

En savoir plus

Newsletter
Inscrivez vous à notre newsletter.
Je m'abonne
Je me désabonne
  Boite de rangement pour Lego Mindstorms NXT
Boite de rangement pour Lego Mindstorms NXT
70,00 €

Infos Securites

Toutes vos transactions sont 100% sécurisées !
En savoir plus

Génération Robots © tous droits réservés
powered by Site de vente en ligne Site de vente en ligne