Skip to main content

Autopilot

Codebase​

Doxygen Documentations:

Tutorials​

Watch on YouTube. You can find the video transcript in the sections below.

Part 1:

Part 2:

Part 3:

Autopilot​

  • output an den Regler: 𝜈 und trajectory

image4

  • ist der nächste Schritt, nachdem die Detektionen übertragen wurden
  • ist ein C++ Node:
    • nutzt die Lineare Algebra library Eigen3
  • ist aufgeteilt in 2 Hauptpunkte:
    • Umgebungsmodell
      • wieder 2 Teile:
        • Gitternetzkarte (Occupancy Grid Map) für Tracking und “Nachhalten” (Speichern?) der Spurbegrenzungen
          • rastere Umgebung und jede Rasterzelle hat eine Wahrsch. dafür, ob und mit welcher Wahrsch. eine Spurbegrenzung vorliegt
          • ist global und in Top-View (2D) (dh man schaut von oben auf die Karte drauf) (s. Skizze nächstes slide)
          • multi -threaded: 500 fps auf Desktop (mal schauen wie viel auf dem Fahrzeug)
        • Objekt Liste für Tracking und “Nachhalten” (Speichern?) der Hindernisse (Größe und Position)
        • Odometrie
          • dadurch, dass wir ein globales Modell benutzen, muss das Fahrzeug innerhalb dieser Karte lokalisiert werden
            • das wird mittels der Raddrehzahl und den Gyroskopen der Inertial Measurement Unit durchgeführt
            • da wird also im Grunde die Geschwindigkeit integriert, um zu schauen, wo wir uns befinden
    • Entscheidungsfindung
      • Autopilot muss die lokale Umgebung extrahieren und Spurmitten berechnen (auf Basis der Spurbegrenzungen)
      • und extrahiert auch vorausgehende Objekte, die weiter zur Entscheidungsfindung fließen
      • image6
      • im Bild: globale Occupancy Grid Map
        • Spurbegrenzungen rechts (blau), Mitte (grün) und links (rot) sowie Fahrzeug (schwarz)
        • es kommen neue Detektionen rein:
          • neue Spur
          • neue Hindernisse (gelb)
        • diese müssen an der passenden Stelle im Umgebungsmodell eingefügt werden:
          • dazu wird zuerst eine Aktualisierung der Odometrie durchgeführt, dh. es wird die neue Position des Fahrzeugs auf der Karte abgeschätzt
          • auf Basis dieser neuen [Fahrzeug-]position werden die Spuren an der passenden Stelle eingefügt und auch die Hindernisse
            • dabei gibts immer einen gewissen Bereich der sich mit alten Detektionen überlappt
              • genau hier findet dann das Tracking statt:
                • das passiert basierend darauf, dass … wir haben alte Detektionen und neue Detektionen und wenn sie sich überschneiden [grauer Bereich im Bild] wird an einem Rasterpunkt die Wahrsch. erhöht wenn da eine Spurbegrenzung vorliegt und wenn da keine wiedererkannt wurde wird da auch die Wahrsch. verringert
        • diese lokalen Informationen vor dem Fahrzeug werden dann extrahiert und die Spurmitten berechnet (beider befahrbarer Spuren) und auch Objekte [=Hindernisse] werden extrahiert und diese fließen dann in die Entscheidungsfindung ein
        • image1
      • die Basis [für die Entscheidungsfindung] sind diese Spurmitten und Hindernisse
        • (und auch sowas wie
          • “sind wir gerade in einer geschwindigkeitsbegrenzten Zone”,
          • der Fahrzeugzustand:
            • “sind wir gerade in einem Spurwechsel” oder
            • “haben wir gerade den Blinker an”
            • also im Grunde “in welchem Zustand befindet sich das Fahrzeug” )
        • die Implementation ist angelehnt an einen Entscheidungsbaum
          • also auf Basis von unterschiedlichen Gegebenheiten wird eine Entscheidung getroffen was das Fahrzeug tun soll, dabei sind folgende Entscheidungen relevant:
            • Wahl der Spur (wie schon gesagt)
              • welche Spur solls fahren
              • wann solls die Spur wechseln (bei Hindernissen wichtig)
            • Geschwindigkeit muss angepasst werden (zB. in geschwindigkeitsbegrenzter Zone wichtig)
            • Lichtzeichen müssen passend gesetzt werden
              • zB. wenn Spur gewechselt wird, muss Blinker gesetzt werden
              • Fahrzeug soll Bremsleuchte anschalten, wenn es langsamer fährt bzw wenn es abbremst auf eine langsamere Geschwindigkeit)
            • StVO soll eingehalten werden
              • Rechts-vor-Links (an Kreuzungen ohne Beschilderungen)
              • Anhalten an Haltelinien
              • nicht Fußgänger überfahren (Fußgängerüberwege, Zebrastreifen)

