Kamera-Radar-Fusion · SiL-Validierung auf nuScenes

Wahrnehmungssystem zur Hinderniserkennung (Kamera + Radar), validiert als Software-in-the-Loop gegen den Realdatensatz nuScenes.

GitHub Repository

Motivation

In der realen ADAS-Entwicklung entfällt der größte Teil des Aufwands auf das Testen und Validieren von Wahrnehmungssoftware, nicht allein auf deren Entwicklung. Dieses Projekt bildet genau diesen Workflow vollständig ab: von den Anforderungen über die Systemarchitektur bis zu einer automatisierten, anforderungsbasierten Validierungs-Pipeline mit CI/CD.

Der Fokus liegt bewusst auf der Validierung: der Wahrnehmungsalgorithmus (Kamera-Detektion, Radarverarbeitung, Fusion) ist das System under Test; das eigentliche Ergebnis ist eine reproduzierbare Validierungsumgebung mit rückverfolgbaren Anforderungen, automatisierten Metriken und CI/CD.

ADAS Sensorik

1 - Systemgrenze & Ansatz

Die Architektur trennt zwei klar abgegrenzte Teile: das System under Test (das Wahrnehmungssystem) und das Test Harness (die Validierungsumgebung). Diese Trennung spiegelt die reale ADAS-Entwicklung wider - die Wahrnehmungssoftware läuft im Fahrzeug, die Validierung läuft offline gegen annotierte Daten.

Das System wird auf aufgezeichneten, human-annotierten nuScenes-Daten validiert:

  1. Rohdaten (Kamerabilder + Radarpunkte) werden aus nuScenes abgespielt (Replay).
  2. Die Wahrnehmungs-Pipeline erzeugt eine Liste erkannter Hindernisse.
  3. Die Detektionen werden gegen die Ground-Truth-Annotationen verglichen.
  4. Metriken (Recall, Precision, Latenz) werden automatisiert berechnet und dokumentiert.

2 - Architektur (Capella / MBSE)

Die logische Architektur wurde in Capella (Arcadia / MBSE) modelliert. Sie zeigt die beiden getrennten Bereiche und die Component Exchanges zwischen den Blöcken.

Logische Architektur: Perception System und Test Harness
BlockAufgabe
Data LoaderSensordaten einlesen, Kamera & Radar zeitlich synchronisieren
Camera PerceptionObjekte im Bild erkennen und klassifizieren
Radar ProcessingZiele aus Radarpunkten extrahieren (Distanz, Geschwindigkeit)
FusionKamera- und Radardetektionen per Datenassoziation zusammenführen
OutputHindernisliste filtern und strukturiert ausgeben
Ground TruthReferenzobjekte aus nuScenes-Annotationen bereitstellen
ValidationRecall / Precision gegen Ground Truth berechnen
Metrics ReportErgebnisse reproduzierbar dokumentieren

3 - Datenmodell (Design → Code)

Die zwischen den Blöcken ausgetauschten Datenstrukturen wurden zuerst im Design festgelegt und als Python-dataclasses implementiert und mit Unit-Tests abgesichert.

Klassendiagramm der Datenstrukturen
@dataclass
class DetectedObject:
    object_class: str      # "car", "pedestrian", ...
    x: float               # longitudinale Position
    y: float               # laterale Position
    velocity: float        # Relativgeschwindigkeit
    confidence: float      # Detektionskonfidenz 0..1
    timestamp: float       # zugehöriger Frame

4 - Fusion: Datenassoziation

Kamera und Radar können dasselbe reale Objekt erfassen. Die Fusion ordnet Detektionen einander zu, wenn sie im selben Frame liegen und räumlich nah beieinander sind (Distanzschwelle), und übernimmt die Klasse von der Kamera sowie Position/Geschwindigkeit vom Radar : jeder Sensor bringt seine Stärke ein.

Ablaufdiagramm der Fusionslogik

5 - Anforderungen & Traceability

Jede Muss-Anforderung ist über einen automatisierten Test rückverfolgbar. Jeder Test ist im Code mit seiner Anforderung markiert (@pytest.mark.requirement("REQ-XX")).

IDAnforderungZielwertStatus
REQ-08Recall für Fahrzeuge < 30 m≥ 0,90✅ getestet
REQ-09Precision (Fehldetektionen begrenzen)≥ 0,80✅ getestet
REQ-10Latenz pro Frame≤ 100 ms🚧 geplant
REQ-12Zeitliche Synchronisation Kamera / Radargleiche Frame✅ getestet

6 - Projektmanagement

Das Projekt wird mit GitHub Issues und einem Kanban-Board organisiert (Todo / In Progress / Done), der frei verfügbaren Entsprechung eines Jira-Boards. Entwickelt wird über Feature-Branches und Pull Requests; main bleibt jederzeit stabil.

GitHub Project Board (Kanban)
GitHub Project Board (Kanban)

7 - Aktueller Stand

KomponenteTechnologieStatus
Requirements-SpezifikationID-basiert, rückverfolgbar
SystemarchitekturCapella / MBSE
Detailed DesignDatenstrukturen, Klassendiagramm
Blöcke (Loader, Kamera, Radar, Fusion, Output)Python
Pipeline-IntegrationEnd-to-End
Validation & MetrikenRecall / Precision, TP/FP/FN
Tests34 Unit- & Integrationstests (pytest)
TraceabilityRequirement ↔ Test (pytest-Marker + Matrix)
CI/CDGitHub Actions
Git WorkflowFeature-Branches, Pull Requests
Reale nuScenes-DatenAnbindung Data Loader + Detektor🚧 nächster Schritt

Hinweis: Die Pipeline ist vollständig implementiert und getestet. Aktuell laufen die Blöcke mit synthetischen Platzhalterdaten; die Anbindung der realen nuScenes-Daten erfolgt, ohne die Architektur zu verändern (Kapselung : nur die Blockinternas werden ersetzt).