NXT-G, leçon n°2 : Se déplacer

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 » Jeu Déc 04, 2008 4:15 pm

Bonjour à tous,

Vous êtes tous passés, je l'espère, par la 'MISE en ROUTE' de NXT-G.
Vous avez donc vu l'espace de travail et toutes les autres parties qui sont les outils à votre disposition.
Mais, revenons à BONG :bounce:
Vous avez là aussi construit votre BONG , selon mes recommandations. Il est peut-être différent du mien, mais qu'importe, je dirais tant mieux. En effet, mêmes différents des BONG peuvent agir de la même façon, à condition que les ports soient raccordés de la manière suivante:
2ème règle:
Les capteurs doivent être connectés aux ports d’entrée (1,2,3 & 4) et les moteurs doivent être connectés aux ports de sortie (A, B & C).

Si cette règle n’est pas respectée, au mieux, il ne se passera rien ; au pire, je n’en sais rien.

Structure et programme
Je n'utiliserai pas ici de termes techniques, mais pour une fois, acceptez que je vous parle de structure de programmation.
Si les êtres humains sont capables par eux-mêmes d"accomplir certaines tâches non dites, rappelez-vous que BONG n'est pas aussi intelligent! Les instructions qu'il reçoit doivent lui être données d'une manière stricte et spécifique. De plus elles doivent être ordonnées.Cet ordonnancement est une façon de parler de structure de programmation.

Prenons un exemple;
BONG est immobile, en attente.
Quant à nous, nous ne sommes pas encore prêts à télécharger un programme NXT-G, mais, nous pouvons pré-plannifier les tâches d'un futur programme.
Nous allons utiliser ce que certains programmeurs appellent un pseudo-code.
Pseudo-code? C'est tout simplement un 'faux programme'.
Ce pseudo-code ne sera pas écrit à l'aide du NXT-G, mais pour le faire nous supposerons que BONG a des oreilles et qu'il est capable d'enregistrer les ordres donnés.
Essayons d'écrire des pseudo-codes suivant une liste numérotée.
1. BONG, avance jusqu'à ce que le capteur tactile soit appuyé et relâché; puis stop.
2. Ok BONG, tourne maintenant à gauche de 90°.
3. Bon travail, BONG . Maintenant recule jusqu'à ce que le capteur photosensible détecte un objet noir; puis stop.
4. Maintenant BONG, danse un peu.
Ce que je veux dire par là, c'est qu'avant de programmer avec NXT-G, vous devez avoir une idée précise de ce que BONG doit faire. Et la meilleure façon de l'exprimer, c'est d'écrire en simple langage les instructions destinées à BONG.

En résumé, quand vous écrivez un pseudo-code, vous faîtes 2 choses:
- Vous bénéficiez d'une meilleure compréhension du travail que BONG doit accomplir.
- Vous créez un enclenchement logique de tâches (structure) que BONG doit suivre.

Une dernière remarque: pensez à ce que chaque instruction destinée à BONG soit la plus simple possible.
( :cri: > Simple is beautiful…)

Pour appuyer ce que je viens de dire, dites-moi quel est l'exemple qui vous paraît le mieux convenir?

Exemple 1:
BONG, avance de 30 cm; tourne à gauche de 90°, puis recule; ensuite cherche un objet noir à l'aide du capteur à ultrasons, parce que je veux un stop si tu trouves cet objet; alors tourne à droite de 90°, et recule de 50 cm, OK?
Exemple 2:
* BONG, avance de 30 cm et stop
* Maintenant tourne à droite de 90°
* Recule, et active le capteur à ultrasons.
* Stop, quand tu trouves un objet noir
* Tourne à droite de 90° puis stop
* Maintenant recule de 50 cm et stop

Vous avez trouvé?
Bien sûr, c'est le 2…Il faut dire que même un humain serait perplexe avec le 1!
Plus les instructions seront simples et courtes; et plus il vous sera facile de les traduire en NXT-G

Les Blocs dans NXT-G;
Reprenons le pseudo-code 3 ci-dessus:
" Maintenant recule jusqu'à ce que le capteur photosensible détecte un objet noir; puis stop."
Si je programme en NXT-G et si les outils me sont familiers, je constate que certains collent parfaitement avec mon pseudo-code.
Quand je demande à BONG de reculer, il utilisera ses moteurs, non?
Bien, j'utiliserai alors un outil qui s'appelle un bloc DEPLACER.
Ce bloc DEPLACER va me permettre de programmer la rotation des moteurs (et des roues) en sens inverse, et BONG reculera.

