NXT-G, leçon n°5 : Oui ou non ? Questions pour les capteurs

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 Jan 08, 2009 5:17 pm

NXT-G, Leçon n°5: Oui ou NON?…Questions pour les capteurs

Quelle différence trouvez-vous entre ces deux questions?
- Quel temps fait-il?
- Pleut-il?

Bien, il y a pas mal de différences: la première contient 3 mots, et la seconde un seul, par exemple.
Mais la véritable raison, c'est d'attirer votre attention sur la première question, car elle est ce qu'on appelle une question ouverte; Il peut faire beau, venteux, brumeux ou toutes autres sortes d'événements.
La seconde question n'a que deux réponses possibles: Oui ou Non.
Lorsque vous programmez votre robot, vous devez comprendre que la plupart du temps, il ne peut vous renseigner que par ces deux réponses: Oui ou Non. En d'autres circonstances, il ne peut comprendre seulement qu'une réponse Oui ou Non. Et cette façon de renseigner ou de comprendre se fera par les capteurs qui sont justement conçus pour réagir dans ce sens.
C'est ce que je vais essayer d'expliquer au cours de cette leçon.

Mais d'abord, rappel ici des règles:
* Première règle: familiarisez-vous avec les outils de programmation.
* 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).
* 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.
* 4ème règle: un programme NXT-G se termine une fois le dernier bloc exécuté.
* 5ème règle: les seules données qui peuvent circuler entre les blocs sont du TEXTE, des NOMBRES et du type LOGIQUE - et seulement ces trois.


L'un ou l'autre.
Reprenons notre travail avec BONG et jouons à nouveau au jeu des questions/réponses.
LEO :cri: > BONG, quelle est la couleur du mur en face?
(BONG ne réagit pas et reste immobile…)
LEO :cri: > BONG, quelle est la position du bouton de votre capteur tactile?
(BONG ne réagit pas et reste immobile…)

Humm… BONG me semble peu réceptif aujourd'hui! Je crois me souvenir que BONG préfère répondre aux questions par Oui ou par Non. Essayons autrement.
LEO :cri: > BONG, le mur d'en face est-il bleu?
(BONG :bounce: le mot "OUI" apparaît sur son écran…)
LEO :cri: > BONG, Le bouton du capteur tactile est-il appuyé?
(BONG :bounce: le mot "NON" apparaît sur son écran…)

Bon, j'ai l'impression d'avancer. BONG préfère communiquer avec moi par des Oui et des Non en réponses à mes questions.
Une autre façon de dire cela, est que BONG préfère communiquer à l'aide de réponses logiques: une réponse logique est tout simplement Oui ou Non.

Poursuivons notre conversation:
LEO :cri: > BONG, votre capteur à UltraSons, a-t-il détecté un objet à 20 cm en face de vous?
(BONG :bounce: > Vrai).
LEO :cri: > BONG, votre bouton flèche droite set-il appuyé?
(BONG :bounce: > Faux).

Apparemment, les capteurs de BONG savent envoyer une réponse à BONG qui peut à son tour me la transmettre. BONG "écoute" les réactions des capteurs, et répond par Vrai ou Faux.
En quoi tout cela concerne-t-il la programmation?
Et bien, retenez ceci: votre robot NXT peut envoyer et recevoir des réponses logiques à partir des capteurs, moteurs, boutons et autres dispositifs.

Voici un exemple:

Image

Image

Le bloc Capteur tactile que vous apercevez a son Hub déployé. Lorsque vous survolez à l'aide de la souris la petite icône v/x, vous voyez apparaître une "bulle" d'aide Oui/Non.
Cela vous informe que le plot de sortie peut, par le moyen d'un fil de données fournir une donnée de type logique à un autre bloc de programmation.
Mais, comment savoir si la sortie est un Oui ou un Non?
Facile, il suffit d'examiner le panneau de configuration du bloc Capteur tactile. La réponse réside dans le choix que vous ferez dans la zone "action". Ici, "Enfoncé" est sélectionné. Donc si le bouton est enfoncé, il enverra au bloc voisin une valeur logique "Oui" ou "Vrai" (les 2 termes ayant souvent la même signification).
Le bloc voisin est un bloc Variable (que nous étudierons plus tard) dont le type est logique; il est paramétré pour écrire une donnée logique dans sa mémoire (avec une valeur de défaut "Faux" identique à "Non").
Tant que le bouton du capteur tactile est relâché (valeur Faux), le bloc Variable garde dans sa mémoire une donnée logique "Faux".
Quand le capteur tactile est appuyé, il envoie une valeur "Vrai" au bloc Variable, qui reçoit par le canal du fil de données cette valeur "Vrai". Cette nouvelle valeur remplace la précédente et elle est ensuite stockée dans la mémoire du bloc Variable pour un autre usage.

Rappelez-vous, quand vous connectez des blocs de programmation par des fils de données, ces fils ne seront effectifs que s'ils relient impérativement des plots de même type (Logique, Texte, Nombre).
J'attire votre attention sur certains blocs qui par défaut contiennent une valeur Vrai ou Faux. Cette valeur peut être inversée par vos soins pour les besoins de vos programmes. Dans le cas de notre exemple, elle n'a pas été modifiée.

Le type de données Logique se retrouve dans plusieurs blocs, et en particulier dans les blocs de capteurs.

