J1939 Fahrzeugsimulator

Fahrzeugsimulator mit J1939 CAN-Unterstützung

Überblick

Der Fahrzeugsimulator ( gva-vehicle-sim ) ist ein umfassendes Test- und Entwicklungswerkzeug für die GVA-Plattform (Generic Vehicle Architecture). Er bietet realistische Fahrzeugdynamiksimulationen mit integrierter J1939-CAN-Bus-Nachrichtengenerierung und ermöglicht Hardware-in-the-Loop-Tests ohne physische Fahrzeughardware.

Vorteile der J1939-Simulation für die Nachrichtengenerierung

🎯 Vorteile bei Entwicklung und Tests

  1. Hardwareunabhängige Entwicklung

    • Entwicklung und Test von GVA-Anwendungen ohne physische CAN-Hardware
    • Teure Fahrzeugsteuergeräte oder Prüfstände werden nicht benötigt.
    • Parallele Entwicklung in mehreren Teams
  2. Realistisches Fahrzeugverhalten

    • Generiert authentische J1939 Parametergruppennummern (PGNs) und verdächtige Parameternummern (SPNs)
    • Simuliert realistische Fahrzeugdynamik (Geschwindigkeit, Drehzahl, Gangwechsel, Bremsen)
    • Liefert zeitlich synchronisierte Sensordaten
  3. Kostenreduzierung

    • Dadurch entfällt der Bedarf an physischen Testfahrzeugen in der frühen Entwicklungsphase.
    • Die virtuelle CAN-Schnittstelle ( vcan0 ) ermöglicht Tests auf jeder Linux-Workstation.
    • Reduziert den Verschleiß der Hardware
  4. Schnelles Prototyping

    • Sofortige Feedbackschleife für die Algorithmenentwicklung
    • Einfache Szenarioerstellung und -wiedergabe
    • Konfigurierbare Nachrichtenraten und Datenmuster
  5. Integrationstests

    • J1939-Gateway-Funktionalität validieren
    • Testdatenfluss von CAN zu DDS-Themen
    • Überprüfen Sie die Reaktionsfähigkeit der HMI auf Fahrzeugparameter
  6. Reproduzierbare Tests

    • Deterministisches Fahrzeugverhalten
    • Wiederholbare Testszenarien
    • Einheitliche Ausgangsbasis für Regressionstests

📊 J1939 Nachrichtenunterstützung

✅ Vollständig unterstützte PGNs (im Fahrzeugsimulator implementiert)

Der Fahrzeugsimulator generiert aktiv die folgenden J1939-Nachrichten über CAN und veröffentlicht sie über das Gateway an DDS:

PGN Verhexen Name Rate SPNs Beschreibung
61443 0xF003 EEC2 – Elektronisches Motorsteuergerät 2 50 ms 91, 92 Gaspedalstellung, Motorlast in Prozent
61444 0xF004 EEC1 - Elektronisches Motorsteuergerät 1 100 ms 190, 512, 513 Motordrehzahl (U/min), vom Fahrer gefordertes Drehmoment, tatsächliches Motordrehmoment
61445 0xF005 ETC2 – Elektronisches Getriebesteuergerät 2 100 ms 522, 523, 524 Kupplungsstellung, eingelegter Gang, aktueller Gang
61449 0xF009 VDC2 – Fahrzeugdynamikregelung 2 100 ms 1807, 1808 Lenkradwinkel, Gierrate
65253 0xFEE5 STUNDEN - Motorstunden 1s 247 Gesamte Motorbetriebsstunden
65256 0xFEE8 VDS – Fahrzeugrichtung/Geschwindigkeit 250 ms 517, 519, 586 Geschwindigkeit über Grund, Kompasskurs, Kurs
65258 0xFEEA ALT - Höhe 1s 580 GPS-Höhenmeter über dem Meeresspiegel
65262 0xFEEE ET1 - Motortemperatur 1 1s 110, 174, 175 Motorkühlmitteltemperatur, Kraftstofftemperatur, Öltemperatur
65263 0xFEEF EFLP – Motorflüssigkeitsstand/-druck 500 ms 96, 100, 94 Kraftstoffstand, Öldruck, Kraftstoffförderdruck
65265 0xFEF1 CCVS – Tempomat/Fahrzeuggeschwindigkeit 100 ms 84, 597, 598 Radbasierte Fahrzeuggeschwindigkeit, Bremsschalter, Kupplungsschalter
65267 0xFEF3 VP - Fahrzeugposition 250 ms 584, 585 GPS-Breitengrad, Längengrad
65269 0xFEF5 AMB – Umgebungsbedingungen 1s 108, 171 Luftdruck, Umgebungslufttemperatur
65271 0xFEF7 VEP1 - Fahrzeugelektrische Energie 1 1s 167, 168, 158 Batteriespannung, Lichtmaschinenspannung, Ladesystemspannung
65276 0xFEFC DD – Dash Display 1s 182, 183 Kraftstoffverbrauch (l/h), momentaner Kraftstoffverbrauch
0xEF00 0xEF00 PROP_A - Proprietary A (IONNIC USM) 250 ms - LED-Steuerung für IONNIC USM ES-Key-Bedienfeld

Detaillierte SPN-Liste (Alle unterstützten Parameter)

SPN Parametername PGN Einheit Auflösung Offset Reichweite
84 Radbasierte Fahrzeuggeschwindigkeit 65265 km/h 1/256 km/h 0 0-250 km/h
91 Gaspedalposition 61443 % 0,4 % 0 0-100%
92 Prozentuale Motorlast bei aktueller Drehzahl 61443/61444 % 1% 0 0-100%
94 Kraftstoffförderdruck 65263 kPa 4 kPa 0 0-1000 kPa
96 Kraftstoffstand 65263 % 0,4 % 0 0-100%
100 Motoröldruck 65263 kPa 4 kPa 0 0-1000 kPa
108 Barometrischer Druck 65269 kPa 0,5 kPa 0 0-125 kPa
110 Motorkühlmitteltemperatur 65262 °C 1°C -40 -40 bis +210 °C
158 Ladesystemspannung 65271 V 0,05 V 0 0-3212 V
167 Lichtmaschinenspannung 65271 V 0,05 V 0 0-3212 V
168 Batteriespannung 65271 V 0,05 V 0 0-3212 V
171 Umgebungslufttemperatur 65269 °C 0,03125°C -273 -273 bis +1735°C
174 Kraftstofftemperatur 65262 °C 1°C -40 -40 bis +210 °C
175 Motoröltemperatur 65262 °C 0,03125°C -273 -273 bis +1735°C
182 Treibstoffpreis 65276 L/h 0,05 l/h 0 0-3212 l/h
183 Momentaner Kraftstoffverbrauch 65276 km/L 1/512 km/L 0 0-125 km/l
190 Motordrehzahl 61444 Drehzahl 0,125 U/min 0 0-8031 U/min
247 Gesamtbetriebsstunden 65253 H 0,05 h 0 0-210.554.060 h
512 Motordrehmoment nach Fahrerwunsch 61444 % 1% -125 -125 % bis +125 %
513 Tatsächliches Motordrehmoment 61444 % 1% -125 -125 % bis +125 %
517 Geschwindigkeit über Grund 65256 km/h 1/256 km/h 0 0-250 km/h
519 Kurs über Grund 65256 Grad 1/128 Grad 0 0-360°
522 Kupplungspedalposition 61445 % 0,4 % 0 0-100%
523 Aktueller Gang der Getriebeübersetzung 61445 Gang 1 -125 -125 bis +125
524 Getriebe eingelegter Gang 61445 Gang 1 -125 -125 bis +125
580 Höhe 65258 M 0,125 m -2500 -2500 bis +5531 m
584 Breite 65267 Grad 10⁻⁷ Grad -210 -90° bis +90°
585 Länge 65267 Grad 10⁻⁷ Grad -210 -180° bis +180°
586 Kompasspeilung 65256 Grad 1/128 Grad 0 0-360°
597 Bremslichtschalter 65265 - 2 Bit - Aus/Ein/Fehler/Nicht verfügbar
598 Kupplungsschalter 65265 - 2 Bit - Aus/Ein/Fehler/Nicht verfügbar
899 Motordrehmomentmodus 61444 - 1 0 0-15 (Aufzählung)
1807 Lenkradwinkel 61449 Rad 1/1024 rad -31,374 -31,374 bis +31,374 rad
1808 Gierrate 61449 rad/s 1/8192 rad/s -3,92 -3,92 bis +3,92 rad/s

