Véhicules de Braitenberg 1 et 2

Introduction



Nous allons, dans cette partie et les suivantes, nous intéressez aux Véhicules de Braitenberg.

Au quoi ... ?


Les véhicules de Braitenberg






Valentino Braitenberg était un chercheur en neurosciences allemand, ancien directeur de l'Institut Max Planck de cybernétique biologique à Tübingen en Allemagne (de 1968 à 1994) et principalement connu pour son livre "Véhicules : expériences en psychologie synthétique" publié en langue anglaise en 1984, puis traduit en français en 1986.

Dans son livre, malheureusement épuisé en français mais toujours disponible en anglais, Valentino Braitenberg décrit une série d'expériences dans lesquelles des robots très simple peuvent montrer des comportements apparemment complexes, qu'un être humain associe généralement à différentes émotions telles que la peur ou l'agression.

Le but de ces expériences a été pensé pour illustrer quelques idées fondamentales sur la structure interne des cerveaux des animaux et des êtres humains.

Les quatorze véhicules qui sont décrits dans cet ouvrage de fiction scientifique, qui forment autant de chapitres, représentent une série de véhicules hypothétiques au fonctionnement autonome.

Chacun des véhicules présente les caractéristiques essentielles de tous les véhicules qui le précèdent mais il y ajoute une étape d'évolution pour atteindre un seuil de complexité supérieur.

Même s'il n'est pas toujours très civilisé, ce comportement correspond tout à fait à celui observé par les spécialistes des neurosciences chez les animaux.

Vous pouvez trouver des extraits de ce livre, que je vous invite à lire, sur Google Books grâce à l'intégration présenté sur la gauche de ce texte.





Nous nous intéressons ici à la structure de ces robots, qui permet de réaliser simplement des comportements pour rejoindre un but visible.

Dans le livre de Braitenberg, le but est matérialisé par une lumière, visible depuis tout l’environnement.

C'est ce que l'on appelle en robotique mobile la navigation vers un but.

Ce modèle est donc intéressant car c’est la méthode la plus simple possible pour réaliser un déplacement vers un but.

Nous aborderons donc ici la base d'un domaine de la robotique mobile nommé sous le terme de navigation réactive dont la navigation vers un but est la plus simple des stratégies.

Les stratégies de navigation permettant à un robot mobile de se déplacer pour rejoindre un but sont extrêmement diverses.

Nous nous borneront pour le moment au survol des stratégies de navigation réactive.

Stratégie de navigation réactive.



Par définition, les stratégies de navigation réactives n’utilisent que les valeurs courantes des capteurs (ou des valeurs sur une petite fenêtre temporelle), et non des données provenant d’un modèle interne de l'environnement établi par le robot, comme une carte par exemple, pour décider de l’action à effectuer.

Cette stratégie utilise des actions réflexes, dans lesquelles chaque perception par un capteur est directement associée à une action sur un moteur.

C’est une stratégie locale, c’est-à-dire fonctionnelle uniquement dans la zone de l’environnement pour laquelle le but est visible.

Elle peuvent être très simple, ne nécessitent pas de modèle global de l’environnement mais ont un domaine d’application souvent restreint.

Dans le monde vivant, ces stratégies sont très répandues, notamment chez les insectes.

Les comportements de ce type restent toutefois essentiels dans les robots modernes car, du fait de leur simplicité, il sont généralement exécutés très rapidement et ils permettent de réaliser des taches de bas-niveau, comme l’évitement des obstacles imprévus, essentielles à la sécurité d’un robot.

Les véhicules de Braitenberg sont devenu l’archétype des méthodes réactives simples.


De Valentino aux ... LEGO




Il semblerait que Valentino Braitenberg est dit un jour ceci :

"Many of the proposed experiments could be done with the LEGO MINDSTORMS kit."



En français cela donne :

"Beaucoup des expériences proposées pourrait être faites avec le kit LEGO MINDSTORMS."



C'est justement ce que je vous propose de faire maintenant ! :lol

Télécharger le fichier de la plate-forme robotique utilisée pour réaliser les véhicules de Braitenberg, que je vous propose de construire.

