Pour programmer votre robot, vous utilisez parfois certaines relations mathématiques qui conditionnent une parfaite exécution du déplacement.
Parmi ces relations, les plus employées sont:
1 - la conversion d'un angle (exprimé en degrés) en rotations, c"est à dire en nombre de tours du moteur,
2 - le calcul d'une distance à parcourir à partir d'un angle exprimé en degrés ou en nombre de rotations.
Les utiliser évite des manipulations et corrections successives, ou du moins les limite quand on recherche une certaine précision. C'est ce que nous allons examiner.
Par ailleurs, nous savons que le petit écran du NXT permet l'affichage de textes, de formes élémentaires et de symboles graphiques. Ce que nous savons moins bien, c'est que cet écran permet une certaine animation, grâce à l'utilisation des coordonnées cartésiennes en x et y. C'est ainsi, par exemple, que l'on peut associer une variable à une barre de progression mobile en fonction des différentes valeurs de cette variable. Mais pour réaliser ce travail, il nous faut connaître les caractéristiques et les conventions adoptées pour cet écran. C'est ce que nous verrons par la suite.
Enfin, au fur et à mesure que votre bibliothèque de programmes s'agrandit, vous constaterez que certains modules reviennent souvent et sont réutilisables pour des projets différents. D'où, l'idée de les écrire une fois pour toute pour les réutiliser à l'occasion.
1 - Déplacements du robot
Retenez d'abord ces quelques formules, qui expriment les relations entre degrés et rotations.
Quand il s'agit de choisir les paramètres de durée dans le panneau de configuration du bloc MOTEUR ou DEPLACER, les 2 éléments les plus souvent utilisés sont l'angle (en degrés) ou le nombre de rotations. La durée en secondes est plus rarement choisie, parce que les distances parcourues en 5 secondes par exemple, ne seront jamais identiques du fait de la charge de la batterie qui diminue selon l'usage.
Les formules sont simples et faciles à retenir:
DEGRES = (NOMBRE DE ROTATIONS) x 360
ROTATIONS = (NOMBRE DE DEGRES) / 360
Attention: il s'agit du nombre de degrés ou de rotations du MOTEUR et non des roues du robot.
Ces formules de conversion permettent de modifier un programme selon les circonstances et les préférences de chacun.
Comment à présent convertir les degrés ou rotations en DISTANCE?
La première chose à faire avant de déterminer la distance à parcourir, c'est de convertir la durée en nombre de rotations (voir la formule ci dessus). Si la durée de votre bloc DEPLACER est exprimée en degrés, il suffit de choisir le paramètre rotation dans le panneau de configuration; le calcul est fait automatiquement.
Exemple: supposons que la durée soit de 900 degrés; le nombre de rotations correspondant est de 900/360 = 3,5. Le résultat est exprimé en valeur décimale.
Ensuite, nous avons besoin d'une deuxième valeur: celle du diamètre de la roue.
Il s'agit en l'occurence du diamètre extérieur de la roue, y compris son pneu.
Fig.1

La circonférence est égale à:
D (diamètre) x 3,14 (pi).
Si vous prenez l'une des roues du NXT, vous constaterez que le diamètre, pneu compris, est approximativement de 5,7 cm.
La valeur de pi a été volontairement limitée à 2 chiffres après la virgule, aussi la circonférence (égale à un tour de roue) s"établit à 5,7 x 3,14 = approximativement 17,9 cm.
En reprenant notre exemple de 900 degrés, la distance parcourue est:
17,9 cm x 3,5 = 62,65 cm approximativement.
Remarque: La distance parcourue est donc fonction du diamètre de la roue. Plus la roue est grande et plus la distance parcourue l'est également.
Comment déterminer avec suffisamment de précision une distance à parcourir?
Il existe une méthode qui évite tous ces calculs manuels. N'oubliez pas que le NXT est aussi un calculateur et que chaque moteur est également un capteur grâce à son tachymètre interne. Nous allons utiliser ces particularités en les associant aux blocs NXT-G.
Fig.2

Première méthode:
1. Ouvrir un fichier en cours d’élaboration
2. Allumer le robot
3. Brancher le robot au PC (câble USB ou bluetooth)
4. Positionner le robot à son point de départ
5. Sélectionner un bloc MOTEUR ou DEPLACER dans le programme
6. Dans le panneau de configuration sous l’icône MOTEUR cliquer sur le bouton « Réinitialiser ». La valeur zéro (0) apparaît dans le champ situé au dessus
Fig.3

7. faire avancer à la main le robot jusqu’au point de contact désiré
8. Noter la valeur qui s’affiche dans le champ: ici 1085.
Fig.4

