Cours:MindstormSuiviLigne

De troyesGEII
Révision datée du 28 septembre 2018 à 10:20 par Bjacquot (discussion | contributions) (Mode COL_REFLECT)
Aller à : navigation, rechercher
Retour à la liste des Tps

Vous allez dans ce TP programmer un robot suiveur de ligne.

Nous utiliserons le capteur de couleur présent sur le robot tour à tour dans les modes COL_COLOR et COL_REFLECT.

détection de couleur : Noir ou pas ?

On souhaite suivre une ligne de couleur noire au sol.

On souhaite dans cette partie utiliser le capteur en détection de couleur (COL_COLOR mode).

Fin du programme

Comme expliqué dans un TP précédent, la plupart des programmes auront une structure de la forme :

....
int main()
{
   // init robot et variables
   ....
   do {
      // lire les entrées
      ....
      // faire des calculs
      ....
      // modifier les sorties
      ....
      // éventuellement une attente pour ne pas modifier trop fréquemment les sorties
      Wait(qques Ms);
   } while( condition pour continuer le programme);
   // fin du programme
   ...
}

Commençons par prévoir l'arrêt du robot en fin de parcours. On utilisera le capteur de contact (touchSensor).

Question.jpg Ecrire un programme qui fait clignoter la led verte et qui se termine lorsque le robot rencontre un obstacle

Il faudra regarder la fonction SetLedPattern

Détection de la ligne

On conserve le programme précédent, les moteurs ne sont toujours pas utilisés, on souhaite vérifier que le capteur de couleur détecte bien la ligne.

Question.jpg Ecrire un programme qui :

  • configure le capteur de couleur en mode COL_COLOR
  • répète
    • lire capteur de couleur
    • si couleur noire
      • allumer led verte
    • sinon
      • allumer led rouge
    • attendre 10ms
  • tant qu'il n'y a pas d'obstacle
  • quitter

Moteur !

Bon tout est en place, au souhaite suivre un des bords de la ligne. On peut par exemple :

  • avancer en tournant à droite si le robot est sur la ligne
  • avancer en tournant à gauche si le robot est à côté de la ligne

Ou le contraire si on veut suivre l'autre bord.

Aux unités près, on peut noter :

  • Vt vitesse de translation
  • Wr vitesse de rotation
  • Vmd = Vt + wr vitesse du moteur droit
  • Vmg = Vt - wr vitesse du moteur gauche

Question.jpg Terminer votre programme de suivi de ligne

Attention : Il faut trouver un compromis entre :

  • vitesse d'avance
  • vitesse de rotation
  • pause dans la boucle


Ligne multicolore

Afin d'améliorer le suivi de ligne, on propose d'accoler des bandes de plusieurs couleurs.

On pourra alors savoir si le robot et plutôt au centre, ou s'éloigne sur un des côté.

Question.jpg Montrer que le capteur identifie bien toutes les couleurs : Vous pouvez :

  • afficher un message différent à l'écran suivant la couleur
  • choisir une couleur de led par couleur détectée par le capteur


Question.jpg Ecrire alors un programme qui exploite ces différentes couleurs pour effectuer un suivi de ligne


Mode COL_REFLECT

Dans ce mode, le capteur de couleur mesure la quantité de lumière renvoyée par la surface.

Plus celle ci absorbe le rayonnement, plus la valeur retournée sera faible.

Ainsi sur du noir la valeur sera proche de 0 et sur du blanc proche de la valeur 100.


Étalonnage

Il convient tout d'abord d'observer les valeurs retournées par le capteur sur les 2 surfaces

Question.jpg Ecrire un programme qui toutes les 100ms affiche la valeur du capteur

Noter les valeurs min et max, respectivement pour le noir et le blanc

Le programme devra s'arrêter si on appuie sur un bouton.

Il conviendra d'utiliser au besoin :

  • LcdClean() : efface l'écran
  • le caractère '\f' : repositionne le curseur en haut de l'écran

Position du robot

Lorsque le capteur du robot est partiellement sur la ligne, la valeur retournée sera comprise les valeurs min et max notées précédemment.

On aura une variable posRobot qui vaudra :

  • -10 si le capteur est à la valeur min
  • 10 si le capteur est à la valeur max
  • 0 si la valeur du capteur est à la valeur moyenne entre min et max
  • on considère que c'est une relation linéaire

Question.jpg Trouver l'expression de posRobot en fonction de valCapt (variable donnant la valeur du capteur

Question.jpg Ecrire un programme qui calcule la position du robot et l'affiche à l'écran

Todo.jpg Vérifier le fonctionnement : pas besoin des moteurs, on déplace le robot à la main

Let's go !

Bon c'est presque terminé, il suffit de dire que

Wr = k * posRobot

Il faudra bien sûr choisir une valeur pour k, par essais erreurs !

Question.jpg Codez !