kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Entwicklung autonomer mobiler Systeme im Sommersemester 2025

(EN google-translate)

(PL google-translate)

  • Hier bei "day by day" werden chronologisch im Verlauf des Semesters die behandelten Inhalte vermerkt.
  • Meistens werden Links innerhalb von kramann.info angegeben, wo der jeweils behandelte Stoff dargestellt wird.
  • Zur Orientierung finden Sie auf kramann.info auch noch das "day by day" der gleichen Lehrveranstaltung vom vorangehenden Jahr.
  • Die Prüfung in diesem Fach ist eine Projektarbeit mit Ausarbeitung, die nur anerkannt werden kann, wenn sie Semester begleitend betreut wurde.
  • Die folgenden vorab angegebenen Links stellen Quellen dar, aus denen die hier behandelten Inhalte genommen werden.
  • Jedoch sollen die Inhalte in diesem Semester neu ausgerichtet werden und gehen über das hinaus, was unter nachfolgenden Links zu finden ist:

83_AV
05_esp32AV
67_Echtzeitsysteme
72_COACH2
73_COACH3
74_EmbSyst
50_Simulationstechnik
62_Regelungssysteme
79_Deep_Learning
78_Processing
77_Android

#1 Di 25.03.2025

  • Autonomes Fahren ist ein weites Feld.
  • Insbesondere existieren seit den 50er Jahren gut funktionierende Fahrerlose Transportsysteme (FTS), wohingegen autonomes Fahren auf der Straße seit den 80er Jahren entwickelt wird, aber bisher nur Teilerfolge erzielt wurden.
  • Dieser Kurs soll Einblick in aktuelle Entwicklungen auf dem Feld geben aber es soll auch autonomes Fahren exemplarisch modellhaft umgesetzt werden.
  • Als Grundlage soll die aus "Fehlertoleranter Software Entwurf" bekannte Plattform esp32AV dienen.
  • Parallel soll eine rudimentäre Simulationsumgebung umgesetzt werden, um auch KI basierte, bzw. auf Softcomputing basierende automatische Lernvorgänge umsetzen zu können.
  • Die Softwareentwicklung erfolgt mittels Java/Processing.
  • Als Hilfsmittel soll erstmalig ChatGPT zum Einsatz kommen.