Je veux que BONG recule seulement jusqu'à ce le capteur photosensible détecte la couleur noir? J'emploierai l'outil bloc Capteur PHOTOSENSIBLE qui réagit à la lumière. Ce bloc sera programmé pour détecter la couleur noir.
Enfin, je veux que BONG stoppe quand le bloc capteur détecte la couleur noir. J'utilise pour cela à nouveau un bloc DEPLACER qui dira aux moteurs d'arrêter la rotation.

Vous utiliserez ces blocs et bien d'autres pour programmer correctement BONG :bounce: et les autres robots.
En conclusion, retenez de cela:
PRENEZ LE TEMPS D'ECRIRE LES PSEUDO-CODES EN TERMES COURTS et SIMPLES, LA PROGRAMMATION EN SERA FACILITEE.

Nous allons aborder maintenant l'utilisation du BLOC DEPLACER, qui est le plus important dans la programmation d'un robot. Sans ce bloc, vous pourrez construire des modèles, mais ils seront très limités et ne feront pas grand chose. Ils seront immobiles et peu intéressants.
Tous les robots que vous concevrez et qui comportent un ou plusieurs moteurs utiliseront le BLOC DEPLACER.

A suivre…

A+
Roboleo
Dernière édition par roboleo le Sam Déc 06, 2008 4:30 pm, édité 1 fois au total.

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

Messagepar roboleo » Ven Déc 05, 2008 3:51 pm

Et maintenant, un petit exercice…
Tutur1994 a écrit: bon aller un p'tite question serait-il possible de faire un code nxt-g pour que quand on appui sur le Touch Sensor sa change le canal de l'IR Link et que sa s'affiche sur l'écran du mindstorms
bon aller un pti dessin pour me faire comprendre

Exercice sur le pseudo-code:
En fonction de ce post de Tutur1994 essayez de traduire en une liste de tâches l'énoncé de son problème (une tâche par ligne).
Remarque: le croquis est très utile, il explique autrement une pensée.
Besoin de renseignements sur l'IR link?… à voir sur le site LEGO ou avec Tutur.

A+
Roboleo

cybermaster
Level 11
Level 11
 
Messages: 2205
Localisation: Valence
Âge: 29 ans

Messagepar cybermaster » Ven Déc 05, 2008 5:39 pm

Attendre que le touch sensor soit en position : pressé
Changer le canal de L'IR link
Afficher sur l'éran

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

Messagepar roboleo » Ven Déc 05, 2008 8:03 pm

cybermaster a écrit:Attendre que le touch sensor soit en position : pressé
Changer le canal de L'IR link
Afficher sur l'éran

Pas assez détaillé…
IR link c'est 4 canaux, OK?

Voilà les questions que je pose:
IR Link, où est-il?
Quel lien entre l'IR Link et le Touch?
Afficher quoi avant d'appuyer sur le Touch?
Attendre, c'est une boucle, combien de fois pressé? 1,2,3,4?
Que se passe-t-il à 5?
Afficher quoi au 1er clic?
Dito au 2ème, 3ème,4eme clic

Pas aussi évident…!

A+
Roboleo

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

Messagepar Anio » Ven Déc 05, 2008 8:10 pm

Il est pas plus approprié ce topik : http://www.techlug.fr/Forum/viewtopic.php?t=1259 ?

:idea:
Think outside the box.

Tout plein de liens utiles dans mon profil ! :P

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

Messagepar roboleo » Ven Déc 05, 2008 8:17 pm

Anio a écrit:Il est pas plus approprié ce topik : http://www.techlug.fr/Forum/viewtopic.php?t=1259 ?

:idea:

On ne cherche pas à répondre à Tutur
c'est un exercice sur le pseudo-code.

A+
Roboleo

jfl_207
Level 5
Level 5
 
Messages: 171
Localisation: Belgique
Âge: 52 ans

Messagepar jfl_207 » Ven Déc 05, 2008 9:41 pm

roboleo a écrit:Pas assez détaillé…
IR link c'est 4 canaux, OK?

Voilà les questions que je pose:
IR Link, où est-il?
Quel lien entre l'IR Link et le Touch?
Afficher quoi avant d'appuyer sur le Touch?
Attendre, c'est une boucle, combien de fois pressé? 1,2,3,4?
Que se passe-t-il à 5?
Afficher quoi au 1er clic?
Dito au 2ème, 3ème,4eme clic

