Labyrinthe


  But du programme

Notre Monty doit sortir d'un labyrinthe (la sortie est définie par un obstacle).


Analyse du problème

Composants utilisés

- Moteur G et D

- Détecteur de position G et D (0 : Blanc, 1 :Noir)

- Capteur de choc G et D (0 : Choc, 1 : Libre)

- Buzzer

Stratégie

Je me suis basé sur le programme ligne noire.

Pour rappel :
Les capteurs de choc sont à zéro s'ils détectent un choc et à 1 sinon.
Les capteurs de position sont à zéro s'ils sont sur une ligne blanche et à 1 si cette ligne est noire.

Nous pouvons prendre comme hypothèse que notre robot est sur la ligne noire. Lorsqu'il avance, il peut lui arriver plusieurs choses :
- Il rencontre un obstacle : on a fini
- Il quitte la ligne noire par la droite (celle si tourne ou notre robot n'est pas dans l'axe de la ligne)
- Il quitte la ligne par la gauche (même raison que pour le cas précédent)
- Il quitte la ligne par les deux cotés en même temps, il faut faire demi-tour.

Il n'a pas d'autres événements qui peuvent provoquer une réaction de notre robot.

Ne pouvant pas 'voir' la sortie, le Monty va utiliser la méthode du rat : toujours tourner à gauche (ou a droite). Pour cela, il va toujours essayer d'aller à gauche, s'il sort par la gauche, il va à droite. Lorsqu'il est sorti de la ligne (à cause d'un cul-de-sac), il fait demi-tour sur place.

Voici sur un labyrinthe simplifié le trajet que va faire le monty.

Algorithme

L'algorithme est très semblable à 'ligne noire', sauf pour les points suivants :
- Le monty n'avance jamais en ligne droite, en effet, il essaye de longer 'le mur' gauche.Par défaut on initialise w avec TG (movlw TG) et l'on ne place TD que si l'on a plus rien sur le capteur gauche.
(S'il n'y a plus rien à droite on doit tourner à gauche, c'est ce que l'on a prévu par défaut)
- Lorsque l'on touche quelque chose c'est que l'on est sorti. Modification : on ne fait plus un call à Alarme mais on va en Fin
- Si l'on est sorti de la ligne noire, il faut faire demi-tour. on charge TGS (tourne à gauche sur place) lorsque l'un des capteurs 'relit' la ligne, nous pouvons considérer que nous avons terminé de faire demi tour et l'on reprend de longer le mur gauche.


Le programme
Version 1.0 : (08/05/2002 zip : 14K)

Variante 1: Monty tourne à droite (1.0 V1) (22/05/2002 zip : 14K)

Variante 2: Monty choisi au départ de prendre toujours à droite ou toujours à gauche. La méthode pour "tirer" un nombre aléatoire est simple dans la boucle d'attente de la mise en marche, la pic incrémente une variable. Dans la boucle principale, il y a un test vérifiant si le nombre est paire ou impaire. Ce test permet de choisir si l'on charge "à droite" ou "à gauche" :

(1.0 V2) (22/05/2002 zip : 14K)