Insgesamt: 15 PGNs, 33 SPNs aktiv simuliert

🔲 Nicht unterstützte PGNs (Noch nicht implementiert)

Die folgenden J1939-Meldungen werden derzeit vom Fahrzeugsimulator nicht generiert . Sie stellen potenzielle zukünftige Erweiterungen dar:

PGN Verhexen Name Priorität Anwendungsfall Komplexität
61440 0xF000 ERC1 - Elektronischer Retarderregler 1 Niedrig Retarder-/Motorbremssteuerung Medium
61441 0xF001 EBC1 – Elektronischer Bremsregler 1 Hoch ABS, Bremssystemstatus Hoch
61442 0xF002 ETC1 – Elektronisches Getriebesteuergerät 1 Medium Getriebemodus, Schaltvorgang läuft Medium
64971 0xFDCB VDHR – Fahrzeugabstand (hohe Auflösung) Hoch Kilometerzähler mit 5 mm Auflösung Niedrig
64972 0xFDCC TCO1 - Fahrtenschreiber Medium Fahrerkarte, Geschwindigkeit vom Fahrtenschreiber Niedrig
65132 0xFE6C TPMS – Reifendrucküberwachung Medium Reifendruck/-temperatur Medium
65217 0xFEC1 PTODE – Zapfwellenantrieb Niedrig Leistungsabtriebsstatus Niedrig
65248 0xFEE0 VDIST – Hochauflösende Fahrzeugdistanz Hoch Gesamtdistanz mit 5-m-Auflösung Niedrig
65251 0xFEE3 ECFG - Motorkonfiguration Niedrig Motorenhersteller, Modell, Seriennummer Niedrig
65252 0xFEE4 SHUTDN - Herunterfahren Niedrig Motorabschalt-Override Niedrig
65260 0xFEEC VI - Fahrzeugidentifizierung Medium Vollständige VIN-Übertragung (teilweise implementiert) Niedrig
65279 0xFEFF CCVS1 - Tempomat/Fahrzeuggeschwindigkeit 1 Medium Erweiterte Geschwindigkeitsregelungsdaten Niedrig
65098 0xFE4A EBC2 – Elektronischer Bremsregler 2 Hoch Status der Einzelradbremse Hoch
65099 0xFE4B EBC3 – Elektronischer Bremsregler 3 Medium Bremsbelagverschleiß Medium
65110 0xFE56 IC1 - Einlass-/Abluftbedingungen 1 Niedrig Ansaugkrümmerdruck/-temperatur Medium
65172 0xFE84 RQST – Anfrage Niedrig Spezifische PGN von der ECU anfordern Medium
65226 0xFECA AT1I – Nachbehandlung 1 Einlassgas Niedrig Einlass des Dieselpartikelfilters Niedrig
65227 0xFECB AT1O – Nachbehandlung 1 Auslassgas Niedrig DPF-Auslass, NOx-Sensor Niedrig
65247 0xFEDF EFL/P2 - Motorflüssigkeitsstand/Druck 2 Niedrig Zusätzliche Flüssigkeitsdrücke Niedrig
65266 0xFEF2 LFE – Kraftstoffverbrauch Medium Durchschnittlicher Kraftstoffverbrauch pro Fahrt Niedrig
65270 0xFEF6 TD - Turbolader Niedrig Ladedruck, Turbinendrehzahl Medium
65272 0xFEF8 VEP2 – Fahrzeugelektrische Leistung 2 Niedrig Zusätzliche elektrische Busse Niedrig

Warum diese nicht umgesetzt werden

Grund Betroffene PGNs Zählen
Nicht relevant für grundlegende Fahrzeugsimulationen ERC1, PTODE, SHUTDN, ECFG, AT1I, AT1O, TD 7
Erfordert ein Reifenphysikmodell TPMS 1
Benötigt ABS/Bremsenmodell EBC1, EBC2, EBC3 3
Erfordert ein fortschrittliches Getriebe ETC1 1
Niedrige Priorität / kosmetisch VI (VIN), VDHR, VDIST, TCO1, LFE 5
Erfordert ein Abgas-/Emissionsmodell IC1, AT1I, AT1O 3
Protokollebene (nicht Fahrzeugdaten) RQST 1
Duplikate/erweiterte Versionen CCVS1, EFL/P2, VEP2 3

Insgesamt: 22 nicht unterstützte PGNs

🛠️ Technische Merkmale

  • OpenDRIVE-Straßennetzunterstützung : Realistische Straßengeometrie abbilden
  • Simulation eines Automatikgetriebes : Gangwechsel abhängig von Geschwindigkeit und Gaspedalstellung
  • Physikbasierte Dynamik : Beschleunigung, Bremsen, Lenkung mit realistischen Randbedingungen
  • DDS-Integration : Direkte Veröffentlichung in J1939 Automotive PSM-Themen
  • Qt6-GUI : Echtzeitvisualisierung und manuelle Steuerung

J1939 zu DDS Gateway-Architektur

Das folgende Sequenzdiagramm veranschaulicht den kompletten Datenfluss von J1939 CAN-Bus-Nachrichten über das Gateway zu den DDS-Abonnenten:

sequenceDiagram participant Sim as Vehicle Simulator participant CAN as CAN Bus (vcan0) participant Reader as SocketCanReader participant Decoder as J1939Decoder participant Gateway as J1939Gateway participant DDS as DDS Topic participant HMI as GVA HMI/LDMX Note over Sim,CAN: Message Generation Phase Sim->>Sim: Calculate vehicle state
(speed, RPM, gear) Sim->>CAN: Send PGN 61444
(EEC1: Engine Speed) Sim->>CAN: Send PGN 65265
(CCVS: Vehicle Speed) Sim->>CAN: Send PGN 61445
(ETC2: Transmission) Note over CAN,Decoder: CAN Reception Phase CAN->>Reader: Read CAN frame (29-bit ID) Reader->>Reader: Validate frame Reader->>Decoder: emit canFrameReceived() Note over Decoder,Gateway: J1939 Decode Phase Decoder->>Decoder: Extract PGN from CAN ID
(bits 24-8) Decoder->>Decoder: Extract source address
(bits 7-0) Decoder->>Decoder: Extract priority
(bits 28-26) Decoder->>Decoder: Decode SPNs from payload
(bit position, scale, offset) Decoder->>Gateway: emit j1939MessageDecoded() Note over Gateway,DDS: DDS Publishing Phase Gateway->>Gateway: Create C_Parameter_Group_Definition
(if first time) Gateway->>DDS: Publish PGN definition loop For each SPN in message Gateway->>Gateway: Create C_Parameter message
(sourceID, PGN, SPN, value) Gateway->>Gateway: Set metadata
(timestamp, status) Gateway->>DDS: Publish parameter end Note over DDS,HMI: Consumption Phase DDS->>HMI: onSampleReceived()
(C_Parameter) HMI->>HMI: Update speedometer HMI->>HMI: Update tachometer HMI->>HMI: Update gear indicator Note over Gateway: Status Reporting (1 Hz) Gateway->>Gateway: Update data source status Gateway->>DDS: Publish C_Data_Source
(gateway health)