Image
C'est dans l'utilisation des blocs Boucle et Commutateur que les données du type Logique affirment leur puissance. Elles sont très utiles quand un robot doit décider une action de sa propre initiative. Grâce à ces blocs, il peut développer des comportements complexes avec un meilleur contrôle de lui-même.
Le robot peut scruter des capteurs, moteurs ou autres sources d'entrées, et en fonction des réponses Oui/Non, prendre des décisions pour les actions suivantes.

Réactions
Votre kit Mindstorms NXT comporte une collection de moteurs et de capteurs; de plus, la brique NXT dispose aussi de boutons et de 3 minuteurs. Seriez-vous surpris d'apprendre que ces éléments sont susceptibles de fournir des informations à la brique, simplement par réaction?
Pour les capteurs, cela est évident puisqu'ils sont conçus pour répondre à des sollicitations externes, comme la lumière, le contact ou le son, et transmettent ces réactions au NXT. Mais, qu'en est-il des moteurs? Et comment un minuteur peut-il être utilisé comme entrée ou communiquer ses réactions à la brique? C'est ce que je tenterai d'expliquer dans ce qui suit.

Quelles sont vos conditions?
Nous commencerons avec ce mot: "CONDITION".
Prenons un exemple: Les feux de circulation automobiles sont soumis à trois conditions: ils peuvent-être rouge, jaune ou vert. Un interrupteur électrique ne comporte que deux conditions de fonctionnement: allumé ou éteint. A partir de ces deux exemples, nous allons soumettre à BONG quelques pseudo-codes.

LEO :cri: > BONG, avance jusqu'à ce que les feux passent au rouge.
LEO :cri: > BONG, affiche le mot "ALLUME" sur ton écran, jusqu'à ce que l'interrupteur soit en position éteint.
Dans ces deux cas, je présume que BONG a des yeux et qu'il peut voir les feux ou l'interrupteur. Si BONG n'a pas d'yeux, il faut alors trouver un moyen pour que les feux de trafic ou l'interrupteur transmettent leur état à BONG. Ils pourraient alors communiquer leurs réactions, ou leurs entrées, à BONG.
Demander à des feux de trafic de fournir une entrée, n'est pas réaliste, mais, puisque le NXT est en mesure de recevoir des informations à partir des capteurs, modifions les pseudo-codes:

LEO :cri: > BONG, avance tant que le capteur photosensible renvoie la valeur 20.
LEO :cri:> BONG, affiche le mot "Salut" jusqu'à ce que le capteur tactile signale qu'il a été appuyé puis relâché.
LEO :cri: > BONG, joue la note do quand le capteur à ultrasons détecte un objet situé à 20 cm devant toi.

Les moteurs peuvent, eux aussi fournir des informations sur leur état.
LEO :cri: > BONG, fait tourner le moteur A jusqu'à ce que le moteur B signale une rotation de 10 degrés.
LEO :cri: > BONG, affiche "5 rotations" quand le moteur C a tourné 5 fois.

J'ai signalé plus haut que le NXT disposait de 3 minuteurs internes, plus 3 boutons. Je pourrais aussi écrire ce pseudo-code:
LEO :cri: > BONG, lorsque 20 secondes seront écoulées, tourne de 90 degrés.
Ou encore,
LEO :cri: > BONG, joue la note SI quand j'appuie sur le bouton flèche gauche, et la note DO quand j'appuie sur le bouton flèche droite.
Bien, vous constatez que les capteurs, moteurs, boutons et minuteurs, peuvent fournir des données en entrées au NXT pour contrôler d'autres actions ( DEPLACER, SON, et autres blocs).
Lorsque vous programmerez vos robots ils devront accomplir des actions basées sur les conditions de ces dispositifs. Tout comme un interrupteur qui ne connaît que 2 états, vous devez connaître les différentes conditions liées aux capteurs, moteurs, boutons et minuteurs et qui peuvent-être transmises au NXT.

Paramétrer les capteurs.
Quelques remarques préliminaires:
En premier, les capteurs détectent le changement d'une condition qui peut-être le niveau de luminosité, le volume d'un son, la position (mouvement). Le capteur ne fait qu'attendre ce changement. Le capteur photosensible , par exemple, peut détecter un changement du niveau d'éclairement d'une chambre.
Deuxièmement, les blocs de programmation ne peuvent seulement répondre qu'à une condition à la fois. Un capteur photosensible, par exemple, ne peut-être configuré pour répondre à une valeur en-dessous de 70 et au-dessus de 30. Pour réaliser ces 2 conditions, il faudra utiliser 2 blocs capteur photosensible dans votre programme.
En fait, les capteurs ne fournissent qu'un type de réponse logique: Vrai ou Faux.
Dans l'exemple du trafic autos, on peut supposer que chaque véhicule dispose d'un capteur fixé sur son toit. Il est programmé pour réagir aux couleurs des feux. Les véhicules se déplaceront si la couleur est au vert et s'arrêteront au rouge. Ils ralentiront si le feu passe au jaune.
Ces capteurs ne devront détecter qu'une des 3 conditions: vert, rouge ou jaune. Un capteur NXT ne pouvant répondre qu'à une condition à la fois, il faudra donc utiliser 3 capteurs:
* si le 1er capteur détecte le vert, le véhicule continuera son avancée,
* si le 2ème capteur détecte le jaune, le véhicule ralentira,
* si le 3ème capteur détecte le rouge, le véhicule s'arrêtera.
A remarquer qu'une seule condition peut-être Vrai à un moment donné; les feux ne pouvant être en même temps vert et rouge par exemple. Il faudra donc procéder par paire en éliminant les incompatibilités (rouge et jaune ne peuvent pas provoquer un déclenchement d'action).