Mais avant de voir la programmation de tels véhicules, nous allons voir rapidement l'importation et l'utilisation du nouveau bloc "Moteur PID" fournit par la société HiTechnic.

En effet, ce dernier bloc nous sera bien utile dans la programmation de nos véhicules de Braitenberg !

Installation d'un nouveau bloc NXT-G



La première chose à faire est de télécharger le bloc à installer.

Dans notre cas, pour télécharger le bloc "Moteur PID" de HiTechnic, rendez-vous à la page traitant de ce bloc sur le blog de HiTechnic.

En haut de cette page apparait le lien vous permettant de télécharger le bloc qui va bien.
Cliquez donc sur HiTechnic Motor PID Block :



Le lien vous envoi sur une page vous proposant d'inscrire votre adresse e-mail pour éventuellement recevoir des nouvelles à propos des produits et des mises à jour logiciel de HiTechnic.

Ceci n'est pas obligatoire et vous pouvez directement cliquer sur Proceed to Download pour pouvoir télécharger le bloc :



Cela vous amène enfin sur la page disposant du lien de téléchargement du bloc.
Cliquer alors sur le lien 802-HTMotorPID.zip pour télécharger le bloc dans le répertoire de votre choix :



En ce qui me concerne, mes téléchargements se trouvent tout simplement dans le dossier Téléchargement :



Comme il s'agit d'un fichier compressé, il vous faut maintenant le décompresser avec votre logiciel favoris.

Dans mon cas, j'utilise le logiciel 7Zip. Mais un autre fait très bien l'affaire aussi !

Double-cliquez alors sur le fichier pour l'ouvrir dans le logiciel :



Le contenu du fichier apparait dans la fenêtre qui s'ouvre et il ne vous reste plus qu'à cliquez que le bouton Extraire pour faire la décompression du fichier.

Une nouvelle fenêtre apparait, vous demandant dans quel dossier voulez-vous placer les fichiers décompressés :



Par défaut, le logiciel choisi le même dossier où se trouve le fichier compressé. Laisser cette option en l'état pour placer les fichiers décompressés dans le dossier que vous avez choisi initialement, dans mon cas c'est donc le dossier Téléchargement.

Pour finir, cliquer sur le bouton OK pour lancer la décompression.

Vous devez maintenant vous retrouvez, dans le dossier que vous avez choisi, avec les fichiers décompressés du bloc :



Vous devrez peut-être faire un rafraichissement de la fenêtre à l'aide de la touche fonction F5 pour voir apparaitre les nouveaux fichiers.

Le dossier nommé HTMotorPID contient tout les fichiers du bloc "Moteur PID". Il n'est pas nécessaire d'aller voir son contenu, sauf si vous êtes curieux !

A présent, lancer le logiciel LEGO MINDSTORMS NXT et créer un nouveau programme.

Nous allons importer le bloc "Moteur PID" dans le logiciel.

Pour ce faire, rendez-vous dans le menu Outils et sélectionner l'assistant d'importation et d'exportation de bloc :



La fenêtre de l'assistant d'importation s'ouvre pour vous permettre de lui indiquer le dossier où se trouve le bloc à importer :



Cliquer sur le bouton Parcourir de manière à sélectionner le dossier nommé HTMotorPID que vous avez précédemment décompressé dans le dossier de votre choix.

Dans mon cas, le dossier nommé HTMotorPID se trouve dans le dossier Téléchargement :



Un simple clique sur le bouton OK et l'assistant sait maintenant à quel endroit se trouve le bloc à importer !

Il procède donc à sa recherche et vous informera, lorsqu'il l'aura trouvé, par le message "Recherche terminée" à l'aide de la barre d'état située en bas de cette fenêtre :



Vous remarquerez à ce moment là deux choses. D'une part, que le chemin menant au dossier nommé HTMotorPID est indiqué dans la partie supérieure de la fenêtre de l'assistant et que, d'autre part, ce même dossier nommé HTMotorPID se trouve affiché dans la partie centrale de l'assistant qui sert à sélectionner le bloc à importer.

