Spielerei: Fahrzeugsimulation und -steuerung

Da ich zur Zeit für eine andere Lehrveranstaltung eine KI implementiere, konnte ich mich nicht zurückhalten und musste die dabei verwendeten Methoden gleich mal beim Ottocar-Projekt testen.

Eins vorneweg: Ich kümmere mich sonst nicht um die Fahrzeugsteuerung. Das hier ist nur als kleines interessantes Nebenprojekt zu betrachten, stellt aber in keinster Weise unseren aktuellen Stand dar.

Mein Ziel war es, ein Fahrzeug mit einfachem Fahrzeugmodell in einer 2D-Welt entlang einer Zieltrajektorie bewegen zu lassen.

Das Fahrzeugmodell wurde sehr simpel implementiert:

    def forward(self,action,dt):
        # action == -1  : left
        # action ==  0  : middle
        # action ==  1  : right
 
        steer = action * self.max_steer
        self.theta -= steer * dt 
        vx = math.cos(self.theta) * self.speed * dt
        vy = math.sin(self.theta) * self.speed * dt
        self.x += vx
        self.y += vy

Eine Heuristik sorgt dafür, dass sich das Auto nahe der Zieltrajektorie befindet und Kollisionen vermeidet.

Mit Hilfe des Fahrzeugmodelles lässt sich ein Suchraum aufbauen, in dem die KI mittels der Heuristik eine „optimale“ Abfolge der Aktionen ermitteln kann.

Hier ist das ganze als Video mit zwei Fahrzeugen:
Spannend sind auch die Überholmanöver, wie ganz am Anfang zu sehen. Da sieht man was passiert, wenn auch das überholte Fahrzeug versucht eine Kollision mit dem überholenden Fahrzeug zu vermeiden. Es schert wie aufgeschreckt aus.
Ab Sekunde 0:20 ist im Video zu sehen, wie die Strecke verschoben wird und sich die Autos daran anpassen
Die Farbe des Hintergrundes repräsentiert die Distanz zur Fahrbahn.


Der ganze Sourcecode dazu ist auf Github vorzufinden:

Sourcecode auf Github