DAY BY DAY zu SLE -- Software-Entwicklung für selbst lernende eingebettete Systeme
(EN google-translate)
(PL google-translate)
Übersicht
|
Die Lehrveranstaltung Software-Entwicklung für selbst lernende eingebettete Systeme wird als Wahlpflichtfach im Bachelorstudiengang Ingenieurwissenschaften mit der Vertiefungsrichtung Mechatronik angeboten. Themenschwerpunkt liegt in der Implementierung eher licht gewichtiger Konzepte aus dem Bereich der künstlichen Intelligenz, was im Allgemeinen als Softcomputing bezeichnet wird. Neben einer Umsetzung mittels Java/Processing kommt auch eine Hardware zum Einsatz, die es erlaubt Prozesse zu parallelisieren: ein Jetson Nano von NVIDIA.
Die Thematiken aus dem letzten Semester finden hier eine Fortsetzung. So wird u.a. die Implementierung Neuronaler Netze und entsprechender Lernverfahren fortgesetzt. Erinnern Sie sich insbesondere an die drei Grundkonzepte selbst lernender Systeme:
|
Insbesondere zur dritten Methode, dem unüberwachten Lernen, wurde bisher noch kein Beispiel gegeben, was hier in der LV als erstes nachgeholt werden soll.
In diesem Kurs sollen die erlernten Methoden nun auch in simulierten und realen eingebetteten Systemen zum Einsatz kommen.
Hauptthemen sind unter anderem:
|
Untergeordnete Hilfsthemen, die teilweise aus dem letzten Semester fortgeführt werden:
|
Chronologisches Verzeichnis der im Verlauf des Semesters behandelten Themen
#1 Fr 18.03.2022
Teil 1: Theorie zu Unüberwachtem Lernen am Beispiel der Kohonen-Netze -- SOM -- Self Organizing Maps
Gemeinsames Lesen und Verstehen des nachfolgend dargestellten Verfahrens:
Teil 2: Praktische Implementierung und Test eines Kohonen-Netzes
Praktische Implementierung des Verfahrens an einem übersichtlichen Beispiel:
|
Teil 3: Programmierung: Anlegen eigener Libraries mit Java
93_Android_Proc/02_Eigene_LibraryTeil 4: Programmierung: JNI -- Java Native Interfaces zur Verwendung dynamischer Bibliotheken / Hardware-naher Fremdprogramme
30_Informatik3/14_Zwischenprojekt/04_JNIumsetzenJetBot
https://jfrog.com/connect/post/installing-cuda-on-nvidia-jetson-nano/https://maker.pro/nvidia-jetson/tutorial/introduction-to-cuda-programming-with-jetson-nano --CUDA
https://www.sparkfun.com/products/18486
https://www.youtube.com/watch?v=mrIjtBdDQ5A
https://www.youtube.com/watch?v=zOCSRzDUI-Y
https://www.youtube.com/watch?v=MY_Fe7EN6ro
https://www.youtube.com/watch?v=9Wv9A6C6U5w
#2 Fr 25.03.2022
Themen:
|
Implementierung eines Kohonen-Netzes
Theorie zu Unüberwachtem Lernen am Beispiel der Kohonen-Netze -- SOM -- Self Organizing Maps
Gemeinsames Lesen und Verstehen des nachfolgend dargestellten Verfahrens:
Die objektorientierte Implementierung einer SOM auf der Basis eines Kohonen-Netzes soll fortgesetzt werden. Als Parameter sollen folgende Werte verwendet werden:
deltmin = 0.1; deltmax = 0.5*Math.sqrt( (double)(zeilen*zeilen) + (double)(spalten*spalten) ); epsmin = 0.0005; epsmax = 0.05;
Code 0-1: Parameter -- vergl. Darstellung auf Wikipedia.
Nähere Spezifikation:
|
Einführung zu Jetson Nano
Ziel u.a.:
|
Learning Cars -- https://www.youtube.com/watch?v=Aut32pR5PQA
Was ist ein neuronales Netz? -- https://www.youtube.com/watch?v=aircAruvnKk
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 die praktischen Tests fortgesetzt 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: Bau der JetBots
https://www.sparkfun.com/products/18486https://learn.sparkfun.com/tutorials/assembly-guide-for-sparkfun-jetbot-ai-kit-v20/all
#5 Fr 22.04.2022
Inhalte heute, siehe:
#6 Fr 29.04.2022
Themen heute:
|
Thema 1: Agentensysteme
83_AV/02_ArchitekturenThema 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
84_Jetson/07_Linienverfolgung -- siehe Umsetzung weiter unten.Ü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-1: 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
AV013_EVOopt_Musterloesung_BessereFehlerfunktion.zipBild 0-2: UML-Diagramm der Abhängigkeiten der Klassen unteinander.
Bild 0-3: UML-Klassendiagramme zu AV013.
Kohonen-Netz zur Kategorisierung von Untergründen
https://de.wikipedia.org/wiki/Selbstorganisierende_KarteNeuster Stand:
ÜBUNG
|
Arbeitsschritte:
|
ÜBUNG NEU
ReinforcedLearning002.zipReinforcedAV002.zip -- Teillösung
#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-4: Programmstruktur: Wie aus einer Kachelung eine Bewegungsrichtung resultiert.
ReinforcedAV003.zip -- Vollständige Lösung
Bild 0-5: 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-6: 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-2: 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
Speichern Sie den Sketch unter Gruppe_GRUPPENNAME_Aufgabe2. Bitte GRUPPENNAME untereinander abstimmen.
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-3: Nützliche Methoden in Processing.
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 ab 12:30Uhr, kommende Woche ab 8:30Uhr Prüfung.
Themen
|
Musterlösung.
Musterlösung2.
Musterlösung3.
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.
50_Simulationstechnik/01_Systemtheorie/07_scilab -- Beispiel mit plot und Scilab.