Capteur tactile

Image
Notez que le port de connexion est le 1 par défaut. Mais rien ne vous empêche d'en choisir un autre.
Si vous acceptez le choix de défaut pour tous les capteurs, vous pourrez alors vous constituer une petite bibliothèque de programmes réutilisables quels que soient les robots conçus( à condition qu'ils soient tous câblés de la même manière).
Dans la zone Action, 3 cas sont envisagées; à remarquer que le choix Heurté signifie Enfoncé et Relâché rapidement (moins d'une demie seconde entre les deux). Ce choix est très utile quand il s'agit de compter par exemple des impulsions.
Enfin, n'oubliez pas qu'en survolant à l'aide de la souris sur les plots, vous affichez une "bulle" précisant le type de donnée.

Image
Ce tableau est extrait du Menu Aide du logiciel NXT-G et il résume les valeurs transitant par les plots reliés par des fils de données.

Capteur Sonore

Ce bloc est un détecteur de sons. Il peut, via des fils de données, envoyer le niveau sonore actuel, ainsi qu'un signal logique (vrai/faux) qui varie selon que le niveau sonore actuel est supérieur ou inférieur à un point de déclenchement.

Image

Le port de connexion de défaut est le 2.

Le point de déclenchement est la valeur précise, dans une plage de nombres, où se produit un changement de conditions. Par exemple, vous pouvez programmer votre robot pour qu'il n'avance que si le niveau sonore dépasse 40%. Le point de déclenchement vaut dans ce cas 40.
Dans la zone Comparer, vous choisissez une plage de valeurs de 1 à 100 à l'aide de la glissière, ou en entrant une valeur dans la zone de saisie.
Pour définir la plage (au-dessus ou en dessous du point de déclenchement) qui générera le signal « vrai », utilisez les cases d'option ou le menu déroulant. La partie « vrai » de la plage est colorée et la partie « faux » est grisée.
Par défaut, le bloc Capteur sonore est paramétré pour qu'un niveau sonore supérieur à 50% génère un signal « vrai ». Le bouton d'option à droite de la plage est activée et la glissière est réglée sur 50. Pour activer les parties « vraies » de la plage (définir les valeurs sous 50% comme étant « vraies »), activez le bouton d'option de gauche.

Astuce: réglage du point de déclenchement pour un capteur sonore
si vous voulez qu'un applaudissement sonore génère le signal « vrai », applaudissez à plusieurs reprises et observez les valeurs de niveau sonore affichées dans la zone jaune de rétroaction. Si vos applaudissement génèrent des niveaux sonores d'environ 80%, fixez la valeur de déclenchement à 70. Ce faisant, seuls les niveaux sonores au-delà de 70% (comme vos applaudissements) génèreront un signal « vrai ». Les sons moins forts seront ignorés.

Le point de déclenchement peut également être défini de manière dynamique via un fil de données en entrée.

Image

Le capteur sonore offre à votre robot la faculté d’ « entendre » des sons. En vérité il n’entend pas comme un être vivant, mais il est capable de percevoir une pression acoustique, qui se traduit par une vibration sonore à un niveau plus ou moins fort. Cette pression est exprimées en décibels, unité de mesure.
Il existe deux types de décibels :
* Le décibel ajusté (en abrégé dBA) qui exprime une sensibilité adaptée à celle de l’oreille humaine. C’est celle que vos oreilles peuvent entendre.
* Le décibel standard (en abrégé dB) adapté à tous les sons, y compris ceux que l’oreille humaine ne peut pas entendre. On peut citer par exemple les sons à fréquences élevées auxquels les chiens sont sensibles. Tous les sons, dans ce cas, sont mesurés d’une manière identique.
La mesure des niveaux de pression étant d’une grande complexité qu’il est impossible d’aborder ici, les valeurs du capteur sonore sont affichés sur l’écran du NXT en pourcentages (%). A titre d’exemple, 4-5% correspond à un local silencieux. Un relevé de 5-10% s’obtient si une personne parle à une certaine distance de l’appareil. 10-30% correspond à une conversation normale à proximité du capteur, ou à de la musique d’ambiance à volume normal. Enfin, on obtient des relevés de 30-100% si des personnes crient ou si de la musique est diffusée à un volume élevé.

Capteur Photosensible

Ce capteur détecte la lumière ambiante (avoisinante). Il peut, via des fils de données, envoyer la valeur actuelle correspondant à la luminosité mesurée, ainsi qu'un signal logique (vrai/faux) qui varie selon que la valeur actuelle de la luminosité est supérieure ou inférieure à un point de déclenchement.

Image

Le port de connexion de défaut est le 3.

Le point de déclenchement est la valeur précise, dans une plage de nombres, où se produit un changement de conditions. Par exemple, vous pouvez programmer votre robot pour qu'il n'avance que si la luminosité dépasse 60%. Le point de déclenchement vaut dans ce cas 60.
La zone Comparer s'utilise comme celle du capteur sonore.

Astuce: réglage du point de déclenchement pour un capteur photosensible
Si vous voulez qu'une torche dirigée vers votre robot génère le signal « vrai », dirigez la torche vers le robot à plusieurs reprises et observez les valeurs de luminosité affichées dans la zone jaune de rétroaction. Si la torche génère des niveaux de luminosité d'environ 80%, fixez la valeur de déclenchement à 70. Ce faisant, toute lumière au-delà de 70% (comme celle de la torche) génèrera un signal « vrai ». La lumière plus faible sera ignorée.

Si vous activez la case à cocher « Générer de la lumière », le capteur photosensible allume sa petite source lumineuse et détecte cette lumière si elle est réfléchie dans sa direction. Cette fonction est particulièrement utile dans des conditions lumineuses difficiles, comme une pièce très éclairée. Cette fonction permet au capteur photosensible de faire office de télémètre à courte portée. Lorsque l'option « Générer de la lumière » est activée, le capteur photosensible détecte un niveau de lumière réfléchie plus élevé s'il approche d'un objet réfléchissant. Il est dès lors possible d'utiliser ce capteur pour éviter de heurter des obstacles.

Le point de déclenchement peut également être défini de manière dynamique à l'aide d'un fil de données en entrée.

Image

Capteur à Ultrasons

Ce bloc peut détecter des objets distants, au maximum, d'environ 250 cm. Il peut, via des fils de données, envoyer la valeur actuelle correspondant au relevé ultrasonique actuel, ainsi qu'un signal logique (vrai/faux) qui varie selon que le relevé ultrasonique actuel est supérieur ou inférieur à un point de déclenchement.

Image

Le port de connexion de défaut est le 4.

Le point de déclenchement est la valeur précise, dans une plage de nombres, où se produit un changement de conditions. Par exemple, vous pouvez programmer votre robot pour qu'il attaque quand un objet s'approche de moins de 50 cm de la portée maximale du capteur d'ultrasons. Le point de déclenchement vaut dans ce cas 50.
La zone Comparer s'utilise comme celle du capteur sonore.

Astuce: réglage du point de déclenchement pour un capteur d'ultrasons
Si vous voulez qu'un intrus approchant de votre robot génère le signal « vrai », orientez le capteur d'ultrasons vers l'intrus (ou tout objet possédant la même réflectivité) en plaçant celui-ci à différentes distances du capteur. Observez les relevés ultrasoniques affichés dans la zone jaune de rétroaction. Si l'intrus génère un relevé ultrasonique d'environ 127 cm à la distance la plus proche selon laquelle vous voulez l'autoriser à approcher du robot, fixez la valeur de déclenchement à 127. De la sorte, si un objet possédant la même réflectivité s'approche de plus de 127 cm, le bloc Capteur d'ultrasons génère un signal « Vrai ». En connectant un fil de données à un bloc Déplacer ou Moteur, vous pouvez ordonner à votre robot d'attaquer ou de reculer.

Les valeurs peuvent être affichées en centimètres ou en pouces.
Si vous activez le bouton d'option à gauche de la glissière, le bloc sera déclenché lorsqu'il détecte un objet plus proche que la distance de déclenchement ; activez le bouton d'option à droite pour déclencher le bloc lorsqu'il détecte un objet plus éloigné que cette distance. Utilisez la glissière pour définir la distance de déclenchement, ou entrez directement une valeur dans la zone de saisie (0 à 250 si le bloc est configuré en centimètres et 0 à 100 s'il est configuré en pouces).
La plage de détection se situe entre 0 (distance la plus proche) et 255 cm (distance la plus éloignée) environ (précision +/- 3 cm).
N'oubliez pas que les surfaces très réfléchissantes peuvent être détectées à de plus grandes distances que les surfaces non réfléchissantes.

Remarque : si plusieurs capteurs d'ultrasons fonctionnent dans la même pièce, il se peut qu'ils perturbent leurs relevés respectifs.

Vous pouvez contrôler le bloc Capteur d'ultrasons de manière dynamique en connectant à son plot de données des fils de données (provenant des plots de données d'autres blocs).

Image
A suivre…

A+
Roboleo
Dernière édition par roboleo le Ven Jan 09, 2009 1:28 pm, édité 1 fois au total.
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso

Avatar de l’utilisateur
semtou
Level 7
Level 7
 
Messages: 525
Localisation: Toulouse
Âge: 55 ans

Messagepar semtou » Jeu Jan 08, 2009 7:15 pm

Salut Roboleo, j'adore tes leçons, j'ai une question à te posé à propos des question ouverte ou fermé. Si une question offre plusieurs réponses possibles en tout cas plus de 2, 3 4 ou 5 est ce qu'on peu la considéré aussi comme réponse fermé (parce qu'on connais le nombre de réponses possibles) ou reste elle une question ouverte. Et en ce qui concerne la programmation du nxt. Il y a t'il une solution pour faire plusieurs actions (plusieurs réponses) ou faut'il enchainé plusieurs blocs identiques avec les réponses possibles ? j'espère être clair mais si s'est pas le cas je suis sur la programmation d'un petit robot qui pourrais servir d'exemple. A + PHILIPPE
"Ce qui se conçoit bien s’énonce clairement et les mots pour le dire viennent aisément..." Nicolas Boileau-Despreaux
Mon blog = http://semtou.skyrock.com/
Ma galerie photos = http://www.brickshelf.com/cgi-bin/gallery.cgi?m=SEMTOU

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

Messagepar Anio » Jeu Jan 08, 2009 8:29 pm

Je suis impressionné par tes leçons. C'est vraiment bien pour ceux qui veulent faire du NXT. :resp:
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 Jan 09, 2009 1:01 pm

semtou a écrit:Salut Roboleo, j'adore tes leçons, j'ai une question à te posé à propos des question ouverte ou fermé. Si une question offre plusieurs réponses possibles en tout cas plus de 2, 3 4 ou 5 est ce qu'on peu la considéré aussi comme réponse fermé (parce qu'on connais le nombre de réponses possibles) ou reste elle une question ouverte. Et en ce qui concerne la programmation du nxt. Il y a t'il une solution pour faire plusieurs actions (plusieurs réponses) ou faut'il enchainé plusieurs blocs identiques avec les réponses possibles ? j'espère être clair mais si s'est pas le cas je suis sur la programmation d'un petit robot qui pourrais servir d'exemple. A + PHILIPPE