Toutefois, il reste un dernier détail à régler avant d'importer votre bloc.

Vous avez la possibilité, dans la partie inférieure de l'assistant, de choisir la palette dans laquelle vous voulez placer le bloc "Moteur PID" !

Comme il s'agit d'un bloc moteur, j'ai choisis de le placer dans la palette Action où se trouve déjà le bloc "Moteur" standard.

Mais vous pouvez le placer où bon vous semble. Cela n'aura aucune importance lors de l'ouverture ou de la création d'un programme.

Sélectionner donc la palette que vous souhaitez, ici la palette Action est sélectionnée :



Enfin, la dernière étape à effectuer pour importer votre bloc consiste à sélectionner le nom de son dossier, HTMotorPID, dans la partie centrale de la fenêtre de l'assistant puis de cliquer sur le bouton Importer en bas de cette même fenêtre :



Vous devriez donc, normalement, vous retrouvez avec votre nouveau bloc "Moteur PID" dans la palette que vous avez choisie.

Ici, bien évidemment, mon bloc "Moteur PID" se trouve dans la palette Action :



A partir de ce moment, vous êtes prêt pour pouvoir utiliser ce nouveau bloc dans vos programmes.

Voyons donc maintenant l'utilisation de ce fameux bloc "Moteur PID".

Le bloc "Moteur PID" de HiTechnic





La société HiTechnic, célèbre pour ses capteurs LEGO MINDSTORMS, a publiée dernièrement sur son blog un article sur un nouveau bloc moteur avec un régulateur de position PID intégré qui permet de travailler en position absolue plutôt qu'en position relative.

HiTechnic à produit une vidéo,intégré ci-dessous, montrant les différentes possibilités qu'offre ce bloc "Moteur PID" :



Nous allons donc voir rapidement ici les différents modes de fonctionnement de ce nouveau bloc "Moteur PID".

Attend un peu ... Explique déjà pourquoi avons-nous besoin de ce nouveau bloc "Moteur PID" ?

Bonne question. Je vais y répondre de ce pas ! :p


Pourquoi avoir besoin de ce bloc Moteur PID" ?




La réponse est on ne peut plus simple.

Tout simplement parce que, comme je l'ai déjà dit plus haut dans ce texte, ce bloc permet de travailler en position absolue plutôt qu'en position relative.

C'est quoi la différence entre une position relative et une position absolue ?

Toute la différence est là !

Avec un bloc "Moteur" standard, vous travaillez en position relative.

C'est à dire que lorsque vous lui indiqué une durée de fonctionnement, exprimée en degrés par exemple, la nouvelle position du moteur dépendra de la position actuelle de celui-ci.
La nouvelle position est relative par rapport à la position actuelle du moteur.

Avec le bloc "Moteur PID", vous travaillez en position absolue.

C'est à dire que vous allez définir pour de bon une position initiale pour le moteur, appelée la position de référence, et que la nouvelle position du moteur dépendra de cette position de référence.
La nouvelle position est absolue par rapport à la position de référence du moteur.

Ce type de contrôle est utile quand votre moteur doit évoluer dans une plage limitée de mouvements.

Et pourquoi PID .... C'est quoi ce truc ?


PID pour Proportionnel Intégrale Dérivée




Le terme PID fait référence à un type de régulateur.

Le sigle PID est le résultat des trois premières lettres des mots suivants :



Il s'agit des trois opérations mathématique réalisée par le régulateur pour obtenir sa valeur de sortie.

Mais c'est quoi un régulateur ?

Nous prendrons ici l'exemple de notre moteur.

Un régulateur compare une valeur physique, par exemple la position actuelle du moteur, avec une valeur préréglée qu'il essaye de maintenir identique. Les perturbations éventuelles de la valeur physique seront contrecarrées par une valeur de commande.

Dans notre cas, un régulateur PID est utilisé pour contrôler la valeur de puissance d'un moteur NXT de manière à maintenir la position du moteur à la position préréglée dans son paramètre Durée de son panneau de configuration.

