J1939 Fordonssimulator

Fordonssimulator med J1939 CAN-stöd

Översikt

Fordonssimulatorn ( gva-vehicle-sim ) är ett omfattande test- och utvecklingsverktyg för GVA-plattformen (Generic Vehicle Architecture). Den tillhandahåller realistisk simulering av fordonsdynamik med integrerad J1939 CAN-bussmeddelandegenerering , vilket möjliggör hårdvaru-i-loop-testning utan att fysisk fordonshårdvara krävs.

Fördelar med J1939-simulering för meddelandegenerering

🎯 Fördelar med utveckling och testning

  1. Hårdvaruoberoende utveckling

    • Utveckla och testa GVA-applikationer utan fysisk CAN-hårdvara
    • Inget behov av dyra fordonsstyrenheter eller testbänkar
    • Parallell utveckling över flera team
  2. Realistiskt fordonsbeteende

    • Genererar autentiska J1939-parametergruppnummer (PGN) och misstänkta parameternummer (SPN)
    • Simulerar realistisk fordonsdynamik (hastighet, varvtal, växlingar, bromsning)
    • Tillhandahåller tidssynkroniserade sensordata
  3. Kostnadsminskning

    • Eliminerar behovet av fysiska testfordon i tidig utveckling
    • Virtuellt CAN-gränssnitt ( vcan0 ) möjliggör testning på vilken Linux-arbetsstation som helst
    • Minskar slitage på fysisk hårdvara
  4. Snabb prototypframställning

    • Omedelbar återkopplingsslinga för algoritmutveckling
    • Enkelt scenarioskapande och uppspelning
    • Konfigurerbara meddelandehastigheter och datamönster
  5. Integrationstestning

    • Validera J1939-gatewayens funktionalitet
    • Testa dataflödet från CAN till DDS-ämnen
    • Verifiera HMI:s respons på fordonsparametrar
  6. Reproducerbar testning

    • Deterministiskt fordonsbeteende
    • Repeterbara testscenarier
    • Konsekvent baslinje för regressionstestning

📊 J1939 Meddelandesupport

✅ Fullt stödda PGN:er (implementerade i fordonssimulatorn)

Fordonssimulatorn genererar aktivt följande J1939-meddelanden över CAN och publicerar dem till DDS via gatewayen:

PGN Hexagon Namn Hastighet SPN:er Beskrivning
61443 0xF003 EEC2 - Elektronisk motorstyrenhet 2 50 ms 91, 92 Gaspedalens läge, motorns procentuella belastning
61444 0xF004 EEC1 - Elektronisk motorstyrenhet 1 100 ms 190, 512, 513 Motorvarvtal (RPM), förarens vridmoment, faktiskt motormoment
61445 0xF005 ETC2 - Elektronisk transmissionsstyrenhet 2 100 ms 522, 523, 524 Kopplingsläge, vald växel, aktuell växel
61449 0xF009 VDC2 - Fordonsdynamisk kontroll 2 100 ms 1807, 1808 Rattvinkel, girningshastighet
65253 0xFEE5 TIMMAR - Motortimmar 1s 247 Totalt antal drifttimmar för motorn
65256 0xFEE8 VDS - Fordonsriktning/hastighet 250 ms 517, 519, 586 Fart över grund, kompassriktning, kurs
65258 0xFEEA ALT - Höjd 1s 580 GPS-höjd över havet
65262 0xAVGIFT ET1 - Motortemperatur 1 1s 110, 174, 175 Motorns kylvätsketemperatur, bränsletemperatur, oljetemperatur
65263 0xFEEF EFLP - Motorvätskenivå/-tryck 500 ms 96, 100, 94 Bränslenivå, oljetryck, bränsletillförseltryck
65265 0xFEF1 CCVS - Farthållare/Fordonets hastighet 100 ms 84, 597, 598 Hjulbaserad fordonshastighet, bromsbrytare, kopplingsbrytare
65267 0xFEF3 VP - Fordonsposition 250 ms 584, 585 GPS-latitud, longitud
65269 0xFEF5 AMB - Omgivningsförhållanden 1s 108, 171 Barometertryck, omgivande lufttemperatur
65271 0xFEF7 VEP1 - Fordonselektrisk kraft 1 1s 167, 168, 158 Batterispänning, generatorspänning, laddningssystemspänning
65276 0xFEFC DD - Instrumentpanelens display 1s 182, 183 Bränsleförbrukning (L/h), momentan bränsleekonomi
0xEF00 0xEF00 PROP_A - Proprietär A (IONNIC USM) 250 ms - LED-kontroll för IONNIC USM ES-Key-panel