Si tu veux parler de plusieurs choix possibles (plus de 2), on peut considérer la question comme fermée, et la réponse est OUI, à l'aide du bloc Commutateur. Nous aborderons ce sujet prochainement.
C'est le cas par exemple d'un robot qui se déplace et qui doit choisir sa trajectoire: tout droit, à droite ou à gauche en fonction d'un obstacle. Ou bien choisir un des 4 points cardinaux.
Présente nous ton petit robot, et nous en ferons l'analyse…

A+
Roboleo
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso

Avatar de l’utilisateur
semtou
Level 7
Level 7
 
Messages: 525
Localisation: Toulouse
Âge: 55 ans

Messagepar semtou » Ven Jan 09, 2009 1:28 pm

Voici le robot en question : j'ai respecter les n° de port pour les capteurs : dans se cas le capteur photosensible sur le 3 et l'ultra-son sur le 4. j'ai mis un moteur sur le B pour la propulsion et un sur le C pour la direction. Je garde le A pour le Actionneurs (pas encore monté)
Image
Image
je voulais un robot qui oriente les capteurs dans la même direction que sa tête sans être obliger de tourné le robot complet et je me suis rendu compte que pour le suivi de ligne sa pouvais être intéressent. J'ai toujours eu des problèmes avec le suivi de ligne :ouch: Voilà Je cherche a faire du suivi de ligne en tournant la tète de droite à gauche avec comme consigne de changé de sens à chaque changement de luminosité (sombre ou clair) avec la led allumée. je n'arrive pas à créer une boucle qui continu à tourner la tête alors que le capteur renvoi du clair. D'où ma question : :sweat: peut t-on imbriqué plusieurs conditions ou est il plus judicieux d'augmenter le nombres d'états possibles ? Voilà c'est tout, et rien de plus.... :lol: a+ MERCI PHilippe
"Ce qui se conçoit bien s’énonce clairement et les mots pour le dire viennent aisément..." Nicolas Boileau-Despreaux
Mon blog = http://semtou.skyrock.com/
Ma galerie photos = http://www.brickshelf.com/cgi-bin/gallery.cgi?m=SEMTOU

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