Ein Beispiel mit ChatGPT (21.03.2023 https://chat.openai.com/chat):

FRAGE:

Schreibe eine Klasse "Matrix" in Java/Processing, die die folgende Schnittstelle iMatrix
implementiert und mit show() die gespeicherte zweidimensionale Integer-Matrix im Grafik-Fenster anzeigt.
Dieses zweidimensionale Integer-Array wird bei Erzeugen eines Objektes dem Konstruktor übergeben 
und eine Referenz der Matrix soll im Objekt als private Attribut gespeichert werden.
Die Darstellung soll die Zahlen in den Zeilen und Spalten der Matrix in einem rechteckigen Schema darstellen. 
Die Matrix soll zudem so angezeigt werden, dass Einer, Zehner usw. untereinander in Flucht dargestellt werden.

Hier ist die Schnittstelle:

public interface iMatrix
{     
    public abstract void show();
}

ANTWORT:

Hier ist eine mögliche Implementierung der Klasse "Matrix" in Java/Processing, 
die die Schnittstelle iMatrix implementiert und eine zweidimensionale 
Integer-Matrix im Grafik-Fenster anzeigt:

public class Matrix implements iMatrix {
  
  private int[][] matrix;
  private PApplet parent;
  
  public Matrix(PApplet parent, int[][] matrix) {
    this.parent = parent;
    this.matrix = matrix;
  }
  
  public void show() {
    int numRows = matrix.length;
    int numCols = matrix[0].length;
    
    int cellSize = 40;
    int startX = 50;
    int startY = 50;
    
    parent.textSize(20);
    parent.noStroke();
    
    for (int i = 0; i < numRows; i++) {
      for (int j = 0; j < numCols; j++) {
        int value = matrix[i][j];
        int x = startX + j * cellSize;
        int y = startY + i * cellSize;
        
        parent.fill(255);
        parent.rect(x, y, cellSize, cellSize);
        
        parent.fill(0);
        parent.text(value, x + cellSize/2, y + cellSize/2);
      }
    }
  }
}

Die Klasse nimmt im Konstruktor eine Referenz auf das Processing-Objekt 
parent sowie ein zweidimensionales Integer-Array matrix als Argumente. 
Die Matrix wird als private Attribut matrix gespeichert.

Die Methode show() zeichnet die Matrix im Grafik-Fenster. Die Größe der 
Zellen wird auf cellSize festgelegt, der Abstand zum linken und oberen 
Rand auf startX und startY. Die Methode iteriert über die Zeilen und 
Spalten der Matrix und zeichnet für jede Zelle ein weißes Rechteck mit 
schwarzer Zahl in der Mitte.

Die Zahlen werden mit der Processing-Methode text() in der Mitte der 
Zelle platziert und mit der Methode textSize() auf 20 Pixel gesetzt. 
Die Methode noStroke() sorgt dafür, dass keine Umrandung der Zellen gezeichnet wird.

Um die Klasse zu nutzen, kann ein Objekt von Matrix mit einer Matrix-Referenz 
erstellt und die show-Methode aufgerufen werden:

int[][] matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
Matrix matrixObj = new Matrix(this, matrix);
matrixObj.show();

Code 0-1: Frage an ChatGPT und dessen Antwort.

Ohne Anspruch auf Vollständigkeit zergliedert sich die Lehrveranstaltung in folgende Einzelthemen:

  1. FTS kennenlernen
  2. Aktuellen Stand beim autonomen Fahren auf der Straße kennenlernen
  3. Ethische Implikationen kennenlernen (Moral machine vom MIT)
  4. Softcomputing-Techniken: Evolutionäre Algorithmen, Neuronale Netze, Fuzzy-Logik
  5. Modellierung und Simulation eines Fahrzeugschwarms
  6. Aufbau eines Fahrzeugschwarms in Hardware
  7. Umsetzung kleiner Aufgaben im Zusammenhang des autonomen Fahrens

Ergänzend sollen auch aktuelle Forschungsergebnisse angeschaut werden. Dies erfolgt seminaristisch.

FTS
Savant Automation Overview
Autonomes Fahren Level 1 bis 5
Autonomes Fahren: Die fünf Level
Warum ist autonomes Fahren noch nicht so weit?
Why self-driving cars have stalled | It's Complicated
Miteinander zu kombinierende Teilsysteme
Volkswagen Spurhalteassistent "Lane Assist"
Automatischer Abstandshalte-Tempomat
Mercedes-Benz S-Klasse 2017: Aktiver Abstands-Assistent DISTRONIC - Geschwindigkeitsanpassung
Autonomes Fahren und Sicherheit

Schaut man sich das zweite Video an, so wird einem sofort klar, dass es hier auch um Sicherheit gehen soll. So hat Schweden sich das Ziel gesetzt, keine Verkehrstoten mehr zu haben und die Firma Volvo, dass es keine Unfälle mehr mit Autos dieser Marke geben soll.

esp32AV -- Linienverfolgung mit PID-Regler
Personenkutschfahrt
Autonomes Fahren und Ethik
Moral Machine

Gehen Sie in Zweiergruppen die Szenarien durch.



Diskutieren Sie anschließend im Plenum Ihre Erfahrungen.


Feedback

Was sind Ihre Erwartungen an diesen Kurs?


SUMOBOTS https://www.youtube.com/watch?v=lUpUQf16qzQ

Agentensysteme und Schwarmintelligenz

83_AV/02_Architekturen

Schwarmintelligenz programmieren

  • Ein einfaches System "intelligenter Partikel" soll programmiert werden:
  • Rote Partikel in einem einfachen "Schachbrettraster" haben die Aufgabe grüne Partikel zu ernten.
  • Dies gelingt genau dann, wenn sich um einen grünen Partikel genau 4 rote an den Kanten gruppieren.
  • Die roten Partikel bewegen sich von Zeitschritt zu Zeitschritt immer ein Feld in eine zufällige Richtung weiter.
  • Um die Aufgabe lösen zu können, wird folgende Zusatzregel eingefügt: Solche roten Partikel bewegen sich nicht mehr, wenn sie einen grünen als Nachbarn haben.
  • Da in dem Moment, wenn vier rote um einen grünen Partikel platziert sind, der grüne entfernt wird (Ernte), erlangen diese grünen Partikel danach wieder Bewegungsfreiheit.
  • Nachfolgend findet sich eine vollständige Implementierung dieses Algorithmus und auch einer Visualisierung mit Hilfe von Processing (siehe processing.org):
import java.util.Random;
//Random zufall = new Random(System.currentTimeMillis());
Random z = new Random(0);

int[][] m = new int[60][60];

public boolean istGeerntet(int i, int k, int[][] m)
{
     if(m[i-1][k]==1 && m[i+1][k]==1
     && m[i][k+1]==1 && m[i][k-1]==1)  
         return true;
     else
         return false;
}

public boolean mussStehen(int i, int k, int[][] m)
{
     if(i>0 && m[i-1][k]==2) return true;
     if(i<m.length-1 && m[i+1][k]==2) return true;
     if(k>0 && m[i][k-1]==2) return true;
     if(k<m.length-1 && m[i][k+1]==2) return true;
     return false;
}

public void schritt(int[][] m)
{
    for(int ii=0;ii<m.length*m.length;ii++)
    {
                  int i = z.nextInt(m.length);
                  int k = z.nextInt(m.length);
                  if(m[i][k]==2)
                  {
                       if(istGeerntet(i,k,m))
                          m[i][k]=0;
                  }
                  else if(m[i][k]==1)
                  {
                       if(!mussStehen(i, k, m))
                       {
                           if(z.nextBoolean())
                           {
                                if(z.nextBoolean())
                                {
                                    if(i+1<m.length-1 && m[i+1][k]==0)
                                    {
                                        m[i][k]=0;
                                        m[i+1][k]=1;
                                    }
                                }
                                else
                                {
                                    if(i-1>=0 && m[i-1][k]==0)
                                    {
                                        m[i][k]=0;
                                        m[i-1][k]=1;
                                    }
                                }
                           }
                           else
                           {
                                if(z.nextBoolean())
                                {
                                    if(k+1<m.length-1 && m[i][k+1]==0)
                                    {
                                        m[i][k]=0;
                                        m[i][k+1]=1;
                                    }
                                }
                                else
                                {
                                    if(k-1>=0 && m[i][k-1]==0)
                                    {
                                        m[i][k]=0;
                                        m[i][k-1]=1;
                                    }
                                }
                           }
                       }
                  }
    }
}

public void setup()
{
    for(int i=0;i<300;i++)
       m[z.nextInt(m.length)][z.nextInt(m.length)]=1;
    for(int i=0;i<100;i++)
       m[z.nextInt((m.length)/3)*3+1][z.nextInt((m.length)/3)*3+1]=2;
       
    size(600,600);
    frameRate(30);
}

public void draw()
{
    schritt(m);
    
    
    for(int i=0;i<m.length;i++)
    {
          for(int k=0;k<m[i].length;k++)
          {
                float x = (float)k*width/(float)m.length;
                float y = (float)i*width/(float)m.length;
                
                if(m[i][k]==0)
                   fill(0);
                else if(m[i][k]==1)
                   fill(255,0,0);
                else
                   fill(0,255,0);
                   
                rect(x,y,width/(float)m.length,width/(float)m.length);   
                
          }
    }
    
}

Code 0-2: "Fresser" -- einfaches Beispiel für Schwarmverhalten als Stand-Alone-Simulation mit Processing.

Szene aus

Bild 0-1: Szene aus "Fresser".

Stare -- https://www.youtube.com/watch?v=S4dRLomlTn4
Schwarm Schritt für Schritt
  • Im Unterricht wurde eine Implementierung des Problems Schritt für Schritt live entwickelt.
  • Die Entwicklungsstufen bilden sich in den nachfolgenden Processing-Sketches ab:
SCHWARM001.zip
SCHWARM002.zip
SCHWARM003.zip
SCHWARM004.zip

#2 Di 01.04.2025

Die weitere Unterrichtsgestaltung erfolgt zweigleisig:

  • Zum einen sollen wöchentlich seminaristisch Einzelthemen aus dem Bereich Autonomes Fahren durch die Studierenden präsentiert werden.
  • Zum anderen wird das Thema Schwarmverhalten in praktischer Weise durch Aufbau, Programmierung und Simulation eines Schwarms autonomer mobiler Systeme vertieft werden.

Entsprechend setzt sich die Prüfungsleistung aus der Präsentation eines Themas zusammen und der praktischen Umsetzung eines Einzelthemas mit den Schwarmvehikeln.

  • Jede Person sollte ein Thema präsentieren.
  • Planung und Umsetzung des praktischen Themas erfolgt dagegen in Zweiergruppen.

Themen heute:

  1. Vorstellung möglicher seminaristischer Themen mit der Möglichkeit in die Literatur Einsicht zu nehmen.
  2. Vorstellung des Grundkonzepts der Schwarmvehikel.
  3. Aufbau des Fahrgestells für zwölf Schwarmvehikel.

1. Vorstellung möglicher seminaristischer Themen mit der Möglichkeit in die Literatur Einsicht zu nehmen

Es können Themen sowohl aus dem Komplex Autonomes Fahren, als auch Schwarmverhalten gewählt werden.

Themenkomplex Autonomes Fahren
Nr. Thema Literaturbeispiel
1 Modellbildung zur Validierung von Fahrassistenzsystemen Prinz, A., Sensormodellierung für die virtuelle Absicherung von Fahrassistenzsystemen, Shaker, Düren 2022.
2 Fahrstrategien beim automatisierten Fahren Flormann, M. E. M., Kooperative Fahrstrategien für automatisierte Fahrzeuge im Mischverkehr, Shaker, Düren 2022.
3 Internet und Fahrdienste Rosenblat, A. UBERLAND How Algorithms are rewriting the rules of work, University of California Press, Oakland 2018.
4 Automatisiertes Unterbinden von gefährdendem Fahrverhalten Intelligent Prosecution of Dangerous Driving, pp. 111-146. In: Zhang, X., Khan, M.M., Principles of Intelligent Automobiles, Springer, Shanghai 2019.
5 GPS basierte automatisierte Routenplanung Intelligent Vahicle Navigation and Traffic System, pp. 175-210. In: Zhang, X., Khan, M.M., Principles of Intelligent Automobiles, Springer, Shanghai 2019.
6 Agenten basierte Verkehrsmanagement Systeme Agent-based Traffic Management Systems, pp. 107-150. In: Görmer-Redding, J., Autonomous Vehicle Groups in Urban Traffic, Cuvillier, Göttingen 2018.
7 Bahnplanung beim automatisierten Einparken Sedighihafshejani, S., Dynamic Motion Planning for Autonomous Vehicles in Valet Parking Applications, Dissertation Universität Siegen 2021.
8 Modellierung und Optimierung von Konvoifahrt https://www.researchgate.net/publication/358185747_Autonomous_Convoying_A_Survey_on_Current_Research_and_Development
9 Sensor-Fusion https://www.researchgate.net/publication/349498440_Sensor_and_Sensor_Fusion_Technology_in_Autonomous_Vehicles_A_Review
10 Agenten basierte Simulation von autonomem Fahren https://www.researchgate.net/publication/340905479_Agent-Based_Simulation_of_Autonomous_Vehicles_A_Systematic_Literature_Review
11 Juristische Implikationen bei fahrerlosen mobilen Systemen https://www.researchgate.net/publication/386345054_Self-Driving_Cars_Legal_Challenges_and_Criminal_Law_Implications

Tabelle 0-1: Themenkomplex Autonomes Fahren

Themenkomplex Schwarmverhalten
Nr. Thema Literaturbeispiel
1 Biologische Grundlagen der Schwarmintelligenz Beekman, M. et.al., Biological Foundation of Swarm Intelligence, pp. 3-42. In: Blum, C., Merkle, D., Swarm Intelligence, Springer, Heidelberg 2008.
2 Evolution, Selbstorganisation und Schwarm-Robotik Trianni, V. et.al., Evolution, Self-organization and Swarm Robotics, pp. 163-192. In: Blum, C., Merkle, D., Swarm Intelligence, Springer, Heidelberg 2008.
3 Wie können Roboterschwärme aufgebaut werden? Schmickl, T., How to Engineer Robotic Organisms and Swarms? - Bio-Inspiration, Bio-Mimicry, and Artificial Evolution in Embodied Self-Organized Systems, pp. 25-51. In: Bio-Inspired Self Organizing Robotic Systems, Springer, Heidelberg 2011.
4 Was können wir über das kollektive Verhalten von Tieren durch Aufbau von Roboterschwärmen lernen? From Ants to Robots and back: How Robotics Can Contribute to the Study of Collective Animal Behavior, pp. 105-120. In: Bio-Inspired Self Organizing Robotic Systems, Springer, Heidelberg 2011.
5 Schwarmroboter mit einem Freiheitsgrad Kriesel D.M.M. et. al., Beanbag Robotics: Robotics Swarms with 1-DoF Units, pp.267-274. In: Ant Colony optimization and Swarm Intelligence 6th International Conference, ANTS 2008, Springer, Heidelberg 2008.
6 Formation eines Schwarms Pinciroli, C. et. al., Lattice Formation in Space for a Swarm of Pico Satellites, pp.347-354. In: Ant Colony optimization and Swarm Intelligence 6th International Conference, ANTS 2008, Springer, Heidelberg 2008.
7 Fahrbahnplanung mittels Ameisen-Methode https://www.researchgate.net/publication/224177889_An_Ant_System_algorithm_for_automated_trajectory_planning
8 Kooperative Navigation in Roboterschwärmen https://www.researchgate.net/publication/260247563_Cooperative_navigation_in_robotic_swarms
9 Selbstorganisierte Bildung von Formen bei Schwärmen https://www.researchgate.net/publication/374489701_A_self-organized_shape_formation_in_swarm_robots
10 Grundlagen der Schwarmintelligenz-Forschung https://www.researchgate.net/publication/264457775_Swarm_Intelligence_Concepts_Models_and_Applications
11 Schwarmintelligenz als Optimierungsmethode https://www.researchgate.net/publication/227068137_Swarm_Intelligence_in_Optimization

Tabelle 0-2: Themenkomplex Schwarmverhalten

2. Vorstellung des Grundkonzepts der Schwarmvehikel

Konzept und Plan des Schwarmvehikels, siehe: 05_esp32AV/30_esp32swarm

3. Aufbau des Fahrgestells für zwölf Schwarmvehikel

#3 Di 08.04.2025

Themen

  1. Wahl der Themen und Termine für die Einzelpräsentationen (erster Prüfungsteil)
  2. Einführung in die Objektorientierte Programmierung mit Java/Processing
  3. Umgang mit der Software des Schwarmvehikels für die Testfahrt
  4. Bau und Test des Schwarmvehikels (Fortsetzung)

1. Wahl der Themen und Termine für die Einzelpräsentationen (erster Prüfungsteil)

2. Einführung in die Objektorientierte Programmierung mit Java/Processing

  • Saalübung.

3. Umgang mit der Software des Schwarmvehikels für die Testfahrt

Siehe Software hier: 05_esp32AV/30_esp32swarm/06_Testfahrt

4. Bau und Test des Schwarmvehikels (Fortsetzung)

05_esp32AV/30_esp32swarm

#4 Di 15.04.2025

Themen

  1. Weiteres Vorgehen mit Schwarmvehikeln
  2. VORTRAG 1: Grundlagen der Schwarmintelligenzforschung
  3. VORTRAG 2: Schwarmintelligenz in der Optimierung
  4. Fortsetzung des Aufbaus der Schwarmvehikel

1. Weiteres Vorgehen mit Schwarmvehikeln


BITTE UNTERSTÜTZEN SIE SICH GEGENSEITIG!


  • DIE AKTUELLE SOFTWARE FÜR ESP UND ARDUINO FINDEN SIE HIER:
AKTUELLE SOFTWARE FÜR ESP UND ARDUINO -- 05_esp32AV/30_esp32swarm/06_Testfahrt

1.1 Vom Nicht-Agentensystem über einen Reflex-Agenten hin zum selbst lernenden, Modell-basierten Agentensystem

Architekturen zur Entwicklung autonomer mobiler Systeme (und ein wenig Geschichte) -- 83_AV/02_Architekturen
  • Folgende Meilensteine sollten der Reihe nach in jeder Gruppe mindestens für ein Fahrzeug, später für beide erfolgreich erreicht werden:
  1. Hotspot einrichten und verbinden
  2. Fernsteuern über Nummern-Tasten
  3. Sensoren testen und kalibrieren
  4. Stoppen und umdrehen bei Hindernissen
  5. Linienverfolgen
1.1 Hotspot einrichten und verbinden
  • Löschen Sie zuerst alle existierenden Hotspoteinträge auf dem Laptop und richten Sie Ihren Hotspot dort neu ein.
  • Um Fehler durch falsche Verkabelung zu vermeiden immer erst den Hotspotnamen auf der Fahrzeugsoftware hart kodiert und passend zum Hotspot beim Laptop eintragen.
  • Erst danach prüfen, ob sich bei richtiger Verkabelung der Hotspot der eigenen Gruppe einstellt.

ANLEITUNG ZUM EINRICHTEN EINES HOTSPOTS AUF DEM LAPTOP

  • Gehen Sie beim Laptop unter Xubuntu auf "Verbindungen bearbeiten..." (oben rechts auf Verbindungssymbol klicken und Menü öffnen).
  • Löschen Sie existierende Hotspots mit dem Minuszeichen -.
  • Drücken Sie auf plus +
  • ... siehe Screenshots:
...Wählen Sie die Option

Bild 0-2: ...Wählen Sie die Option "Funknetzwerk" und drücken dann "Erstellen".

Konfigurieren Sie den Tab

Bild 0-3: Konfigurieren Sie den Tab "Funknetzwerk" wie hier zu sehen. ACHTUNG: IHR Hotspot hat einen anderen Namen! -- bei Gerät steht etwas anderes zur Wahl.

Wählen Sie beim Tab

Bild 0-4: Wählen Sie beim Tab "Sicherheit" "WPA" und als Passwort 12345678, gehen Sie danach auf Speichern.

  • Jetzt sollte der Hotspot verfügbar sein.

Wählen Sie "Mit verborgenem Funknetzwerk verbinden" und da dann Ihren Hotspot.


  • Nun sollte Ihr Laptop den Hotspot aktiviert haben und auch selber mit diesem verbunden sein.
  • ACHTUNG: So haben Sie kein Internet. Nötigenfalls vorher alle nötigen Anleitungsseiten in verschiedenen Tabs öffnen und nötige Software herunterladen.
1.2 Fernsteuern über Nummern-Tasten
  • Sie Hinweise hier:
05_esp32AV/30_esp32swarm/06_Testfahrt

ACHTUNG in Arduino IDE: Wählen Sie unter Werkzeuge, Board, Boardverwalter bei esp32 by Espressiv Systems die Version 2.09 aus.



ACHTUNG in Arduino IDE: Wählen Sie unbedingt unter Werkzeuge, Board: "ESP32C3 Dev Module"



ACHTUNG in Arduino IDE: Wählen Sie unter Werkzeuge USB CSC on boot "Enabled" aus, damit das Verbinden über den seriellen Monitor verfolgt werden kann.


1.3 Sensoren testen und kalibrieren
  • Damit überhaupt eine Kalibrierung möglich ist, werden die Rohwerte für Boden- und Entfernungssensor auch immer über udp übertragen und werden in Processing bei Empfang in der Konsole unten als hintere Werte sichtbar.
  • Dies wird möglich, weil die Roh-Nachricht in der Konsole durch den print-Befehl in receive angezeigt wird:
void receive( byte[] data, String ip, int port ) 
{    
  String message = new String( data );  
  println( "receive: \""+message+"\" from "+ip+" on port "+port );  
...

Code 0-3: UDP-Callback-Methode receive(), insbesondere print-Befehl, der in der Konsole die Roh-Nachricht anzeigt.

  • Die Rohwerten beider Sensoren werden auf einen Zahlenbereich von 1000 bis 3000 gemappt und so vom esp32 her verschickt.
  • Das Entsprechende Mapping geschieht auf der Grundlage von im Quelltext angegebenen Minimal- und Maximalwerten:
//Board: ESP32 SUPER MINI
//Auswählen in ISE: ESP32C3 Dev Module
//USB CDC ON BOOT DISABLED
//Meldet sich aber als ESP32S3
#include <WiFi.h>
#include "AsyncUDP.h"

//Hier Kalibrieren:
#define BAHN_MIN 992.0
#define BAHN_MAX 2895.0

#define ENTF_MIN 54.0
#define ENTF_MAX 2895.0

#define NORMAL_SPEED_LEFT 200 //100...255
#define NORMAL_SPEED_RIGHT 200 //100...255
#define SPEED_OFFSET_LEFT 10;
#define SPEED_OFFSET_RIGHT 10;

Code 0-4: Erste Zeilen des Arduino-Projekts ESP32C3_SUPER_MINI_ARDUINO_OOP_304 (gehört in den Arduino-Ordner /home/fhbstud/Arduino/ !!!)


Passen Sie die Werte unterhalb "//Hier Kalibrieren:" an Ihre konkreten Gegebenheiten an, das betrifft:


  • Minimal und maximal auftretender Wert beim Bodensensor
  • Minimal und maximal auftretender Wert beim Entfernungssensor
  • Unterschiedliche Drehzahlen bei den Motoren

Das Arduino Projekt ESP32C3_SUPER_MINI_ARDUINO_OOP_304 wird im Ordner /home/fhbstud/Arduino/ entpackt!



Das Processing-Projekt ESP32C3_SUPER_MINI_PROCESSING_OOP_304 wird im Ordner /home/fhbstud/sketchbook/ entpackt!


1.4 Stoppen und umdrehen bei Hindernissen
  • Die Implementierung des Verhaltens der Schwarmvehikel erfolgt im Processing-Programm im Tab Ant in der Funktion "public void aktualisiereVerhalten()"
  • Dort sollte festgelegt werden, wie das Fahrzeug auf Hindernisse reagiert, d.h. wenn der Entfernungssensor entsprechende Werte liefert.
  • Die Verwendung des Entfernungssensors ist leichter zu programmieren, als die des Bodensensors, denn ein Regler für Letzteren muss sehr vorsichtig eingestellt werden, bis das funktioniert.
1.5 Linienverfolgen
  • Das grobe Programm für eine Linienverfolgung finden Sie bereits in "public void aktualisiereVerhalten()", jedoch wird es mit den verwendeten Parametern noch nicht (gut) funktionieren.

Auf Basis der Punkte 1.1 bis 1.5 können dann Schwarmthemen praktisch angegangen werden h4 2. VORTRAG 1: Grundlagen der Schwarmintelligenzforschung


  • Die Vorträge werden am Ende immer gemeinsam diskutiert und von mir benotet.
  • Sie bilden 50% Ihrer Note. Die anderen 50% sind die Gruppennote beim Schwarmvehikel-Thema.

Bewertungskritewrien:

  1. Wird das Thema fundiert, also unter Berufung auf entsprechende Quellen behandelt?
  2. Wird das gesetzte Thema tatsächlich umgesetzt?
  3. Ist die Darstellungsart verständlich und ansprechend?
  4. Sind die Folien in Ordnung (Seitennummern, Name, Quellenangaben, Gliederung u.a.)
  5. Lässt die anschließende Diskussion ein echtes Verständnis erkennen?
  • Für jede Kathegorie vergebe ich 0 bis 3 Punkte.
  • Es gilt dann: 15 1,0 | 14 1,3 | 13 1,7 | 12 2,0 | 11 2,3 | 10 2,0 | 9 2,7 | 8 3,0 | 7 3,3 | 6 3,7 | 5 4,0 | <5 5,0

3. VORTRAG 2: Schwarmintelligenz in der Optimierung

4. Fortsetzung des Aufbaus der Schwarmvehikel

#5 Di 28.04.2025


NOTBREMSE


  • Mit den Schwarmvehikeln kommen viele Gruppen nicht so schnell vorwärts, wie das nötig wäre, um Schwarmthemen damit innerhalb der Zeit, die für den Kurs zur Verfügung steht umsetzen zu können.
  • Eine Lösung wäre eine Art Taskforce, bei der der Dozent alle Fahrzeuge kontrolliert und Gruppen neu gebildet werden, die für verschiedene Arten an Reparaturen verantwortlich wären.
  • Eine andere wäre es, die Gruppen, die mit den Fahrzeugen zurecht kommen, niederschwellige Schwarmaufgaben, oder autonome Fahrmanöver umsetzen zu lassen und die anderen komplexere Schwarmaufgaben, jedoch unter Verwendung einer Simulationsumgebung.

Option 2 folgend, wären hier die Themen für heute:

Themen

  1. Ant Colony Optimization -- Eine Ergänzung zum Thema Schwarmintelligenz
  2. Projektvorschläge: Vorstellung typischer Schwarmintelligenz-Aufgaben und einiger autonomer Fahrmanöver
  3. Gemeinsamer Beginn der Entwicklung einer Schwarm Simulationsumgebung auf der Basis von Java/Processing
  4. Entscheidungsfindung innerhalb der Gruppen für die Hardware-Variante H, oder die Simulation S, ggf. Übergabe der Hardware von B nach A.
  5. Fortsetzung der Entwicklung einer Schwarm Simulationsumgebung mit S / Weiterbau der Fahrzeuge mit H im PC-Pool.

1. Ant Colony Optimization -- Eine Ergänzung zum Thema Schwarmintelligenz

Zu 1., ...

...siehe 2. Schwarmintelligenz hier: 12_Technikphilosophie/03_Sichtweisen.

2. Projektvorschläge: Vorstellung typischer Schwarmintelligenz-Aufgaben und einiger autonomer Fahrmanöver

Bei allen Projekten gilt:

  • Es gilt die jeweils gestellte Aufgabe nur unter Vorgabe gemeinsamer Verhaltensregeln der Schwarmmitglieder und unter Ausnutzung ihrer eigenen Sensor-Informationen zu lösen.
  • Globale Informationen dürfen an die Schwarmmitglieder nicht übermittelt werden.
Nr. Bezeichnung Beschreibung Eignung H/S
1. Spurhalten Linienverfolgung mit den Schwarmvehikeln H
2. Einparken Automatisierte Manöver zur Positionierung in eine Lücke H
3. Ausweichen Die Mitglieder eines größeren Schwarms verlassen einen abgesteckten Bereich nicht und weichen einander aus H (S als gemeinsame Fingerübung)
4. Dispersion (Rasterung) Die Mitglieder eines größeren Schwarms ordnen sich ohne globale Ortung in einem Raster an S (ev. H)
5. Aggregation Die Mitglieder eines größeren Schwarms finden sich zu kleineren Gruppen zusammen S (ev. H)
6. Aggregation Die Mitglieder eines größeren Schwarms finden sich zu kleineren Gruppen zusammen S (ev. H)
7. Kollektive Wahrnehmung Ein Schwarm erkundet gemeinsam den Anteil an hellen und dunklen Kacheln am Boden* S (ev. H)
8..100 Eigene Ideen Überlegen Sie sich und recherchieren Sie selber Ideen zu Aufgaben, die von einem Schwarm erledigt werden könnten S u. H

Tabelle 0-3: Schwarmintelligenz-Aufgaben und einige autonome Fahrmanöver.

  • Das 7. Projekt orientiert sich an folgender Arbeit von Valentini.
Artikel bei Researchgate: Gabriele Valentini, Davide Brambilla, Heiko Hamann, and Marco Dorigo: Collective Perception of Environmental Features in a Robot Swarm: https://www.researchgate.net/profile/Gabriele-Valentini/publication/307144418_Collective_Perception_of_Environmental_Features_in_a_Robot_Swarm/links/5b0360d94585154aeb071ec9/Collective-Perception-of-Environmental-Features-in-a-Robot-Swarm.pdf

HAUSAUFGABE: Collective Perception of Environmental Features in a Robot Swarm BIS 05.05. LESEN.


Schwarmvehikel001.zip -- Projektstand 001 für Schwarmsimulation: Visualisierung und Fortbewegung
Schwarmvehikel002.zip -- Projektstand 002 für Schwarmsimulation: Kollisionen der Fahrzeuge untereinander erfassen
Schwarmvehikel003.zip -- Projektstand 003 für Schwarmsimulation: Kollisionen führen zum Fahrzeugstopp
Schwarmvehikel003b.zip -- wie 003, aber Test einer "schrägen" Kollision.
Schwarmvehikel004.zip -- auch Wandkollisionen berücksichtigt.

#5 Di 06.05.2025

Themen

  1. Theorie und Implementierung des Entfernungssensors in der Simulation
  2. ÜBUNG Kollisionsfreies Fahren: Gemeinsame Entwicklung und Umsetzung einer Strategie
  3. Diskussion des Artikels "Collective Perception of Environmental Features in a Robot Swarm"
  4. Fortsetzung der Projektarbeiten (Hardware oder Simulation)

1. Theorie und Implementierung des Entfernungssensors in der Simulation

Schwarmvehikel005_Entfernungssensor.zip
2. ÜBUNG Kollisionsfreies Fahren: Gemeinsame Entwicklung und Umsetzung einer Strategie
  • Lässt man obige Simulation laufen, so "verkeilen" sich zwei Fahrzeuge nach einiger Zeit.
  • Analysieren Sie die Ursache dieses Problems und entwickeln Sie in Zweiergruppen eine Lösungsstrategie im Rahmen der Möglichkeiten der Schwarmvehikel.

3. Diskussion des Artikels "Collective Perception of Environmental Features in a Robot Swarm"

Im weiteren Verlauf: Wie kann der Bodensensor in der Simulation umgesetzt werden?

4. Fortsetzung der Projektarbeiten (Hardware oder Simulation)

#6 Di 13.05.2025

Themen

  1. Präsentation zu Thema AUTO #11: Juristische Implikationen bei fahrerlosen mobilen Systemen
  2. Präsentation zu Thema SCHWARM #7 (?): Fahrbahnplanung mittels Ameisen-Methode
  3. Verbindliche Entscheidung zur Auswahl des praktischen Themas, insbesondere zwischen Hardware- und Software-Schwarm
  4. Hinweise zum jüngsten Update der bereit gestellten Basisversion der Schwarm-Simulationssoftware Schwarmvehikel007.zip

Schwarmvehikel007.zip -- Blockade des Antriebs wird erfasst und verarbeitet.

Screenshot zu Processing-Projekt Schwarmvehikel007: Blockade des Antriebs eines der Vehikel wird mit einem roten B angezeigt.

Bild 0-5: Screenshot zu Processing-Projekt Schwarmvehikel007: Blockade des Antriebs eines der Vehikel wird mit einem roten B angezeigt.

#7 Di 20.05.2025

  • Ab heute sollten Sie in den Gruppen verbindlich entweder an einem fest gewählten Hardware- oder einem Softwarethema arbeiten.
  • Im Zweifelsfall empfehle ich Ihnen ein Softwarethema zu wählen: Hat man sich bei der Hardware verrannt, können Zeit fressende Korrekturarbeiten anstehen. Die Fehlermöglichkeiten bei Hardwarethemen sind vielfältiger und komplexer, was dazu führen kann, dass man Teilsysteme in aufwändiger Weise einzeln testen muss, um Fehlerquellen zu finden.
  • Tragen Sie Ihr Thema heute verbindlich in der Liste ein.
  • Unterschätzen Sie in beiden Kathegorien nicht den Aufwand bei der Entwicklung der Softwareseite und beginnen spätestens heute auch damit.

Themen

  1. Präsentation zu Thema SCHWARM #8: Kooperative Navigation in Roboterschwärmen
  2. Präsentation zu Thema SCHWARM #9: Selbstorganisierte Bildung von Formen bei Schwärmen
  3. Fortsetzung der praktischen Themen in den Projektgruppen (H kann sofort in die letzte Reihe in D.1.02, S bleibt bis 12Uhr in D.2.16)

#8 Di 27.05.2025

Themen

  1. HARDWARE-UNTERSTÜTZUNG: Drei mögliche Versagensursachen bei der Linienverfolgung und entsprechende Ansätze diese zu beheben
  2. SOFTWARE-UNTERSTÜTZUNG: Ansatz zur Implementierung des Bodensensors in der Schwarmsimulation
  3. Präsentation zu Thema AUTO #5: GPS basierte automatisierte Routenplanung
  4. Präsentation zu Thema AUTO #7: Bahnplanung beim automatisierten Einparken

1. HARDWARE-UNTERSTÜTZUNG: Drei mögliche Versagensursachen bei der Linienverfolgung und entsprechende Ansätze diese zu beheben

1. Geometrische Position des Bodensensors
  • Wenn sich der Bodensensor genau im geometrischen Mittelpunkt der vier Antriebsachsen befindet, bewirkt eine Drehung keine sinnvolle Verschiebung des vom Sensor erfassten Bereichs.
  • Abhilfe: Der Sensor muss etwas in Richtung der Fahrtrichtung verschoben werden (vergl. Illustration an der Tafel).
  • Praktisches Vorgehen: Lösen des Sensors und erneute Fixierung mit Heißkleber weiter vorne.
2. Totzeit
  • Die Totzeit aufgrund der Funkübertragung zwischen Fahrzeug und Laptop bewirkt eine zu sehr verzögerte Reaktion des Reglers auf Regelabweichungen.
  • Abhilfe: Wird das Fahrzeug insgesamt langsamer, wirkt sich die Totzeit in Relation zum Tempo des Verhaltens weniger aus.
  • Praktisches Vorgehen: Messen der Totzeit durch Messung des zeitlichen Abstands zwischen zwei hereinkommenden Sensorwerten.
long T = System.currentTimeMillis(); //Absolute Systemzeit in Millisekunden
long Tdiff = 1000; //Differenz zwischen den Aktualisierungen der Sensorwerte
void receive(...)
{
    long Tneu = System.currentTimeMillis();
    Tdiff = Tneu - T;
    T = Tneu;
    //....
}

Code 0-5: Code-Snippet für Java/Processing zur quantitativen Erfassung der Totzeit in Millisekunden.

3. Ein bloßer P-Regler ist ungeeignet für die Regelung bei der Linienverfolgung
  • Aufgrund des schmalen Erfassungsbereichs des Sensors, bringt der Regler entweder ein zu geringes Moment auf, um gegenzusteuern, oder führt zu so starkem Überschwingen, dass die Bahn verlassen wird.
  • Abhilfe 1: Vorsichtiges "Kriechen" implementieren. Links von der Sollbahn linken Motor betreiben, rechts von der Sollbahn rechten Motor betriben.
  • Abhilfe 2: Implementierung eines PI, oder eines PID-Reglers.
  • Abhilfe 3: Vergrößerung des vom Sensor erfassten Bereichs durch Vergrößerung des Abstands zum Boden. ACHTUNG: Wird er zu groß, funktioniert es auch nicht mehr.
  • Abhilfe 4: Verlangsamung des Fahrens.
  • Praktisches Vorgehen: In jedem Fall mit "Kriechen" beginnen. Dann: Zwischenzeitliche Umrechnung aller Größen in float und Bestimmung der Regelabweichung e als float-Wert, des Integrals von e, also eI, der Ableitung von e, also eD. Dann vorsichtiges Hinzuschalten des I-Anteils, zuletzt D-Anteil ergänzen.

"Linien-Kriechen": https://youtu.be/SVcHWJRBFwU

"Linienverfolgung mit P-Regler": https://youtu.be/qLYiJC4uyPc

"PI-Regler": https://youtu.be/YS-1RRLGtgQ


eI = eI + e*dt;

eD = (e - e_alt)/dt;


Code 0-6: Code-Snippet für Java/Processing zur Bildung von I- und D-Anteil der Regelabweichung.

2. SOFTWARE-UNTERSTÜTZUNG: Ansatz zur Implementierung des Bodensensors in der Schwarmsimulation

Vorüberlegungen
  • Es wird nicht wirklich erfasst, was der Sensor "sieht", sondern die Fahrzeugposition wird mit Position und Geometrie von auf dem Boden befindlichen Mustern verglichen.
  • Deshalb macht es Sinn, diese Muster möglichst systematisch und einfach zu gestalten, dass der Übereinstimmungsgrad mit der Fahrposition leicht bestimmt werden kann, zumindest, wenn man schon die Freiheit dazu hat.
Umsetzung
  1. Wähle Größe und Form der Bodenmuster genau gleich, wie die der Fahrzeuge, also Kreisflächen mit gleichem Radius, wie die Fahrzeuge.
  2. Ordne die Bodenmarkierungen in einem einfsachen Raster an.
  3. Erweitere das Programm vorsichtig: Lasse erst einmal die Bodenmarkierungen nur sichtbar werden, zeige dann für ein Fahrzeug an, wann es eine Bodenmarkierung überfährt, mache dann den Rest.

3. Präsentation zu Thema AUTO #5: GPS basierte automatisierte Routenplanung

4. Präsentation zu Thema AUTO #7: Bahnplanung beim automatisierten Einparken

#9 Di 03.06.2025


BITTE BEACHTEN: Haupttermin für Präsentationen zu Schwarm- simulation, oder -hardware: TERMIN: 01.07. / Ausweich: 24.06.


Themen

  1. Präsentation zu Thema SCHWARM #3: Wie können Roboterschwärme aufgebaut werden?
  2. Präsentation zu Thema AUTO #1: Modellbildung zur Validierung von Fahrassistenzsystemen
  3. Präsentation zu Thema AUTO #3: Internet und Fahrdienste

#10 Di 10.06.2025


Termin findet online statt. Bitte entnehmen Sie den BBB-Link der Moodle-Mail.


  • Beginn: 10Uhr
  • Bitte mit Mirkofon anmelden und Headset verwenden.

Themen

  1. Organisation und Abklären der Agenda
  2. Präsentation #AUTO10: Agenten basierte Simulation von autonomem Fahren (ONLINE, bitte pdf bei Moodle hochladen / mir zumailen)
  3. Sprechstunde zu den praktischen Projekten

3. Sprechstunde zu den praktischen Projekten

  • Bereiten Sie konkrete Fragen vor,
  • Legen Sie Daten / Quelltexte bereit.
  • Quelltextausschnitte können an mich im Vorfeld gemailt werden, oder, wenn nicht zu groß, im Chat kopiert werden, aber auch durch Bildschirm-Teilen angezeigt werden.
  • MELDEN SIE IHREN KONSULTATIONSWUNSCH ÜBER DEN CHAT AN: #GRUPPE: Anliegen in Stichworten.
  • Bitte melden Sie sich, wenn Sie konkrete Unterstützung zu Ihrem Projekt haben möchten.
  • Wir können dann individuelle Zeitslots vereinbaren, dass nicht alle die ganze Zeit dabei sein müssen. Eventuell wird einfach getrennt zwischen Hardware und Software-Projekten.
  • Seien Sie aber deshalb direkt zu Beginn dabei.

VORTRAG ENTFÄLLT! Es geht gleich mit den Besprechungen los.


Schwarmvehikel007.zip -- Aktueller Ausgangspunkt für die Simulation.

Mögliche Fragen als Ausgangspunkt für eine Diskussion

... allgemein: Wie kann ich die Arbeit in der Gruppe organisieren?
dazu Hinweise zu agiler Softwareentwicklung: 67_Echtzeitsysteme/13_Fuzzy/05_Softwareentwicklung/01_AgileSoftwareentwicklung
... die Simulation betreffend
  • Wie füge ich weitere Schwarmvehikel hinzu?
  • Welche Möglichkeiten an Schwarmverhalten habe ich auf der Basis des aktuellen Standes?
  • Wo könnte ich die Sensorwerte für den Bodensensor implementieren?
... die Hardware betreffend
  • Wie ergänze ich einen PID-Regler
  • Welche Möglichkeiten an Schwarmverhalten habe ich auf der Basis des aktuellen Standes?
  • Wo könnte ich Konvoifahrt implementieren implementieren?

#11 Di 17.06.2025

Themen

  1. Liste mit Präsentationsreihenfolge der Gruppen erstellen
  2. Fortsetzung der Projektarbeiten in den Gruppen
  3. Individuelle Unterstützung der einzelnen Gruppen, insbesondere derjenigen, die bisher noch keinen vorzeigbaren Stand erreicht haben

#12 Di 24.06.2025

Themen

  1. Erster Teil der Abschlusspräsentationen
  2. Fortsetzung der Projektarbeiten

#13 Di 01.06.2025

Themen

  1. Zweiter Teil der Abschlusspräsentationen
  2. Feedbackrunde