Inhaltsverzeichnis:

KI im LEGO EV3 Labyrinth-Fahrroboter - Gunook
KI im LEGO EV3 Labyrinth-Fahrroboter - Gunook

Video: KI im LEGO EV3 Labyrinth-Fahrroboter - Gunook

Video: KI im LEGO EV3 Labyrinth-Fahrroboter - Gunook
Video: Open Roberta Coding Hub Hochschule Kiel: Kreativ vom Schnupperkurs bis zum Roboterwettbewerb 2024, Juli
Anonim
Image
Image
Wie ein Labyrinth gelöst wird
Wie ein Labyrinth gelöst wird

Dies ist ein einfacher, autonomer Roboter mit etwas künstlicher Intelligenz. Es wurde entwickelt, um ein Labyrinth zu erkunden und, wenn es wieder am Eingang platziert ist, zum Ausgang zu fahren und die Sackgassen zu vermeiden. Es ist viel komplizierter als mein vorheriges Projekt, das einfach durch das Labyrinth fuhr. Hier muss sich der Roboter den zurückgelegten Weg merken, Sackgassen entfernen, den neuen Weg speichern und dann dem neuen Weg folgen.

Mein vorheriger Roboter ist hier beschrieben:

Der Roboter ist mit LEGO Mindstorms EV3 gebaut. Die EV3-Software läuft auf einem Computer und generiert ein Programm, das dann auf einen Mikrocontroller namens EV3-Stein heruntergeladen wird. Die Programmiermethode ist symbolbasiert und auf hohem Niveau. Es ist sehr einfach und vielseitig.

Lieferungen

TEILE

  1. LEGO Mindstorms EV3-Set
  2. LEGO Mindstorms EV3-Ultraschallsensor. Es ist nicht im EV3-Set enthalten.
  3. Wellpappe für das Labyrinth. Zwei Kartons sollten ausreichen.
  4. Ein kleines Stück dünner Karton, um einige Ecken und Wände zu stabilisieren.
  5. Kleber und Klebeband, um Kartonteile miteinander zu verbinden.
  6. Ein roter Grußkarten-Umschlag, um den Ausgang des Labyrinths zu identifizieren.

WERKZEUGE

  1. Universalmesser zum Schneiden des Kartons.
  2. Stahllineal zur Unterstützung des Schneidvorgangs.

SOFTWARE

Das Programm ist hier:

Schritt 1: Wie ein Labyrinth gelöst wird

LABYRINTH-FAHRVERFAHREN

Es gibt verschiedene Methoden, um durch ein Labyrinth zu navigieren. Wenn Sie daran interessiert sind, sie zu studieren, sind sie im folgenden Wikipedia-Artikel sehr gut beschrieben:

Ich habe mich für die linke Wandfolgemethode entschieden. Die Idee ist, dass der Roboter eine Wand auf seiner linken Seite hält, indem er die folgenden Entscheidungen trifft, während er durch das Labyrinth geht:

  1. Wenn es möglich ist, nach links abzubiegen, tun Sie dies.
  2. Andernfalls fahren Sie wenn möglich geradeaus.
  3. Wenn es nicht nach links oder geradeaus gehen kann, biegen Sie nach Möglichkeit rechts ab.
  4. Wenn keines der oben genannten möglich ist, muss dies eine Sackgasse sein. Dreh dich um.

Eine Vorsichtsmaßnahme ist, dass die Methode fehlschlagen könnte, wenn das Labyrinth eine Schleife enthält. Abhängig von der Platzierung der Schleife könnte der Roboter um die Schleife herumlaufen. Eine mögliche Lösung für dieses Problem wäre, dass der Roboter auf die rechte Wandfolger-Regel umschaltet, wenn er erkennt, dass er sich in einer Schleife bewegt. Diese Verfeinerung habe ich nicht in mein Projekt aufgenommen.

LÖSEN SIE DAS LABYRINTH, UM EINEN DIREKTEN WEG ZU FINDEN

