Club robotique de Sophia-Antipolis

Accueil > Projets et études > Nos robots > Robots du club > Robots à roues > Hitec Mavin (2008) > Second exemple : Ma-vin suiveur de ligne

Second exemple : Ma-vin suiveur de ligne

dimanche 16 novembre 2008, par Julien H.

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.

PNG - 912.9 ko

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".

PNG - 54.4 ko
Sélection de la rangée du dessous

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.

PNG - 55 ko
Sélection du test booléen

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".

PNG - 82.4 ko
Suivi de ligne classique

Et le programme complet pour le logiciel Ma-vin (version 2 beta) :

Zip - 486 octets
Programme standard

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.

PNG - 57.6 ko
Principe pour chaque registre

Une fois complété, voici ce que ça donne :

PNG - 98.2 ko
Gestion de la télécommande

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.

Zip - 16.4 ko
Sub "remote manage"

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"

Zip - 16.1 ko
Sub "remote forward"

Pour remplacer le cas "correction à droite"

Zip - 16.2 ko
Sub "remote right one"

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.

Zip - 534 octets
Programme avec 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

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici
  • Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document