Über das Projekt DRIVE

Das Projekt DRIVE wurde mit dem Ziel gestartet, die Idee des autonomen Fahrens auf ein kleines Auto zu übertragen. Das Auto selbst muss dafür mit entsprechenden Sensoren und Hardware ausgestattet sein, um die Umgebung wahrnehmen und auf verschiedene Situationen entsprechend reagieren zu können. Durch ein neuronales Netz werden diese Entscheidungen getroffen, welches zuvor mit umfangreichen Daten der Strecke trainiert wird.
Diese Bestandteile des Projekts werden in den folgenden Abschnitten genauer vorgestellt.

Das Auto

Im Rahmen der Projektarbeit wurden etliche Veränderungen am Auto durchgeführt, die Auswirkungen auf die Fahrweise hatten und zu einer verbesserten optischen Darstellung geführt haben.

Die Basis

Das alte DRIVE-Modell basierte auf einem umgebauten RC-Car, mit einem Motor für die Hinterachse und mit der Möglichkeit zur Lenkung durch die Vorderachse. Dies hat allerdings in der ursprünglichen Fassung nicht ausgereicht und wurde durch eine selbstentworfene Lenkung ersetzt, um den Wendekreis des Fahrzeugs zu verringern. Außerdem wurde eine selbstentworfene Bremse hinzugezogen, die beim Bremsvorgang Stangen ausgefahren und gegen die Hinterreifen gepresst hat.

Das neue Modell basiert auf einem Robot Vehicle Kit, erweitert durch eine 3D-gedruckte Plattform, die sowohl für ein besseres Platzmanagement als auch für die Stabilisation verschiedener Sensoren (z.B. LiDAR) beigeholfen hat. Im Gegensatz zum alten Modell sind hier vier Motoren vorhanden, die den Reifen jeweils zugeordnet sind. Die vorherigen technischen Lösungen in Hinblick auf die Lenkung und Bremsung konnten allerdings nicht mehr angewandt werden, wobei durch geschickter softwarebasierter Ansteuerung der einzelnen Motoren diese Schwierigkeit behoben werden konnte.

Die Hardware

Verschiedene Sensoren, die noch Anwendung in dem älteren Modell fanden, wurden in der neuen Version des DRIVE Autos aussortiert. Darunter fallen die Ultraschallsensoren an der Front des Fahrzeugs, welche durch den LiDAR ersetzt wurden. Beide Sensoren erfüllen zwar die Funktion der Hinderniserkennung, beim LiDAR besteht jedoch die Möglichkeit 360-Grad Abtastungen durchführen zu können.
Desweiteren wurde die selbstentworfene ATTINY-Platine verbaut, womit die Motoren und die Beleuchtung des Autos gesteuert werden und somit den zuvor verwendeten Arduino Servo Driver und die LED Platine verdrängt hat.

Außerdem wurde der vorher genutzte Raspberry Pi 3 Model B+ durch den Raspberry Pi 4 Model B ausgetauscht und insgesamt zwei Intel Neural Compute Stick 2 angeschlossen, um eine höhere Performanz zu erzielen. Die Kamera selbst wurde nicht ausgewechselt, jedoch auf eine tiefere Ebene versetzt, damit der LiDAR ungestört Abtastungen durchführen kann.
Weitere Informationen zu der einzelnen Hardware in der aktuellen Version des DRIVE Autos gibt es hier zu finden.

Das neuronale Netz

Annotation

Bevor ein neuronales Netz aufgebaut werden kann, müssen zunächst umfangreiche Trainingsdaten vorliegen. Eine beliebige Strecke mit Ampeln und Stoppschildern wird also manuell befahren und aufgenommen. Anschließend werden mithilfe eines Tools die Trainingsdaten annotiert, indem Boxen um ein Verkehrsschild oder Ampel angefertigt werden.

Training

Mithilfe eines YOLOv3 Netz können die annotierten Daten trainiert werden. YOLOv3 ist ein state-of-the-art neuronales Netz zur Object Detection. Als Eingabe erhält das Netz ein Bild, woraufhin Ergebnisse für jeweils drei unterschiedliche Bildauflösungen ausgegeben werden. Für jede Bildauflösung werden verschiedene Koordinaten mit Wahrscheinlichkeiten geliefert, wo vermutet wird, dass sich an besagter Stelle im Eingabebild ein Objekt befindet und eine zusätzliche Wahrscheinlichkeit ausgegeben, um welche Klasse (z.B. Rote Ampel, Gelbe Ampel, Grüne Ampel, Stoppschild, ...) es sich handeln könnte. Aus der Ausgabe kann man nun mit einem Treshhold für die Wahrscheinlichkeiten berechnen, welche Objekte in dem Bild tatsächlich aufzufinden sind.

Verifikation