Messagepar roboleo » Ven Jan 09, 2009 3:09 pm

semtou a écrit:Voici le robot en question : j'ai respecter les n° de port pour les capteurs : dans se cas le capteur photosensible sur le 3 et l'ultra-son sur le 4. j'ai mis un moteur sur le B pour la propulsion et un sur le C pour la direction. Je garde le A pour le Actionneurs (pas encore monté)

je voulais un robot qui oriente les capteurs dans la même direction que sa tête sans être obliger de tourné le robot complet et je me suis rendu compte que pour le suivi de ligne sa pouvais être intéressent. J'ai toujours eu des problèmes avec le suivi de ligne :ouch: Voilà Je cherche a faire du suivi de ligne en tournant la tète de droite à gauche avec comme consigne de changé de sens à chaque changement de luminosité (sombre ou clair) avec la led allumée. je n'arrive pas à créer une boucle qui continu à tourner la tête alors que le capteur renvoi du clair. D'où ma question : :sweat: peut t-on imbriqué plusieurs conditions ou est il plus judicieux d'augmenter le nombres d'états possibles ? Voilà c'est tout, et rien de plus.... :lol: a+ MERCI PHilippe

Le suivi de ligne avec un seul capteur photosensible est délicat à mettre en oeuvre.
Ceux qui ont le mieux réussi ont choisi 2 capteurs photosensibles qui encadrent le tracé de ligne.
J'ai un certain nombre de programmes en réserve que je présenterai en exercices, … plus tard.
A quoi sert le capteur à Ultrasons?
La solution classique est celle d' une traction par 2 roues motorisées B et C et une roue folle à l'avant; le capteur photosensible étant fixé à l'avant sur le châssis. Les corrections de trajet se font en jouant sur l'orientation des roues B et C.
Dans ta solution, la direction à 2 roues solidaires sans différentiel me paraît mal adaptée. Essaie avec une seule roue. Ou alors adopte une solution du type suivant que tu peux simplifier:
topic1392.html
L'angle de balayage à l'avant serait en V et limité par une valeur calculée , avec un aller/retour permanent. Ton robot va donc "serpenter".
Bloc Commutateur, imbriqué dans une boucle illimitée pour faire avancer (pour le moment).
Je ne vois que 2 conditions pour le bloc commutateur: droite ou gauche.
Après, à étudier…

A+
Roboleo ;)
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 » Ven Jan 09, 2009 9:10 pm

Philippe, même si ce n'est l'idéal tu peux tout de même faire du suivi de ligne avec un capteur et ton robot, voici comment :
Le capteur va suivre un côté de la ligne, choisit l'extérieur de l'ovale pour commencer. Comme le dit léo il va serpenter continuellement entre sur la ligne et à côté de la ligne mais si tu ajuste bien tes paramètres cela ne se verra quasiment pas, nous en reparlerons.

Dans un premier temps tu dois trouver le seuil de déclenchement du capteur avec la led allumée, c'est une valeur comprise entre le reflet de la ligne noire et le reflet de la feuille blanche. Par exemple si tu lit 30% sur le noir et 70% sur le blanc tu prend 50% comme seuil.

Pour débuter le programme nous supposons que le robot est positionné capteur juste à côté de la ligne, à l'extérieur de l'ovale et dans le bon sens pour partir, il faudra trouver le bon sens par essais successifs.

Programme :
1 - Bloc Moteur : Moteur B à 30 %, avec contrôle de la puissance, direction avant et durée infinie
2 - Boucle infinie

Contenu de la boucle :
1 - Commutateur : Contrôle capteur photosensible, vue à plat, générer de la lumière, comparer lumière supérieure à xx %

Contenu du commutateur, séquence du dessus (lumière > xx%) :
1 - Bloc moteur : moteur C à 20%, avec contrôle de la puissance, direction avant et durée infinie

Contenu du commutateur, séquence du dessous (lumière < xx%) :
1 - Bloc moteur : moteur C à 20%, avec contrôle de la puissance, direction arrière et durée infinie

Voilà, c'est tout pour le programme.

Mise au point, c'est la partie la plus longue et complexe... tu va devoir ajuster les paramètres, surtout qu'il se peut que le programme ne marche pas du tout :
- Avant tout les conditions lumineuses doivent rester à peu près les mêmes, si tu as mesuré ton capteur en plein soleil et que tu teste dans une pièce éclairée électriquement cela ne marchera pas, il faut bien penser que nos yeux s'adaptent à la lumière ambiante, pas le capteur. Le soleil éclaire BEAUCOUP plus que n'importe quelle lampe domestique.
- Le robot part en marche arrière : inverser le sens du moteur B
- Le robot n'avance pas : augmenter de 10 % la puissance du moteur B, vérifier que "contrôle de la puissance" est coché.

- Le robot ne suis pas du tout la ligne, il s'en éloigne : Tu fais partir le robot dans l'autre sens pour faire le tour de l'ovale.

- Le robot avance trop vite et perd la ligne : diminuer la puissance du moteur B
- Le robot perd la ligne car il ne réagit pas assez vite : augmenter de 10% les puissances du moteur C
- Le robot oscille trop autour de la ligne : Diminuer la puissance du moteur C.

Après tu pourra progressivement augmenter la puissance du moteur B pour aller vite, et ajuster la puissance de C en fonction.
Il faut prendre en compte que le programme s'exécute à une vitesse limitée et à un certain point le robot ira trop vite pour ton programme (limites du nxt-g).
Il faut aussi prendre en compte que plus le moteur C tourne vite et plus il met du temps à s'arrêter et "dépasse" la position recherchée.
N'hésite pas à poser des questions et faire une vidéo, je n'ai pas testé tout ça mais j'ai déjà fais un suiveur de ligne.

Avatar de l’utilisateur
semtou
Level 7
Level 7
 
Messages: 525
Localisation: Toulouse
Âge: 55 ans

Messagepar semtou » Sam Jan 10, 2009 5:45 am

OK merci, j'avais déjà fais du suivi avec le RCX et je me souviens d'avoir eu du mal :ouch: mais d'avoir fini par trouvé une solution honorable :ura: . Je vous passe l'adresse pour le programme que j'ai fais : http://www.brickshelf.com/cgi-bin/gallery.cgi?f=361695 a gauche l'image et à droite le programme à télécharger. Et voici la vidéo avec les valeurs du capteur :



c'est pas génial :



Mais j'ai pris note de vos conseils et je tente une nouvelle fois. Sur Robotic Invension System 2.0 il y avais un bloc pour définir des priorités, cela existe t'il pour le NXT ? merci à tout les deux A + PHilippe

Edit :

Roboléo : j'ai pas répondu à ta question mais le capteur ultra-son sers arrêter le robot face à un obstacle D<15 cm et à éviter que la tête ne face 10 fois le tour avec les fils des moteurs ça coince vite. Donc quand la tête tourne a plus de 180° le capteur ultra-son passe devant la plaque des roues arrières et arrête le programme. j'ai même mis un bloc son que j'ai fait moi même avec le petit programme qui transforme les .way en .rso que tu conseilles. C'est super, je crois qu'on l'entend dans la vidéo. Je suis passé par le site : http://www.research.att.com/~ttsweb/tts/demo.php qui est très bien je trouve. Il me semble qu'il existe la même chose en enregistrement micro du genre Magnétophone du menu window\programme\accessoire\divertissement mais avec lequel on peut transformé sa voie. ACC....quelques chose tu connais ? Merci
"Ce qui se conçoit bien s’énonce clairement et les mots pour le dire viennent aisément..." Nicolas Boileau-Despreaux
Mon blog = http://semtou.skyrock.com/
Ma galerie photos = http://www.brickshelf.com/cgi-bin/gallery.cgi?m=SEMTOU