Während der Fahrt durch das Labyrinth muss sich der Roboter den Weg merken, den er zurücklegt, und Sackgassen eliminieren. Dies wird erreicht, indem jede Abbiegung und Kreuzung in einem Array gespeichert, auf bestimmte Kombinationen von Abbiegungen und Kreuzungen überprüft und die Kombinationen ersetzt werden, die eine Sackgasse enthalten. Die letzte Liste der Abzweigungen und Kreuzungen ist der direkte Weg durch das Labyrinth.

Die möglichen Abbiegungen sind: Links, Rechts, Zurück (in einer Sackgasse) und Gerade (eine Kreuzung).

Kombinationen werden wie folgt ersetzt:

  • Aus "Links, Zurück, Links" wird "Gerade".
  • Aus "Links, Zurück, Rechts" wird "Zurück".
  • Aus "Links, Zurück, Gerade" wird "Rechts".
  • Aus "Rechts, Zurück, Links" wird "Zurück".
  • Aus "Gerade, Zurück, Links" wird "Rechts".
  • Aus "Gerade, Zurück, Gerade" wird "Zurück".

WIE DER ROBOTER MIT MEINEM MAZE VERARBEITET

  1. Wenn der Roboter zu fahren beginnt, sieht er rechts ein Leerzeichen und speichert Straight in der Liste im Array.
  2. Dann dreht es sich nach links und fügt Left der Liste hinzu. Die Liste enthält jetzt: Gerade, Links.
  3. Mit einer Sackgasse dreht es sich um und fügt Zurück zur Liste hinzu. Die Liste enthält jetzt: Gerade, Links, Zurück.
  4. Wenn Sie die Spur passieren, die es vom Eingang verwendet hat, fügt es der Liste Straight hinzu. Die Liste enthält jetzt: Gerade, Links, Zurück, Gerade. Es erkennt eine Kombination und wechselt von links, zurück, gerade nach rechts. Die Liste enthält jetzt Straight, Right.
  5. Mit einer Sackgasse dreht es sich um und fügt Zurück zur Liste hinzu. Die Liste enthält jetzt: Gerade, Rechts, Zurück.
  6. Nach der Linkskurve enthält die Liste Straight, Right, Back, Left. Es erkennt eine Kombination und wechselt von rechts, zurück, von links nach hinten. Die Liste enthält jetzt Gerade, Zurück.
  7. Nach der nächsten Linkskurve enthält die Liste Straight, Back, Left. Es ändert diese Kombination in Rechts. Die Liste enthält jetzt nur noch Right.
  8. Es übergibt ein Leerzeichen und fügt der Liste Straight hinzu. Die Liste enthält jetzt Right, Straight.
  9. Nach der Rechtskurve enthält die Liste Rechts, Gerade, Rechts, was der direkte Weg ist.

Schritt 2: Überlegungen bei der Programmierung des Roboters

ÜBERLEGUNGEN FÜR JEDEN MIKROCONTROLLER

Wenn der Roboter sich zum Wenden entscheidet, sollte er entweder eine weite Wende machen oder vor dem Wenden ein kurzes Stück vorwärts und nach dem Wenden wieder ein kurzes Stück vorwärts gehen, ohne den Sensor zu überprüfen. Der Grund für die erste kurze Distanz ist, dass der Roboter nach der Drehung nicht an die Wand stoßen sollte, und der Grund für die zweite kurze Distanz ist, dass der Sensor nach der Drehung des Roboters die lange Strecke sehen würde, aus der er gerade gekommen ist, und der Roboter würde denken, dass er sich wieder drehen sollte, was nicht richtig ist.

Wenn der Roboter eine Kreuzung auf der rechten Seite erkennt, aber keine Rechtskurve ist, habe ich festgestellt, dass es gut ist, den Roboter ungefähr 25 cm vorwärts fahren zu lassen, ohne seine Sensoren zu überprüfen.

BESONDERE ÜBERLEGUNGEN FÜR LEGO MINDSTORMS EV3

Obwohl LEGO Mindstorms EV3 sehr vielseitig ist, erlaubt es nicht mehr als einen Sensor von jedem Typ an einen Stein anzuschließen. Zwei oder mehr Bricks könnten in Reihe geschaltet werden, aber ich wollte keinen weiteren Brick kaufen und habe daher die folgenden Sensoren (statt drei Ultraschallsensoren) verwendet: Infrarotsensor, Farbsensor und Ultraschallsensor. Das hat gut geklappt.

Der Farbsensor hat jedoch eine sehr kurze Reichweite von etwa 5 cm, was zu einigen besonderen Überlegungen führt, wie unten beschrieben:

  1. Wenn der Farbsensor eine Wand vor sich erkennt und der Roboter entscheidet, nach rechts abzubiegen oder umzukehren, sollte er zuerst zurückfahren, um sich genug Platz zum Wenden zu geben, ohne an die Wand zu stoßen.
  2. Bei einigen „Geraden“Kreuzungen tritt ein kompliziertes Problem auf. Aufgrund der geringen Reichweite des Farbsensors kann der Roboter nicht feststellen, ob er eine richtige „Gerade“-Kreuzung oder die Vorfahrt zu einer Rechtskurve erkennt. Ich habe versucht, dieses Problem zu beheben, indem ich das Programm so eingestellt habe, dass es jedes Mal, wenn der Roboter einen erkennt, eine „Straight“in der Liste speichert und dann mehr als eine „Straight“in einer Reihe in der Liste eliminiert. Dies behebt die Situation, in der eine Rechtskurve einer „Geraden“im Labyrinth folgt, aber nicht die Situation, in der eine Rechtskurve ohne eine „Gerade“davor ist. Ich habe auch versucht, das Programm so einzustellen, dass eine "Gerade" eliminiert wird, wenn sie kurz vor einer "Rechten" ist, aber das funktioniert nicht, wenn eine Rechtskurve auf eine "Gerade" folgt. Ich habe keine für alle Fälle passende Lösung gefunden, aber ich denke, es wäre möglich, dass der Roboter die zurückgelegte Strecke (durch Auslesen der Motorrotationssensoren) betrachtet und entscheidet, ob es eine „Gerade“oder eine Rechts ist Dreh dich. Ich dachte nicht, dass sich diese Komplikation lohnt, um das KI-Konzept in diesem Projekt zu demonstrieren.
  3. Ein Vorteil des Farbsensors ist, dass er zwischen dem Braun einer Wand und dem Rot der Barriere, die ich am Ausgang verwendet habe, unterscheidet und dem Roboter eine einfache Möglichkeit bietet, zu entscheiden, wann er das Labyrinth beendet hat.

Schritt 3: Das Hauptprogramm

Das Hauptprogramm
Das Hauptprogramm

LEGO Mindstorms EV3 verfügt über eine sehr praktische, symbolbasierte Programmiermethode. Blöcke werden am unteren Bildschirmrand des Computers angezeigt und können per Drag-and-Drop in das Programmierfenster gezogen werden, um ein Programm zu erstellen. Der EV3-Stein kann entweder über ein USB-Kabel, Wi-Fi oder Bluetooth mit dem Computer verbunden werden, und das Programm kann dann vom Computer auf den Stein heruntergeladen werden.

Das Programm besteht aus einem Hauptprogramm und mehreren „My Blocks“, die Unterprogramme sind. Die hochgeladene Datei enthält das gesamte Programm, das hier zu finden ist:

Die Schritte im Hauptprogramm sind wie folgt:

  1. Definieren und initialisieren Sie die Rundenzählvariable und das Array.
  2. Warten Sie 5 Sekunden und sagen Sie „Los“.
  3. Starten Sie eine Schleife.
  4. Fahren Sie durch das Labyrinth. Wenn der Ausgang erreicht ist, wird die Schleife verlassen.
  5. Zeigen Sie auf dem Bildschirm des Bricks die bisher im Labyrinth gefundenen Kreuzungen an.
  6. Prüfen Sie, ob der Pfad gekürzt werden soll.
  7. Zeigen Sie die Kreuzungen im verkürzten Pfad an.
  8. Kehren Sie zu Schritt 4 zurück.
  9. Fahren Sie nach der Schleife den direkten Weg.

Der Screenshot zeigt dieses Hauptprogramm.

Schritt 4: Die My Blocks (Unterprogramme)

Die Meine Blöcke (Unterprogramme)
Die Meine Blöcke (Unterprogramme)

Das Navigate My Block, das steuert, wie der Roboter durch das Labyrinth fährt, wird angezeigt. Der Druck ist sehr klein und möglicherweise nicht lesbar. Aber es ist ein gutes Beispiel dafür, wie vielseitig und mächtig die if-Anweisungen sind (im LEGO EV3-System Switches genannt).

  1. Pfeil Nr. 1 zeigt auf einen Schalter, der überprüft, ob der Infrarotsensor ein Objekt in mehr als einer bestimmten Entfernung erkennt. Wenn dies der Fall ist, wird die oberste Reihe von Blöcken ausgeführt. Wenn nicht, wird die Steuerung an die große untere Reihe von Blöcken übergeben, wo sich der Pfeil Nr. 2 befindet.
  2. Pfeil Nr. 2 zeigt auf einen Schalter, der überprüft, welche Farbe der Farbsensor sieht. Es gibt 3 Fälle: keine Farbe oben, rot in der Mitte und braun unten.
  3. Zwei Pfeile Nr. 3 zeigen auf Schalter, die prüfen, ob der Ultraschallsensor ein Objekt in mehr als einer bestimmten Entfernung erkennt. Wenn dies der Fall ist, wird die oberste Reihe von Blöcken ausgeführt. Wenn nicht, wird die Steuerung an die unterste Reihe von Blöcken übergeben.

Die My Blocks zum Kürzen des Weges und zum Befahren des direkten Weges sind komplizierter und wären völlig unleserlich und werden daher nicht in dieses Dokument aufgenommen.

Schritt 5: Beginnen Sie mit dem Bau des Roboters: die Basis

Beginnen Sie mit dem Bau des Roboters: der Basis
Beginnen Sie mit dem Bau des Roboters: der Basis
Beginnen Sie mit dem Bau des Roboters: der Basis
Beginnen Sie mit dem Bau des Roboters: der Basis

Wie bereits erwähnt, lässt LEGO Mindstorms EV3 nicht mehr als einen Sensor jedes Typs mit einem Stein zu. Ich habe folgende Sensoren (statt drei Ultraschallsensoren) verwendet: Infrarotsensor, Farbsensor und Ultraschallsensor.

Die folgenden Fotopaare zeigen, wie der Roboter gebaut wird. Das erste Foto jedes Paares zeigt die benötigten Teile und das zweite Foto zeigt die gleichen miteinander verbundenen Teile.

Der erste Schritt besteht darin, die Basis des Roboters mit den gezeigten Teilen zu bauen. Die Roboterbasis wird verkehrt herum dargestellt. Das kleine L-förmige Teil an der Rückseite des Roboters ist eine Stütze für den Rücken. Es gleitet, während sich der Roboter bewegt. Das funktioniert in Ordnung. Das EV3-Kit hat kein Rolling-Ball-Typ-Teil.

Schritt 6: Oberseite der Basis, 1

Oberseite der Basis, 1
Oberseite der Basis, 1
Oberseite der Basis, 1
Oberseite der Basis, 1

Dieser Schritt und die nächsten 2 Schritte beziehen sich auf die Oberseite der Basis des Roboters, den Farbsensor und die Kabel, die alle 10 Zoll (26 cm) Kabel sind.

Schritt 7: Oberseite der Basis, 2

Oberseite der Basis, 2
Oberseite der Basis, 2
Oberseite der Basis, 2
Oberseite der Basis, 2

Schritt 8: Oberseite der Basis, 3

Oberseite der Basis, 3
Oberseite der Basis, 3
Oberseite der Basis, 3
Oberseite der Basis, 3

Schritt 9: Infrarot- und Ultraschallsensoren

Infrarot- und Ultraschallsensoren
Infrarot- und Ultraschallsensoren
Infrarot- und Ultraschallsensoren
Infrarot- und Ultraschallsensoren