Un régulateur PID est un mécanisme couramment utilisé pour contrôler toutes sortes de système.

Je n'entre pas ici dans le détail, car cela est prévu plus tard dans la suite de ce tutoriel consacré à la programmation en NXT-G.

Retenez simplement que le bloc "Moteur PID" fonctionne en position absolue et qu'il tend à garder la position indiqué dans son paramètre Durée.


Les différents modes de fonctionnement du bloc "Moteur PID"




Comme expliqué à l'instant, la position absolue du moteur dépendra de la position de référence établie une fois pour toute pour le moteur.

Donc, la première chose à faire est d'établir cette position de référence.

Et pour ce faire, le bloc "Moteur PID" vous offre plusieurs modes de fonctionnement vous permettant d'établir une position de référence facilement, et ce, même en prenant en compte une ou plusieurs butées mécanique.

Ces modes de fonctionnement sont disponibles dans le paramètre Action de son panneau de configuration.



Voyons rapidement ces différentes actions :



Ces différents mode de fonctionnement vous seront utiles selon le projet que vous concevez.

Notez que définir une position de référence c'est bien, mais ce n'est pas suffisant.

Encore faut t-il donner une valeur à cette position de référence.

La valeur de cette position de référence doit être indiquée dans le paramètre Set Point du panneau de configuration du bloc "Moteur PID".

Vous pouvez y indiquer la valeur que vous souhaitez. Dans ce tutoriel nous réglerons la valeur de la position de référence à 0, mais rien ne vous empêche de lui donner une autre valeur, comme 38 par exemple, si cela correspond mieux à votre projet.

Dans la suite de ce tutoriel, nous allons utiliser l'action Reset at Mid-point of Limits qui répond parfaitement à nos besoins.

Retenez que vous devez utiliser ces actions à une faible vitesse de moteur, en réglant le paramètre Max Power à 25 par exemple.
Cela évitera de forcer le moteur lorsqu'il rencontrera une résistance mécanique.

Sachez également que l'action nommée Power Toward Set Point vous permet d'indiquer dans le paramètre Set Point la position absolue que vous voulez faire prendre au moteur.

Enfin pour information, le fait de cliquer sur le bouton Show/Hide (Afficher/Masquer) vous permet d'accéder à la formule mathématique du régulateur PID et de modifier si besoin les trois paramètres de régulation que sont les coefficients proportionnel, intégral et dérivé.



A ne modifier qu'en en connaissance de cause, sachant que les valeurs par défaut fonctionnent dans la plupart des situations.

Voyons maintenant un exemple d'utilisation pratique du bloc "Moteur PID"


Utilisation du bloc "Moteur PID" avec un programme d'exemple




Nous allons utiliser un des programmes d'exemple fournit par HiTechnic.

Allez tout d'abord télécharger les programmes d'exemple, sur la même page que précédemment, en cliquant sur le lien NXT-G PID Block Sample Programs for Mindstorms 1.0 and 2.0.



Puis sur le bouton Proceed to Download :



Et enfin, sur le lien 945-PIDDemoPrograms.zip pour télécharger le fichier dans le répertoire de votre choix :



Puis, décompressez-le pour en extraire les fichiers des programmes d'exemple :



Ici, nous n'allons utiliser que le programme d'exemple nommé PIDDemo2.rbt car il correspond exactement à ce que nous allons faire avec le bloc "Moteur PID" dans cette partie du tutoriel.

Faite donc un doucle-clique sur ce programme pour l'ouvrir dans le logiciel LEGO MINDSTORMS NXT :



Le fonctionnement de ce programme est très simple.

Le premier bloc "Moteur PID" sert à définir la position de référence, ainsi que la valeur de cette dernière, pour le moteur.

Ensuite, le programme boucle en permanence de manière à scruter les boutons du NXT et donner une valeur de position absolue au moteur en fonction du bouton appuyé :



Malheureusement, si ce programme répond au besoin attendu pour notre exemple, il n'est pas adapté à notre robot.
Il va falloir y faire quelques petits réglages avant de l'envoyer dans le NXT.

