Table des matières:

L'IA dans le robot de conduite de labyrinthe LEGO EV3 : 13 étapes
L'IA dans le robot de conduite de labyrinthe LEGO EV3 : 13 étapes

Vidéo: L'IA dans le robot de conduite de labyrinthe LEGO EV3 : 13 étapes

Vidéo: L'IA dans le robot de conduite de labyrinthe LEGO EV3 : 13 étapes
Vidéo: Make your First Lego Mindstorms EV3 Robot - GenBot 2024, Juillet
Anonim
Image
Image
Comment un labyrinthe est résolu
Comment un labyrinthe est résolu

Il s'agit d'un robot simple et autonome doté d'une certaine intelligence artificielle. Il est conçu pour explorer un labyrinthe et lorsqu'il est replacé à l'entrée, pour traverser jusqu'à la sortie et éviter les impasses. C'est beaucoup plus compliqué que mon projet précédent, qui a simplement traversé le labyrinthe. Ici, le robot doit se souvenir du chemin qu'il a parcouru, supprimer les impasses, stocker le nouveau chemin, puis suivre le nouveau chemin.

Mon robot précédent est décrit ici:

Le robot est construit à l'aide de LEGO Mindstorms EV3. Le logiciel EV3 s'exécute sur un ordinateur et génère un programme, qui est ensuite téléchargé sur un microcontrôleur appelé brique EV3. La méthode de programmation est basée sur des icônes et de haut niveau. C'est très facile et polyvalent.

Fournitures

LES PIÈCES

  1. Ensemble LEGO Mindstorms EV3
  2. Capteur à ultrasons LEGO Mindstorms EV3. Il n'est pas inclus dans l'ensemble EV3.
  3. Carton ondulé pour le labyrinthe. Deux cartons devraient suffire.
  4. Un petit morceau de carton fin pour aider à stabiliser certains coins et murs.
  5. De la colle et du ruban adhésif pour relier les morceaux de carton ensemble.
  6. Une enveloppe de carte de vœux rouge pour identifier la sortie du labyrinthe.

OUTILS

  1. Couteau universel pour couper le carton.
  2. Règle en acier pour faciliter le processus de coupe.

LOGICIEL

Le programme est ici:

Étape 1: Comment un labyrinthe est résolu

MÉTHODE DE CONDUITE DU LABYRINTHE

Il existe plusieurs méthodes pour naviguer dans un labyrinthe. Si vous êtes intéressé à les étudier, ils sont très bien décrits dans l'article Wikipédia suivant:

J'ai choisi la méthode de suivi de mur à gauche. L'idée est que le robot garde un mur sur son côté gauche en prenant les décisions suivantes pendant qu'il traverse le labyrinthe:

  1. S'il est possible de tourner à gauche, faites-le.
  2. Sinon, allez tout droit si possible.
  3. S'il ne peut pas aller à gauche ou tout droit, tournez à droite, si possible.
  4. Si rien de ce qui précède n'est possible, cela doit être une impasse. Faire demi-tour.

Une mise en garde est que la méthode peut échouer si le labyrinthe contient une boucle. Selon le placement de la boucle, le robot pourrait continuer à tourner autour de la boucle. Une solution possible à ce problème serait que le robot passe à la règle du suiveur de mur à droite s'il réalisait qu'il faisait une boucle. Je n'ai pas inclus ce raffinement dans mon projet.

RÉSOUDRE LE LABYRINTHE POUR TROUVER UN CHEMIN DIRECT

En traversant le labyrinthe, le robot doit mémoriser le chemin qu'il parcourt et éliminer les impasses. Pour ce faire, il stocke chaque virage et intersection dans un tableau, vérifie les combinaisons spécifiques de virages et d'intersections au fur et à mesure et remplace les combinaisons qui incluent une impasse. La liste finale des virages et des intersections est le chemin direct à travers le labyrinthe.

Les virages possibles sont: Gauche, Droite, Arrière (dans une impasse) et Droit (qui est une intersection).

Les combinaisons sont remplacées comme suit:

  • "Gauche, Arrière, Gauche" devient "Droite".
  • "Gauche, Arrière, Droite" devient "Retour".
  • "Gauche, Arrière, Droit" devient "Droite".
  • "Droite, Arrière, Gauche" devient "Retour".
  • "Droite, Arrière, Gauche" devient "Droite".
  • "Straight, Back, Straight" devient "Back".