Detaljerad SPN-lista (alla parametrar som stöds)

SPN Parameternamn PGN Enhet Upplösning Offset Räckvidd
84 Hjulbaserad fordonshastighet 65265 km/h 1/256 km/h 0 0–250 km/h
91 Gaspedalens position 61443 % 0,4 % 0 0–100 %
92 Motorns procentuella belastning vid aktuell hastighet 61443/61444 % 1% 0 0–100 %
94 Bränsletillförseltryck 65263 kPa 4 kPa 0 0–1000 kPa
96 Bränslenivå 65263 % 0,4 % 0 0–100 %
100 Motoroljetryck 65263 kPa 4 kPa 0 0–1000 kPa
108 Barometertryck 65269 kPa 0,5 kPa 0 0–125 kPa
110 Motorns kylvätsketemperatur 65262 °C 1°C -40 -40 till +210°C
158 Laddningssystemets spänning 65271 V 0,05 V 0 0–3212 V
167 Generatorspänning 65271 V 0,05 V 0 0–3212 V
168 Batterispänning 65271 V 0,05 V 0 0–3212 V
171 Omgivande lufttemperatur 65269 °C 0,03125°C -273 -273 till +1735°C
174 Bränsletemperatur 65262 °C 1°C -40 -40 till +210°C
175 Motoroljetemperatur 65262 °C 0,03125°C -273 -273 till +1735°C
182 Bränslepris 65276 l/h 0,05 l/h 0 0–3212 l/h
183 Momentan bränsleekonomi 65276 km/L 1/512 km/l 0 0–125 km/l
190 Motorvarvtal 61444 varvtal 0,125 varv/min 0 0–8031 varv/min
247 Totalt antal motortimmar 65253 h 0,05 timmar 0 0–210 554 060 timmar
512 Förarens efterfrågade motormoment 61444 % 1% -125 -125 % till +125 %
513 Faktiskt motormoment 61444 % 1% -125 -125 % till +125 %
517 Hastighet över mark 65256 km/h 1/256 km/h 0 0–250 km/h
519 Kurs över grund 65256 grader 1/128 grader 0 0–360°
522 Kopplingspedalens position 61445 % 0,4 % 0 0–100 %
523 Växellådans strömväxel 61445 redskap 1 -125 -125 till +125
524 Vald växellåda 61445 redskap 1 -125 -125 till +125
580 Höjd över havet 65258 m 0,125 meter -2500 -2500 till +5531 m
584 Latitud 65267 grader 10⁻⁷ grader -210 -90° till +90°
585 Longitud 65267 grader 10⁻⁷ grader -210 -180° till +180°
586 Kompassriktning 65256 grader 1/128 grader 0 0–360°
597 Bromsbrytare 65265 - 2 bitar - Av/På/Fel/Ej tillgänglig
598 Kopplingsbrytare 65265 - 2 bitar - Av/På/Fel/Ej tillgänglig
899 Motorns vridmomentläge 61444 - 1 0 0-15 (uppräkning)
1807 Rattvinkel 61449 rad 1/1024 rad -31,374 -31,374 till +31,374 rad
1808 Girningshastighet 61449 rad/s 1/8192 rad/s -3,92 -3,92 till +3,92 rad/s

Totalt: 15 PGN, 33 SPN aktivt simulerade

🔲 PGN:er som inte stöds (inte implementerade ännu)

Följande J1939-meddelanden genereras för närvarande inte av fordonssimulatorn. Dessa representerar potentiella framtida förbättringar:

PGN Hexagon Namn Prioritet Användningsfall Komplexitet
61440 0xF000 ERC1 - Elektronisk retarderstyrenhet 1 Låg Retarder/motorbromsstyrning Medium
61441 0xF001 EBC1 - Elektronisk bromsstyrenhet 1 Hög ABS, bromssystemstatus Hög
61442 0xF002 ETC1 - Elektronisk transmissionsstyrenhet 1 Medium Sändningsläge, växling pågår Medium
64971 0xFDCB VDHR - Fordonsavstånd (hög upplösning) Hög Kilometerräknare med 5 mm upplösning Låg
64972 0xFDCC TCO1 - Färdskrivare Medium Förarkort, hastighet från färdskrivare Låg
65132 0xFE6C TPMS - Däcktrycksövervakning Medium Individuellt däcktryck/temperatur Medium
65217 0xFEC1 PTODE - Inkoppling av kraftuttagsdrift Låg Kraftuttagsstatus Låg
65248 0xAVGIFT0 VDIST - Fordonsavstånd med hög upplösning Hög Totalavstånd med 5 m upplösning Låg
65251 0xFEE3 ECFG - Motorkonfiguration Låg Motormärke, modell, serienummer Låg
65252 0xFEE4 SHUTDN - Avstängning Låg Åsidosättning av motoravstängning Låg
65260 0xFEEC VI - Fordonsidentifiering Medium Fullständig VIN-överföring (delvis impl.) Låg
65279 0xFEFF CCVS1 - Farthållare/Fordonshastighet 1 Medium Förbättrad farthållardata Låg
65098 0xFE4A EBC2 - Elektronisk bromsstyrenhet 2 Hög Status för individuella hjulbromsar Hög
65099 0xFE4B EBC3 - Elektronisk bromsstyrenhet 3 Medium Bromsbeläggsslitage Medium
65110 0xFE56 IC1 - Inlopps-/avgasförhållanden 1 Låg Insugningsrörets tryck/temp Medium
65172 0xFE84 RQST - Begäran Låg Begär specifikt PGN från ECU Medium
65226 0xFECA AT1I - Efterbehandling 1 Intagsgas Låg Dieselpartikelfilterinlopp Låg
65227 0xFECB AT1O - Efterbehandling 1 Utloppsgas Låg DPF-utlopp, NOx-sensor Låg
65247 0xFEDF EFL/P2 - Motorvätskenivå/tryck 2 Låg Ytterligare vätsketryck Låg
65266 0xFEF2 LFE - Bränsleekonomi Medium Genomsnittlig bränsleekonomi/resa Låg
65270 0xFEF6 TD - Turboaggregat Låg Laddtryck, turbinhastighet Medium
65272 0xFEF8 VEP2 - Fordonselektrisk kraft 2 Låg Ytterligare elektriska bussar Låg

Varför dessa inte implementeras

Resonera Berörda PGN:er Räkna
Inte relevant för grundläggande fordonssimulator ERC1, PTODE, SHUTDN, ECFG, AT1I, AT1O, TD 7
Kräver däckfysikmodell TPMS 1
Kräver ABS/bromsmodell EBC1, EBC2, EBC3 3
Kräver avancerad överföring ETC1 1
Låg prioritet / kosmetisk VI (VIN), VDHR, VDIST, TCO1, LFE 5
Kräver avgas-/utsläppsmodell IC1, AT1I, AT1O 3
Protokollnivå (inte fordonsdata) RQST 1
Duplicerade/förbättrade versioner CCVS1, EFL/P2, VEP2 3

Totalt: 22 PGN:er som inte stöds

🛠️ Tekniska funktioner

  • OpenDRIVE-vägnätsstöd : Följ realistisk väggeometri
  • Simulering av automatväxellåda : Växlingar baserade på hastighet och gaspådrag
  • Fysikbaserad dynamik : Acceleration, bromsning, styrning med realistiska begränsningar
  • DDS-integration : Direktpublicering till J1939 Automotive PSM-ämnen
  • Qt6 GUI : Visualisering i realtid och manuell kontroll

J1939 till DDS Gateway-arkitektur

Följande sekvensdiagram illustrerar det fullständiga dataflödet från J1939 CAN-bussmeddelanden genom gatewayen till DDS-abonnenter:

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)

Förklaring av sekvensdiagram

1. Meddelandegenereringsfas

  • Fordonssimulatorn beräknar realistiska fordonsparametrar baserat på förarens inmatningar och fysik
  • Kodar parametrar i J1939 CAN-ramar med korrekt PGN/SPN-struktur
  • Skickar till virtuellt CAN-gränssnitt (vcan0)

2. CAN-mottagningsfas

  • SocketCanReader Qt-tråd läser kontinuerligt från CAN-gränssnittet
  • Validerar CAN-ramformat (29-bitars utökat ID)
  • Sänder ut Qt-signal med rå bilddata

3. J1939 Avkodningsfas

  • J1939Decoder extraherar protokollinformation från CAN-ID:
    • PGN : Parametergruppnummer (identifierar meddelandetyp)
    • Källadress : ECU-identifierare (0-253)
    • Prioritet : Meddelandets brådska (0=högst, 7=lägst)
  • Avkodar datanyttolasten till individuella SPN:er med hjälp av konfigurationen:
    • Bitposition och längd
    • Skalfaktor och offset
    • Ingenjörsenheter

4. DDS-publiceringsfas

  • Gateway publicerar C_Parameter_Group_Definition (PGN-metadata) vid första förekomsten
  • För varje SPN i meddelandet:
    • Skapar C_Parameter meddelande med värde och status
    • Lägger till tidsstämpel och källidentifiering
    • Publicerar till DDS-ämnet
  • Regelbundna statusuppdateringar (1 Hz) publicerar gatewayens hälsa

5. Konsumtionsfas

  • GVA-applikationer (HMI, LDMX) prenumererar på J1939 DDS-ämnen
  • Ta emot parameteruppdateringar via DDS-mellanprogramvara
  • Uppdatera UI-element (hastighetsmätare, varvräknare, växeldisplay)

Protokolldetaljer

J1939 CAN ID-struktur (29-bitars)

 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)

Exempel på CAN-ramavkodning

 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)

Snabbstart

1. Bygg fordonssimulator

 cd build
cmake ..
make gva-vehicle-sim

2. Konfigurera virtuell CAN

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

3. Starta fordonssimulatorn

 # 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. Starta J1939-gatewayen

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

5. Övervaka med LDMX

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

Konfiguration

Konfiguration av fordonssimulator

Skapa 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

Se /etc/gva/j1939-config.json för PGN/SPN-definitioner och skalningsparametrar.

Användningsfall

1. HMI-utveckling

  • Utveckla fordonsinstrumentpanel utan fysiskt fordon
  • Testa rendering och animationer av instrumentklustret
  • Validera varnings-/larmtrösklar

2. Algoritmtestning

  • Testa algoritmer för sparsam körning med simulerad bränsleförbrukning
  • Validera logik för prediktivt underhåll
  • Testa beslutsfattande om autonom körning

3. Integrationstestning

  • Verifiera dataflödet från början till slut: CAN → DDS → Applikation
  • Testa gatewayens prestanda under belastning
  • Validera datasynkronisering mellan delsystem

4. Utbildning och demonstration

  • Säker miljö för operatörsutbildning
  • Kunddemonstrationer utan fordon
  • Utbildningsverktyg för GVA-arkitektur

Prestandaegenskaper

Metrisk Värde
CAN-bildgenereringshastighet Upp till 100 Hz per PGN
DDS-publiceringslatens < 5 ms (lokal)
Gateway-genomströmning > 1000 PGN/sek
CPU-användning (simulator + gateway) < 10 % (system med 4 kärnor)
Minnesavtryck ~50 MB (kombinerat)

Jämförelse: Fysisk vs. Simulerad

Aspekt Fysiskt fordon Simulator
Kostnad för hårdvara 50 000+ dollar 0 kr (endast programvara)
Uppställningstid Timmar (ledningar, konfiguration) Minuter
Reproducerbarhet Begränsad (förarens variation) Perfekt (deterministisk)
Säkerhet Risk för skada/personskada Noll risk
Scenariokontroll Svårt (väder, trafik) Fullständig kontroll
Dataloggning Kräver utrustning Inbyggt
Parallell testning Ett fordon i taget Flera instanser

Felsökning

Vanliga problem

CAN-gränssnittet hittades inte

 # Verify vcan0 exists
ip link show vcan0

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

Inga DDS-meddelanden

 # 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 avkodar inte meddelanden

 # Check CAN frames are being sent
candump vcan0

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

Begär en demonstration idag.