Le robot Lego Mindstorms NXT

Le robot Lego Mindstorms NXT est une plate-forme robotique programmable abordable et permettant à la fois de découvrir la robotique mais aussi d’aller assez loin dans le domaine de la robotique mobile et la robotique programmable. Le robot Lego Mindstorms NXT est utilisé dans de nombreuses écoles et universités de part le monde.

Le NXT se caractérise par le très grand nombre de capteurs et accessoires disponibles sur le marché (le site Génération Robots propose la quasi-totalité de ces capteurs robotiques). De même, ce robot est programmable à l’aide de nombreux langages de programmation :

  • NXT-G est l’environnement de développement graphique fourni avec le robot NXT. Il est basé sur le logiciel Labview de National Instrument
  • Labview de national instrument
  • Lejos est une librairie Java permettant de programmer le NXT
  • NXC est une librairie en C
  • Matlab

Et enfin RobotC que nous présentons ici.

RobotC, environnement de programmation pour les robots Lego NXT

Le logiciel de programmation pour robots RobotC a été créé et est maintenu par la prestigieuse Carnegie Mellon University aux états-unis. Tous ceux qui s’intéressent à la robotique connaissent cette université qui est la référence en robotique outre-Atlantique.

RobotC est un environnement de programmation permettant de programmer les robots Lego Mindstorms NXT en C. Il existe également une version de RobotC pour les robots Vex Robotics.

RobotC est un IDE complet proposant un débogueur temps réel interactif très pratique et performant. RobotC est multitâche : il peut en effet faire tourner de manière concurrente jusqu’à 10 tâches en simultanées sur le robot. D’autre part, RobotC installe, comme nous le verrons ci-dessous, son propre firmware sur le robot, firmware plus performant que le firmware standard. Les programmes RobotC sont les plus rapides quand on les compare avec les programmes réalisés avec d’autres logiciels de programmation.

Par défaut, RobotC supporte tous les capteurs standards de Lego. Une librairie tierce open-source est disponible et comprend tous les capteurs et accessoires que l’on peut trouver par ailleurs dans le commerce. RobotC est donc capable de programmer le robot NXT sans restriction.

Un outil de simulation 3D compatible avec RobotC est actuellement en préparation à la Carnegie Mellon University.

Présentation de l’interface de RobotC

L’interface RobotC est présentée dans la figure suivante :

Interface du logiciel de programmation robotique RobotC

Figure 1 : Interface de programmation de RobotC

L’interface de programmation de RobotC est classique pour tous ceux qui sont familiers avec les environnements de programmation. La barre de gauche permet de trouver les structures de codes standards et la zone d’erreur en bas liste les sorties du compilateur.

Lors de la programmation RobotC fournit l’IntelliSense, complétant ainsi les termes tapés par le programmeur, pour plus d’efficacité et de productivité.

Enfin, une aide en ligne relativement complète est disponible depuis le menu « Help » et enfin de nombreux exemples de programmes sont fournis.

Avant utilisation de RobotC

Bien ! A présent que nous avons fait les présentations, rentrons un peu dans le vif du sujet. Comme nous le disions plus haut, afin que les programmes réalisés avec RobotC tournent sur le robot, il convient de remplacer le firmware (le système d’exploitation du robot si vous préférez) par celui de RobotC. Cela n’est à faire qu’une seule fois et c’est très facile.

Pour cela, il suffit d’aller dans le menu « Robot » et de cliquer sur « Download Firmware ». Cela ouvre une nouvelle fenêtre présentée ci-dessous :

Download firmware RobotC

Figure 2 : Interface de mise à jour du firmware

Le message est très clair, il ne trouve pas la brique NXT (le cerveau du robot). Il faut donc brancher le robot NXT à votre PC à l’aide du câble USB fourni et allumer le robot. Ensuite, le simple fait d’appuyer sur le bouton « Refresh Lists » permettra à RobotC de trouver le robot.

Pour mettre à jour le firmware, vous n’avez plus qu’à cliquer sur le bouton « F/W Download » et de sélectionner le firmware dans la fenêtre qui s’ouvre. Vous allez entendre la brique faire un peu de bruit puis redémarrer toute seule. Ca y est !!

La fenêtre affiche alors « Firmware download complete », on vous laisse traduire tout seul...

Firmware RobotC for Lego uploaded

Figure 3 : Firmware téléchargé sur le NXT

Si après RobotC vous souhaitez de nouveau travailler avec NXT-G, le logiciel de programmation graphique fourni avec votre kit Lego, vous avez la même procédure à faire dans l’interface NXT-G qui remet son firmware d’origine. C’est tout aussi facile.

Écrire un premier programme en RobotC

A présent nous sommes prêts pour notre premier programme. Reprenons le programme présenté dans la Figure 1. Il permet de piloter un robot mobile à deux roues par conduite différentielle, ce qui est le cas le plus classique en robotique.

Dans ce programme, on commande les moteurs branchés sur le port A et C de votre robot grâce à la fonction motor. La valeur assignée à cette fonction indique à quelle vitesse tourne le moteur :

  • +100 : le moteur tourne vers l’avant à pleine vitesse
  • 0 : le moteur est à l’arrêt
  • -100 : le moteur tourne à pleine vitesse dans le sens inverse

Selon votre construction (le sens du moteur sur votre robot), vous devrez utiliser une valeur positive ou négative.

Ce premier programme simple utilise également deux méthodes qui permettent de temporiser le programme :

  • wait1Msec() : Ne fait rien pendant une durée multiple d’une milliseconde
  • wait10Msec() : Ne fait rien pendant une durée multiple de 10 millisecondes

Compilation et exécution en RobotC

Pour compiler le programme vous avez à disposition deux entrées dans le menu « Robot » ou bien les touches F5 et F7 en tant que raccourcis.

La touche F7 se contente de compiler le programme. Cela vous permet de détecter les erreurs de compilations.

La touche F5 compile et transfère sur le robot le code compilé. Bien sûr cette fonction ne marche que si le robot est branché, c'est-à-dire brique allumée et connectée (par USB ou Bluetooth) à votre ordinateur.

Appuyez donc sur la touche F5. Une fenêtre s’ouvre et montre la progression du téléchargement du programme sur le robot. Elle se ferme et une autre s’ouvre. Il s’agit de la fenêtre « Program Debug ».

Fenêtre program debug de RobotC

Figure 4 : La fenêtre "Program Debug"

Si vous cliquez sur le bouton « Start », le programme que vous venez de télécharger sur le robot va être exécuté.

Le bouton « Step Into » va vous permettre de lancer une exécution pas à pas de votre programme et activer les autres boutons de débogage que sont « Suspend », « Step Over » et « Step Out » qui vous permettent de passer dans ou hors d’une fonction.

Utilisation de capteurs et de variables en RobotC

Complexifions un peu notre robot et notre programme. Nous allons rajouter un capteur sonar à ultrasons Lego Mindstorms NXT qui, comme son nom l’indique, détecte les distances aux obstacles grâce à un sonar à ultrasons, et branchons le sur le port n°4 de notre brique NXT.

Sonar ultrasons Lego Mindstorms NXT

Figure 5 : Sonar à ultrasons

Il faut donc informer notre programme RobotC de la présence de ce capteur. Pour ce faire, allez dans le menu « Robot » et cliquez sur « Motors et Sensor Setup ». Plus tard vous pourrez découvrir que cette étape est facultative et qu’un capteur peut être déclaré dans le code mais notre objectif ici est bien de présenter RobotC et quelque unes de ses nombreuses possibilités.

Dans la fenêtre qui s’ouvre cliquez sur l’onglet « sensors ». Au passage vous voyez que l’on peut également déclarer la position de ses moteurs sur le robot.

Interface de déclaration des moteurs et des capteurs dans RobotC

Figure 6 : Interface de déclaration des capteurs

Comme présenté dans la figure ci-dessus, donnez un nom à votre capteur et sélectionnez son type dans la liste déroulante. Attention, à bien le faire sur le port sur lequel votre capteur est branché sinon votre programme aura des comportements bizarres.

Cliquez ensuite sur « OK ».

L’interface a alors automatiquement rajouté dans votre code la directive suivante :
#pragma config(Sensor, S4, MySonar, sensorSONAR)
//*!!Code automatically generated by 'ROBOTC' configuration wizard

Nous allons concevoir un programme dans lequel il va avancer tout droit, jusqu’à ce qu’il rencontre un obstacle et dans ce cas, il va effectuer un virage à droite. Il existe des algorithmes d’évitement d’obstacle beaucoup plus efficaces (c'est le moins que l'on puisse dire) mais ce n’est pas l’objet du présent article. La figure suivante présente le code en question.

Code RobotC evitement obstacle

Figure 7 : Code simple d'évitement d'obstacle

Ce code introduit la fonction SensorValue qui permet d’extraire la dernière valeur mesurée par le capteur configuré, en l’occurrence ici une valeur mesurée par le capteur de distance à ultrasons.

Avant de vérifier le comportement du programme sur le robot, allons voir différentes possibilités que nous propose RobotC pour comprendre ce qu’il se passe lorsque le programme tourne. Pour cela, allez dans le menu « Robot / Debug Windows » et cliquez sur « Global Variables ». Répétez l’opération pour « System Parameters ».

Cela vous ouvre des onglets à côté de votre onglet « Error » qui a été ouvert lors de la première compilation. A présent compilez et regardez ce qu’il se passe dans les fenêtres que nous venons d’ouvrir.

La fenêtre « Global variable » vous présente en temps réel la valeur de toutes les variables et constantes de votre programme. Si la valeur n’est pas rafraîchit, dans la fenêtre « Program Debug », cliquez sur le bouton « Continuous ».

Fenêtre global variables de RobotC

Figure 8 : La fenêtre « Global Variables » indique la valeur de temps réel de toutes les variables du programme

Cette fenêtre est très utile pour connaitre l’état du système et la progression du programme en temps réel : votre ordinateur affiche en temps réel les valeurs mesurées par les différents capteurs ainsi que les valeurs de toutes les variables et constantes et enfin les valeurs de puissance affectées aux moteurs. 

La fenêtre « System Parameters » présente quant à elle des données globales sur l’état du système.

Conclusion

Cet article est le premier d’une série qui présentera plusieurs aspects de RobotC. Nous avons abordé ici le logiciel pour ceux qui n’y sont pas familier et présenté quelques possibilités du débogage. RobotC est réellement un logiciel performant et simple pour programmer des robots Lego Mindstorms NXT et s’initier à la robotique.


 

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

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