Pas aussi évident…!

A+
Roboleo


Définir une variable pour le canal ir actuel
Définir une variable pour le nombre de fois ou le Touch est pressé
NumCanalIr = 1
TouchCpt = 0

afficher TouchCpt sur l'écran
mettre le Canal Ir = NumCanalIr

debut d'une boucle : Est-ce que le Touch est pressé

si non
    aller à la fin de boucle

si oui
    TouchCpt = TouchCpt+1
    NumCanalIr = NumCanalIr + 1
    si NumCanalIr = 5 alors NumCanalIr = 1

    Afficher TouchCpt
    Mettre le Canal Ir = NumCanalIr
    Afficher NumCanalIr


fin de boucle --> retour au debut de la boucle

Avatar de l’utilisateur
Clément
Level 9
Level 9
 
Messages: 1017
Âge: 37 ans
experttrialtruck

Messagepar Clément » Ven Déc 05, 2008 11:49 pm

anio, tu comprends rien, laisse faire ceux qui savent :D
(le prends pas mal)

j'y connais rien en NXT, mais je pense que toute réponse à ce pseudo-exercice doit etre écrite en code, avec des commentaires pour clarifier les choses.

continue, ces tutoriaux sont sympas, mais fais plutot de la technique bien expliquée que de la pseudo-technique expliquée à l'arrache ...

NeuroMimetis
Level 10
Level 10
 
Messages: 1574
collectionneur

Messagepar NeuroMimetis » Ven Déc 05, 2008 11:55 pm

Robo,

d'abord merci pour cette série. Cela fait toujours plaisir de voir quelqu'un s'impliquer dans une approche pédagogique, juste pour le plaisir de partager (je n'en doute pas un seul instant).

Ensuite, le ton est juste, à l'exception des smilies trop nombreux qui gênent la lecture, si je peux me permettre.

Continue, mon ami, c'est du tout bon !!!

Neuro

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

Messagepar roboleo » Sam Déc 06, 2008 2:05 pm

Merci à vous tous pour vos encouragements. :)
Le partage des connaissances!… C'est la seule valeur qui enrichit l'autre sans vous appauvrir.

Je vais remettre BONG au pas, puisqu'il vous énerve. Mais avouez, l'objectif est atteint; j'ai réussi à vous intéresser…

Maintenant l'exo:
Doucement les informaticiens, il y a des collégiens qui risquent de ne pas suivre.
Je vous donne une version (il y en a d'autres, bien sûr!)

* Afficher "appuyer sur le bouton pour sélectionner un canal"
* Compter les coups du Touch
* Début de boucle
* Compteur à 1; appuyer premier Touch; afficher "Canal 1"; Activer IRL 1 (moteur PF 1)
* Compteur à 2; appuyer deuxième Touch; afficher "Canal 2"; Activer IRL 2 (moteur PF 2)
* Compteur à 3; appuyer troisième Touch; afficher "Canal 3"; Activer IRL 3 (moteur PF 3)
* Compteur à 4; appuyer quatrième Touch; afficher "Canal 4"; Activer IRL 4 (moteur PF 4)
* Compteur à 5; mettre le compteur sur 1;appuyer Touch;
* Recommencer la boucle sans fin
* Appuyer sur le bouton "arrêt" du NXT pour quitter le programme.

Je vous montrerai plus tard à quoi ressemble ce programme écrit avec NXT-G.

A+
Roboléo ;)

jfl_207
Level 5
Level 5
 
Messages: 171
Localisation: Belgique
Âge: 52 ans

Messagepar jfl_207 » Sam Déc 06, 2008 2:45 pm

roboleo a écrit:
Maintenant l'exo:
Doucement les informaticiens, il y a des collégiens qui risquent de ne pas suivre.
Je vous donne une version (il y en a d'autres, bien sûr!)

A+
Roboléo ;)


Opps, svp pas :marteau: trop fort

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

Messagepar roboleo » Sam Déc 06, 2008 3:31 pm

NXT-G, Leçon n°2: Se déplacer (suite 1).

