DAY BY DAY zu AUT -- Entwicklung autonomer mobiler Systeme
(EN google-translate)
(PL google-translate)
Übersicht
|
Die Lehrveranstaltung Entwicklung autonomer mobiler Systeme wird als Wahlpflichtfach im Masterstudiengang Maschinenbau angeboten. In der Lehrveranstaltungen werden einerseits aktuelle und historische Konzepte zu autonom fahrenden Systemen behandelt. Andererseitsd sollen konkrete Entwicklungsaufgaben Bestandteil des Unterrichts sein.
Themen sind unter anderem:
|
Untergeordnete Hilfsthemen sind:
|
Chronologisches Verzeichnis der im Verlauf des Semesters behandelten Themen
#1 Fr 18.03.2022








Beispiele




|
JetBot







ÜBUNG 1 -- angepasst an parallel laufenden Bachelorkurs zu selbstlernenden Systemen
Teil 1: Theorie zu Unüberwachtem Lernen am Beispiel der Kohonen-Netze -- SOM -- Self Organizing Maps
Gemeinsames Lesen und Verstehen des nachfolgend dargestellten Verfahrens:

Im Kurs entstandene Quelltexte:
Kohonen kh; Kohonen kh2; public void setup() { kh = new Kohonen(10,10,3,0.0,255.0); kh.show(); println("Zweites kleines Kohonen-Netz:"); kh2 = new Kohonen(3,3,2,0.0,1.0); kh2.show(); size(500,500); } public void draw() { background(255,0,0); fill(0,255,0); ellipse(100,100,50,50); }
Code 0-1: Hauptprogramm on Processing
import java.util.Random; public class Kohonen { double[][][] v; Random zufall = new Random(System.currentTimeMillis()); public Kohonen(int rasterhoehe, int rasterbreite, int vektordimension, double vmin, double vmax) { v = new double[rasterhoehe][rasterbreite][vektordimension]; for(int i=0;i<v.length;i++) for(int k=0;k<v[i].length;k++) for(int w=0;w<v[i][k].length;w++) v[i][k][w] = zufall.nextDouble()*(vmax-vmin) + vmin; } public void show() { for(int i=0;i<v.length;i++) { for(int k=0;k<v[i].length;k++) { print("zeile="+i+" spalte="+k+" Komponenten = ["); for(int w=0;w<v[i][k].length;w++) print(v[i][k][w]+" "); println("]"); } } } }
Code 0-2: Vom Hauptprogramm benutzte Klasse Kohonen

#2 Fr 25.03.2022
Themen:
|
Fortsetzung Implementierung eines Kohonen-Netzes
Vorübungen zu Processing / Java / OOP
|



