Avec 3 capteurs de lumière dirigé vers le sol, un robot est capable de faire un suivi de ligne particulièrement simple, en réagissant à chacun des cas.
Trois variables à 2 possibilités indépendantes, cela fait 2 puissance 3 soit 8 cas possibles.
– 0.1.0 ligne au milieu : tout va bien, on avance à fond
– 1.1.0 ligne au milieu et à gauche : on commence à dévier, il faut corriger
– 0.1.1 ligne au milieu et à droite : idem de l’autre côté
– 1.0.0 ligne uniquement à gauche : ça doit être une courbe, il faut tourner
– 0.0.1 ligne uniquement à droite : idem de l’autre côté
– 0.0.0 aucune ligne : on est perdu, il faut trouver une solution de secours
Il y a deux cas qu’on ne teste pas :
– 1.1.1 robot perpendiculaire à la ligne : attendons d’être sorti de la ligne pour reprendre un des cas traités
– 1.0.1 le robot doit être tout cassé :)
Pour ceux-là, il suffit de faire aussi la solution de secours.
Conception
Quand je parle de "corriger" et de "solution de secours", il ne s’agit pas d’algorithmes complexes mais d’une réaction simple car le code s’exécute dans une boucle infinie, afin d’avoir un asservissement continu, le plus "à l’écoute" possible des événements extérieurs.
Légère correction
Plusieurs solutions possibles :
– agrandir l’écart de vitesses de manière à accélérer la roue en retard
– agrandir l’écart de vitesses de manière à décélerer la roue en avance
Je n’ai pas testé les deux, j’ai choisi la prudence donc la décélération. Envoyez-nous vos propres tests et donnez nous votre avis.
Tourner
Là encore, plusieurs solutions :
– arrêter la roue du côté où on détecte encore la ligne
– inverser la vitesse sur cette roue
Cette dernière solution est intéressante, car on devrait retrouver très vite la ligne. Par contre on la retrouvera "en arrière" par rapport à ce qu’on aurait pu gagner en continuant à avancer.
C’est donc une question de choix, de dosage par rapport au circuit que vous avez et aux vitesses que vous allez choisir.
La solution de secours
Lorsque tout est perdu, il faut éviter que le robot parte en ligne droite. C’est une règle connue en modélisme aquatique ou aérien : lorsque la liaison avec la télécommande est perdue, il faut décrire une boucle afin qu’on puisse récupérer l’engin quand il n’aura plus de piles ou quand il rencontrera un obstacle.
Et bien c’est pareil, même si notre robot est autonome. La solution de secours consiste donc à tourner sur lui-même en espérant retrouver la ligne.
Continuez sur la page suivante pour la programmation du robot.
Programme
On va utiliser l’éditeur graphique du Ma-vin.
Les briques LOGIC (toujours utilisées dans nos algorithmes) sont :
– START
– REPEAT
– END
Pour détecter la ligne et agir sur le robot, on va utiliser deux briques INPUT :
– PHOTO
– MOTOR
Détail de la brique PHOTO
On va utiliser l’option "DOWNWARD" pour spécifier qu’on veut tester les capteurs du dessous. Dans le premier exemple, on avait utilisé les capteurs du devant, option "FORWARD".

Chaque utilisation de la brique ne fait qu’un seul test booléen, qui va vous permettre de décrire un circuit pour le cas vrai (T) ou un circuit pour le cas faux (F). On va donc spécifier dans les options le cas à tester : une croix signifie que le capteur détecte la ligne noire. Dans l’exemple suivant, on est donc dans le cas ’0.1.1’ dans la convention utilisée en début d’article.

Diagramme de blocs
Voici ce que ça donne quand on implémente chacun des cas : les 5 qui sont significatifs + tous les autres cas correspondant à la "solution de secours".

Et le programme complet pour le logiciel Ma-vin (version 2 beta) :
On ne va pas s’arrêter là. Le programme présenté ci-dessus est correct, et pour peu qu’on choisisse de bonnes valeurs de vitesse, le robot peut parcourir des kilomètres.
Voyons maintenant une modification permettant de choisir la vitesse du robot.
Modification spéciale
Pour être pédagogique, nous allons étudier l’importance du choix de la vitesse en laissant la possibilité à nos visiteurs de la Fête de la Science 2008 de changer la vitesse du robot à l’aide de la télécommande.
Principe des registres
C’est l’occasion d’utiliser deux nouveaux blocs :
– BRANCH REG.
– OUTPUT REG.
Le "REG." signifie "Register" ou registre en français. C’est une mémoire qui peut contenir une valeur de 1 à 12. On utilise le bloc "OUTPUT REG." pour changer la valeur et "BRANCH REG." pour tester si le registre contient une valeur particulière.
Dans cet exemple, le registre va permettre de changer la vitesse en fonction des touches de la télécommande.
On va modifier la boucle d’asservissement pour ajouter à chaque tour de boucle la lecture de la télécommande. Puis on remplacera les commandes de moteur par une commande conditionnée par la valeur du registre.
Comme le diagramme de blocs risque de prendre de la place, on utilisera des sous-routines (voir notre article).
Sous-routine de télécommande
On n’utilisera que deux touches : flèche haut (UP ARROW) et flèche bas (DOWN ARROW). L’algorithme de gestion de la télécommande est le suivant :
– si on appuie sur la flèche haut, on passe au registre supérieur
– si on appuie sur la flèche bas, on passe au registre inférieur
– pas d’inférieur pour le premier registre
– pas de supérieur pour le dernier registre
Donc pour chacun des registres, il y a l’enchainement de blocs suivants avec un petit ajustement pour le premier et le dernier.

Une fois complété, voici ce que ça donne :
Cette sous routine est appelée "remote manage" et doit être ajoutée en fin de boucle, dans tous les cas de capteur de ligne.
On fait ensuite autant de sous routines qu’il y a de gestion différente des moteurs, afin de pouvoir remplacer les blocs MOTOR par des cas différenciés selon la valeur du registre (des blocs MOTOR bien entendu mais avec des valeurs de vitesse différentes).
Pour remplacer le cas "va tout droit"
Pour remplacer le cas "correction à droite"
Et ainsi de suite. N’hésitez pas à nous faire partager vos expériences et vos propres codes.
Voici le programme utilisant les sous-routines, je n’ai pas encore tout remplacé mais j’ai déjà des comportements intéressants selon la valeur que je choisis avec ma télécommande.
Vos commentaires
# Le 17 novembre 2008 à 13:54, par ?
En réponse à : Second exemple : Ma-vin suiveur de ligne
Bonjour j’ai téléchargé remote manage mais en appuyant sur n’importe quelle touche de la télécommande rien ne fonctionne
# Le 17 novembre 2008 à 18:50, par Julien H.
En réponse à : Second exemple : Ma-vin suiveur de ligne
Il n’y a que flèches haut et flèches bas. Que fait le robot ? Sur quel port est connecté le capteur de la télécommande ?
ps : un petit pseudo serait pratique pour que je suive les différentes réponses et que je sache si je dois être très détaillé ou si je peux aller à l’essentiel.
Répondre à ce message