Neuronale Netze werden zunehmend in sicherheitskritischen Anwendungen eingesetzt. Daher muss sichergestellt werden, dass sich diese korrekt verhalten. Dabei ist es oft schwierig zu spezifizieren, was korrektes Verhalten ist, da neuronale Netze meist für Probleme eingesetzt werden, welche sich kaum formal spezifizieren lassen. So verhält sich ein Klassifikator, der Hunde auf Bildern erkennen soll, korrekt, wenn er genau dan einen Hund erkennt, wenn auf dem Bild ein Hund ist. Die Klasse aller Bilder, auf denen Hunde zu erkennen sind, ist dabei jedoch nicht formal beschreibbar. Es können lediglich Beispiele für Bilder innerhalb dieser Menge angegeben werden.
Die Idee der "adversarial examples" beruht auf der Annahme, dass wenn man ein Bild nur leicht verändert, immer noch das selbe Ergebnis produzieren sollte. Bei Änderung weniger Pixel wird aus einem Hund kein Haus. Daher kann die Sicherheit eines Ergebnisses untersucht werden, indem leicht veränderte Versionen der Eingabe betrachtet werden. Ein "adversarial example" ist dabei eine Eingabe, die nah an der originalen Eingabe ist, jedoch unterscheided sich das Ergebnis des neuronalen Netzes stark. Es gibt verschiedenste Ansätze, um solche "adversarial examples" zu finden. Im Rahmen unseres Projektes haben wir uns mit einigen dieser beschäftigt und diese auf unsere Objekterkennung angewandt.

Klassifikation (Original)
Original, klassifiziert als Geschwindigkeitsbegrenzung 120km/h
Klassifikation (Manipuliert)
Manipuliert, klassifiziert als Geschwindigkeitsbegrenzung 20km/h

Fahrtnetz

Das Fahrtnetz erfüllt die Funktion des Autopiloten und ist die Komponente des Fahrzeugs, die das autonome Fahren realisiert. Mithilfe des Fahrtnetzes soll das Auto eine beliebige, durch Seil abgegrenzte Strecke, autonom befahren können, ohne über die Fahrbahnbegrenzungen zu geraten. Hierbei liefert das neuronale Netz wertvolle für die Beschleunigung und Lenkung des Fahrzeuges, basierend auf den aktuellen Bilddaten der Frontkamera. Als Modell wurde für das Fahrtnetz ein Convolutional Neural Network gewählt, welches auf aufgenommenen Daten unterschiedlicher Strecken trainiert und validiert wurde.

Die Ortung

Bluetooth 5.1 Direction Finding

Vor Bluetooth 5.1 konnten Objekte anhand der Signalstärke (RSSI) lokalisiert werden, wobei diese Lokalisierung nicht besonders akurat war. Mit der Bluetooth 5.1 Direction Finding Technologie ist es nun möglich, Objekte mit Angle of Arrival (AoA) und Angle of Departure (AoD) orten zu können. Beim Angle of Arrival ist das zu lokalisierende Objekt der Transmitter und entsendet ein Signal, welches dann von einem Antennen Array empfangen wird. Anschließend kann der Eintrittswinkel des Signal relativ zu diesem Antennen Array berechnet werden. Angle of Departure funktioniert ähnlich, das Objekt ist aber in diesem Fall der Receiver des Signals.
Im Rahmen des Projektes wurde der Ansatz des Angle of Arrival verfolgt. Dazu wurden drei Antennen Arrays im Raum positioniert, die dann die Signale des Senders empfangen können. Die berechneten Richtungsangaben überschneiden sich im Raum, wodurch ein Dreieck entsteht und im Mittelpunkt das zu lokalisierende Objekt vermutet wird.

Bluetooth Angle of Arrival (AoA)
Bildquelle: Silicon Labs
SLAM Mapping
Angefertigte Karte der Umgebung innerhalb der Gazebo Simulation

SLAM

SLAM (Simultaneous Localization and Mapping) ist ein Verfahren zur Ortung von Robotern. Hierbei werden kontinuierliche Schätzungen zur eigenen Position getroffen und gleichzeitig eine Karte der Umgebung angefertigt. Die Schwierigkeit darin besteht, dass für die Lokalisierung der Position eine Karte benötigt wird und für die Karte wiederum die Position wichtig ist.
Realisiert werden kann SLAM, indem die Position des Autos durch Bluetooth 5.1 Direction Finding ermittelt wird und die Karte innerhalb der Gazebo Simulation mithilfe vom LiDAR generiert werden kann.

Die Simulation

Der aktuelle Simulator

Um genügend Daten für das neuronale Netz zu erzeugen, wurde ein Donkey Car Simulator weiterentwickelt. Dadurch hat man nun die Möglichkeit, Strecken unbegrenzt lange befahren zu können und somit über Stunden Daten zu generieren. Außerdem können Objekte, wie zum Beispiel Straßenschilder und Ampeln, in die Simulation eingefügt werden.
Darüber hinaus können Daten, die in der Realität aufgenommen wurden, in den Simulator eingelesen werden. Damit wird ermöglicht, eine reale Strecke im Simulator zu trainieren, wodurch nicht erforderlich ist, die Strecke mit dem Auto manuell zu befahren. Es muss allerdings nicht unbedingt eine Strecke vorhanden sein, da mithilfe des digitalen Autos auch Straßen generiert werden können.