Übung 1
public void setup() { size(500,400); //Breite, Höhe eines Fensters frameRate(30); //draw() wird 30mal pro Sek. aufgerufen } int xpos=0; public void draw() { int ROT = 255; int GRUEN = 127; int BLAU = 255; background(ROT,GRUEN,BLAU); fill(0,255,0); stroke(0,0,0); ellipse(xpos, height/2, height/5, height/5); xpos++; xpos%=width; //Modulo Funktion x%y liefert Rest von x/y, ist also [0..y-1] }
Code 0-3: Uebung001

Bild 0-1: Screenshot zu Übung 1.
Übung 2
public void setup() { size(500,400); //Breite, Höhe eines Fensters frameRate(30); //draw() wird 30mal pro Sek. aufgerufen Vektor v1 = new Vektor(1.0,2.0); Vektor v2 = new Vektor(3.0,4.0); println("v1:"); v1.show(); println("v1*5:"); v1.malSkalar(5.0); v1.show(); println("v2:"); v2.show(); println("v1 = v1 + v2"); v1.add(v2); println("v1:"); v1.show(); } public void draw() { }
Code 0-4: Haupttab von Uebung2
public class Vektor { double x,y; public Vektor(double x, double y) { this.x = x; this.y = y; } public void malSkalar(double s) { this.x = this.x * s; y*=s; } /** addiere zu diesem Vektor die Komponenten eines anderen hinzu */ public void add(Vektor v) { x = x + v.x; y = y + v.y; } public void show() { println("x="+x+" y="+y); } }
Code 0-5: Tab Vektor in Sketch Uebung2

Bild 0-2: Screenshot zu Übung 2.


Die objektorientierte Implementierung einer SOM auf der Basis eines Kohonen-Netzes soll fortgesetzt werden. Als Parameter sollen folgende Werte verwendet werden:
Zwischenstand:


Bild 0-3: Die Vektoren == Gewichte im Rasternetz werden als farbige Rechtecke dargestellt.
deltmin = 0.1; deltmax = 0.5*Math.sqrt( (double)(zeilen*zeilen) + (double)(spalten*spalten) ); epsmin = 0.0005; epsmax = 0.05;
Code 0-6: Parameter -- vergl. Darstellung auf Wikipedia.
Nähere Spezifikation:
|
Einführung zu Jetson Nano
Ziel u.a.:
|



Herangehensweise:
|
Sparkfun bietet ein Kit an, das ein AV auf der Basis eines Rasperry-Pi ähnliuchen Boards an, das aber eine NVIDIA Grafikkarte enthält, dessen 128 GPUs für paralleles Rechnen verwendet werden können:

Von diesen Jetson-Bots stehen drei zur Verfügung. Zunächst wird vermittelt, wie die Board programmiert werden können, später werden sie zu Autonomen Vehikeln erweitert:

#3 Fr 01.04.2022
Themen:
|
Teil 1: Fortsetzung SOM (Self Organizing Maps)
Eine Beispiellösung findet sich hier:

..sie soll im Verlauf der Lehrveranstaltung analysiert, nachgebaut und variiert werden.
Teil 2: Erste Schritte mit Jetson Nano
Für den Umgang mit dem Jetson Nano Board existiert nun diese Seite:

Es sollen nun praktisch die hier aufgelisteten Tests durchgeführt werden, die die Steuerung von GPIO und GPU über Processing/Java ermöglichen sollen.
ÜBUNG
Analysieren Sie, wie eine Library zur Ansteuerung einer LED für Processing erstellt wurde:

|
#4 Fr 08.04.2022
Thema: Entwurf, Modellbildung und Simulation eines Testfahrzeugs
Hilfs-Beispiele:




MECHANIK

Bild 0-4: AV

Bild 0-5: Geometrie und Kräfte

Bild 0-6: Geometrie und Kräfte

Bild 0-7: Mögliche Regegelung
UMSETZUNG IN PROCESSING








Bild 0-8: Screenshot zu AV007.
#5 Fr 22.04.2022
Inhalte heute, siehe:

#6 Fr 29.04.2022
Themen heute:
|
Thema 1: Agentensysteme und NASREM


Thema 2: Fahrsteuerung über Wegmarkierungen
Mit den bisher verfügbaren Mitteln kann über mehrere Stufen ein Fahrzeug umgesetzt werden, das selber erlernt, sein Verhalten anhand Fahrbefehle symbolisierender Wegmarkierungen anzupassen.
In einer ersten Annäherung sollen die Möglichkeiten, die sich hier bieten diskutiert werden.

Thema 3: Fortsetzung Linienverfolgung

Übung 1
|
Übung 2
Die aktuelle Umsetzung ist zu langsam für die Generierung von PWM-Signalen.
|
#7 Fr 06.05.2022
Siehe:

#8 Fr 13.05.2022
Pause vom Jetson ;-)
Thema:
Automatische Verbesserung des Fahrverhaltens bei einem simulierten Fahrzeug mittels eines evolutionären Algorithmus'
Gemeinsam soll aufsetzend auf der Fahrzeugsimulation in Processing vom 08.04.2022 eine automatische evolutionäre Parameterverbesserung implementiert werden. Dies war der letzte Stand von damals:


Bild 0-9: Screenshot zu AV007.
Das Ganze soll in folgenden Schritten erfolgen:
|




#9 Fr 20.05.2022 (TAG DER OFFENEN TÜR)
Themen:
|
Musterlösung: Evolutionärer Algorithmus zur Optimierung des AV


Bild 0-10: UML-Diagramm der Abhängigkeiten der Klassen unteinander.

Bild 0-11: UML-Klassendiagramme zu AV013.
Kohonen-Netz zur Kategorisierung von Untergründen

Neuster Stand:

ÜBUNG
|
Arbeitsschritte:
|
Modifizierte Übung: Vervollständigen Sie den evolutionären Algorithmus mit Hilfe der Klasse Evoopt:


#10 Fr 03.06.2022
Themen
|
1. Musterlösung/Beispiel Reinforced Learning für simuliertes AV
Idee hinter dieser Implementierung: Ein Fahrzeug soll Merkmale auf einem Weg erkennen und daraufhin die richtige Richtung einschlagen.
Die richtige Richtung wird hier durch ein Referenzfahrzeug vorgegeben und zu jedem Zeitschritt kann der Abstand des Testfahrzeugs vom Referenzfahrzeug berechnet werden.
Der Sensor-Input für das neuronale Netz ist hier das 2x2-Muster (Parkett). Je Fliese gibt es einen Neuroneneingang.
Ausgang sind auch vier Neuronen, die die vier möglichen Bewegungsrichtungen repräsentieren:

Bild 0-12: Programmstruktur: Wie aus einer Kachelung eine Bewegungsrichtung resultiert.



Bild 0-13: Schwarzer Rahmen: Referenz-Fahrzeug, türkiser Rahmen: Testfahrzeug.
Aufgabe:
|
2. Lernender Jetbot
Als Ausgangspunkt wird ein Sketch vorgegeben, der das Fahrzeug eine rote Linie verfolgen läßt und das immer für eine Weile anhält, wenn es bei einer blauen Markierung ankommt:


Bild 0-14: Kreisfahrt mit Haltepunkt.

Files in JETSON.zip: sketchbook/TestneuJetsonMotor_Kamera_NEU006 sketchbook/libraries/jetson opt/jetsonmotor.so Der Sketch "TestneuJetsonMotor_Kamera_NEU006" kommt in das home-Verzeichnis in das sketchbook: ~/sketchbook/TestneuJetsonMotor_Kamera_NEU006 Die Library "jetson" (ganzer Ordner) kommt nach: ~/sketchbook/libraries/jetson Die dynamische Bibliothek (File) kommt nach: /opt/jetsonmotor.so
Code 0-7: Files in JETSON.zip
AUFGABEN
Ausgehend von Sketch TestneuJetsonMotor_Kamera_NEU006 sollen nach und nach verschiedene Aufgaben erfüllt werden.
Aufgabe 1 -- Ausgangssketch testen
Bringen Sie TestneuJetsonMotor_Kamera_NEU006 auf Ihrem Fahrzeug zum Laufen.
Aufgabe 2 -- Rundendauer abspeichern und anzeigen
Nützliche Methoden in Processing:
long T = System.currentTimeMillis(); //Systemzeit seit 1977 in Millisekunden String[] arr = {"1.0","3.0"}; //String-Array anlegen arr[0] = ""+3.567; //Double-Wert in String umwandeln und ablegen. saveStrings("name.txt",arr); //String-Array speichern. String[] arr = loadStrings("name.txt"); // Textfile mit Zeilen laden. double x = Double.parseDouble("3.56"); // String in Zahl umwandeln.
Code 0-8: Nützliche Methoden in Processing.
Speichern Sie den Sketch unter Gruppe_GRUPPENNAME_Aufgabe2. Bitte GRUPPENNAME untereinander abstimmen.
In der Wartephase soll die Dauer der letzten Runde in Millisekunden angezeigt werden-
Außerdem soll nach jeder Runde eine Textdatei abgespeichert werden, die im Namen die Rundendauer trägt und die wichtigsten Parameter als Wert enthält.
Aufgabe 3 -- Grandientenverfahren implementieren und testen
Speichern Sie den Sketch unter Gruppe_GRUPPENNAME_Aufgabe3.
Nun soll ein modifiziertes Gradientenverfahren nach und nach die Parameter verbessern.
Implementieren und Testen Sie ein solches Verfahren.
|
Nach jeder Runde soll nun in der gespeicherten Datei eine Liste aller Parametervarianten und dem jeweiligen Fehler stehen. Am Ende soll immer gesondert der bislang beste Parametersatz und der zugehörige Fehler stehen.
Aufgabe 4 -- NN offline trainieren und dann am realen System testen
|
3. Staubsaugroboter
|
#11 Fr 10.06.2022
Neuer Ausgangspunkt:
Das nachfolgende .zip-File enthält ein verbessertes Projekt für den Jetson Bot.
|

AUFGABEN in den Gruppen
Aufgabe 1 -- Neuen Parcours erstelle und neues Script testen.
|
Aufgabe 2 -- Gradientenverfahren implementieren und zeigen, dass es funktioniert
|
Machen Sie ein Video, in dem die Parameterverbesserung erkennbar ist.
Erzeugen Sie von dem funktionierenden Projekt ein .zip-File und laden es bei Moodle im Kurs bei SketchAufgabe2 hoch.
Aufgabe 3 -- Vorhandensein der roten Linie als Kriterium hinzufügen
|
Quiz (mündliche Prüfung) -- können Sie selber untereinander besprechen und nachfragen, wenn die richtige Antwort nicht klar ist.
|
Aufgabe 4
Schreiben Sie einen Java-Sketch mit einer Methode, die bei einem mit 1 und 0 gefüllten 32x32-Array ein Maß für die Spielgelsymmetrie bzgl. der Hochachse berechnet.
Ergänzen Sie einen Optimierer, der durch zufällige Vertauschungen zweier Matrixelemente und unter Verwendung der Symmetriefunktion nach und nach das Array möglichst symmetrisch werden läßt.
Während es Optimierungsprozesses soll die Matrix visualisiert werden.
Aufgabe 5 -- Theoretischer Entwurf eines erweiterten autonomen Vehikels
Ein Jetson-Nano-Bot soll als FTS (Fahrerloses Trasportsystem) eingesetzt werden. Dazu fährt es entlang einer geschlossenen Führungslinie.
Kleine Dinge sollen von einer von drei Stationen an jede andere mit dem Bot geschickt werden können.
Es soll drei Stationen geben, an denen der Bot alleine hält, wenn er unkonfiguriert ist, sobald er eine der Stationen erreicht.
Hat der Bot gehalten, so kann er an der aktuellen Station konfiguriert werden. Die Konfiguration legt fest, an welcher Station der Bot als nächstes halten soll. Das bedeutet: Hält der Bot an Station 1, so kann dort bestimmt werden, ob er als nächstes bei Station 1, 2 oder wieder bei 3 halten soll.
Auf diese Weise können kleine Dinge von jeder Station an jede andere mit dem Bot geschickt werden.
Entwickeln Sie ein möglichst konkretes Konzept zur Realisierung dieser Aufgabe und präsentieren es am Ende der Lehrveranstaltung.
#12 Fr 17.06.2022
Wichtig: Heute ist die LV von 8:30Uhr bis 11:45Uhr, kommende Woche ab 8:30Uhr Prüfung.
Themen
|




Snippets zur Lösung diverser Aufgaben beim Programmieren
Im Unterricht soll evaluiert werden, welche Teilaspekte besonders schwer zu programmieren waren und passende Codeschnipsel im Kurs entwickelt und hier zur Verfügung gestellt werden.
Fragen dazu:
|
Neue kleine Programmieraufgabe
Schreiben Sie ein Programm, das mit Hilfe des Kamerabildes die Bewegungsrichtung erkennt, in die diese bewegt wird.
Visualisieren Sie die Ergebnisse in geeigneter Weise.
Es dürfen behelfsmäßig Markierungen am Boden/auf dem Tisch verwendet werden.
|
Versuchen Sie diese Aufgabe als Prüfungsvorbereitung zu Hause umzusetzen.
