Street-Path computation using openCV in Python for autonomous driving

Released: September 27, 2022 - Last modified: July 2, 2024

Bosch Future Mobility Challenge 2022 in Abstatt

Im Jahr 2022 nahmen zwei Teamkollegen meiner Formula Student Teams und ich erfolgreich an der Bosch Future Mobility Challenge (manchmal auch Hack the Road Challenge genannt) in Abstatt teil. Diese aufregende Herausforderung bestand darin, einen von Bosch bereitgestellten Lexus-Nachbau auf einem künstlichen Spielfeld autonom fahren zu lassen. Unser Team trat dabei gegen andere Universitätsteams an und konnte schließlich den zweiten Platz erringen.

Bosch FMC - FaSDTa Racing Darmstadt erzielt den zweiten Platz

Dieser kleine Wagen hat uns auf das Pdium gefahren.

Unser langfristiges Ziel ist es natürlich dieses Wissen und die Erfahrung in unser eigentliches Formula Student Auto zu integrieren. Die Bosch Future Mobility Challenge war eine großartige Gelegenheit, um unser Wissen im Bereich des autonomen Fahrens zu vertiefen und neue Technologien zu erproben.

Der F24

Unser F24 (2024 Modell) bei der Release-Presentation auf dem Campus der Hochschule Darmstadt. Hier noch ohne die benötigte Ausstattung für Formula Student Driverless.

Berechnung des Fahrwegs mittels openCV in Python

Meine Hauptaufgabe bestand darin, den Fahrweg des autonomen Autos zu berechnen. Hierzu habe ich die Image-Map der Strecke ausgewertet und alle mögliche Teilrouten auf dem Spielfeld ermittelt. Die Image-Map der Strecke wurde automatisch während der Fahrt vom Fahrzeug erfasst und erstellt. Diese Vorgehensweise ist in der Branche des autonomen Fahrens weit verbreitet und wird als "Simultaneous Localization and Mapping" (kurz: SLAM-Algorithmus) bezeichnet.

Image-Map des Spielfeldes:

Image-Map des Spielfeldes

Pfad-Ermittlung mittels Delaunay-Triangulierung:

Pfad-Ermittlung mittels Delaunay-Triangulierung (1)

Erster Versuch der Triangulierung.

Pfad-Ermittlung mittels Delaunay-Triangulierung nach ein paar kleinen Anpassungen

Erstes Ergebnis nach ein paar Anpassungen.

Fertige Pfad-Ermittlung:

Fertige Pfad-Ermittlung Fertige Pfad-Ermittlung

Fertige Pfad-Ermittlung.

Nachdem alle möglichen Pfade ermittelt wurden, konnten wir festlegen, welche Abbiegungen das Auto machen soll (zum Beispiel: zuerst geradeaus, dann zweimal rechts abbiegen). Anhand der Abfolge der Abbiegungen wurde ein Pfad für den SLAM-Algorithmus generiert, den das Auto abfahren konnte.

Generierter Pfad:

Generierter Pfad

Zusätzlich können auch Punkte definiert werden, an denen das Auto anhalten sollte (beispielsweise, wenn das Auto weis, dass es an der zweiten Kreuzung Vorfahrt gewähren muss).

Pfad mit stopp-Punkten:

Pfad mit stopp-Punkten

Abschließend habe ich ein weiteres ROS-Package entwickelt, das basierend auf dem generierten Pfad und der Position des Autos den nächsten anzufahrenden Punkt bestimmt. Die Logik für die Sensorik, die Berechnung und Steuerung der Lenkung und des Motors wurde ebenfalls in verschiedenen ROS-Packages umgesetzt.

Bosch FMC - Programmierung des Autos

Visualisierung ROS-Package für die Berechnung des nächsten Punktes:

Visualisierung ROS-Package für die Berechnung des nächsten Punktes

Hier fährt das auto Richtung Osten. Die Position des Autos ist der rote Punkt, während die weißen Punkte der angestrebte Pfad ist. Der grüne Punkt ist das Ergebnis der Berechnung.

Hier sind noch zwei weitere Beispiele:

Hier sind noch zwei weitere Beispiele der Generierung (1)

Hier sind noch zwei weitere Beispiele der Generierung (2)