In diesem Blog-Beitrag werden bewährte Verfahren für die Verwendung von Scenic mit CARLA beschrieben. Scenic bietet standardmäßig Aktionen und Verhaltensweisen zur Steuerung eines Fahrzeugs. In der Praxis haben wir jedoch festgestellt, dass viele interne Parameter, die die Fahrzeugsteuerung beeinflussen, für den Benutzer nicht zugänglich sind. Viele dieser Parameter haben jedoch einen erheblichen Einfluss auf die reibungslose Steuerung des Fahrzeugs. Zum Beispiel begrenzt Scenic intern die Beschleunigung eines Fahrzeugs, was zu einem unerwarteten Beschleunigungsverhalten des Fahrzeugs führt. Daher haben wir die wesentlichen Parameter, die die Steuerung eines Fahrzeugs beeinflussen, für den Benutzer zugänglich gemacht und sie zusammen mit den Standardparametern verwendet.
Unsere Änderungen an Scenic sind in dieser fork verfügbar.
Wir geben Anleitungen zur Bedienung eines Fahrzeugs durch Ändern von Gas, Lenkung, Geschwindigkeit und Bremsen. Sie werden lernen, was im Hintergrund von Scenic passiert, während ein Fahrzeug gesteuert wird, und wie Sie die kleinen Details manipulieren können, damit die Simulation flüssiger und realistischer aussieht. Darüber hinaus erfahren Sie, wie Sie die Fahrzeugsteuerung durch direkte Manipulation von PID-Controllern flüssiger gestalten können und welche Vorteile die Optimierung der Bildwiederholrate (FPS) hat, die andere Funktionen beeinflusst.
Beschleunigen in Scenic
Gasgeben kann durch zwei Optionen beeinflusst werden: Actions oder BehaviorsDie erste Option ist die Verwendung der Aktion SetThrottleAction
. Der Aktion kann ein Wert zwischen 0 und 1 übergeben werden, wobei 0 bedeutet, dass die Drosselklappe vollständig gelöst ist und 1, dass sie vollständig gedrückt ist. Sie müssen sich bewusst sein, dass sich die Werte für verschiedene Fahrzeugmodelle unterschiedlich verhalten. Die Eigenschaften eines Fahrzeugs (Modell), wie z. B. das Gewicht oder die Leistung, können dies erklären. Standardmäßig ist das virtuelle Gaspedal intern auf 0,5 begrenzt. Wir haben festgestellt, dass diese Obergrenze dazu führt, dass Autos nicht schneller als 10 m/s fahren. Deshalb haben wir max_throttle
als neuen Parameter in die interne Implementierung der Verhaltensweisen aufgenommen, um die Obergrenze über ein Scenic-Skript zu steuern. Weitere Details finden Sie im nächsten Abschnitt. Dieses Problem wurde auch im offiziellen Scenic-Repository.
Eine weitere Möglichkeit, das Gasgeben zu beeinflussen, besteht implizit über Behaviors. Standardmäßig kann die Drossel nicht direkt innerhalb eines Verhaltens eingestellt werden, aber Sie können beispielsweise den Parameter target_speed
für das FollowLaneBehavior
einstellen. Intern wandelt Scenic den Parameter in einen entsprechenden Wert für die Drosselklappe um, mit der das Fahrzeug auf die Zielgeschwindigkeit beschleunigt wird. Gemäß der Dokumentation wird die Zielgeschwindigkeit in m/s angegeben. Abgesehen von der Verwendung von Behaviors gibt es wenig, was Sie standardmäßig tun können, um ein Auto in Scenic zu steuern. Wir haben Parameter wie max_throttle
, max_break
, und max_steer
zu Behaviors wie dem FollowLaneBehavior
Auf diese Weise können interne Parameter offengelegt werden, wodurch sich die Möglichkeiten zur Steuerung eines Fahrzeugs erhöhen. Lassen Sie uns einen Schritt weiter gehen. Wenn wir tiefer in Scenic eindringen, entdecken wir, dass ein PID-Controller das Gasgeben steuert und sich bei jedem Fahrzeug anders verhält. Wenn man die Parameter des zugrundeliegenden PID-Controllers kontrolliert, kann man jedes Fahrzeug reibungslos steuern. Das Hinzufügen neuer Parameter zu Behaviors und Actions, die sich direkt auf ein Fahrzeug auswirken, und der PID-Controller werden später in diesem Blogbeitrag erläutert.
Einstellen der Fahrzeugbewegung bei Verwendung von Scenic
Ein Auto in Scenic kann auf verschiedene Arten gesteuert werden. Zu Beginn des Blog-Beitrags werden die direkten Möglichkeiten mit Actions und Behaviors erwähnt. Andere Actions, die Sie mit Ihrem Auto durchführen können und die eine direkte und unmittelbare Wirkung haben, sind:
SetBrakeAction
SetSpeedAction
SetSteerAction
SetThrottleAction
Weitere Einzelheiten finden Sie in der Documentation zu den Actions.
Standardparameter für das FollowLaneBehavior sind:
target_speed
: Zielgeschwindigkeit in m/s für das FahrzeuglaneToFollow
: Fahrspur für das Fahrzeugis_oppositeTraffic
: Boolean, wenn es einen entgegengesetzten Verkehr gibt
Wir haben dem FollowLaneBehavior
weitere Parameter hinzugefügt, um das Auto besser zu steuern und Effekte wie die im vorherigen Abschnitt erwähnte Drosselkappe zu berücksichtigen:
max_throttle
: wie stark die Drosselklappe gedrückt werden kann, um die Drosselkappe anzuheben.max_brake
: Float, wie stark die Drosselklappe gedrückt werden kannmax_steer
: maximaler Lenkwinkelturn_speed
: Geschwindigkeit beim Abbiegen (links oder rechts)max_steer_per_timestep
: maximaler Lenkwinkel pro Zeitschritt (Simulation)
Wir denken, dass die Standardbehaviors und -actions für die meisten Szenarien ausreichen. Wenn Sie jedoch benutzerdefinierte Änderungen vornehmen oder Scenic intern bearbeiten möchten, ist der Quellcode verfügbar. Derzeit sind unsere maßgeschneiderten Updates nur in unserer Scenic fork enthalten. Wir sind jedoch dabei, diese Änderungen an Scenic weiterzugeben. In unserem Fall haben wir die Parameter des PID-Controller (Proportional, Integral, Derivativ) aktualisiert, der die mediale und laterale Bewegung der Fahrzeuge steuert. Der erste bezieht sich auf die Beschleunigung, der zweite auf die Lenkung. Die Konstanten Kp, Ki, und Kd, die jeweils für den proportionalen, integralen und derivativen Teil des PID-Controllers stehen, werden empirisch und nacheinander eingestellt. Kp steuert, wie steil das Fahrzeug auf die Ziellinie zusteuert. Höhere Werte von Kp führen dazu, dass das Fahrzeug über die Ziellinie hinausschießt. Als Gegenmaßnahme dämpft Kd das Überschießen, d.h. es verringert den Winkel zwischen der Fahrlinie und der Ziellinie, wenn man sich ihr nähert. Wenn Kd zu groß ist, braucht das Fahrzeug daher sehr lange, um die Ziellinie zu erreichen. Da wir versuchen, ein optimales Steuerungsproblem numerisch zu lösen, können sich kleinere Fehler ansammeln, so dass die Kabine nicht zur Ziellinie konvergiert, sondern zu einer Linie in der Nähe davon. Um diesen Konvergenzfehler zu verringern, kann Ki erhöht werden. In unserem Anwendungsfall war es nicht notwendig, Ki größer als 0 zu setzen.
Leider bot Scenic zum Zeitpunkt der Erstellung keine Möglichkeit, die PID-Parameter von außen zu steuern. Deshalb haben wir behaviors wie das FollowLaneBehavior
so erweitert, dass auch die Eingabe der Parameter Kp, Kd, und Kimöglich ist, die an den PID-Controller übergeben werden.
Die Werte für den PID-Controller müssen für jedes Szenario individuell eingestellt werden, da die Steuerung des Fahrzeugs mit Gas und Lenkung, wie bereits erwähnt, von Fahrzeugmodell zu Fahrzeugmodell unterschiedlich ist. Wir folgten der empfohlenen Strategie, Kp, Kd, und Ki auf 0 zu initialisieren und die Werte nacheinander in der gleichen Reihenfolge einzustellen, bis das Ergebnis zufriedenstellend war. Die Einstellung von Kp, Kd, und Ki ist höchstwahrscheinlich ein Schritt, den Sie für Ihre Verkehrssimulation durchführen müssen. Ein wichtiger Hinweis ist, dass Sie den internen Scenic-Code aktualisieren müssen, um die Parameter für Kp, Kd, und Ki an die Behaviors übergeben zu können.
Wie sich die Framerate auf die Behaviors in Scenic auswirkt
Da Scenic Simulationen der von Ihnen definierten Szenarien durchführt, werden intern verschiedene Schritte, z. B. für Frames oder Simulationen, berücksichtigt. Wir haben beobachtet, dass die Bilder pro Sekunde (FPS) die Lenkung beeinflussen. Höhere FPS ergaben eine steilere Lenkung und unterschiedliche Geschwindigkeiten für verschiedene Fahrzeugmodelle. Dies haben wir auch bei der Verwendung des Zielgeschwindigkeitsparameters des FollowLaneBehavior
beobachtet. Wir glauben, dass dies auch eine Folge der im ersten Abschnitt erwähnten Drosselkappe ist. Daher sollten Sie die gewünschten FPS einstellen, bevor Sie alle Parameter für Ihre Verkehrssimulation optimieren.
Zusammenfassung
Wir haben gesehen, dass Scenic einige Probleme bei der Anpassung der Fahrzeugtrajektorien mit sich bring. Die Implementierung von benutzerdefinierten Änderungen, z. B. für den PID-Controller oder Parameter wie max_throttle
, ermöglichte jedoch eine bessere Gesamtsteuerung des Fahrzeugs. Als das Research- und Development-Team von Rocketloop die Probleme erkannte und untersuchte, wie sie zu lösen waren, fand es eine Lösung, die zu einer glaubwürdigeren Simulation führte.