Lancez le logiciel NXT-G, si ce n'est fait, et dans la page d'accueil sélectionnez 'Démarrer un nouveau programme'
Image
Vous ouvrez à présent une nouvelle fenêtre dans laquelle nous allons travailler.
Dans cet espace, faîtes disparaître la fenêtre 'Robo Center' pour avoir plus de place, en appuyant sur la petite croix en haut et à droite.
Dans la palette 'Commun' survolez la première icône 'Déplacer'.
Cliquez dessus et glissez vers le point de départ de l'espace de travail. L'icône vient se coller 'magnétiquement' à l'emplacement 'Démarrer'. Elle est encadrée d'un pointillé bleu qui indique qu'elle est sélectionnée.
Image
Observez maintenant la fenêtre du bas à gauche. Elle est très importante: c'est le panneau de configuration du 'bloc Déplacer.
Chaque fois que vous sélectionnerez un bloc dans la zone de travail, son panneau de configuration sera automatiquement affiché. Bien entendu il est différent pour chaque bloc.
C'est dans ce panneau que le paramétrage du 'bloc Déplacer' se fera. C'est ici que vous choisirez les caractéristiques des moteurs que vous voulez contrôler. C'est une sorte de tableau de bord.
Les indications qui apparaissent sont celles de défaut. Ce bloc est déjà opérationnel. Si les paramètres ne vous conviennent pas, vous pouvez les modifier.

Examinons le détail. Vous remarquerez que chaque zone est caractérisée par une minuscule icône qu'on retrouve sur le bloc.
* La zone Port indique les moteurs que vous voulez contrôler. Ici B et C.
On peut les modifier en cochant/décochant les cases correspondantes. Si on conserve B et C, il faut que les connexions entre les moteurs et le NXT soient respectées.
Dans ce cas les moteurs seront synchronisés et tourneront en marche avant ou en marche arrière à la même puissance. Si vous sélectionnez trois moteurs, les moteurs B et C seront synchronisés.
* La zone Direction indique si les moteurs doivent tourner en marche avant ou en marche arrière, ou s'arrêter.
Si vous utilisez deux moteurs pour conduire un véhicule (un de chaque côté), la glissière Diriger s'affiche ; les lettres des ports sélectionnés sont indiquées de chaque côté. Déplacez la glissière si vous voulez définir un trajet incurvé pour votre robot. Si la glissière est tirée entièrement d'un côté, votre véhicule tournera sur place.
* La zone Alimentation dispose d'une glissière de saisie permettant de définir le niveau de puissance (0-100%), c'est à dire la vitesse.
* La zone Durée dispose d'un menu déroulant pour indiquer si les moteurs doivent tourner pendant une durée illimitée ou pendant un nombre précis de rotations (par défaut), de degrés ou de secondes. Les options Temps, Rotation et Degrés permettent de déterminer la distance que votre robot parcourra.
* La zone Action suivante Indique si les moteurs doivent freiner ou continuer en roue libre après avoir terminé leur action. Choisissez le freinage si vous voulez qu'ils s'arrêtent à un endroit précis. En outre, le freinage permet d'éviter que votre robot ne recule lentement s'il se trouve sur une pente.
Avec tous ces paramètres, vous pouvez programmer vos moteurs comme vous l'entendez.

Observez à nouveau l'icône 'bloc Déplacer'; vous constaterez la présence des minuscules icônes qui rappellent le contenu du panneau de configuration. Changez les paramètres; ils seront modifiés sur le bloc.

Exercice:
reprenons l'exemple n°2 en modifiant quelques paramètres
* BONG, avance de 120 cm et stoppe
* Maintenant tourne à droite de 90°