En ce qui concerne le premier bloc "Moteur PID", il faut le régler pour qu'il commande le moteur A au lieu du moteur C, que son action soit positionnée sur Reset at Mid-point of Limits à la place de Reset at Forward Limit et que la valeur de la position de référence soit définit à 0 plutôt que 85 :



Ne touchez pas à la vitesse de 25, celle-ci est très bien réglée !

Concernant les trois autres blocs "Moteur PID", il convient simplement de les régler pour qu'ils commande le moteur A au lieu du moteur C et diminuer leur vitesse à 50 au lieu de 100 qui est trop rapide pour la tourelle du robot.





Ces légères modifications devant vous donner le programme suivant :



Le fonctionnement est identique à l'explication précédente, sauf que le moteur commandé est le moteur A au lieu du moteur C, que la position de référence sera la position centrale entre les deux butées mécanique du robot et que celle-ci a comme valeur l'angle de 0°.

De fait, ce programme d'exemple fera en sorte que le robot trouve automatiquement la position de référence centrale du débattement de la tourelle et permette un positionnement absolue de cette dernière par rapport à cette position de référence centrale.

Téléchargez ce programme dans le NXT du robot, lancez-le, laissez-lui trouver automatiquement sa position de référence et appuyez successivement sur les boutons du NXT pour déplacer la tourelle sur les positions absolue pré-définies.

Notez qu'à la fin de la recherche de la position de référence par le premier bloc "Moteur PID", la tourelle ne se positionne pas automatiquement sur la position de référence centrale mais reste sur la position de la deuxième butée.

Ceci est parfaitement normal.
Le premier bloc "Moteur PID" ne fait que rechercher la position de référence entre les deux butées.
Il n'a pas vocation à rejoindre une position déterminée.

Pour cela, il faut utiliser un autre bloc "Moteur PID" pour faire rejoindre au moteur une position absolue quelconque.

C'est d'ailleurs ce que nous ferons dans la suite de cette partie consacrée aux véhicules de Braitenberg.

Véhicule de Braitenberg 1



Le véhicule 1 est le plus simple.

Il est équipé d'un seul capteur et d'un seul moteur.



La connexion est très simple.