COMMENT LE ROBOT GÈRE MON LABYRINTHE

  1. Lorsque le robot commence à conduire, il voit un espace à droite et stocke Straight dans la liste du tableau.
  2. Ensuite, il tourne à gauche et ajoute Gauche à la liste. La liste contient maintenant: Droite, Gauche.
  3. Avec une impasse, il fait demi-tour et ajoute Retour à la liste. La liste contient maintenant: Droite, Gauche, Arrière.
  4. En passant la voie qu'il empruntait depuis l'entrée, il ajoute Straight à la liste. La liste contient maintenant: Droit, Gauche, Arrière, Droit. Il reconnaît une combinaison et change Gauche, Arrière, Droite à Droite. La liste contient maintenant Straight, Right.
  5. Avec une impasse, il fait demi-tour et ajoute Retour à la liste. La liste contient maintenant: Straight, Right, Back.
  6. Après le virage à gauche, la liste contient Straight, Right, Back, Left. Il reconnaît une combinaison et change Droite, Arrière, Gauche à Arrière. La liste contient maintenant Straight, Back.
  7. Après le prochain virage à gauche, la liste contient Straight, Back, Left. Cela change cette combinaison en Right. La liste ne contient plus que Right.
  8. Il passe un espace et ajoute Straight à la liste. La liste contient maintenant Right, Straight.
  9. Après le virage à droite, la liste contient Droite, Droite, Droite qui est le chemin direct.

Étape 2: Considérations lors de la programmation du robot

CONSIDÉRATIONS POUR TOUT MICROCONTROLEUR

Lorsque le robot décide de tourner, il doit soit effectuer un grand virage, soit avancer sur une courte distance avant de tourner et après avoir tourné, avancer à nouveau sur une courte distance sans vérifier le capteur. La raison de la première courte distance est que le robot ne doit pas se cogner contre le mur après le virage, et la raison de la deuxième courte distance est qu'après que le robot ait tourné, le capteur verrait le long espace d'où il venait de venir., et le robot penserait qu'il devrait à nouveau tourner, ce qui n'est pas la bonne chose à faire.

Lorsque le robot détecte une intersection sur la droite mais que ce n'est pas un virage à droite, j'ai trouvé qu'il était bon que le robot avance d'environ 10 pouces (25 cm) sans vérifier ses capteurs.

CONSIDÉRATIONS SPÉCIFIQUES À LEGO MINDSTORMS EV3

Bien que LEGO Mindstorms EV3 soit très polyvalent, il n'autorise pas plus d'un capteur de chaque type connecté à une brique. Deux briques ou plus pouvaient être connectées en guirlande, mais je ne voulais pas acheter une autre brique et j'ai donc utilisé les capteurs suivants (au lieu de trois capteurs à ultrasons): capteur infrarouge, capteur de couleur et capteur à ultrasons. Cela a bien fonctionné.

Mais le capteur de couleur a une portée très courte, d'environ 2 pouces (5 cm), ce qui conduit à quelques considérations particulières comme décrit ci-dessous:

  1. Lorsque le capteur de couleur détecte un mur devant et que le robot décide de tourner à droite ou de faire demi-tour, il doit d'abord reculer, afin de se donner suffisamment d'espace pour tourner sans heurter le mur.
  2. Un problème compliqué se produit avec certaines intersections « droites ». En raison de la courte portée du capteur de couleur, le robot ne peut pas déterminer s'il détecte une intersection « droite » appropriée ou l'approche d'un virage à droite. J'ai essayé de résoudre ce problème en configurant le programme pour qu'il stocke un "Droit" dans la liste chaque fois que le robot en détecte un, puis élimine plus d'un "Droit" d'affilée dans la liste. Cela corrige la situation où un virage à droite suit un « Droit » dans le labyrinthe, mais pas la situation où il y a un virage à droite sans un « Droit » devant lui. J'ai également essayé de configurer le programme pour éliminer un "Droit" s'il est juste avant un "Droit" mais cela ne fonctionne pas si un virage à droite suit un "Droit". Je n'ai pas été en mesure de trouver une solution qui s'adapte à tous les cas, bien que je suppose qu'il serait possible pour le robot de regarder la distance parcourue (en lisant les capteurs de rotation du moteur) et de décider s'il s'agit d'un « Droit » ou d'un droit tourner. Je ne pensais pas que cette complication valait la peine d'être faite dans le but de démontrer le concept d'IA dans ce projet.
  3. Un avantage du capteur de couleur est qu'il fait la distinction entre le brun d'un mur et le rouge de la barrière que j'ai utilisée à la sortie, et permet au robot de décider facilement quand il a terminé le labyrinthe.

Étape 3: Le programme principal

Le programme principal
Le programme principal

LEGO Mindstorms EV3 a une méthode de programmation basée sur des icônes très pratique. Les blocs sont affichés en bas de l'écran d'affichage sur l'ordinateur et peuvent être glissés-déposés dans la fenêtre de programmation pour créer un programme. La brique EV3 peut être connectée à l'ordinateur par un câble USB, Wi-Fi ou Bluetooth, et le programme peut ensuite être téléchargé de l'ordinateur vers la brique.

Le programme se compose d'un programme principal et de plusieurs « Mes blocs » qui sont des sous-programmes. Le fichier téléchargé contient l'intégralité du programme, qui se trouve ici:

Les étapes du programme principal sont les suivantes:

  1. Définir et initialiser la variable de comptage de tours et le tableau.
  2. Attendez 5 secondes et dites « Allez-y ».
  3. Démarrer une boucle.
  4. Traversez le labyrinthe. Lorsque la sortie est atteinte, la boucle est terminée.
  5. Affichez sur l'écran de la brique, les intersections trouvées dans le labyrinthe jusqu'à présent.
  6. Vérifiez si le chemin doit être raccourci.
  7. Affichez les intersections dans le chemin raccourci.
  8. Revenez à l'étape 4.
  9. Après la boucle, conduisez le chemin direct.

La capture d'écran montre ce programme principal.

Étape 4: Mes blocs (sous-programmes)

Les Mes Blocs (Sous-routines)
Les Mes Blocs (Sous-routines)

Naviguer dans mon bloc, qui contrôle la façon dont le robot traverse le labyrinthe, s'affiche. L'impression est très petite et peut ne pas être lisible. Mais c'est un bon exemple de la polyvalence et de la puissance des instructions if (appelées Switchs dans le système LEGO EV3).

  1. La flèche n°1 pointe vers un interrupteur qui vérifie si le capteur infrarouge voit un objet à plus d'une distance spécifique. Si c'est le cas, la série supérieure de blocs est exécutée. Sinon, le contrôle est passé à la grande série de blocs inférieure, où se trouve la flèche #2.
  2. La flèche n°2 pointe vers un commutateur qui vérifie la couleur perçue par le capteur de couleur. Il y a 3 cas: pas de couleur en haut, rouge au milieu et marron en bas.
  3. Deux flèches n°3 pointent vers des commutateurs qui vérifient si le capteur à ultrasons voit un objet à plus d'une distance spécifique. Si c'est le cas, la série supérieure de blocs est exécutée. Si ce n'est pas le cas, le contrôle est alors passé à la série de blocs inférieure.

Les My Blocks pour raccourcir le chemin et pour conduire le chemin direct sont plus compliqués et seraient totalement illisibles, et donc ils ne sont pas inclus dans ce document.

Étape 5: Commencer à construire le robot: la base

Commencer à construire le robot: la base
Commencer à construire le robot: la base
Commencer à construire le robot: la base
Commencer à construire le robot: la base

Comme mentionné précédemment, LEGO Mindstorms EV3 n'autorise pas plus d'un capteur de chaque type connecté à une brique. J'ai utilisé les capteurs suivants (au lieu de trois capteurs à ultrasons): capteur infrarouge, capteur de couleur et capteur à ultrasons.

Les paires de photos ci-dessous montrent comment construire le robot. La première photo de chaque paire montre les pièces nécessaires, et la deuxième photo montre les mêmes pièces connectées ensemble.

La première étape consiste à construire la base du robot, en utilisant les pièces illustrées. La base du robot est montrée à l'envers. La petite partie en L à l'arrière du robot est un support pour le dos. Il glisse au fur et à mesure que le robot se déplace. Cela fonctionne bien. Le kit EV3 n'a pas de pièce de type boule roulante.

Étape 6: Haut de la base, 1

Haut de la base, 1
Haut de la base, 1
Haut de la base, 1
Haut de la base, 1

Cette étape et les 2 étapes suivantes concernent le haut de la base du robot, le capteur de couleur et les câbles, qui sont tous des câbles de 10 pouces (26 cm).

Étape 7: Haut de la base, 2

Haut de la base, 2
Haut de la base, 2
Haut de la base, 2
Haut de la base, 2

Étape 8: Haut de la base, 3

Haut de la base, 3
Haut de la base, 3
Haut de la base, 3
Haut de la base, 3

Étape 9: Capteurs infrarouges et à ultrasons

Capteurs infrarouges et à ultrasons
Capteurs infrarouges et à ultrasons
Capteurs infrarouges et à ultrasons
Capteurs infrarouges et à ultrasons

Viennent ensuite le capteur infrarouge (sur le côté gauche du robot) et le capteur à ultrasons (sur la droite). Aussi, les 4 broches pour fixer la brique sur le dessus.

Les capteurs infrarouges et à ultrasons sont situés verticalement au lieu de l'horizontale normale. Cela permet une meilleure identification des coins ou des extrémités des murs.

Étape 10: Câbles

Câbles
Câbles

Les câbles se connectent à la brique comme suit:

  • Port B: gros moteur gauche.
  • Port C: gros moteur droit.
  • Port 2: capteur à ultrasons.
  • Port 3: capteur de couleur.
  • Port 4: capteur infrarouge.

Étape 11: Étape finale de la construction du robot: décoration

Dernière étape de la construction du robot: décoration
Dernière étape de la construction du robot: décoration
Dernière étape de la construction du robot: décoration
Dernière étape de la construction du robot: décoration

Les ailes et les nageoires ne sont que pour la décoration.

Étape 12: Construisez un labyrinthe

Construire un labyrinthe
Construire un labyrinthe
Construire un labyrinthe
Construire un labyrinthe

Deux cartons ondulés devraient suffire pour le labyrinthe. J'ai fait les murs du labyrinthe de 5 pouces (12,5 cm) de haut, mais 4 pouces (10 cm) devraient tout aussi bien fonctionner si vous manquez de carton ondulé.

Tout d'abord, j'ai coupé autour des parois des cartons, à 10 pouces (25 cm) du bas. Ensuite, j'ai coupé autour des murs à 5 pouces du bas. Cela fournit plusieurs murs de 5 pouces. De plus, j'ai coupé autour du fond des cartons, laissant environ 1 pouce (2,5 cm) attaché aux murs pour plus de stabilité.

Les différentes pièces peuvent être coupées et collées ou scotchées partout où cela est nécessaire pour former le labyrinthe. Il devrait y avoir un espace de 11 ou 12 pouces (30 cm) entre les parois latérales dans tout chemin avec une impasse. La longueur ne doit pas être inférieure à 10 pouces (25 cm). Ces distances sont nécessaires pour que le robot se retourne.

Certains coins du labyrinthe peuvent avoir besoin d'être renforcés. De plus, certains murs droits doivent être empêchés de se plier s'ils comprennent un coin en carton redressé. De petits morceaux de carton mince doivent être collés au fond à ces endroits, comme indiqué.

La sortie a une barrière rouge composée d'une demi-enveloppe de carte de vœux rouge et d'une base constituée de 2 morceaux de carton mince, comme illustré.

Étape 13: Le labyrinthe

Le labyrinthe
Le labyrinthe

Une mise en garde est que le labyrinthe ne doit pas être grand. Si les virages du robot sont légèrement inclinés par rapport au bon angle, les écarts s'additionnent après quelques virages et le robot pourrait se heurter aux murs. J'ai dû jouer plusieurs fois avec les paramètres de rotation des virages afin d'obtenir un drive réussi même dans le petit labyrinthe que j'ai fait.

Un moyen de contourner ce problème consiste à inclure une routine de redressement de trajectoire qui maintiendrait le robot à une distance spécifique du mur gauche. Je n'ai pas inclus cela. Le programme est assez compliqué comme ça, et il est suffisant pour démontrer le concept d'IA dans ce projet.

REMARQUE FINALE

Ce fut un projet amusant et une grande expérience d'apprentissage. J'espère que vous le trouverez également intéressant.

Conseillé: