9.4.6 xNN - Ausweichen lernen


In diesem Projekt soll der Roboter lernen durch ein Hindernis-Parcours zu fahren, ohne an die Hindernisse anzustossen.


Programmierung ohne neuronales Netz

Damit der Roboter die Entfernung zu einem Hindernis messen und feststellen kann, ob er gegen ein Hindernis gefahren ist, bekommt er folgende Sensoren:

  • zwei Ultraschallsensoren, die nach links und nach rechts jeweils die Entfernung zu einem Hindernis messen können.

  • einen Berührungssensor, welcher feststellen kann, ob der Roboter gegen ein Hindernis oder gegen die Wand gefahren ist.

Das kann in der Roboterkonfiguration eingestellt werden:

  • Öffne folgenden Link: Open Roberta Lab

  • Klicke auf "ROBOTERKONFIGURATION XNNbasis" und verändere die Konfiguration des Roboters wie folgt:

  • Klicke auf den Tab "PROGRAMM NEPOprog" und dann ganz rechts auf die Schaltfläche "SIM", damit sich das Simulator-Fenster öffnet.

  • Klicke im Simulationsfenster oben links solange auf das Bild-Symbol, bis der Simulationshintergrund weiß ist. Das blaue Hindernis kannst du löschen.

  • Klicke auf folgenden Link um die Simulationseinstellung herunterzuladen: ausweichenlernen.json

  • Klicke im Simulationsfenster in der Symbolleiste auf "Simulationseinstellungen hochladen", wechsle in den "Downloads-Ordner", wähle die heruntergeladene Datei "ausweichenlernen.json" und bestätige die Wahl.

Wenn der linke Ultraschallsensor einen kleineren Abstand zum nächsten Hindernis misst als der rechte Sensor, dann soll der Roboter eine Rechtskurve fahren, um dem linken Hindernis auszuweichen:

Wenn der rechte Ultraschallsensor einen kleineren Abstand zum nächsten Hindernis misst als der linke Sensor, dann soll der Roboter eine Linkskurve fahren, um dem rechten Hindernis auszuweichen:

  • Baue folgendes Programm und beobachte den Roboter beim Kurvenfahren:

Erklärungen zum Programm:


Programmierung mit neuronalem Netz

Der Roboter soll zwei Situationen unterscheiden:

  • Links ist ein näheres Hindernis also drehe ich nach rechts weg.
  • Rechts ist ein näheres Hindernis, also drehe ich nach links weg.

Dazu bauen wir ein neuronales Netz mit zwei Eingabe-Neuronen:

  • Wenn links ein Hindernis ist, wird EN1 = 0 und EN2 = 50 gesetzt.
  • Wenn rechts ein Hindernis ist, wird EN1 = 50 und EN2 = 0 gesetzt.

    Damit der Roboter eine Kurve fährt werden die Gewichte unterschiedlich gesetzt. Damit haben wir folgendes neuronales Netz:

Das Programm wird wie folgt umgebaut:

  • Zeichne selbst einen Hindernis-Parcours mit Hilfe von Kreisen als Hindernissen.
  • Analysiere das Programm mit dem selbstlernenden neuronalen Netz und erstelle eine Dokumentation mit Hilfe von Excalidraw.

  • Erkläre insbesondere, wie das neuronale Netz lernt den Hindernissen auszuweichen.