NXT-G, leçon n°13 : Trucs et astuces & programmes utiles

Pour expliquer certains fonctionnements, principes et fondements.
Avatar de l’utilisateur
roboleo
Level 8
Level 8
 
Messages: 955
Localisation: Hauts de Seine
expertnxt

Messagepar roboleo » Mar Juil 14, 2009 4:58 pm

NXT-G, Leçon n°13: Trucs et astuces…programmes utiles…

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
Image
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
Image

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
Image

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
Image
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
Image

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
Image

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
Image
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

Image
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
Image
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
Image

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…
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso

Avatar de l’utilisateur
Alban42800
Level 11
Level 11
 
Messages: 2473
Localisation: Loire (42)
Âge: 51 ans
expertgbbexpertnxtvainqueurconcours

Messagepar Alban42800 » Jeu Juil 16, 2009 11:10 am

Waow, je ne savais pas qu'on pouvait lire les capteurs de rotation directement sur l'ordinateur ! :clap:

Avatar de l’utilisateur
roboleo
Level 8
Level 8
 
Messages: 955
Localisation: Hauts de Seine
expertnxt

Messagepar roboleo » Dim Oct 04, 2009 3:07 pm

STOCKAGE PERMANENT DE DONNEES dans la mémoire de la brique NXT.

Il est parfois utile, dans certains cas, de conserver des valeurs afin de les retrouver pour une autre utilisation, soit dans un autre programme, soit en récupération pour un traitement suivant.
Pour cela, il existe dans la palette entière "avancé" du logiciel NXT-G, un bloc intitulé "accès aux fichiers".

Image

Ce bloc permet d'enregistrer les données du robot dans des fichiers à l'intérieur de la brique NXT.

Dans la zone "Action", nous avons à disposition 4 modes d'utilisation possible.
Dans la zone "Type", les données pouvant être stockées sont de 2 types: soit 'Texte' soit 'Numérique'. Les données logique n'y figurent pas. Mais en choisissant une valeur égale à 0 ou 1, il est possible de les transformer (après récupération) en valeurs logiques.
Dans la zone "Nom" vous choisissez un nom caractéristique qui vous permet de retrouver facilement vos données stockées.
Enfin la zone de saisie contient le texte ou la valeur à enregistrer dans le fichier que vous avez nommé. Ces données peuvent également provenir d'autres blocs (notamment des blocs VARIABLE) à l'aide de fils de données.

Après avoir ECRIT des données dans un fichier, il faut utiliser un autre bloc "Accès aux fichiers" pour FERMER le fichier avant de pouvoir le LIRE ou le SUPPRIMER (à l'aide d'un troisième bloc "Accès aux fichiers").
Par exemple, pour écrire dans un fichier puis lire des données à partir de celui-ci, le fichier doit être FERME entre les deux actions. Cette tâche exigerait trois blocs "Accès aux fichiers" : le premier (pour lequel l'option « Écrire » est activée dans le panneau de configuration) écrit des données dans un fichier ; le deuxième, placé plus loin dans le programme, doit être configuré pour fermer ce fichier ; enfin, le troisième (pour lequel l'option « Lire » est activée dans le panneau de configuration) lit le fichier. Ces trois blocs peuvent être placés côte à côte ou être disposés à différents endroits du programme.
Enfin l'écriture dans un fichier existant AJOUTE les données à la fin du fichier, au lieu d'EFFACER les données existantes. Pour ECRASER un fichier, il faut tout d'abord utiliser un bloc "Accès aux fichiers" qui SUPPRIME le fichier, puis en employer un second qui ECRIT un nouveau fichier en lui donnant le même nom.

Voici à quoi pourrait ressembler un programme d'enregistrement et de lecture de données numériques:

Image

Et voici comment procéder pour récupérer ces valeurs, à l'aide d'un autre programme:

Image

Vous remarquerez qu'ici un seul bloc "Accès aux fichiers" suffit pour récupérer les données dans un bloc VARIABLE.

Et pour ceux qui veulent aller plus loin en programmation, il est facile de les transformer en "Mon Bloc" pour usages ultérieurs…
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso

NeuroMimetis
Level 10
Level 10
 
Messages: 1574
collectionneur

Messagepar NeuroMimetis » Mar Fév 23, 2010 10:52 pm

Leo,

je viens de compiler l'ensemble de ces leçons dans un seul et même document. J'ai passé la journée à le lire et le relire.

On dirait que tu as fait le tour du sujet (le reste est une question d'inspiration). Bravo encore et merci mille fois pour cette référence NXT.

A+
Neuro

Avatar de l’utilisateur
Nico71
Level 14
Level 14
 
Messages: 9618
Âge: 35 ans
expertgbbexpertsoft3dexperttrialtruckmoceurtechnicexpertvainqueurconcours3

Messagepar Nico71 » Mar Fév 23, 2010 11:27 pm

Peux tu mettre en ligne ce document ?

;)

Avatar de l’utilisateur
roboleo
Level 8
Level 8
 
Messages: 955
Localisation: Hauts de Seine
expertnxt

Messagepar roboleo » Mer Fév 24, 2010 3:22 pm

NeuroMimetis a écrit:Leo,

je viens de compiler l'ensemble de ces leçons dans un seul et même document. J'ai passé la journée à le lire et le relire.

On dirait que tu as fait le tour du sujet (le reste est une question d'inspiration). Bravo encore et merci mille fois pour cette référence NXT.

A+
Neuro

Je pensais en faire un document pdf complet, mais puisque tu as compilé, je suis preneur.
Merci pour tes appréciations, et comme tu peux le constater, ce n'est pas fini… :lol:
Et crois moi, cela va devenir de plus en plus "technique". ;)
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso

NeuroMimetis
Level 10
Level 10
 
Messages: 1574
collectionneur

Messagepar NeuroMimetis » Mer Fév 24, 2010 9:08 pm

roboleo a écrit:
Et crois moi, cela va devenir de plus en plus "technique". ;)


Vas-y Leo, tu peux envoyer du lourd, me voici revenu à mes anciennes(*) amours : la belle programmation, celle qui est ronde comme une bulle :petuncable: et c'est en partie à toi que je le dois :resp: .

Pour le document (format MS Word), j'ajoute l'épisode 14 et je vous donne un lien ... A tout à l'heure.
[EDIT] : Je trouvais plus normal de soumettre le document à Roboleo avant de publier le lien .... Donc, j'attends son Go.

Neuro

(*) amour est un substantif féminin.
Dernière édition par NeuroMimetis le Mer Fév 24, 2010 9:48 pm, édité 1 fois au total.

Avatar de l’utilisateur
Anio
Administrateur
Administrateur
 
Messages: 19496
Âge: 37 ans
revieweurmoceurstarwarsexpertambassadeur

Messagepar Anio » Mer Fév 24, 2010 9:19 pm

NeuroMimetis a écrit:(*) amour est un substantif féminin.

Raaaa, petite parenthèse orthographique intéressante.
Amour est masculin au singulier, et féminin au pluriel. ;)

/HS
Think outside the box.

Tout plein de liens utiles dans mon profil ! :P

NeuroMimetis
Level 10
Level 10
 
Messages: 1574
collectionneur

Messagepar NeuroMimetis » Ven Fév 26, 2010 12:40 am

Nico71 a écrit:Peux tu mettre en ligne ce document ?

;)


Je pensais que oui, mais en fait, non ... désolé :pamafote:

Ce que j'ai fait est un copier / coller de base dans un document word avec un minimum de mise en page et de recadrage ... Ce qui ne rend pas justice au travail fait par Roboleo. Nous en avons "parlé" tous les 2 et RoboLeo veut consacrer le temps nécessaire pour vous mettre à disposition un vrai document de référence.

Donc, on le laisse faire, tranquillement ... et ça viendra en son temps

A+
Neuro

totoche
Level 1
Level 1
 
Messages: 9

Messagepar totoche » Dim Juin 13, 2010 7:24 pm

Bravo, et un très grand merci toute ces leçons NXT, çà m'a beaucoup aider pour la réalisations des programmes NXT ;)


Retourner vers De la théorie à la pratique

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 14 invités