Als nächstes kommen der Infrarotsensor (auf der linken Seite des Roboters) und der Ultraschallsensor (auf der rechten Seite). Auch die 4 Pins zum Befestigen des Bricks oben.

Die Infrarot- und Ultraschallsensoren befinden sich vertikal statt der normalen horizontalen. Dies ermöglicht eine bessere Erkennung der Ecken oder Enden der Wände.

Schritt 10: Kabel

Kabel
Kabel

Die Kabel werden wie folgt mit dem Brick verbunden:

  • Port B: linker großer Motor.
  • Port C: rechter großer Motor.
  • Anschluss 2: Ultraschallsensor.
  • Anschluss 3: Farbsensor.
  • Port 4: Infrarotsensor.

Schritt 11: Letzter Schritt beim Bau des Roboters: Dekoration

Letzter Schritt beim Bau des Roboters: Dekoration
Letzter Schritt beim Bau des Roboters: Dekoration
Letzter Schritt beim Bau des Roboters: Dekoration
Letzter Schritt beim Bau des Roboters: Dekoration

Die Flügel und Flossen dienen nur der Dekoration.

Schritt 12: Bauen Sie ein Labyrinth

Baue ein Labyrinth
Baue ein Labyrinth
Baue ein Labyrinth
Baue ein Labyrinth

Zwei Kartons aus Wellpappe sollten für das Labyrinth ausreichen. Ich habe die Labyrinthwände 5 Zoll (12,5 cm) hoch gemacht, aber 4 Zoll (10 cm) sollten genauso gut funktionieren, wenn Sie wenig Wellpappe haben.

Zuerst schneide ich um die Wände der Kartons herum, 25 cm vom Boden entfernt. Dann schneide ich um die Wände 5 Zoll von unten. Dies bietet mehrere 5-Zoll-Wände. Außerdem schneide ich um den Boden der Kartons herum und lasse etwa 2,5 cm an den Wänden für Stabilität.

Die verschiedenen Teile können geschnitten und geklebt oder geklebt werden, wo immer es erforderlich ist, um das Labyrinth zu bilden. Zwischen den Seitenwänden sollte in jedem Weg mit Sackgasse ein Abstand von 30 cm (11 oder 12 Zoll) vorhanden sein. Die Länge sollte nicht weniger als 25 cm betragen. Diese Abstände werden benötigt, damit sich der Roboter umdrehen kann.

Einige der Ecken des Labyrinths müssen möglicherweise verstärkt werden. Außerdem müssen einige gerade Wände vom Biegen abgehalten werden, wenn sie eine begradigte Kartonecke enthalten. An diesen Stellen sollten wie abgebildet kleine Stücke dünner Pappe auf den Boden geklebt werden.

Der Ausgang hat eine rote Absperrung, bestehend aus einem halben roten Grußkarten-Umschlag und einer Unterlage aus 2 Stück dünnem Karton, wie abgebildet.

Schritt 13: Das Labyrinth

Das Labyrinth
Das Labyrinth

Eine Vorsichtsmaßnahme ist, dass das Labyrinth nicht groß sein sollte. Wenn die Drehungen des Roboters in einem leichten Winkel von der richtigen sind, summieren sich die Abweichungen nach einigen Drehungen und der Roboter könnte gegen die Wände laufen. Ich musste mehrmals an den Rotationseinstellungen der Kurven herumfummeln, um auch durch das kleine Labyrinth, das ich gemacht habe, eine erfolgreiche Fahrt zu erzielen.

Eine Möglichkeit, dieses Problem zu umgehen, besteht darin, eine Pfadbegradigungsroutine einzubeziehen, die den Roboter in einem bestimmten Abstand von der linken Wand hält. Ich habe dies nicht aufgenommen. Das Programm ist schon kompliziert genug und reicht aus, um das KI-Konzept in diesem Projekt zu demonstrieren.

SCHLUSSBEMERKUNG

Dies war ein lustiges Projekt und eine großartige Lernerfahrung. Ich hoffe, Sie finden es auch interessant.

Empfohlen: