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
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
Realistisches Fahrzeugverhalten
- Generiert authentische J1939 Parametergruppennummern (PGNs) und verdächtige Parameternummern (SPNs)
- Simuliert realistische Fahrzeugdynamik (Geschwindigkeit, Drehzahl, Gangwechsel, Bremsen)
- Liefert zeitlich synchronisierte Sensordaten
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
Schnelles Prototyping
- Sofortige Feedbackschleife für die Algorithmenentwicklung
- Einfache Szenarioerstellung und -wiedergabe
- Konfigurierbare Nachrichtenraten und Datenmuster
Integrationstests
- J1939-Gateway-Funktionalität validieren
- Testdatenfluss von CAN zu DDS-Themen
- Überprüfen Sie die Reaktionsfähigkeit der HMI auf Fahrzeugparameter
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:
(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_ParameterNachricht mit Wert und Status. - Fügt Zeitstempel und Quellenkennung hinzu
- Veröffentlicht im DDS-Thema
- Erstellt
- 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-sim2. Virtuelles CAN einrichten
sudo scripts/test/j1939/setup-vcan.sh3. 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 \
--headless4. J1939-Gateway starten
./build/bin/gva-j1939-gateway \
--domain=0 \
--interface=vcan0 \
--config=/etc/gva/j1939-config.json5. Überwachung mit LDMX
./build/bin/ldmx
# Navigate to J1939 tab to see live parametersKonfiguration
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.shKeine 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=0Gateway dekodiert Nachrichten nicht
# Check CAN frames are being sent
candump vcan0
# Verify configuration file
cat /etc/gva/j1939-config.jsonFordern Sie noch heute eine Vorführung an.