esquiva-obstaculos

Et si tu apprenais à ton robot à contourner des obstacles ? Avec son capteur à ultrasons et son mini servo (pour faire bouger le capteur), le PrintBot Evolution se prête parfaitement à cet exercice.

Ostacle_avoid Il ne faut pas jouer avec le feu ! Malgré sa formidable peau de dragon notre robot va éviter et contourner les objets qu’il rencontrera sur son chemin.

Comment fonctionne le contournement d’obstacle ?


Ton robot peut contourner des obstacles de plusieurs façons, nous allons t’expliquer l’une d’entre elles. Voici les actions que doit réaliser le robot :

  1. Prendre des mesures
  2. Contrôler la présence d’un obstacle
  3. Exécuter le mouvement approprié

Détaillons ensemble chaque action :

1) Prendre des mesures avec le capteur à ultrasons

Notre robot prend trois mesures avec le capteur à ultrasons : à gauche, au centre et à droite.

beep-1 beep-2 beep-3

Le robot mesure ainsi la distance entre le capteur et l’objet situé sur sa trajectoire. Tout comme tu tournes la tête pour voir ce qu’il y a autour de toi, le robot déplace le capteur à l’aide du mini servo.

2) Contrôler la présence d’obstacles pour savoir quel comportement adopter

beep

Bip ! Pas d’obstacle à moins de 25 cm ? Le robot avance tout droit.

beep-meec_err

Meec… Attention, obstacle à moins de 25 cm ! La voie est-elle libre à droite ou à gauche ?

beep-meec

Essayons de passer à gauche. S’il n’y a pas d’obstacle à moins de 25 cm, le robot pourra tourner à gauche.

mec-mec-beep

Impossible de passer à gauche ? Regardons si la voie est libre à droite.

Mais… Que faire si les trois directions sont bloquées ? Le robot donnera l’alerte :

« Meeec meeec ! Je suis bloqué !!! »

Dans ce cas, le robot doit reculer puis changer de direction, par exemple tourner à gauche.

r_Meec-meec-meec

3) Exécuter le mouvement adapté

Il ne te reste plus qu’à faire bouger les roues de ton robot dans la bonne direction pour qu’il suive la trajectoire déterminée lors de l’étape précédente. C’est parti !

ostacle_avoid_3

Programmer ton PrintBot Evolution avec bitbloq


Tu auras besoin de bitbloq pour réaliser ce programme. Nous allons nous baser sur le guide de montage du PrintBot Evolution. Si c’est la première fois que tu utilises ce type de composants électroniques, tu peux lire le post Premiers pas avec ton PrintBot avant de te lancer dans la programmation.

Pour commencer, déclarons les variables dont nous avons besoin :

obst_bit_0

Les variables obs_Left, obs_Right et obs_Center (obs_Gauche, obs_Droite et obs_Centre) vont nous servir à conserver un 1 ou un 0 en fonction de si un obstacle a été détecté ou non à gauche, à droite et tout droit. Le chiffre 1 signifie qu’un obstacle a été détecté.

Les variables angle_Left, angle_Right et angle_Center (angle_ Gauche, angle_Droit et angle_Centre) conservent les positions du mini servo pour que les « yeux » du robot regardent à gauche, à droite ou droit devant. Quand tu demandes au mini servo de tourner de x degrés, tu changes ainsi l’orientation du capteur à ultrasons.

Une fois les variables définies, nous allons commencer à programmer la boucle du programme qui va se répéter en continu.

Commençons par la fonction Stop qui permet d’arrêter le robot :

obst_bit_1

Nous pouvons programmer de la manière suivante les trois mesures dont nous parlions plus haut :

obst_bit_2

La fonction search_Obstacle permet de rechercher des obstacles. Elle a comme paramètre d’entrée un angle et elle renvoie un 1 ou un 0. Voici la fonction complète :

obst_bit_Search_obstacle

Le mini servo tourne selon l’angle d’entrée, puis le capteur à ultrasons mesure la distance (en centimètres), puis la valeur est analysée (bloc vert) :

– Si la distance mesurée par le capteur est inférieure à 25 cm, le buzzer émet un son signalant un problème et le chiffre 1 est renvoyé : Attention, obstacle en vue !

– Sinon, le buzzer émet un bip aigu qui indique que le robot peut passer. La fonction renvoie un 0 : la voie est libre !

Il faut maintenant dire au robot quoi faire en fonction de chaque situation. Nous avons déjà vu ensemble les quatre cas de figure possibles, voici comment ils se traduisent dans bitbloq :

obst_bit_3

Il ne nous reste plus qu’à définir les fonctions de mouvement. Pour faire avancer le robot, nous utilisons la fonction go_Forward :

obst_bit_fordward

Cette fonction déclenche le buzzer pour signaler que la voie est libre. Elle actionne ensuite les servos à rotation continue pour faire bouger les roues : le servo gauche (broche 8) tourne dans le sens des aiguilles d’une montre et le servo droit (broche 9) tourne dans le sens inverse des aiguilles d’une montre. [Note : Le sens de rotation est considéré en regardant les roues depuis le centre du robot.]

Pour faire tourner le robot, nous utilisons les fonctions turn_Left pour tourner à gauche et turn_Right pour tourner à droite. Pour arrêter le robot nous utilisons la fonction Stop dont nous avons déjà parlé :

obst_bit_turn_and_stop

Enfin pour faire reculer le robot, nous utilisons la fonction go_Backward :

obst_bit_back

Cette fonction est très longue car elle permet de réaliser trois actions :

– Émettre des sons amusants (Je suis coincé !)

– Tourner la tête (mini servo) à droite et à gauche (Je suis perdu !!!)

– Reculer en actionnant les servos à rotation continue.

Voici le programme complet :

ostacle_avoid_bitbloq_total

Tu as maintenant tous les éléments nécessaires ! Mais… n’oublie pas qu’il s’agit d’une façon basique de contourner les obstacles. Nous pourrions améliorer plusieurs choses : augmenter la vitesse, prendre plus de trois mesures pour bien détecter tous les obstacles, modifier l’ordre de priorité des actions (avancer ou tourner à gauche ne sont pas toujours les meilleures choses à faire). Et si tu essayais d’améliorer ce programme ?