{"id":9797,"date":"2023-05-30T08:00:00","date_gmt":"2023-05-30T08:00:00","guid":{"rendered":"https:\/\/rocketloop.de\/?p=9797"},"modified":"2023-09-20T16:07:45","modified_gmt":"2023-09-20T16:07:45","slug":"scenic-carla-best-practices","status":"publish","type":"post","link":"https:\/\/rocketloop.de\/de\/blog\/scenic-carla-best-practices\/","title":{"rendered":"Best Practices bei der Verwendung von Scenic mit CARLA"},"content":{"rendered":"<p>In diesem Blog-Beitrag werden bew\u00e4hrte Verfahren f\u00fcr die Verwendung von Scenic mit CARLA beschrieben. Scenic bietet standardm\u00e4\u00dfig Aktionen und Verhaltensweisen zur Steuerung eines Fahrzeugs. In der Praxis haben wir jedoch festgestellt, dass viele interne Parameter, die die Fahrzeugsteuerung beeinflussen, f\u00fcr den Benutzer nicht zug\u00e4nglich 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\u00fchrt. Daher haben wir die wesentlichen Parameter, die die Steuerung eines Fahrzeugs beeinflussen, f\u00fcr den Benutzer zug\u00e4nglich gemacht und sie zusammen mit den Standardparametern verwendet.<\/p>\n\n\n\n<p class=\" translation-block\">Unsere \u00c4nderungen an Scenic sind in <a href=\"https:\/\/github.com\/Rocketloop\/Scenic\">dieser fork<\/a> verf\u00fcgbar.<\/p>\n\n\n\n<p>Wir geben Anleitungen zur Bedienung eines Fahrzeugs durch \u00c4ndern von Gas, Lenkung, Geschwindigkeit und Bremsen. Sie werden lernen, was im Hintergrund von Scenic passiert, w\u00e4hrend ein Fahrzeug gesteuert wird, und wie Sie die kleinen Details manipulieren k\u00f6nnen, damit die Simulation fl\u00fcssiger und realistischer aussieht. Dar\u00fcber hinaus erfahren Sie, wie Sie die Fahrzeugsteuerung durch direkte Manipulation von PID-Controllern fl\u00fcssiger gestalten k\u00f6nnen und welche Vorteile die Optimierung der Bildwiederholrate (FPS) hat, die andere Funktionen beeinflusst.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"716\" height=\"299\" src=\"https:\/\/rocketloop.de\/wp-content\/uploads\/2022\/08\/carla-car-design-2.jpeg\" alt=\"\" class=\"wp-image-10283\" srcset=\"https:\/\/rocketloop.de\/wp-content\/uploads\/2022\/08\/carla-car-design-2.jpeg 716w, https:\/\/rocketloop.de\/wp-content\/uploads\/2022\/08\/carla-car-design-2-300x125.jpeg 300w, https:\/\/rocketloop.de\/wp-content\/uploads\/2022\/08\/carla-car-design-2-18x8.jpeg 18w\" sizes=\"auto, (max-width: 716px) 100vw, 716px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Beschleunigen in Scenic<\/h2>\n\n\n\n<p>Gasgeben kann durch zwei Optionen beeinflusst werden: <em>Actions<\/em> oder <em>Behaviors<\/em>Die erste Option ist die Verwendung der Aktion <code>SetThrottleAction<\/code>. Der Aktion kann ein Wert zwischen 0 und 1 \u00fcbergeben werden, wobei 0 bedeutet, dass die Drosselklappe vollst\u00e4ndig gel\u00f6st ist und 1, dass sie vollst\u00e4ndig gedr\u00fcckt ist. Sie m\u00fcssen sich bewusst sein, dass sich die Werte f\u00fcr verschiedene Fahrzeugmodelle unterschiedlich verhalten. Die Eigenschaften eines Fahrzeugs (Modell), wie z. B. das Gewicht oder die Leistung, k\u00f6nnen dies erkl\u00e4ren. Standardm\u00e4\u00dfig ist das virtuelle Gaspedal intern auf 0,5 begrenzt. Wir haben festgestellt, dass diese Obergrenze dazu f\u00fchrt, dass Autos nicht schneller als 10 m\/s fahren. Deshalb haben wir <code>max_throttle<\/code> als neuen Parameter in die interne Implementierung der Verhaltensweisen aufgenommen, um die Obergrenze \u00fcber ein Scenic-Skript zu steuern. Weitere Details finden Sie im n\u00e4chsten Abschnitt. Dieses Problem wurde auch im offiziellen&nbsp;<a href=\"https:\/\/github.com\/BerkeleyLearnVerify\/Scenic\/issues\/38\">Scenic-Repository<\/a>.<\/p>\n\n\n\n<p>Eine weitere M\u00f6glichkeit, das Gasgeben zu beeinflussen, besteht implizit \u00fcber Behaviors. Standardm\u00e4\u00dfig kann die Drossel nicht direkt innerhalb eines Verhaltens eingestellt werden, aber Sie k\u00f6nnen beispielsweise den Parameter <code>target_speed<\/code> f\u00fcr das <code>FollowLaneBehavior<\/code>einstellen. Intern wandelt Scenic den Parameter in einen entsprechenden Wert f\u00fcr die Drosselklappe um, mit der das Fahrzeug auf die Zielgeschwindigkeit beschleunigt wird. Gem\u00e4\u00df der Dokumentation wird die Zielgeschwindigkeit in m\/s angegeben. Abgesehen von der Verwendung von Behaviors gibt es wenig, was Sie standardm\u00e4\u00dfig tun k\u00f6nnen, um ein Auto in Scenic zu steuern. Wir haben Parameter wie <code>max_throttle<\/code>, <code>max_break<\/code>, und <code>max_steer<\/code> zu Behaviors wie dem <code>FollowLaneBehavior<\/code>Auf diese Weise k\u00f6nnen interne Parameter offengelegt werden, wodurch sich die M\u00f6glichkeiten zur Steuerung eines Fahrzeugs erh\u00f6hen. 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\u00e4lt. Wenn man die Parameter des zugrundeliegenden PID-Controllers kontrolliert, kann man jedes Fahrzeug reibungslos steuern. Das Hinzuf\u00fcgen neuer Parameter zu Behaviors und Actions, die sich direkt auf ein Fahrzeug auswirken, und der PID-Controller werden sp\u00e4ter in diesem Blogbeitrag erl\u00e4utert.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"322\" src=\"https:\/\/rocketloop.de\/wp-content\/uploads\/2022\/08\/carla-generating-test-2-1024x322.jpeg\" alt=\"\" class=\"wp-image-10284\" srcset=\"https:\/\/rocketloop.de\/wp-content\/uploads\/2022\/08\/carla-generating-test-2-1024x322.jpeg 1024w, https:\/\/rocketloop.de\/wp-content\/uploads\/2022\/08\/carla-generating-test-2-300x94.jpeg 300w, https:\/\/rocketloop.de\/wp-content\/uploads\/2022\/08\/carla-generating-test-2-768x241.jpeg 768w, https:\/\/rocketloop.de\/wp-content\/uploads\/2022\/08\/carla-generating-test-2-1536x482.jpeg 1536w, https:\/\/rocketloop.de\/wp-content\/uploads\/2022\/08\/carla-generating-test-2-18x6.jpeg 18w, https:\/\/rocketloop.de\/wp-content\/uploads\/2022\/08\/carla-generating-test-2.jpeg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Einstellen der Fahrzeugbewegung bei Verwendung von Scenic<\/h2>\n\n\n\n<p>Ein Auto in Scenic kann auf verschiedene Arten gesteuert werden. Zu Beginn des Blog-Beitrags werden die direkten M\u00f6glichkeiten mit Actions und Behaviors erw\u00e4hnt. Andere Actions, die Sie mit Ihrem Auto durchf\u00fchren k\u00f6nnen und die eine direkte und unmittelbare Wirkung haben, sind:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>SetBrakeAction<\/code><\/li>\n\n\n\n<li><code>SetSpeedAction<\/code><\/li>\n\n\n\n<li><code>SetSteerAction<\/code><\/li>\n\n\n\n<li><code>SetThrottleAction<\/code><\/li>\n<\/ul>\n\n\n\n<p>Weitere Einzelheiten finden Sie in der <a href=\"https:\/\/scenic-lang.readthedocs.io\/en\/latest\/modules\/scenic.domains.driving.actions.html#module-scenic.domains.driving.actions\">Documentation zu den Actions<\/a>.<\/p>\n\n\n\n<p>Standardparameter f\u00fcr das <a href=\"https:\/\/scenic-lang.readthedocs.io\/en\/latest\/_modules\/scenic\/domains\/driving\/behaviors.html#FollowLaneBehavior\">FollowLaneBehavior<\/a> sind:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>target_speed<\/code>: Zielgeschwindigkeit in m\/s f\u00fcr das Fahrzeug<\/li>\n\n\n\n<li><code>laneToFollow<\/code>: Fahrspur f\u00fcr das Fahrzeug<\/li>\n\n\n\n<li><code>is_oppositeTraffic<\/code>: Boolean, wenn es einen entgegengesetzten Verkehr gibt<\/li>\n<\/ul>\n\n\n\n<p>Wir haben dem <code>FollowLaneBehavior<\/code> weitere Parameter hinzugef\u00fcgt, um das Auto besser zu steuern und Effekte wie die im vorherigen Abschnitt erw\u00e4hnte Drosselkappe zu ber\u00fccksichtigen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>max_throttle<\/code>: wie stark die Drosselklappe gedr\u00fcckt werden kann, um die Drosselkappe anzuheben.<\/li>\n\n\n\n<li><code>max_brake<\/code>: Float, wie stark die Drosselklappe gedr\u00fcckt werden kann<\/li>\n\n\n\n<li><code>max_steer<\/code>: maximaler Lenkwinkel<\/li>\n\n\n\n<li><code>turn_speed<\/code>: Geschwindigkeit beim Abbiegen (links oder rechts)<\/li>\n\n\n\n<li><code>max_steer_per_timestep<\/code>: maximaler Lenkwinkel pro Zeitschritt (Simulation)<\/li>\n<\/ul>\n\n\n\n<p class=\" translation-block\">Wir denken, dass die Standardbehaviors und -actions f\u00fcr die meisten Szenarien ausreichen. Wenn Sie jedoch benutzerdefinierte \u00c4nderungen vornehmen oder Scenic intern bearbeiten m\u00f6chten, ist der Quellcode verf\u00fcgbar. Derzeit sind unsere ma\u00dfgeschneiderten Updates nur in unserer <a href=\"https:\/\/gitlab.com\/rocketloop\/hella-aglaia\/Scenic\" target=\"_self\">Scenic fork<\/a> enthalten. Wir sind jedoch dabei, diese \u00c4nderungen 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 K<sub>p<\/sub>, K<sub>i<\/sub>, und K<sub>d<\/sub>, die jeweils f\u00fcr den proportionalen, integralen und derivativen Teil des PID-Controllers stehen, werden empirisch und nacheinander eingestellt. K<sub>p<\/sub> steuert, wie steil das Fahrzeug auf die Ziellinie zusteuert. H\u00f6here Werte von K<sub>p<\/sub> f\u00fchren dazu, dass das Fahrzeug \u00fcber die Ziellinie hinausschie\u00dft. Als Gegenma\u00dfnahme d\u00e4mpft K<sub>d<\/sub> das \u00dcberschie\u00dfen, d.h. es verringert den Winkel zwischen der Fahrlinie und der Ziellinie, wenn man sich ihr n\u00e4hert. Wenn K<sub>d<\/sub> zu gro\u00df ist, braucht das Fahrzeug daher sehr lange, um die Ziellinie zu erreichen. Da wir versuchen, ein optimales Steuerungsproblem numerisch zu l\u00f6sen, k\u00f6nnen sich kleinere Fehler ansammeln, so dass die Kabine nicht zur Ziellinie konvergiert, sondern zu einer Linie in der N\u00e4he davon. Um diesen Konvergenzfehler zu verringern, kann K<sub>i<\/sub> erh\u00f6ht werden. In unserem Anwendungsfall war es nicht notwendig,  K<sub>i<\/sub> gr\u00f6\u00dfer als 0 zu setzen.<\/p>\n\n\n\n<p>Leider bot Scenic zum Zeitpunkt der Erstellung keine M\u00f6glichkeit, die PID-Parameter von au\u00dfen zu steuern. Deshalb haben wir behaviors wie das <code>FollowLaneBehavior<\/code> so erweitert, dass auch die Eingabe der Parameter K<sub>p<\/sub>, K<sub>d<\/sub>, und K<sub>i<\/sub>m\u00f6glich ist, die an den PID-Controller \u00fcbergeben werden.<\/p>\n\n\n\n<p>Die Werte f\u00fcr den PID-Controller m\u00fcssen f\u00fcr jedes Szenario individuell eingestellt werden, da die Steuerung des Fahrzeugs mit Gas und Lenkung, wie bereits erw\u00e4hnt, von Fahrzeugmodell zu Fahrzeugmodell unterschiedlich ist. Wir folgten der empfohlenen Strategie, K<sub>p<\/sub>, K<sub>d<\/sub>, und K<sub>i<\/sub> auf 0 zu initialisieren und die Werte nacheinander in der gleichen Reihenfolge einzustellen, bis das Ergebnis zufriedenstellend war. Die Einstellung von K<sub>p<\/sub>, K<sub>d<\/sub>, und K<sub>i<\/sub> ist h\u00f6chstwahrscheinlich ein Schritt, den Sie f\u00fcr Ihre Verkehrssimulation durchf\u00fchren m\u00fcssen. Ein wichtiger Hinweis ist, dass Sie den internen Scenic-Code aktualisieren m\u00fcssen, um die Parameter f\u00fcr K<sub>p<\/sub>, K<sub>d<\/sub>, und K<sub>i<\/sub> an die Behaviors \u00fcbergeben zu k\u00f6nnen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wie sich die Framerate auf die Behaviors in Scenic auswirkt<\/h2>\n\n\n\n<p>Da Scenic Simulationen der von Ihnen definierten Szenarien durchf\u00fchrt, werden intern verschiedene Schritte, z. B. f\u00fcr Frames oder Simulationen, ber\u00fccksichtigt. Wir haben beobachtet, dass die Bilder pro Sekunde (FPS) die Lenkung beeinflussen. H\u00f6here FPS ergaben eine steilere Lenkung und unterschiedliche Geschwindigkeiten f\u00fcr verschiedene Fahrzeugmodelle. Dies haben wir auch bei der Verwendung des Zielgeschwindigkeitsparameters des <code>FollowLaneBehavior<\/code>beobachtet. Wir glauben, dass dies auch eine Folge der im ersten Abschnitt erw\u00e4hnten Drosselkappe ist. Daher sollten Sie die gew\u00fcnschten FPS einstellen, bevor Sie alle Parameter f\u00fcr Ihre Verkehrssimulation optimieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zusammenfassung<\/h2>\n\n\n\n<p>Wir haben gesehen, dass Scenic einige Probleme bei der Anpassung der Fahrzeugtrajektorien mit sich bring. Die Implementierung von benutzerdefinierten \u00c4nderungen, z. B. f\u00fcr den PID-Controller oder Parameter wie <code>max_throttle<\/code> , erm\u00f6glichte jedoch eine bessere Gesamtsteuerung des Fahrzeugs. Als das Research- und Development-Team von Rocketloop die Probleme erkannte und untersuchte, wie sie zu l\u00f6sen waren, fand es eine L\u00f6sung, die zu einer glaubw\u00fcrdigeren Simulation f\u00fchrte.<\/p>","protected":false},"excerpt":{"rendered":"<p>This blog post identifies best practices when using Scenic with CARLA. By default, Scenic provides actions and behaviors to control a car. In practice, however, we found that many internal parameters affecting car control are&#8230;<\/p>","protected":false},"author":4,"featured_media":10284,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_seopress_robots_primary_cat":"54","footnotes":""},"categories":[54],"tags":[],"class_list":["post-9797","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-carla-simulator"],"acf":[],"_links":{"self":[{"href":"https:\/\/rocketloop.de\/de\/wp-json\/wp\/v2\/posts\/9797","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rocketloop.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rocketloop.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rocketloop.de\/de\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/rocketloop.de\/de\/wp-json\/wp\/v2\/comments?post=9797"}],"version-history":[{"count":10,"href":"https:\/\/rocketloop.de\/de\/wp-json\/wp\/v2\/posts\/9797\/revisions"}],"predecessor-version":[{"id":11335,"href":"https:\/\/rocketloop.de\/de\/wp-json\/wp\/v2\/posts\/9797\/revisions\/11335"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rocketloop.de\/de\/wp-json\/wp\/v2\/media\/10284"}],"wp:attachment":[{"href":"https:\/\/rocketloop.de\/de\/wp-json\/wp\/v2\/media?parent=9797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rocketloop.de\/de\/wp-json\/wp\/v2\/categories?post=9797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rocketloop.de\/de\/wp-json\/wp\/v2\/tags?post=9797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}