Cours:MindstormSuiviLigne
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.
Sommaire
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).
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.
- 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
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 est plutôt au centre, ou s'éloigne sur un des côté.
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
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
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 entre 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
Trouver l'expression de posRobot en fonction de valCapt (variable donnant la valeur du capteur
Ecrire un programme qui calcule la position du robot et l'affiche à l'écran
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 !