Straßenschild im Simulator
3D Modell der Displays zum Anzeigen von Straßenschildern und Ampeln
Straße im Simulator
Eine der möglichen Straßentexturen
Streckengenerierung: Eine Straße
Streckengenerierung: Mehrere Straßen
Streckengenerierung: Viele Straßen

System der Streckengenerierung

Aktuell wird ein System zur Generierung von nahezu beliebig großen Straßennetzen entwickelt, die mit ein oder mehreren Fahrzeugen befahren werden können. Dadurch können Trainingsdaten nicht nur deutlich schneller erstellt werden, sondern auch das Training mit Kreuzungen mit und ohne Ampeln möglich sein.
Realisiert wird dies, indem zunächst mit Poisson Disk Sampling Punkte auf einer Fläche verteilt werden. Danach werden pro Punkt die benachbarte Punkte gesucht und mit dem originalen Punkt verbunden. Um eine Straße zwischen den zwei Punkten A und B zu generieren, wird Bézier Curves mit zwei Ankerpunkten verwendet. Die Ankerpunkten werden dabei zufällig im Umkreis der Linie zwischen den Punkten A und B gesetzt. Anfang und Ende jeder Strecke müssen als nächstes mit einer Textur der Kreuzung nahtlos angeschlossen werden. Abschließend werden Metainformationen für die Autos auf den Strecken verteilt.
Um möglichst universell einsetzbar zu sein, kann der Simulator Streckensysteme unterschiedlicher Größe generieren (Abbildungen links).

Eins zu Eins Simulation

Ein weiteres Ziel war, eine eins zu eins Simulation umzusetzen. Da die Kommunikation im Projekt über ROS2 Dashing abläuft und der Donkey Car Simulator nur über Unity ansprechbar ist, musste eine Verbindung von ROS2 Dashing nach Unity aufgebaut werden. Dazu wurde zuerst eine Verbindung von Unity zu ROS1 Melodic hergestellt, da diese bereits von Siemens implementiert wurde. Da nun noch die Verbindung von ROS1 Melodic zu ROS2 Dashing fehlte, wurde die von ROS2 Dashing mitgebrachte Verbindung zu ROS1 genutzt.
Aufgrund der Corona Pandemie konnte diese Verbindung noch nicht am echten Auto getestet werden. Mit dem Gazebo Simulator war es jedoch möglich, die Verbindung erfolgreich testen zu können.

Streckengenerierung: Viele Straßen
Kommunikation zwischen dem Gazebo Simulator und dem Unity Simulator

Gazebo Simulation

Die Corona Pandemie hat dazu geführt, dass das DRIVE Auto nicht vor Ort gefahren bzw. getestet werden konnte. Dies hatte negative Auswirkungen auf die Entwicklung der Ortung, da die Ausgaben des LiDARS beispielsweise ausfielen. Durch den Gazebo Simulator wurde allerdings ermöglicht, an die benötigten Daten zu gelangen.
Gazebo ist ein Open-Source-Simulator für komplexe Anwendungen der Robotik mit einer sehr akuraten Ignition Physics Engine und integrierter ROS Schnittstelle. Bei korrekter Konfiguration verhält sich das Auto so wie in der Realität.
Streckengenerierung: Viele Straßen
Gazebo Simulator mit modellierter MZH Ebene 4. Die blauen Strahlen entstammen vom LiDAR
DonkeyGUI

Im Rahmen des Projektes wurde eine DonkeyGUI entwickelt, mit dem Ziel, die wichtigsten Funktionen des DRIVE Autos schneller zur Verfügung zu stellen und eine vereinfachte Ressourcenüberwachung zu realisieren.

  • Auf der linken Seite sind die Ressourcen des Raspberry Pi's mit ihrer Auslastung aufgelistet. (1)
  • In der mittleren Spalte können die vom Auto empfangenen Daten in verschiedenen Formaten aufgenommen werden. (2)
  • Außerdem kann man festlegen, welche Kreuzung als nächstes präferiert werden soll. (3)

  • In der Spalte rechts sind Optionen zum Fahren des Autos, wo spezifiziert werden kann, ob das Auto manuell (via Tastatur oder Controller) oder durch ein neuronales Netz gesteuert wird. (4)
  • Desweiteren kann das aktive Netz umgeschaltet werden, um so das Verhalten des Autos zu beeinflussen. (5)
  • Auch die Lichter des Autos können manuell ausgewählt werden. (6)
  • Ganz rechts werden die Kameraaufnahmen mit einem Overlay der Objekterkennung des Autos dargestellt. (7)
  • Darunter ist das gleiche Bild, jedoch überarbeitet mit einer Kantenerkennung. (8)
Darüber hinaus ist eine Visualisierung der Ortung eingebaut, sowie die Möglichkeit, Prozesse auf dem Pi sehen und terminieren zu können. Die LCD Pi's können auch mit der DonkeyGUI angesprochen werden, wodurch ausgewählt werden kann, welches Straßenschild / Ampel angezeigt werden soll.