Programme MAVIN: Evitement d'obstacles

Introduction

Voici un exemple de programme illustrant la simplicité de mise en ouvre du MAVIN. Pour les débutants comme pour les autres, l'intérêt est de pouvoir s'intéresser à la programmation du robot, sans avoir à remettre en question le système hardware.
 
Nous allons commencer par établir un court cahier des charges que le lecteur pourra lire et essayer de programmer par lui-même. Le programme complet sera ensuite détaillé. Comme d'habitude, une erreur, une imprécision ou un manque sera inséré dans l'explication. A vous de trouver laquelle avant la fin de l'article. N'hésitez pas à laisser vos questions éventuelles en commentaire.

Cahier des charges

Le robot devra répondre au fonctionnement suivant:
- Toujours être en mouvement.
- A la rencontre d'un obstacle: reculer puis:
- Si l'obstacle vient de devant ou de la droite: tourner à gauche.
- Si l'obstacle vient de gauche: tourner à droite.
 
 
Indices:
- Nous nous servirons des détecteurs d'obstacles intégrés dans le MAVIN. Sa programmation s'effectue par le module Photo dans le panel Output.
 
 
 
--------------
A vous de tenter de créer un programme répondant aux spécifications évoquées...
--------------
 
 
 
 
 

La solution

  

Programme graphique d'évitement d'obstacle

Détails

Ce programme, malgré sa complexité apparente pour un débutant est en réalité très simple. Sa seule difficulté est de comprendre les principes de boucles et de conditions. 
 
Rappel: Pour paramétrer chaque bloc,  cliquez dessus. Une fenêtre de paramétrage apparaît au bas de l'écran comme vu précédement dans la découverte du logiciel.
 
Suivons le programme pas-à-pas, tel que le fera le micro-processeur du robot:
 
debut

Début du programme. C'est de ce point que redémarrera nécessairement le programme lors de la mise sous tension du robot.
 
Le programme se divise ensuite en diverses branches représentant les différents cas possibles: obstacle devant, à gauche, à droite, etc... Le programme détermine quelle branche doit être utilisée en testant la condition en début de chaque branche et ceci de gauche à droite. Si la branche de gauche est 'obstacle devant' et que celle de droite est 'obstacle à droite', si deux obstacles (devant et à droite) se présentent simultanément, le programme évitera donc celui de devant en premier.
branche1
Première branche: teste la présence d'un obstacle devant le robot. La réaction dans ce cas sera de reculer durant une seconde, puis de tourner à gauche.
Condition d'entrée dans la branche: présence d'un obstacle devant. Le capteur Photo à l'avant est sollicité :direction=Forward, sensor status=C. Si la condition est vraie, le programme condition sur la sortie T (True) sinon, la branche 2 est testée sur la sortie F (False).
Si l'entrée dans la branche est acceptée, c'est qu'un obstacle se présente devant le robot. La réaction est de reculer durant une seconde. Le bloc MOTOR commande donc l'allumage des deux moteurs en marche arrière à une vitesse arbitrairement choisie à 15: direction=Backward, select motor=Both, velocity=15.
Le bloc DELAY suspend quand à lui l'exécution du programme durant une seconde, soit 10 dixièmes: Delay Time = 10. Cela laisse le temps au robot de rouler en arrière (cf Premier pogramme avec le MAVIN). 
Ce second bloc MOTOR de la branche est en réalité commun avec celui de la branche 2. Il commande le moteur droit vers l'avant à une vitesse de 15: direction=Forward, select motor=Right, velocity=15. Rappelons que le moteur gauche tourne toujours en arrière: le robot va pivoter sur lui-même vers la gauche.
A son tour, le bloc DELAY suspend l'exécution du programme durant une seconde, soit 10 dixièmes: Delay Time = 10. Cela laisse le temps au robot de tourner!
branche 2
Seconde branche: teste la présence d'un obstacle sur la droite du robot. La réaction dans ce cas sera la même que précédement: reculer durant une seconde, puis de tourner à gauche.
Condition d'entrée dans la branche: présence d'un obstacle à droite. Le capteur Photo à droite est sollicité :direction=Forward, sensor status=R. Si la condition est vraie, le programme condition sur la sortie T (True) sinon, la branche 3 est testée sur la sortie F (False).
Si l'entrée dans la branche est acceptée, c'est qu'un obstacle se présente à droite du robot. La réaction est de reculer durant une seconde. Le bloc MOTOR commande donc l'allumage des deux moteurs en marche arrière à une vitesse arbitrairement choisie à 15: direction=Backward, select motor=Both, velocity=15.

Le bloc DELAY suspend quand à lui l'exécution du programme durant une seconde, soit 10 dixièmes: Delay Time = 10. Cela laisse le temps au robot de rouler en arrière (cf Premier pogramme avec le MAVIN).

Ce second bloc MOTOR de la branche est celui vu à la branche 1. Il commande le moteur droit vers l'avant à une vitesse de 15: direction=Forward, select motor=Right, velocity=15. Rappelons que le moteur gauche tourne toujours en arrière: le robot va pivoter sur lui-même vers la gauche.
A son tour, le bloc DELAY suspend l'exécution du programme durant une seconde, soit 10 dixièmes: Delay Time = 10. Cela laisse le temps au robot de tourner!
branche 3

Troisième branche: teste la présence d'un obstacle sur la gauche du robot. La réaction dans ce cas sera de reculer durant une seconde, puis de tourner à droite.
Condition d'entrée dans la branche: présence d'un obstacle à gauche. Le capteur Photo à gauche est sollicité :direction=Forward, sensor status=L. Si la condition est vraie, le programme condition sur la sortie T (True) sinon, la branche 4 est exécutée sur la sortie F (False).
Si l'entrée dans la branche est acceptée, c'est qu'un obstacle se présente à gauche du robot. La réaction est de reculer durant une seconde. Le bloc MOTOR commande donc l'allumage des deux moteurs en marche arrière à une vitesse arbitrairement choisie à 15: direction=Backward, select motor=Both, velocity=15.

Le bloc DELAY suspend quand à lui l'exécution du programme durant une seconde, soit 10 dixièmes: Delay Time = 10. Cela laisse le temps au robot de rouler en arrière (cf Premier pogramme avec le MAVIN).

Ce second bloc MOTOR de la branche commande le moteur gauche vers l'avant à une vitesse de 15: direction=Forward, select motor=Left, velocity=15. Rappelons que le moteur droit tourne toujours en arrière: le robot va pivoter sur lui-même vers la droite.

Encore une fois,  notre fameux bloc DELAY suspendant l'exécution du programme durant une seconde, soit 10 dixièmes: Delay Time = 10 pour laisser le temps au robot de tourner!

branche 4

La dernière branche est celle par défaut. Aucun des cas particuliers précédents n'a été détecté, c'est à dire qu'il n'y a absolument aucun obstacle devant le robot. Que faire? Tout simplement avancer du mieux que l'on peut en allumant les deux moteurs à la même vitesse en marche avant: direction=Forward, select motor=Both, velocity=15.

Toujours le même bloc DELAY suspendant l'exécution du programme durant une seconde, soit 10 dixièmes: Delay Time = 10!

Fin

Enfin le programme se termine par une boucle. Comme nous l'avions vu lors de notre Premier Programme, la boucle va permettre de réitérer les tests tout au long du programme. Si elle n'y était pas: le programme durerait une seconde.

Afin de permettre au programme de durer indéfiniement, la boucle est dite infinie. Elle est reglée sur Count=0.

Le bloc END sur la sortie end de la boucle permet quant à lui de terminer le programme. Le fil d'exécution, c'est à dire l'étape où en est l'éxécution du programme ne devrait jamais l'atteindre: la boucle est infinie! Toutefois, il est rappelé que ce bloc est obligatoire.

Transfert au MAVIN

1- Vérifiez que votre programme est correct en utilisant le 'vérificateur de logique': bouton [1].

2- Compilez votre programme en utilisant le 'compilateur': bouton [2]. Votre programme va être traduit pour être compréhensible par le micro-controleur du robot.
3- Branchez le câble de téléchargement sur le port USB de votre ordinateur, ainsi que sur le port USB-2 du MAVIN (à l'arrière, à gauche du bouton de démarrage). Allumer ensuite le MAVIN.
4- Téléchargez (= tranférez) le programme que vous venez de créer dans la mémoire interne du MAVIN en vu de son exécution. Pour cela cliquez sur le bouton [3].
 
Pour exécuter le programme, débranchez le câble de téléchargement, éteignez votre robot puis rallumez-le une fois posé au sol.

Testons votre compréhension

Voyons si vous avez tout compris! De nombreuses erreurs et/ou imprécision ont volontairement été introduites dans le programme le rendant pas tout à fait conforme au cahier des charges. Réfléchissez, testez puis lisez la suite....
 
 
Voici plusieurs éléments que vous pourrez être amené à réfléchir:
- En testant ce programme, vous vous êtes peut-être aperçu que votre robot semble parfois mettre un peu de temps à comprendre qu'il y a un obstacle. En fait ce temps vient de la branche 4: pour arriver sur un obstacle, le robot est nécessairement en marche avant. Or, tel que le programme est conçus, le robot avance nécessairement durant une seconde complète avant de se demander s'il y a un obstacle devant lui. Résultat: il semble lent à la 'comprenette'! Avez-vous une solution ? Si non, relisez bien le programme et déterminez l'étape qui pose problème. Cherchez à bien cerner tous les principes qui sont en jeu, puis lisez la solution ligne suivante.
Pour pallier à ce problème, il suffit de relier le bloc MOTOR de la branche 4 non plus au DELAY commun aux autres branches, mais directement au bloc REPEAT. Du coup, le robot lance ses moteurs et vérifie tout de suite s'il y a un obstacle ou non devant lui. Il n'a plus ce temps d'avance bêtement.
 
- Seconde limite de ce programme: essayer de mettre vos mains en un mur légèrement courbe de sorte à créer un obstacle à la fois devant et sur les côtés. Essayez de même avec devant et un seul côté ou avec les deux côtés en même temps. Que se passe-t-il ? Votre robot fonce tout droit sans sembler se préoccuper de ces obstacles. A nouveau, essayez de trouver par vous-même l'explication... puis lisez la suite.
Tout vient des blocs PHOTO. En fait les trois capteurs gauche-devant-droit fonctionnent en même temps. La branche 1: obstacle devant devrait en réalité s'appeler obstacle uniquement devant. Le réglage: sensor status=C signifie en fait SI L=0 ET C=1 ET R=0, soit SI pas d'obstacle à gauche ET obstacle devant ET pas d'obstacle à droite. Toute la question est de savoir comment faire: SI obstacle ET le reste on s'en moque. Tenez-vous bien: ce n'est pas possible avec l'outil de programmation graphique du bloc PHOTO. La seule solution est alors de créer autant de bloc PHOTO qu'il y a de cas possible, et donc autant de branche! Avec les trois capteurs du MAVIN, cela revient donc à prendre en compte huit branches... Bon courage!

Conclusion

Une note un peu décevante sur ce programme; positive pour la simplicité de la programmation du MAVIN, mais mitigée toutefois par les capacités physiques des capteurs dont la distance de détection semble plutôt réduite.
 
Les plus:
  • Simple à programmer, tranfert du programme facile à mettre en oeuvre.
  • Logiciel intuitif et agréable à utiliser.
Les moins:
  • Le robot est bruyant en fonctionnement.
  • Les capteurs ont une distance de détection vraiment trop faible. Mieux vaut s'en servir pour suivre un mobile.
Votre note : Aucun(e) Moyenne : 2.6 (5 votes)