Avatar de l’utilisateur
semtou
Level 7
Level 7
 
Messages: 525
Localisation: Toulouse
Âge: 55 ans

Messagepar semtou » Sam Jan 10, 2009 6:00 am

Roboléo : j'ai pas répondu à ta question mais le capteur ultra-son sers arrêter le robot face à un obstacle D<15 cm et à éviter que la tête ne face 10 fois le tour avec les fils des moteurs ça coince vite. Donc quand la tête tourne a plus de 180° le capteur ultra-son passe devant la plaque des roues arrières et arrête le programme. j'ai même mis un bloc son que j'ai fait moi même avec le petit programme qui transforme les .way en .rso que tu conseilles. C'est super, je crois qu'on l'entend dans la vidéo. Je suis passé par le site : http://www.research.att.com/~ttsweb/tts/demo.php qui est très bien je trouve. Il me semble qu'il existe la même chose en enregistrement micro du genre Magnétophone du menu window\programme\accessoire\divertissement mais avec lequel on peut transformé sa voie. ACC....quelques chose tu connais ? Merci A +
"Ce qui se conçoit bien s’énonce clairement et les mots pour le dire viennent aisément..." Nicolas Boileau-Despreaux
Mon blog = http://semtou.skyrock.com/
Ma galerie photos = http://www.brickshelf.com/cgi-bin/gallery.cgi?m=SEMTOU

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

Messagepar cybermaster » Sam Jan 10, 2009 10:31 am

AAC, c'est le format d'Aplle/iTunes ;)
Image

Le jour où on mettra les con* sur orbite, j'en connait qui n'ont pas fini de tourner

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

Messagepar Alban42800 » Sam Jan 10, 2009 10:39 am

C'est bizarre, quand il arrive sur le blanc le robot devrait continuer à tourner la tête vers la droite.
Essaie de démarrer à droite de la ligne noire, ou à gauche mais pas sur a ligne.
Essaie avec 45 en seuil pour le capteur photo sensible et coche "contrôle de la puissance pour les blocs moteur C.

Avatar de l’utilisateur
semtou
Level 7
Level 7
 
Messages: 525
Localisation: Toulouse
Âge: 55 ans

Messagepar semtou » Sam Jan 10, 2009 4:58 pm

Salut alban, oui en effet et c'est bien mon problème :ouch: j'ai l'impression que le fait que le bloc moteur soit dans une boucle provoque l'interruption de la rotation et en même temps pour lui il n'est plus dans la zone sombre. J'ai essayer de le faire aller tout droit en passant sur la ligne noire et en annonçant la couleur qu'il voyait et je me suis rendu compte que le capteur perçois bien la différence. Je vais essayer le maintien de la puissance des moteurs. J'ai pas mal avancé sur mon bras si tu as 2 minutes vas voir la vidéo que je met sur les mocs visage de mon robot. A +
"Ce qui se conçoit bien s’énonce clairement et les mots pour le dire viennent aisément..." Nicolas Boileau-Despreaux
Mon blog = http://semtou.skyrock.com/
Ma galerie photos = http://www.brickshelf.com/cgi-bin/gallery.cgi?m=SEMTOU

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

Messagepar roboleo » Sam Jan 10, 2009 6:33 pm

NXT-G, Leçon n°5: Oui ou NON?…Questions pour les capteurs (suite et fin)

Nous allons à présent aborder les capteurs dit "intégrés", c'est à dire existant par construction dans les moteurs ou dans le NXT. Inutile de cherchez dans le kit # 8527, ils n'existent pas sous la même forme que ceux déjà vus, c'est à dire d'objet matériel.
Pour y accéder, il n'y a qu'un seul moyen, c'est par celui des blocs de programmation.

Bloc Capteur de rotation

Ce bloc compte le nombre de degrés (une rotation complète vaut 360 degrés) ou de rotations complètes selon lequel votre moteur tourne. Ce bloc peut envoyer, via des fils de données, le nombre actuel de degrés ou de rotations, ainsi qu'un signal logique (vrai/faux) qui varie selon que le nombre de degrés ou de rotations est supérieur ou inférieur à un point de déclenchement.

Image

Zone Port: choisir le port que le bloc doit surveiller (A, B ou C).
Zone Action: Indiquer s'il s'agit de lire la valeur actuelle d'un capteur de rotation ou remettre la valeur du capteur à zéro.
Zone Comparer: définir la direction à surveiller à l'aide des cases d'option : vers l'avant ou vers l'arrière.

Important : veillez à choisir la direction correcte, faute de quoi le bloc sera incapable de compter jusqu'à la valeur de déclenchement.

Utiliser le menu déroulant pour indiquer si le bloc doit compter le nombre de rotations ou de degrés.
Entrer la valeur de déclenchement dans la zone de saisie, puis utiliser le menu déroulant pour indiquer si la région « vraie » doit être supérieure ou inférieure à la valeur de déclenchement.
La zone jaune de rétroaction indique le nombre actuel de rotations entières ou de degrés. Cliquer sur le bouton Réinitialiser pour remettre le compteur à zéro.
La valeur de rétroaction est affichée en texte noir pour les rotations ou les degrés dans la direction positive (vers l'avant), et en texte rouge dans la direction négative (vers l'arrière).