9. Noter la couleur des caractères (noir, sens positif ; rouge, sens négatif)
10. Reporter cette valeur dans la zone « Durée » du panneau de configuration (en degrés).
Remarque : cette méthode dispense de calculer la distance en fonction du diamètre des roues.
Deuxième méthode:
Procéder de la même manière si vous ne souhaitez pas travailler sur un programme existant.
1. Créer un nouveau programme
2. Allumer le robot
3. Brancher le robot au PC (câble USB ou bluetooth)
4. Positionner le robot à son point de départ
5. Placer un bloc DEPLACER au début du programme
6. Dans le panneau de configuration sous l’icône DEPLACER cliquer sur le bouton "R" (Réinitialiser). La valeur zéro (0) apparaît dans les champs B et C des moteurs synchro situés au dessous
Fig.5

7. faire avancer à la main le robot jusqu’au point de contact désiré
8. Noter la valeur qui s’affiche dans les champs B et C: ici 784 et 890.
Faire la demi somme soit (784+890)x0,5= 837
Fig.6

9. Noter la couleur des caractères (noir, sens positif ; rouge, sens négatif)
10. Reporter la valeur 837 dans la zone « Durée » du panneau de configuration (en degrés).
2 - Utilisation de l'écran NXT
L'écran LCD a une résolution horizontale de 100 pixels et une résolution verticale de 64 pixels. Cela signifie qu'on peut placer 100 petite points horizontaux sur chaque ligne, et 64 verticaux sur chaque colonne à l'intérieur de l'écran. Cela fait donc au total 6400 points. Lorsque tous ces points sont placés, la totalité de l'écran est noir.
Pour positionner ces points, on adopte une convention qui consiste à choisir deux axes de coordonnées perpendiculaires: axe des x et axe des y. Par définition l'origine de positionnement se trouve en haut et à gauche de l'écran.
Les valeurs partent de zéro (0)et croissent vers la droite jusqu'à 99 pour les x; de zéro (0) et descendent jusqu'à 63 pour les y.
Un point quelconque est donc caractérisé par sa position en x et sa position en y. Par exemple, un point 20,12 se situe sur la 21ème ligne et la 13ème colonne (ne pas oublier de compter les zéros).
Fig.7

En résumé, la valeur en x/y d'un pixel situé en haut et à l'extrême gauche est 0/0. Sur la même ligne et à l'extrême droite sa valeur est 0/99. Souvenez-vous que la valeur y croît au fur et à mesure que l'on se déplace vers le bas de l'écran; la valeur du pixel situé tout en bas et à gauche est 0/63; elle est 99/63 pour un pixel situé tout en bas et à l'extrême droite.
Revenons à la programmation NXT-G et examinons le bloc AFFICHER.
Fig.8

Dans la série des plots de données, ceux qui nous intéressent plus particulièrement portent l'indication x et y, ainsi que _x et _y. Par ces plots on contrôle la position d'un objet graphique affiché sur le petit l'écran.
Le panneau de configuration est paramétré pour l'affichage d'un cercle de rayon 25 (pixels). Sa position dans la fenêtre de l'écran est fixée par ses coordonnées x = 51 et y = 31.
Si aucun fil de données est raccordé aux plots x et y, l'objet sera vu tel quel. Par contre si les plots x et y sont reliés en entrées à un autre bloc fournissant des valeurs variables, l'objet sera vu dans la position définie par ces valeurs variables. Et si ces variables suivent une loi mathématique, l'objet se déplacera selon cette loi. Et pour donner l'illusion du déplacement, il suffira de créer une boucle contenant le bloc AFFICHER et relier les plots x et y à un 'pourvoyeur' de données, comme par exemple une distance, un niveau de luminosité, une valeur aléatoire, etc..
EXEMPLE:
Reliez la brique NXT à l'aide d'un câble de connexion, à un capteur US sur le port 4.
Nous souhaitons afficher une glissière mobile proportionnelle à la distance mesurée par le capteur. Pour les besoins de cet exemple, nous limiterons la distance capteur-objet à 100 cm.
Le résultat recherché est le suivant:
Fig.9

Nous tracerons sur l'écran 2 lignes parallèles fixes, à l'intérieur desquelles se déplacera une barre noire mobile à partir du bord gauche qui est l'origine. La longueur de cette barre sera proportionnelle à la distance mesurée par le capteur.
Le programme qui en découle ressemble à ceci:
Fig.10

N'importe quel capteur peut traduire de cette manière des valeurs mesurées. Il en est de même pour les servomoteurs pour lesquels on pourrait traduire les puissances et même le sens de rotation, si l'origine se situe non plus au bord gauche, mais dans l'axe vertical de l'écran. Le sens positif ou négatif par rapport à cet axe indique alors le sens de rotation du moteur.
Vous remarquerez cependant le nombre important de blocs AFFICHER nécessaires pour réaliser cette représentation graphique. A noter également que seul le premier bloc AFFICHER est coché pour effacer l'écran à chaque passage de la boucle.
A suivre…