Xilin Zhu
KontaktAvailable for work
← Alle Projekte

Laborprojekt · Kognitive Automobile Labor (KAL), KIT

Autonomer Fahrstack auf ROS 2

Teamprojekt im Kognitive Automobile Labor (KAL) am KIT — Schwerpunkt Wahrnehmung

2026.04 — 2026.07

Vollständiger ROS-2-Fahrstack auf dem KAL-Versuchsfahrzeug — RGB-D-Wahrnehmung, Überhol- und Pylonengassenplanung, Regelung mit Pure Pursuit und PID. Ich war hauptsächlich für die Wahrnehmung verantwortlich; der mit 400 Fahrzeugbildern trainierte Detektor erreicht 97,4 % mAP50.

ROS-2-Pakete
5
Bilder vom Versuchsfahrzeug im Detektionsdatensatz
400
Detektions-mAP50 (Validierung)
97.4%
Detektions-Recall (Validierung)
96.7%
Unit-Tests der Wahrnehmung
18

Überblick

  • Zeitraum und Rahmen — April bis Juli 2026, Kognitive Automobile Labor am Institut für Mess- und Regelungstechnik (MRT) des KIT, Teamprojekt
  • Meine Rolle — hauptsächlich Wahrnehmung (Datensatz, Detektionsmodell, 3D-Lokalisierung und Tracking mit RGB-D); außerdem Mitarbeit an Planung, Regelung und Tests am Fahrzeug
  • Aufgabe — auf der rechten Fahrspur einer Strecke mit unbekannter Rundenzahl fahren, ein geparktes Hindernisfahrzeug über die Gegenspur überholen, in eine Pylonengasse einfahren und an ihrem Ende anhalten
  • Plattform — Versuchsfahrzeug auf MuSHR-Basis mit Intel-RealSense-RGB-D-Frontkamera, ROS 2 Jazzy

Meine Beiträge

  • Wahrnehmung von klassischer Bildverarbeitung auf YOLO mit RGB-D umgestellt — die erste Version nutzte OpenCV für Pylonen (HSV-Segmentierung), Fahrbahnmarkierungen (Canny / Hough) und das Hindernisfahrzeug (RANSAC-Bodenebene und Höhensegmentierung). Ein Offline-Replay von 6 Aufzeichnungen mit 1.770 Bildern lief mit 8,1–9,6 ms pro Bild, zeigte aber versetzte RGB- und Tiefenbilder, als Fahrzeuge erkannte Heizkörper und Wände sowie in Randfällen nur 1,5 % gültige Fahrspurerkennungen. Ersetzt durch Tiefenausrichtung, YOLO-Detektion und Bestätigung über mehrere Bilder
  • Datensatz aufgebaut und Detektor iteriert — 400 Bilder vom Versuchsfahrzeug (334 Training / 66 Validierung) mit 1.232 Boxen in 3 Klassen: Pylone, Hindernisfahrzeug, Verkehrszeichen (die Zeichenklasse verhindert nur Verwechslungen mit Pylonen). Vom vorherigen Modell weitertrainiert: Auf demselben Validierungssatz stieg mAP50 von 67,7 % auf 97,4 % und der Recall von 57,4 % auf 96,7 %
  • YOLOv8n für ferne Pylonen verbessert — eine ferne Pylone belegt bei 640er-Eingabe nur etwa 4×8 Pixel. Deshalb Coordinate Attention in die mittleren und tiefen C2f-Blöcke eingefügt und einen hochauflösenden P2-Detektionskopf ergänzt; im kontrollierten Vergleich stieg der Recall von 91,6 % auf 99,4 % und mAP50-95 von 56,8 % auf 59,6 %, bei 2,0 statt 1,5 ms pro Bild. Die eingesetzten Gewichte enthalten Coordinate Attention; eine kleine Kompatibilitätsschicht lässt die unveränderte Ultralytics-Laufzeit auf dem Fahrzeug die eigenen Module laden
  • 3D-Lokalisierung und Tracking mit RGB-D — Rohtiefe der RealSense (848×480) in das Farbbild (1280×720) reprojiziert, die Vordergrundtiefe in jeder Box geclustert und Objekte erst nach 3 aufeinanderfolgenden Bestätigungen an die Planung weitergegeben; die Wahrnehmung veröffentlicht JSON-Ereignisse mit 10 Hz
  • Tests — 18 Unit-Tests für die Wahrnehmungskette (Tiefenausrichtung, 3D-Projektion, Track-Bestätigung, JSON-Schnittstelle u. a.); Offline-Replay von Aufzeichnungen zur Fehlersuche
  • Über die Wahrnehmung hinaus — Mitarbeit an Planung, Regelung und Tests am Fahrzeug