La vitesse du moteur (la boîte rectangulaire à l'arrière) est contrôlée par un capteur (le demi-cercle sur une tige en partie frontale).

Plus la valeur mesurée par le capteur est grande, plus la vitesse du moteur est importante.

La vitesse du moteur sera exactement proportionnelle à la valeur mesurée par le capteur.

C'est ce que l'on appelle une connexion excitatrice.
Plus le capteur est excité, plus le moteur relié de l'autre côté de la connexion sera excité.

Le déplacement se fait donc toujours vers l'avant, dans la direction que pointe le robot.

Dans notre cas, le robot est équipé d'un capteur de lumière que nous configurerons en capteur de luminosité.

Notre robot étant équipé de deux moteurs, un pour chaque roue, nous donnerons la même vitesse aux deux moteurs de manière à ce que cela soit équivalent à un seul moteur entrainant les deux roues.

Donc, plus le capteur de lumière mesurera une luminosité importante, plus la vitesse des moteurs sera élevée.

Le robot se déplacera lentement dans une région faiblement éclairée et plus rapidement là où la lumière est plus importante.

Voyons à présent comment programmer un véhicule de Braitenberg de type 1 sur notre robot.

Faites bien attention avec votre ensemble NXT 2.0 de ne pas utiliser le bloc du "Capteur photosensible" ci-dessous, car celui-ci ne sert qu'avec le capteur photosensible de l'ensemble NXT 1.0 ou éducation.



C'est donc le bloc du "Capteur photosensible" qu'il vous faudra utilisez chaque fois que possible dans ce tutoriel, à la place du bloc "Capteur de couleurs", si vous disposez du capteur photosensible de l'ensemble NXT 1.0 ou éducation.



Le programme du véhicule 1




Le programme du véhicule de Braitenberg de type 1 est relativement simple :









Le premier bloc "Moteur PID" sert à rechercher la position centrale entre les deux butées mécanique de la tourelle du robot et définir cette position comme étant la position de référence à laquelle on donne la valeur de 0°.

Le second bloc "Moteur PID" déplace ensuite la tourelle à l'angle , donc sur cette position de référence, de manière à ce que le capteur de lumière se trouve placé en position frontal sur le robot.

Le programme entre ensuite dans une boucle infinie de façon à scruter régulièrement le capteur de lumière, configuré en capteur photosensible avec sa lumière éteinte, et envoyer par un fil de données la valeur de luminosité mesurée par ce dernier aux plots de données Puissance des deux moteurs de propulsion du robot.

Notez la transmission de données de la prise d'entrée à la prise de sortie du bloc "Moteur" B qui permet de transférer, sans modification, la valeur du capteur de lumière vers le bloc "Moteur" C.

Ainsi, une fois le capteur de lumière placé en position frontale sur le robot, la vitesse des deux moteurs sera proportionnel à la luminosité mesurée par le capteur.

Vous pourriez nommer ce programme Braitenberg_1.

Téléchargez ce programme sur le NXT de votre robot et essayez-le.

Le robot ne s'arrête jamais.
Assurez-vous donc qu'il ne reste pas bloqué sur un obstacle.

Testez ce véhicule dans une pièce éclairée avec la lumière du jour.
Le robot se déplacera lentement dans une région faiblement éclairée et plus rapidement là où la lumière est plus importante.

Vous pouvez également essayer ce véhicule dans une pièce sombre et éclairer la partie frontale du robot à l'aide d'une lampe torche.
Ainsi vous vous apercevrez que plus le robot se rapproche de la source de lumière, plus il va vite.

En robotique, on appelle cela une boucle sensorimotrice.
Un senseur commandant un moteur dans une boucle perception-action très courte.

Continuons notre découverte des véhicules de Braitenberg en réalisant les véhicules de type 2 dans la suite de cette partie.

Véhicule de Braitenberg 2



Le véhicule 2 ressemble au véhicule 1 excepté le fait qu'il possède deux capteurs, un à droite et un à gauche, et deux moteurs, un de chaque côté.

Vous pouvez vous imaginez qu'il s'agit d'un descendant du véhicule 1 grâce à un processus de duplication; deux véhicules de type 1 se seraient collés ensemble côte à côte.

Dans notre cas, le robot est équipé d'un capteur de lumière, que nous configurerons en capteur de luminosité.

Notre robot n'étant équipé que d'un seul capteur de lumière, nous simulerons le fait d'avoir deux capteurs de lumière en faisant tourner celui-ci de droite à gauche à l'aide de la tourelle rotative et en effectuant une mesure de luminosité de chaque côté.

Dans ce véhicule, la vitesse de chaque moteur dépend de la valeur de luminosité mesuré par le capteur auquel il est relié.

De la même manière que pour le véhicule 1, plus les capteurs sont excités, plus les moteurs tournent vite.
Il s'agit donc également d'une connexion excitatrice, représentée par le symbole +.



Vous noterez immédiatement que vous pouvez imaginer deux sortes de véhicules de type 2, selon que vous connectez :



Notez qu'il existe bien une troisième possibilité consistant à connecter chaque capteur aux deux moteurs.
Toutefois, cette possibilité ne servirait à rien puisqu'elle donnerai le même résultat que le véhicule 1.

Considérons d'abord le véhicule 2a, celui avec les connexions directes.
Ce véhicule passera plus de temps dans les endroits sombre et accélérera quand il est exposé à une luminosité plus importante.

Si la source de lumière est directement devant lui, les capteurs recevant la même intensité de lumière, les deux moteurs tourneront à la même vitesse et le véhicule avancera tout droit jusqu'à rentrer en contact avec la source de lumière.

Si la source de lumière est d'un côté, le capteur se trouvant plus près de la source de lumière est excité plus que l'autre.
Le moteur se trouvant du même côté que le capteur tournera donc plus vite, avec comme conséquence que le véhicule se détournera de la source de lumière.



Voyons maintenant le véhicule 2b, celui avec les connexions croisées.

Il n'y aura pas de changement de comportement si la source de lumière se trouve devant lui. Il avancera tout droit.

Par contre, si la source de lumière est d'un côté, nous remarquons une différence par rapport au véhicule 2a.

Si la source de lumière est d'un côté, le capteur se trouvant plus près de la source de lumière est excité plus que l'autre.
Le moteur se trouvant du côté opposé au capteur tournera donc plus vite, avec comme conséquence que le véhicule 2b se tournera en direction de la lumière et viendra éventuellement heurter la source de celle-ci.

Les caractéristiques de ces deux véhicules sont tout à fait opposées.

Tout les deux semblent être excités par la lumière, mais le véhicule 2a tend à les éviter, s'échappant jusqu'à ce qu'il atteigne un endroit où l'influence de la source de lumière est à peine ressentie.
Nous pouvons dire que le véhicule 2a est apparemment peureux.

Il n'en est pas de même pour le véhicule 2b, puisque lui aussi est excité par la présence de la lumière, mais il se tourne résolument vers elle et la heurte à grande vitesse comme s'il voulait la détruire.
Nous pouvons dire que le véhicule 2b est apparemment agressif.

Découvrons à présent comment programmer un véhicule de Braitenberg de type 2 sur notre robot.

Faites bien attention avec votre ensemble NXT 2.0 de ne pas utiliser le bloc du "Capteur photosensible" ci-dessous, car celui-ci ne sert qu'avec le capteur photosensible de l'ensemble NXT 1.0 ou éducation.



C'est donc le bloc du "Capteur photosensible" qu'il vous faudra utilisez chaque fois que possible dans ce tutoriel, à la place du bloc "Capteur de couleurs", si vous disposez du capteur photosensible de l'ensemble NXT 1.0 ou éducation.



Le programme du véhicule 2a : LE PEUREUX




Le programme du véhicule de Braitenberg de type 2a n'est pas très compliqué :













Le premier bloc "Moteur PID" sert à rechercher la position centrale entre les deux butées mécanique de la tourelle du robot et définir cette position comme étant la position de référence à laquelle on donne la valeur de 0°.
Jusque-là, rien de nouveau.

Le programme entre ensuite dans une boucle, de façon à scruter régulièrement le capteur de lumière, dont le programme ne sortira que lorsque le bouton orange du NXT sera enfoncé.

Le second bloc "Moteur PID" déplace la tourelle à un angle de 45° par rapport à la position de référence, de manière à ce que le capteur de lumière se trouve placé sur le côté gauche du robot.

Suite de quoi, le premier bloc "Capteur de couleurs", configuré en capteur photosensible avec sa lumière éteinte, effectue une mesure simulant la présence d'un capteur de lumière côté gauche.
Cette valeur de luminosité est envoyée par un fil de données au plot de données Puissance du moteur de propulsion C, qui est le moteur se trouvant du même côté gauche que le capteur de lumière.

Le troisième bloc "Moteur PID" déplace ensuite la tourelle à un angle de -45° par rapport à la position de référence, c'est à dire 45° dans l'autre sens,de manière à ce que le capteur de lumière se trouve placé sur le côté droit du robot.

Une fois encore, le deuxième bloc "Capteur de couleurs", configuré en capteur photosensible avec sa lumière éteinte, effectue une mesure simulant la présence d'un capteur de lumière côté droit.
Cette valeur de luminosité est envoyée par un fil de données au plot de données Puissance du moteur de propulsion B, qui est le moteur se trouvant du même côté droit que le capteur de lumière.

Enfin, en sortie de boucle, le quatrième bloc "Moteur PID" déplace finalement la tourelle à un angle de , donc sur la position de référence, de manière à ce que le capteur de lumière se trouve placé au centre des deux butées mécanique sur le robot.

Finalement, un bloc "Déplacer" freine les deux moteurs de propulsions pour stopper l'élan du robot.

Ainsi, lorsque vous voudrez mettre fin au programme, vous avez la possibilité, en appuyant auparavant sur le bouton orange du NXT, de replacer la tourelle en position centrale et d'arrêter le déplacement du robot.

Vous pourriez nommer ce programme Braitenberg_2a.

Téléchargez ce programme sur le NXT de votre robot et essayez-le.

Le robot ne s'arrête jamais.
Assurez-vous donc qu'il ne reste pas bloqué sur un obstacle.

Testez ce véhicule dans une pièce éclairée avec la lumière du jour.
Le robot se déplacera lentement dans une région faiblement éclairée et plus rapidement là où la lumière est plus importante.
De plus, il aura tendance à fuir la lumière pour se diriger vers les endroits les moins éclairés.

Vous pouvez également essayer ce véhicule dans une pièce sombre et éclairer le robot à l'aide d'une lampe torche.
Ainsi vous vous apercevrez que le robot se détourne de la source de lumière pour se réfugier dans les zones sombres.

Découvrons à présent comment programmer un véhicule de Braitenberg de type 2b sur notre robot.

Faites bien attention avec votre ensemble NXT 2.0 de ne pas utiliser le bloc du "Capteur photosensible" ci-dessous, car celui-ci ne sert qu'avec le capteur photosensible de l'ensemble NXT 1.0 ou éducation.



C'est donc le bloc du "Capteur photosensible" qu'il vous faudra utilisez chaque fois que possible dans ce tutoriel, à la place du bloc "Capteur de couleurs", si vous disposez du capteur photosensible de l'ensemble NXT 1.0 ou éducation.



Le programme du véhicule 2b : L'AGRESSIF




Le programme du véhicule de Braitenberg de type 2b est similaire à celui du véhicule 2a :













La seule différence réside au niveau des moteurs de propulsions B et C, dont leurs blocs se trouvent en position inversé dans ce programme.

Lors de la simulation de la présence d'un capteur de lumière sur le côté gauche du véhicule, la valeur mesurée par ce dernier n'est pas envoyée au moteur C, situé du même côté, mais bien au moteur B qui est situé sur le côté opposé du capteur de lumière.

De même, lors de la simulation de la présence d'un capteur de lumière sur le côté droit du véhicule, la valeur mesurée par ce dernier n'est pas envoyée au moteur B, situé du même côté, mais bien au moteur C qui est situé sur le côté opposé du capteur de lumière.

Ce n'est pas plus compliqué que ça pour réaliser des connexions croisés !

Vous pourriez nommer ce programme Braitenberg_2b.

Téléchargez ce programme sur le NXT de votre robot et essayez-le.

Le robot ne s'arrête jamais.
Assurez-vous donc qu'il ne reste pas bloqué sur un obstacle.

Testez ce véhicule dans une pièce éclairée avec la lumière du jour.
Le robot se déplacera lentement dans une région faiblement éclairée et plus rapidement là où la lumière est plus importante.
De plus, il aura tendance à se diriger vers les endroits les plus éclairés.

Vous pouvez également essayer ce véhicule dans une pièce sombre et éclairer le robot à l'aide d'une lampe torche.
Ainsi vous vous apercevrez que le robot se tourne vers la source de lumière pour se diriger vers elle.

Voila qui conclu la découverte et la programmation des véhicules de Braitenberg de type 2.

Conclusion



Ainsi se termine cette partie consacrée aux véhicules de Braitenberg de type 1 et 2.

Nous avons vu comment télécharger et importer un nouveau bloc de programmation au logiciel LEGO MINDSTORMS NXT.

Les explications concernant le nouveau bloc "Moteur PID" de HiTechnic ont étaient introduite en préambule de cette partie.

Puis, nous avons découvert Valentino Braitenberg et son livre sur ses véhicules.

Enfin, la programmation des véhicules de type 1 et 2 a été réalisée.

Dans la suite de ce tutoriel sur la programmation en NXT-G, nous verrons les véhicules de type 3.

Mais pour cela, il nous faudra d'abord aborder les blocs mathématiques pour pouvoir effectuer des calculs dans nos programmes.

Ce sera donc l'objet de la prochaine partie.