Le point de déclenchement est la valeur précise, dans une plage de nombres, où se produit un changement de conditions. Par exemple, vous pouvez programmer le robot pour qu'il s'arrête quand le nombre de rotations devient supérieur à 10. Le point de déclenchement vaut dans ce cas 10 rotations.

Vous pouvez définir le point de déclenchement en entrant un nombre dans la zone de saisie. Pour définir la plage (au-dessus ou en dessous du point de déclenchement) qui générera le signal « vrai », utilisez le menu déroulant pour choisir l'opérateur supérieur ou inférieur (au point de déclenchement).

Par défaut, le bloc Capteur de rotation est paramétré pour qu'un nombre de degrés supérieur à 360 génère un signal « vrai ».

La zone de rétroaction compte le nombre de degrés ou de rotations selon lequel votre moteur tourne. Par défaut, cette zone affiche les degrés. Si la propriété Durée est fixée à Rotation, le compteur affichera des rotations entières. Cliquez sur le bouton Réinitialiser pour le remettre à zéro. Pour recevoir une rétroaction, assurez-vous que le moteur est connecté au port approprié et que la communication a été établie avec le NXT.

Image

Bloc Boutons NXT

Ce bloc envoie un signal « vrai » via un fil de données lorsqu'un des boutons NXT est activé. Vous devez sélectionner le bouton et l'action qui enverront le signal « vrai ».

Image

Zone Bouton: Indiquer quel bouton NXT envoie un signal « vrai » lorsqu'il est activé.
Zone Action: Choisir Heurté si vous voulez que le bouton NXT soit activé lorsqu'il est enfoncé puis relâché rapidement. Choisir Enfoncé si vous voulez que le bouton soit activé dès qu'il est enfoncé. Choisissez Relâché si vous voulez que le bouton soit activé dès qu'il est relâché.
3. La zone jaune de rétroaction affiche 1 lorsque le bouton NXT choisi est heurté, enfoncé ou relâché (en fonction de la configuration sélectionnée).

Image

Bloc Minuteur


Le NXT met à votre disposition 3 minuteurs (chronomètres) intégrés qui permettent de déclencher des actions en fonction du temps écoulé. Ces capteurs n'existent pas physiquement, mais ils sont activés grâce à un bloc de programmation.
Lorsque votre programme démarre, les trois minuteurs commencent automatiquement à compter. Ce bloc permet de choisir si vous voulez lire la valeur actuelle d'un minuteur ou forcer un minuteur à repartir de zéro.

Image

Ce bloc peut, via des fils de données, envoyer la valeur actuelle du minuteur, ainsi qu'un signal logique (vrai/faux) qui varie selon que la valeur du minuteur est supérieure ou inférieure à un point de déclenchement.

Le point de déclenchement est la valeur précise, dans une plage de nombres, où se produit un changement de conditions. Par exemple, vous pouvez programmer votre robot pour qu'il s'arrête quand le minuteur dépasse 20 secondes. Le point de déclenchement vaut dans ce cas 20 secondes.

Vous pouvez définir le point de déclenchement en entrant un nombre dans la zone de saisie. Pour définir la plage (au-dessus ou en dessous du point de déclenchement) qui générera le signal « vrai », utilisez le menu déroulant pour choisir l'opérateur supérieur ou inférieur (au point de déclenchement).

Pour que le bloc Minuteur fonctionne, vous devez tirer un fil de données depuis le plot de données du bloc, puis le connecter au plot de données d'un autre bloc. Vous pouvez tirer deux types de fils de données en sortie depuis le plot de données du bloc Minuteur : un fil de données logiques, qui transmettra un signal vrai/faux, et un fil de données numériques (#) qui transmettra la valeur actuelle du minuteur.
Si par exemple, vous configurez le bloc Minuteur plus grand que 10 secondes pour le minuteur 1, le plot logique fournira, pour ce minuteur, une valeur Faux tant que les 10 secondes ne seront pas écoulées. Une fois cette valeur dépassée le plot logique fournira une valeur Vrai.

Vous pouvez également fournir la valeur de déclenchement de manière dynamique en connectant un fil de données en entrée au plot de données du bloc Minuteur.

Image

Vous venez d'apprendre comment utiliser ces blocs au travers de leurs panneaux de configuration. Le vrai pouvoir de ces blocs se manifeste en les conjuguant avec d'autres blocs tels que Boucle, Attendre et Commutateur.
Nous verrons plus tard comment utiliser les Boucles pour répéter certaines tâches. Grâce à cet outil, vous accomplirez des répétitions à volonté jusqu'au moment où vous déciderez d'arrêter le programme. Mais vous pourrez aussi configurer une Boucle de telle sorte qu'elle s'interrompe quand certaine condition est rencontrée. Par exemple si le capteur photosensible détecte un niveau lumineux inférieur à 20, ou le capteur sonore détecte un bruit supérieur à 80, ou peut-être un moteur ayant subit une rotation supérieure à 20 degrés (capteur de rotation).
Il en sera de même avec les blocs Attendre et Commutateur qui donneront à vos robots les pouvoirs de décision.

Avant de nous quitter (provisoirement) retenez cette nouvelle règle:
6ème règle: Les blocs de programmation ne peuvent répondre qu'à une condition à la fois, en ne fournissant qu'un type de réponse logique: Vrai ou Faux.
Il faut autant de blocs que de conditions à satisfaire.


A+
Roboleo
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso


Retourner vers De la théorie à la pratique

Qui est en ligne ?

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