Entwicklung eines Saugroboters
(EN google-translate)
(PL google-translate)
Im Sommersemester 2024 in den ersten drei Lehrveranstaltungen behandelte Themen
- Beispiele für autonome mobile Systeme
- Beispiele für seminaristische Beiträge
- Fahrassistenzsysteme
- Fahererlose Transportsysteme (FTS)
- Moral Machine
- Agentensysteme
- NASREM
- Einführung in Processing
|
- Verweise zu den jeweiligen Themen:
|
1. Beispiele für autonome mobile Systeme
Autonome elektrische Ponykutsche -- 83_AV/personenkutschfahrt.ogg
Realmodell esp32AV -- 05_esp32AV
Lenkregelung für esp32AV -- https://youtu.be/qLYiJC4uyPc
Schwarmvehikel TURTLE -- 83_AV/03_Umsetzung/05_TURTLE
Zwei TURTLE fahren und laden -- https://youtu.be/60fEn0f_MnM
Die autonomen Schildkröten des Grey Walter (1951) -- https://youtu.be/lLULRlmXkKo
Schaltkreis der Schildkröten -- http://davidbuckley.net/DB/HistoryMakers/GreyWalter/Circuits/HowWork.htm
2. Beispiele für seminaristische Beiträge
Bildverarbeitung
Justina_GPS
Justina Kamera
3. Fahrassistenzsysteme
Spurhalteassistent, Beispiel -- https://youtu.be/aGack0NPKPY
Abstandshalteassistent, Beispiel -- https://youtu.be/9SdorVb3adE
4. Fahererlose Transportsysteme (FTS)
SAVANT, Beispiel, insbesondere virtuelle Streckenplanung -- https://youtu.be/UnQZIA3-SZc
5. Moral Machine
https://www.moralmachine.net/hl/de
6. Agentensysteme
83_AV/02_Architekturen
7. NASREM
83_AV/02_Architekturen
8. Einführung in Processing
78_Processing
92_Soundinstallation/03_material/11_Snippets
1 Entwicklung eines Saugroboters LV 09.04.2024
- Es wird ein überschaubares Konzept zu einem Saugroboter umgesetzt.
- Die Begrenzung der Komplexität des Grundkonzepts ermöglicht es dafür eine Vielzahl wichtiger Aspekte des autonomen Fahrens zu behandeln.
- Die Entwicklung soll in folgenden Schritten erfolgen:
|
- Entwurf des Grundsystems
- Animation des Grundsystems
- Einführen von Begrenzungen und Hindernissen
- Modellierung einfacher Sensoren (Bumper)
- Einführen eines neuronalen Netzes zur Steuerung des Fahrzeuges
- Entwicklung einer Optimierungsumgebung
- Aufwändige 3D-Visualisierung mittels VRML
- Validierung der gefundenen Ergebnisse mittels eines real aufgebauten Funktionsmusters
|
- Eine wichtige Fähigkeit ist, die Pixelfarbe an einer bestimmten Stelle zu erkennen.
- Folgender Sketch zeigt auf, wie das umgesetzt werden kann:
|
public void setup()
{
size(640,480);
}
int[] pix = new int[640*480];
int RR=0,GG=0,BB=0;
public void draw()
{
background(0,255,0);
fill(255,0,0);
noStroke();
rect(0,height/2,width,height/2);
fill(0,0,255);
rect(width/2,0,width/2,height);
fill(0);
textSize(20);
text(RR+" "+GG+" "+BB,100,100);
loadPixels();
if(pixels!=null)
{
for(int i=0;i<pix.length;i++)
pix[i] = pixels[i];
}
}
public void mouseClicked()
{
if(pix!=null && pix.length>0)
{
int p = pix[(int)mouseY*640+(int)mouseX];
RR = (((p>>16)%256)& 0xFF);
GG = (((p>>8)%256)& 0xFF);
BB = ((p%256)& 0xFF);
}
}
Code 0-1: Pixeltest -- Es werden die Rot-Grün- und Blau-Anteile des angeklickten Pixels angezeigt.
Übung
- Ein kreisförmiger "Saugroboter" soll mit den Pfeiltasten gesteuert werden.
- Es soll links drehen, rechts drehen, vorwärts fahren und rückwärts fahren umgesetzt werden.
|
Bild 0-1: Entwurf zum Saugroboter (Tafelbild vom 09.04.2024)
Saugroboter001.zip -- Version 001, Roboter visualisieren.
Saugroboter001Vorsatz.zip -- studentische Version zur Darstellung der Roboterrichtung
Saugroboter002.zip -- Roboterrichtung unter Verwendung von Koordinatentransformationen berechnet.
Übung
Saugroboter003.zip
- Bei Saugroboter003 kann mit Pfeiltasten die Richtung geändert werden.
- Ergänzen Sie das Programm so, dass bei Pfeil-hoch das Fahrzeug in die eingestellte Richtung fährt.
|
2 Entwicklung eines Saugroboters LV 17.04.2024 / 24.04.2024
- Planung der Seminarthemen
- Konsolidierung des bisherigen Stands der Simulationsumgebung
- Koordinatentransformationen
- Modellierung von Hindernissen
- Neuronale Netze
- Evolutionäre Algorithmen
|
1. Planung der Seminarthemen
- Eine Sammlung Artikeln befindet sich auf Moodle.
- Jede/r Kursteilnehmer*In sollte sich einen Artikel und einen Ausweich-Artikel bis kommende Woche auswählen.
- Am 24.04. wird abgestimmt, wer welchen Artikel übernimmt und wann die jeweilige Präsentation stattfinden kann.
- Es sollten dann folgende Aufgaben bearbeitet werden:
|
- Übersetzung des Artikels ins Deutsche mit Hilfe von deepL.
- Vorbereitung einer zwanzig minütigen Präsentation mit anschließenden Fragen.
|
In der Präsentation sollten Stellungnahmen dazu enthalten sein:
- ...was für den Kurs an dem Artikel besonders interessant sein könnte,
- eine Einschätzung der Qualität des Artikels bzgl. Relevanz und Tiefe der Ausarbeitung,
- im Idealfall Ableitung eines eigenen Themas für die eigene Hausarbeit.
|
2. Konsolidierung des bisherigen Stands der Simulationsumgebung
Saugroboter004.zip -- Basisversion: Saugroboter lässt sich über die Pfeiltasten steuern.
3. Koordinatentransformationen
54_Kinetik/03_Kinematik
siehe auch: 54_Kinetik/03_Kinematik/01_Koordinatentransformation
54_Kinetik/03_Kinematik/02_Schwerpunktlage
54_Kinetik/03_Kinematik/03_VorRuecktransformation
4. Modellierung von Hindernissen
Grundidee / grundlegende Überlegungen:
- Das Überprüfen von Kollisionen darf nicht Pixel-basiert in draw erfolgen, sonst kann das Simulationstempo nicht in den Optimierungsprozessen genügend gesteigert werden.
- Die rechteckige Ebene der "Welt" (man denke sich den Boden eines rechteckigen Zimmers) wird gleichmäßig in Quadrate eingeteilt
- Über einen Editor können durch Klicks Quadrate zu Hindernissen gemacht werden.
- Eine Liste mit den Nummern der geklickten Quadrate wird bei jedem Klick in einer Datei aktualisiert.
- In einer gewissen Auflösung (360/16==22,5Grad) wird für jeden Randpunkt des Saugroboters geprüft, ob er in einem der als Hindernis markierten Quadrate liegt.
- Als erste Stufe der Umsetzung soll sich die Farbe des Roboters bei Kollisionen ändern.
|
// 1m == 100Pixel
int kantepix = 20; //Jedes Quadrat ist 20cm gross.
ArrayList<int[]> merker = new ArrayList<int[]>();
public void setup()
{
frameRate(40);
size(640,480);
textAlign(CENTER);
}
public void draw()
{
background(255);
stroke(0);
int zaehler=0;
for(int i=0;i<(int)height;i+=kantepix)
{
for(int k=0;k<(int)width;k+=kantepix)
{
noFill();
rect(k,i,kantepix,kantepix);
fill(0);
text(""+zaehler,k+kantepix/2,i+kantepix/2);
zaehler++;
}
}
fill(255,0,0);
noStroke();
for(int i=0;i<merker.size();i++)
{
int nummer = merker.get(i)[0];
int xx = kantepix*(nummer%((int)width/kantepix));
int yy = kantepix*(nummer/((int)width/kantepix));
rect(xx,yy,kantepix,kantepix);
}
}
public void mouseClicked()
{
int nummer = ((int)mouseY/kantepix)*((int)width/kantepix) + (int)mouseX/kantepix;
merker.add(new int[] {nummer});
}
public void keyPressed()
{
if(key==' ')
{
String[] s = new String[merker.size()];
for(int i=0;i<s.length;i++)
{
s[i] = ""+merker.get(i)[0];
}
saveStrings("hindernisse.txt",s);
}
}
Code 0-2: Editor.
5. Neuronale Netze
67_Echtzeitsysteme/08_NeuronaleNetze
6. Evolutionäre Algorithmen
50_Simulationstechnik/07_Genalgorithmus