Technische Details

Architektur: fünf ROS-2-Pakete

Paket Sprache Aufgabe
kal_perception_yolo Python RGB-D-Synchronisation, Tiefenausrichtung, YOLO-Inferenz, 3D-Nachverarbeitung, Tracking, JSON-Ausgabe
trajectory Python Pfadauswahl, Verhaltens-Zustandsautomat, Überholen, Pylonengedächtnis und Mittellinie der Gasse, Zeitstempel der Trajektorie
kal_controller_PID C++ ROS-unabhängiges Regelgesetz aus Pure Pursuit und PID
kal_controller_ros_tool_PID C++ ROS-2-Komponente um den Regler: Parameter, TF, Sicherheitsprüfungen, Verlangsamung an Pylonen
autonomous_car_bringup Python Gemeinsamer Start von Wahrnehmung, Planung und Regelung

Datenfluss: RGB + Rohtiefe + Kalibrierung → Tiefenausrichtung → YOLO-Boxen → 3D-Position und Mehrbildbestätigung → JSON-Ereignisse → Zustandsautomat und Trajektorie → Pure Pursuit + PID → Ackermann-Lenk- und Geschwindigkeitsbefehle.

Planung und Regelung (Teamarbeit mit meiner Beteiligung)

  • Pfadauswahl — zwei vorab aufgezeichnete Rundkurse; eine Abstandsabstimmung wählt den, auf dem das Fahrzeug fährt
  • Verhaltens-Zustandsautomat — Pfad folgen → überholen → Pylonengasse → anhalten
  • Überholen — gaußförmiger seitlicher Versatz (bis 0,4 m) entlang der linken Normalen im Bereich von 3,5 m vor und nach dem Hindernis; innerhalb von 1,5 m wird der Pfad eingefroren, damit Fehldetektionen im toten Winkel das laufende Manöver nicht verzerren; 2 m nach dem Passieren wird der ursprüngliche Pfad wiederhergestellt
  • Pylonengasse — ein eigenes Topic bremst den Regler zuerst auf Pylonengeschwindigkeit; nach Track-ID gespeicherte Pylonen werden in eine linke und eine rechte Reihe geclustert, eine beschränkte Parabel liefert die Mittellinie, die in den Hauptpfad eingefügt wird; ist nur eine Reihe sichtbar, gilt sie als Barriere, und das Fahrzeug hält davor
  • Regelung — Pure Pursuit lenkt, PID korrigiert die Querabweichung; fehlt die Trajektorie, ist sie veraltet oder fällt TF aus, werden sofort Geschwindigkeit und Lenkwinkel null gesendet

Iterationen des Detektors

Version Trainingsdaten und Vorgehen mAP50 Recall
v1 Früherer Datensatz 67,7 % 57,4 %
v2 400 Fahrzeugbilder, von v1 weitertrainiert 97,4 % 96,7 %

Beide Zeilen wurden auf demselben Validierungssatz (66 Bilder, 213 Boxen) ausgewertet.

Vergleich zur Kleinobjekterkennung, gleicher Datensatz und gleiche Einstellungen (640er-Eingabe, Batch 8, 100 Epochen):

Modell Recall mAP50 mAP50-95 Pro Bild
YOLOv8n 91,6 % 96,7 % 56,8 % 1,5 ms
YOLOv8n + CA + P2 99,4 % 99,2 % 59,6 % 2,0 ms

Die Tabelle zeigt Ergebnisse aus dem Verbesserungszweig; auf dem Fahrzeug läuft der v3-Checkpoint mit Coordinate Attention.

Grenzen und Lehren

  • Keine automatisierten Tests für den Regler — die Wahrnehmung hat 18, das Pylonengedächtnis 11 Unit-Tests, der Kern aus Pure Pursuit und PID und seine ROS-Hülle dagegen keine; das ist die deutlichste Lücke im Projekt
  • Einfaches Überholen — immer nach links, ohne zu prüfen, ob die linke Seite frei ist, und ohne Bewegungsprognose des Hindernisses (das Hindernisfahrzeug in der Aufgabe steht)
  • Lehre aus der ersten Version — die klassische Bildverarbeitung lief schon mit 8,1–9,6 ms pro Bild, Geschwindigkeit war also nie der Engpass; die eigentlichen Probleme waren versetzte Tiefe und Fehldetektionen. Deshalb waren Tiefenausrichtung und Mehrbildbestätigung in der neuen Lösung genauso wichtig wie der Wechsel des Detektors