image3

  • hier Autopilot in Aktion:
    • oben: was das Fahrzeug in der Simulation sehen kann
    • unten drunter: Visualisierung des Umgebungsmodells
      • man sieht
        • den vorderen Teil, dh. die vordere lokale Umgebung des Fahrzeugs und das Fahrzeug befindet sich am Schnittpunkt der beiden weißen Linien
        • Spurbegrenzungen: rechts, Mitte, links
        • berechnete Spurmitten (hellblau und rosa)
    • rechts: wenn das Fahrzeug über die gesamte Strecke gefahren ist, baut sich dieses Umfeldmodell auf
      • hier in diesem Bild: ist in der Simulation passiert (dh. Genauigkeit der Odometrie = 100%)
        • da muss man schauen wie weit man alte Informationen, die so weit zurückliegen, dass man einmal um die Strecke gefahren ist, wie weit man sie noch weiter benutzen kann
          • der Ansatz war, dass wir ein globales Modell benutzen, weil wir später noch andere Ansätze oder Lokalisationsmethoden benutzen können, um vlt alte Detektionen mit zu benutzen
  • Ausblick:
    • Implementation der Entscheidungsfindung muss noch fertiggestellt werden
      • Szenarien für CC analysieren
    • am Fahrzeug testen

Controller/Regler​

  • bekommt 𝜈 und trajectory als input vom Autopilot
  • output: s. “Ausgabe” auf slide

image2

  • in c++
  • implements an MPC similar to “2 & ½ Carrots” method (already used successfully in CC 2016)

image5

  • red: given reference trajectory (path to be driven)
  • green: tree: Es wird ein Baum aufgebaut
    • mit allen möglichen
    • Fahrzeug kann im aktuellen Zeitpunkt bzw im zu regelnden Zeitpunkt unterschiedliche Lenkwinkel einstellen
    • 2 in “2 & ½ Carrots” kommt davon, weil wir einen Regelungshorizont von 2 haben:
      • wir können am aktuellen zu regelnden Zeitpunkt und noch einmal an einem Punkt nach einem bestimmten eingestellten Zeithorizont einen neuen Lenkwinkel einstellen
    • an diesen Punkten wird ausgewertet wie nah wir mit unserer geplanten Trajektorie an der Referenztrajektorie dran sind
    • die beste Möglichkeit wird dann ausgewählt und passend dazu wird der Lenkwinkel eingestellt
  • was wir dadurch erzielen:
    • begrenzte Ausführzeit dadurch dass wir diesen Baum aufbauen
      • wir hatten damals eine modellprädiktive Regelung mittels eines Optimierungsproblems implementiert
        • da hatten wir unterschiedliche Laufzeiten, die teilweise relativ lang waren
        • das hat sich dadurch jetzt verbessert
  • Ausblick:
    • es gibt unterschiedliche Parameter, die noch am Fahrzeug getunet werden müssen, zB.
      • einstellen, welche Lenkwinkel werden hier im Raum berechnet
      • Zeithorizont