Laboratoire SUPINFO de recherche en robotique

NXT Tutorial

NXT Tutorial

15 sept, 2014

 

Bienvenue dans le monde de la robotique.

 

Souvent les gens se disent que la création et la manipulation des robots est très ou trop compliqués d’utilisation… Pas avec la technologie NXT !

 

Tout d’abord qu’est-ce que le NXT ?

 

Lego Mindstorms NXT est un jeu de construction et de robotique présenté par Lego en 2006.

La construction du robot se fait a l’aide des célèbres briques de lego.

lego

Vous souvenez vous des legos de votre enfance? Vous pouvez donc monter et démonter vos legos  autant de fois que vous le désirez jusqu’à se que votre construction soit vraiment parfaite.

La gamme Mindstorms NXT nous donne un grand choix de création et une grande liberté d’expression.

Dans ce tutoriel, nous utiliserons le logiciel ROBOTC pour programmer notre robot.

 

De quoi se compose un robot NXT ?

 

- D’une brique NXT qui stockera notre programme.

- De Servo-moteurs qui géreront les déplacement du robot.

- De différents capteurs (capteurs de couleur, sonars).

- De pièces Lego pour assembler le robot.

 

La brique NXT

brique

 

La brique NXT sera le cerveau de ton robot.

C’est dans ce centre nerveux que tu enregistreras le programme que le robot devra exécuter.

Elle comprend un microprocesseur d’une résolution de 32 bits, une mémoire Flash et prend en charge les technologies Bluetooth™ et USB 2.0!

Caractéristiques de la brique intelligente NXT :

  • Microprocesseur 32 bits ARM7.
  • Prise en charge de communications sans fil Bluetooth.
  • 1 port USB 2.0.
  • 4 ports d’entrée.
  • 3 ports de sortie.
  • Alimentation : 6 piles AA de 1,5 V (non incluses) N° 9798 ou N° 9693 Pile rechargeable au lithium (vendue séparément).
  • Tu peux connecter jusqu’à trois briques NXT en même temps mais tu ne peux communiquer qu’avec une seule brique NXT à la fois

 

Les moteurs et capteurs

moteur et capteur

 

 

Les moteurs

 

moteur et capteur

 

Les moteurs disposent d’un capteur de rotation intégré permettant aux programmes NXT-G que vous réalisez de maîtriser avec précision le nombre de tours ainsi que la vitesse.

Cette fonctionnalité intégrée vous permet d’estimer avec une grande précision les déplacements du robot, du bras articulé ou de toute autre architecture que vous concevrez.

 

Les capteurs

 

Il existe donc 5 sortes de capteurs NXT :

  • Capteur de contact
  • Capteur de son
  • Capteur de lumière
  • Capteur de couleurs
  • Capteur de proximité

 

Capteur de contact :

moteur et capteur

Permet au robot de ressentir son environnement et d’y réagir.

Ce capteur de contact permet de déclencher des actions en réponse à une pression physique.

 

 

Capteur de son :

moteur et capteur

Permet au robot d’entendre et de réagir aux sons.

Ce capteur de son pour NXT est capable de mesurer l’intensité sonore de l’environnement du robot. A l’aide de ce capteur, votre robot peut ainsi se diriger ou fuir vers les zones de plus forte ou plus basse intensité sonore en fonction du code que vous avez réalisé.

 

 

Capteur de lumière :

moteur et capteur

Grâce au capteur de lumière ton robot peut différencier la lumière de l’obscurité et également mesurer l’intensité lumineuse d’une pièce ou de différentes couleurs. Il est capable de mesurer l’intensité lumineuse d’une pièce grâce à une échelle de gris.

 

Capteur de couleurs :

moteur et capteur

Le capteur de couleur permet à votre robot de distinguer non seulement le noir et le blanc, mais également une gamme de 6 couleurs. Cette nouvelle technologie peut également détecter la lumière réfléchie et ambiante. Utilisez-le comme lampe de couleur, avec sa lumière rouge, verte ou bleue !

 

 

Capteur de proximité :

moteur et capteur

Permet au robot de voir, de mesurer les distances, de réagir aux mouvements ou de trouver un objet.

Il détecteras sans contact tout objet entre 1 cm et 255 cm.

 

 

 

Le logiciel ROBOTC

 

Vous pouvez relier votre ordinateur à votre robot soit par un câble USB, soit par bluetooth.

Pour relier votre ordinateur au robot via bluetooth il faut :

- Cliquer sur le menu »robot puis dans « NTX Brick ».

- Cliquer sur « Communication Links Setup ».

moteur et capteur

- Dans « Search selection », choisir « USB or Bluetooth » et cliquer sur « Repeat Search ».

moteur et capteur

- Puis dans « NXT Bricks Reachable via Bluetooth or Wi-Fi », sélectionner le NXT que vous voulez reliez via bluetooth et cliquer sur « select via BT ».

moteur et capteur

 

Nous allons maintenant parler de code.

L’interface de programmation Robot-C étend le langage de programmation « C » au contrôle des moteurs et des détecteurs d’un robot par des variables spécifiques.

Commençons !

Au début de votre page vous verrez que une ou plusieurs ligne se sont déjà configurées :

#pragma config(Sensor, S1,     touchSensor,         sensorTouch)      //le capteur S1 sera le capteur de contact
#pragma config(Sensor, S2,     soundSensor,         sensorSoundDB)    //le capteur S2 sera le capteur de son
#pragma config(Sensor, S3,     colorSensor,         sensorColor)      //le capteur S3 sera le capteur de couleur
#pragma config(Sensor, S4,     sonarSensor,         sensorSONAR)      //le capteur S4 sera le sonar

A la place de touchSensor, soundSensor, colorSensor ou sonarSensor vous pouvez donner le nom que vous voulez aux capteurs.
Chaque programme RobotC contient une tâche principale  » task main() » qui est délimitée par des accolades {} en début et en fin.

 

moteur et capteur

A l’intérieur de ces accolades, vous écrirez les commandes que le robot devra exécuter.

 

La commande motor[] permet de démarrer un moteur choisi à une puissance désirée.

A l’intérieure des crochets vous spécifierez le moteur que vous voulez configurer, en fonction du port sur lequel vous l’avez connecté :

motor[motorA]

motor[motorB]

motor[motorC]

Ensuite, vous choisirez à quel pourcentage de puissance vous voulez avancer.

Le moteur peut aller  de 0%  à 100%.

Exemple : motor[motorA] = 50     // le moteur « A » avancera à 50% de sa puissance.

Pour inverser la direction, il faut utiliser des valeurs négatives.

Exemple : motor[motorA] = -50     // le moteur « A » reculera à 50% de sa puissance.

wait1Msec() permet d’exprimer une durée en millisecondes pendant laquelle vous voulez attendre (temps durant lequel les roues continueront de tourner).

task main()
{
   motor[motorA] =100;

   motor[motorB]=100;

   wait1Msec(4000)

   motor[motorA] =0;

   motor[motorB]=0;
}

les roues tourneront à 100% de leur capacité pendant 4 secondes, et s’arrêteront ensuite.

 

- Le capteur S1 (le capteur de contact).

 

Il possède 2 valeur .

Quand il est inactif, la valeur est à 0 jusqu’à ce que le bouton poussoir du capteur soit actionné, cette valeur passe alors à 1 et repasse à 0 quand le bouton n’est plus actionné.

La commande SensorValue(nom du capteur) permet de récupérer cette valeur.

Par exemple si vous placez le capteur de contact à l’avant de votre robot et que vous voulez qu’il s’arrête lorsque il touche un obstacle :

#pragma config(Sensor, S1,     touchSensor,         sensorTouch)  

task main()
{
   motor[motorA] = 100;
   motor[motorB] = 100;
   while(SensorValue(S1) == 0)
   {
      wait1Msec(1);
   }
   motor[motorA] =0;
   motor[motorB]=0;
}

« while » est une boucle qui veut dire « tant que »
Tant que « SensorValue(S1) == 0″ (signifie tant que le bouton n’est pas actionné), le motor A et le motor B avancent.
Donc tant que le robot ne rencontrera pas d’obstacle, il avancera.

 

- Le capteur S2 (capteur de son, aussi appellé « soundSensor »)

 

Il relève une valeur allant aussi de 0 à 100 suivant la puissance du son qu’il capte.

Cette valeur est relevée avec la commande « SensorValue[]« .

Par exemple :

#pragma config(Sensor, S2,     soundSensor,         sensorSoundDB)
task main()
{
   while(true)
   {
      motor[motorB] = SensorValue[soundSensor];   
      motor[motorC] = SensorValue[soundSensor];    
   }
}

while(true) « tant que vrais » veut dire toujours donc ici le robot avanceras plus ou moins rapidement selon la puissance du son qu’il captera.

 

- Le capteur S3 (capteur de couleur)

 

Il permet de détecter une couleurs et réaliser une action selon cette couleur.
Par exemple, imaginons que je veuille que le robot roule et qu’il s’arrête lorsqu’il rencontre du noir.
Il faut savoir que les couleurs sont de bases déjà pré-enregistrées dans le NXT (BLACKCOLOR, BLUECOLOR, GREENCOLOR, YELLOWCOLOR, REDCOLOR, WHITECOLOR) et que le capteur de couleur doit être orienté dans la bonne direction et à environ 1cm du sol.

task main()
{
   motor[motorB] = 100;   
   motor[motorC] = 100;
   while(sensorValue(colorSensor) != BLACKCOLOR)
   {
      wait1Msec(1);  
   }
   motor[motorB] = 0;   
   motor[motorC] = 0;
}

Le signe « != » veut dire « différent de ».

Donc ici on peut voir que tant que la couleur détectée et différente de noir (BLACKCOLOR), le robot avance.

 

- Le capteur S4 (sonar)

 

Il peut capter une distance allant de 1 à 255cm.

La commande SensorValue(nom du capteur) permet récupérer cette valeur.

Par exemple, si vous placez le sonar à l’avant de votre robot et que vous voulez que lorsqu’il détecte un obstacle a 20 centimètre, il tourne à droite pendant 3 seconde puis qu’il reprenne sa route et ainsi de suite :

 

#pragma config(Sensor, S4,     sonarSensor,      sensorSONAR)
task main()
{
   while(true)
   {
      motor[motorA] =100;
      motor[motorB]=100;
      while(SensorValue(sonarSensor) >= 20)
      {
         wait1Msec(1);
      }
      motor[motorA] =100;
      motor[motorB]=-100;
      wait1Msec(3000);
   }
}

 

Nous nous sommes rendu compte que lorsque que le robot devait tourner, cette commande n’était pas très précise car la distance sur laquelle le robot tourne est équivalente à la charge des piles du NXT. Au plus le parcours est long, au plus le décalage sera élevé, le robot ne tournera donc pas exactement comme vous le voudriez.

motor[motorA] =100;

motor[motorB]=-100;

wait1Msec(3000);

Pour résoudre ce problème, nous avons utilisé la fonction nMotorEncoder[] qui permet de récuperer le nombre de degrés parcourus depuis l’initialisation. Cela nous permettra par exemple de dire au robot d’avancer jusqu’à ce que les roues aient effectué une rotation de 90°

Nous utiliserons aussi la commande nSyncedMotors qui synchronisera les 2 roues

Un exemple vous fera mieux comprendre, reprenons le code du sonar :

#pragma config(Sensor, S4,     sonarSensor,      sensorSONAR)
task main()
{
   while(true)
   {
      nSyncedMotors = synchBA                     // nous synchronisons le moteur B au A
      motor[motorA] =100;
      while(SensorValue(sonarSensor) >= 20)
      {
         wait1Msec(1);
      }
      nSyncedMotors = synchNone;                  // on désactive la synchronisation des moteurs

      nMotorEncoder[motorA] = 0;                  // Etant donné que le robot est toujours en                                    mouvement, il faut 
                                                    réinitialiser cette valeur à 0 afin d'assurer le bon point 
                                                    de départ pour les  90 degrés.
      motor[motorA] =100; 

      motor[motorB]=-100;

      while(nMotorEncoder[motorA] != 90)         // tant que le moteur n'a pas tourné sur 90 degrés

      {
         wait1Msec(1);
      }
   }
}


Voilà,

Imaginez les possibilités avec quelques bases en langage de programmation « C ».
En tout cas, les possibilités de s’amuser son infinies !

Ce qui est intéressant aussi, c’est que le robot est capable d’exécuter des montagnes de lignes de code en moins d’une seconde !
Et lorsque le robot réussi l’objectif que vous lui avez donné, cela ne vous apporte que du plaisir.

Je vous souhaite une aventure dans le monde de la robotique !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>