Erläuterung des Sequenzdiagramms

1. Nachrichtengenerierungsphase

  • Der Fahrzeugsimulator berechnet realistische Fahrzeugparameter basierend auf den Eingaben des Fahrers und den Gesetzen der Physik.
  • Kodiert Parameter in J1939 CAN-Frames mit korrekter PGN/SPN-Struktur
  • Sendet an die virtuelle CAN-Schnittstelle (vcan0)

2. CAN-Empfangsphase

  • Der Qt-Thread SocketCanReader liest kontinuierlich von der CAN-Schnittstelle.
  • Prüft das CAN-Frame-Format (29-Bit erweiterte ID)
  • Sendet ein Qt-Signal mit Rohdaten aus dem Frame.

3. J1939 Dekodierungsphase

  • Der J1939Decoder extrahiert Protokollinformationen aus der CAN-ID:
    • PGN : Parametergruppennummer (kennzeichnet den Nachrichtentyp)
    • Quelladresse : Steuergerätekennung (0-253)
    • Priorität : Dringlichkeit der Nachricht (0 = höchste, 7 = niedrigste)
  • Dekodiert die Nutzdaten mithilfe der Konfiguration in einzelne SPNs:
    • Bitposition und Länge
    • Skalierungsfaktor und Offset
    • Ingenieureinheiten

4. DDS-Veröffentlichungsphase

  • Das Gateway veröffentlicht C_Parameter_Group_Definition (PGN-Metadaten) beim ersten Auftreten.
  • Für jeden SPN in der Nachricht:
    • Erstellt C_Parameter Nachricht mit Wert und Status.
    • Fügt Zeitstempel und Quellenkennung hinzu
    • Veröffentlicht im DDS-Thema
  • Regelmäßige Statusaktualisierungen (1 Hz) veröffentlichen den Gateway-Zustand

5. Verbrauchsphase

  • GVA-Anwendungen (HMI, LDMX) abonnieren J1939-DDS-Themen
  • Parameteraktualisierungen über DDS-Middleware empfangen
  • Aktualisierung der Benutzeroberflächenelemente (Tachometer, Drehzahlmesser, Ganganzeige)

Protokolldetails

J1939 CAN-ID-Struktur (29 Bit)

 Bits 28-26: Priority (0-7)
Bit  25:    Reserved
Bit  24:    Data Page (DP)
Bits 23-16: PDU Format (PF)
Bits 15-8:  PDU Specific (PS) - group extension or destination
Bits 7-0:   Source Address (SA)

PGN = (DP << 16) | (PF << 8) | (PS if PF >= 240 else 0)

Beispiel CAN-Frame-Dekodierung

 CAN ID: 0x18F00400
Binary: 00011000111100000000010000000000

Priority:  0x6 (bits 28-26) = 6 (normal priority)
Reserved:  0   (bit 25)
DP:        0   (bit 24)
PF:        0xF0 (bits 23-16) = 240 (broadcast)
PS:        0x04 (bits 15-8)  = 4 (group extension)
SA:        0x00 (bits 7-0)   = 0 (engine controller)

PGN = (0 << 16) | (240 << 8) | 4 = 61444 (EEC1 - Engine Controller 1)

Schnellstart

1. Fahrzeugsimulator entwickeln

 cd build
cmake ..
make gva-vehicle-sim

2. Virtuelles CAN einrichten

 sudo scripts/test/j1939/setup-vcan.sh

3. Fahrzeugsimulator starten

 # GUI mode with OpenDRIVE track
./build/bin/gva-vehicle-sim \
  --domain=0 \
  --opendrive=data/opendrive/ZalaZONE_full.xodr \
  --can-interface=vcan0

# Headless mode with J1939 only
./build/bin/gva-vehicle-sim \
  --domain=0 \
  --can-interface=vcan0 \
  --headless

4. J1939-Gateway starten

 ./build/bin/gva-j1939-gateway \
  --domain=0 \
  --interface=vcan0 \
  --config=/etc/gva/j1939-config.json

5. Überwachung mit LDMX

 ./build/bin/ldmx
# Navigate to J1939 tab to see live parameters

Konfiguration

Fahrzeugsimulator-Konfiguration

Erstelle vehicle-sim-config.json :

 {
  "j1939": {
    "enabled": true,
    "sourceAddress": 0,
    "gatewayResourceId": 1000,
    "updateRateHz": 10
  },
  "vehicle": {
    "maxSpeed": 120.0,
    "maxRpm": 6000,
    "gearRatios": [3.5, 2.5, 1.8, 1.3, 1.0, 0.8],
    "engineIdleRpm": 800
  }
}

J1939 Gateway-Konfiguration

Die Definitionen von PGN/SPN und die Skalierungsparameter finden Sie in der /etc/gva/j1939-config.json .

Anwendungsfälle

1. HMI-Entwicklung

  • Entwicklung eines Fahrzeug-Dashboards ohne physisches Fahrzeug
  • Testinstrumentencluster-Rendering und -Animationen
  • Warn-/Alarmschwellenwerte überprüfen

2. Algorithmentest

  • Testen Sie Eco-Fahralgorithmen mit simuliertem Kraftstoffverbrauch
  • Validierung der Logik für vorausschauende Wartung
  • Test der Entscheidungsfindung beim autonomen Fahren

3. Integrationstests

  • Überprüfen Sie den durchgängigen Datenfluss: CAN → DDS → Anwendung
  • Test der Gateway-Performance unter Last
  • Datensynchronisierung zwischen Subsystemen validieren

4. Schulung & Demonstration

  • Sichere Umgebung für die Bedienerschulung
  • Kundenvorführungen ohne Fahrzeug
  • Lehrmittel für die GVA-Architektur

Leistungsmerkmale

Metrisch Wert
CAN-Frame-Generierungsrate Bis zu 100 Hz pro PGN
DDS-Veröffentlichungslatenz < 5 ms (lokal)
Gateway-Durchsatz > 1000 PGNs/Sek.
CPU-Auslastung (Simulator + Gateway) < 10 % (4-Kern-System)
Speicherbedarf ~50 MB (zusammen)

Vergleich: Physikalische vs. simulierte

Aspekt Physisches Fahrzeug Simulator
Hardwarekosten 50.000 $ und mehr 0 € (nur Software)
Einrichtungszeit Stunden (Verkabelung, Konfiguration) Minuten
Reproduzierbarkeit Eingeschränkt (Fahrervariabilität) Perfekt (deterministisch)
Sicherheit Schadens-/Verletzungsgefahr Null Risiko
Szenariosteuerung Schwierig (Wetter, Verkehr) Vollständige Kontrolle
Datenprotokollierung Benötigt Ausrüstung Eingebaut
Paralleltests Ein Fahrzeug nach dem anderen Mehrere Instanzen

Fehlerbehebung

Häufige Probleme

CAN-Schnittstelle nicht gefunden

 # Verify vcan0 exists
ip link show vcan0

# Recreate if needed
sudo scripts/test/j1939/setup-vcan.sh

Keine DDS-Meldungen

 # Check gateway is running
pgrep -a gva-j1939-gateway

# Verify domain ID matches
./build/bin/gva-j1939-gateway --domain=0
./build/bin/gva-vehicle-sim --domain=0

Gateway dekodiert Nachrichten nicht

 # Check CAN frames are being sent
candump vcan0

# Verify configuration file
cat /etc/gva/j1939-config.json

Fordern Sie noch heute eine Vorführung an.