Petit calculs préliminaires:
D = diamètre extérieur de la roue = 5,6 cm env.
Un tour de roue = 3,14 * 5,6 = 17,6 cm env.
Nbre de rotations = 120 / 17,6 = 6,8 env.
(Pour l'instant c'est vous qui calculez; plus tard ce sera le NXT. N'oubliez jamais que c'est un super calculateur et qu'il ne se trompe pas).

Le résultat se présente ainsi:
Image

avec ses 3 panneaux de configuration:
Bloc 1
Image

Bloc 2

Image
Bloc 3

Image

Vous allez à présent sauvegarder ce programme.
Choisissez dans la barre de menus: >"Enregistrer le Programme" , et un fenêtre vous demande de lui donner un nom (BONG-1) ainsi que l'endroit du stockage puis validez.
Ou avez-vous enregistré ce programme? Evidemment sur votre ordinateur!

Il faut maintenant le télécharger sur BONG.
Allumez le NXT et connectez BONG à votre ordinateur, puis, téléchargez le programme (BONG-1).
Ce travail accompli, sélectionnez sur le petit écran du NXT "Software files", appuyez sur le bouton rouge et recherchez "BONG-1". Appuyez une 2ème fois sur le bouton rouge pour exécuter le programme.

On peut déjà en tirer quelques enseignements:
Il a fallut 3 blocs pour traduire le pseudo-code.
Les blocs s'exécutent l'un après l'autre dans l'ordre.
Le programme s'arrête quand il n'y a plus de bloc.

3ème règle:
Un bloc ne peut accomplir qu'une seule tâche à la fois. Il faut autant de blocs que de tâches à accomplir.

Nous allons maintenant détailler le contenu du bloc.
Les plots de données.
La plupart des blocs comportent un ensemble d'outils de connexion qu'on appelle PLOT de DONNEES.
Ils sont généralement invisibles et il faut les activer pour les rendre visibles.
Image
Il suffit de cliquer sur cette partie de l'icône pour dérouler la succession de plots:
Image
Pour faire une comparaison, un peut dire qu'une "armoire électrique" vient de s'ouvrir. Cette "armoire" comporte de part et d'autre de la zone centrale des "bornes" sur lesquelles vont se raccorder des "fils" comme des fils électriques.
La seule différence avec une installation électrique, c'est que ces bornes sont virtuelles et ne constituent que des points d'attache des fils (eux aussi virtuels) qui transportent des données. Mais chacun de ces points diffère de son voisin par la nature de l'information qui transite. On les reconnaît grâce à un repère graphique différent.
On remarque qu'il y a une "entrée" à gauche et une "sortie" à droite.
En voici un exemple:
Image
Deux ou plusieurs blocs ( pas forcément côte à côte) peuvent s'envoyer des informations si entre leurs bornes-leurs PLOTS- un fil les relie. Ces fils sont faciles à tracer; il suffit de pointer sur un plot, cliquer et le relier au plot souhaité.
Pour simplifier, on peut dire que les fils reliés à ces plots constituent un "câblage" particulier entre deux ou plusieurs blocs.
La manière de tracer ces fils et leur utilisation sera développée dans une autre leçon.
Pour l'instant ils sont inemployés, car sans objet.
Pour fermer cette "armoire", il suffit de cliquer au même endroit.

Vous avez appris à contrôler par programme, le fonctionnement des moteurs grâce au bloc 'Déplacer'. Il en existe un autre appelé 'Moteur'; il sera vu à l'occasion d' exercices. Essayez d'autres combinaisons de blocs en modifiant les paramètres et testez à nouveau.

A suivre…

A+
Roboleo

cybermaster
Level 11
Level 11
 
Messages: 2205
Localisation: Valence
Âge: 29 ans

Messagepar cybermaster » Sam Déc 06, 2008 7:50 pm

Well done ;)

Mais j'ai une question : sur cette image :

Image

A quoi sert le deuxième bloc à gauche en partant du haut ?

Les autres je voit, mais lui non :think:

Thibaud
Level 6
Level 6
 
Messages: 333
Localisation: Paris
expertnxt

Messagepar Thibaud » Sam Déc 06, 2008 8:41 pm

Tu veux parler de celui en forme de sablier? Si c'est celui là je dirais qu'il sert pour la gestion de temporisation. C'est à dire faire une pause de X secondes avant de passer au bloc suivant. Il y a différents bloc servant à faire des temporisations :
- une temporisation basé sur le Temps
- une temporisation attendant un évènement particulier (appuie sur un bouton, enclenchement du catpeur de contact....)

Juste pour information le pseudo code dont vous parler est aussi appeler algorithme, c'est une des étapes les plus importante lors de la rédaction d'un programme.
Et si je voulais chippatouiller je dirais que le NXT-G n'est pas du code.... enfin pas directement. L'utilisateur place des blocs et le programme les transforme en code compréhensible par la brique.

Ceci dit Roboleo TRES BEAU TRAVAIL!!! bravo vraiment
Venez voir mes créations ;) NXTGEN
-----
La team BrickBot

cybermaster
Level 11
Level 11
 
Messages: 2205
Localisation: Valence
Âge: 29 ans

Messagepar cybermaster » Sam Déc 06, 2008 9:08 pm

Thibaud a écrit:Tu veux parler de celui en forme de sablier?


Celui juste au dessus ;)


Retourner vers De la théorie à la pratique

Qui est en ligne ?

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

cron