J1939 sõidukisimulaator

Sõidukisimulitaator J1939 CAN toega

Ülevaade

Sõidukisimulaator ( gva-vehicle-sim ) on GVA (üldine sõidukiarhitektuur) platvormi terviklik testimis- ja arendustööriist. See pakub realistlikku sõidukidünaamika simulatsiooni integreeritud J1939 CAN-siini sõnumite genereerimisega , võimaldades riistvaralist testimist ilma füüsilise sõiduki riistvarata.

J1939 simulatsiooni eelised sõnumite genereerimisel

🎯 Arendamise ja testimise eelised

  1. Riistvarast sõltumatu arendus

    • GVA rakenduste arendamine ja testimine ilma füüsilise CAN-riistvarata
    • Pole vaja kalleid sõiduki juhtplokke ega katsepinke
    • Paralleelne arendus mitmes meeskonnas
  2. Realistlik sõiduki käitumine

    • Genereerib autentseid J1939 parameetrite grupi numbreid (PGN) ja kahtlaseid parameetrite numbreid (SPN)
    • Simuleerib realistlikku sõiduki dünaamikat (kiirus, pöörete arv minutis, käiguvahetus, pidurdamine)
    • Pakub ajaliselt sünkroniseeritud anduriandmeid
  3. Kulude vähendamine

    • Kõrvaldab vajaduse füüsiliste katsesõidukite järele varajases arendusfaasis
    • Virtuaalne CAN-liides ( vcan0 ) võimaldab testimist mis tahes Linuxi tööjaamas
    • Vähendab füüsilise riistvara kulumist
  4. Kiire prototüüpimine

    • Kohene tagasiside algoritmi arendamiseks
    • Lihtne stsenaariumi loomine ja taasesitamine
    • Konfigureeritavad sõnumikiirused ja andmemustrid
  5. Integratsioonitestimine

    • J1939 lüüsi funktsionaalsuse valideerimine
    • Testi andmevoog CAN-ist DDS-i teemadesse
    • Kontrollige HMI reageerimisvõimet sõiduki parameetritele
  6. Reprodutseeritav testimine

    • Deterministlik sõiduki käitumine
    • Korduvate testide stsenaariumid
    • Regressioonitestimise järjepidev baasväärtus

📊 J1939 sõnumitugi

✅ Täielikult toetatud PGN-id (rakendatud sõidukisimulaatoris)

Sõidukisimulaator genereerib aktiivselt CAN-i kaudu järgmised J1939 sõnumid ja avaldab need lüüsi kaudu DDS-ile:

PGN Kuusnurk Nimi Hind SPN-id Kirjeldus
61443 0xF003 EEC2 - elektrooniline mootorikontroller 2 50 ms 91, 92 Gaasipedaali asend, mootori koormus protsentides
61444 0xF004 EEC1 - Elektrooniline mootorikontroller 1 100 ms 190, 512, 513 Mootori pöörlemiskiirus (RPM), juhi poolt nõutav pöördemoment, mootori tegelik pöördemoment
61445 0xF005 ETC2 - Elektrooniline käigukasti kontroller 2 100 ms 522, 523, 524 Siduri asend, valitud käik, praegune käik
61449 0xF009 VDC2 - sõiduki dünaamiline juhtimine 2 100 ms 1807, 1808 Rooliratta nurk, pöördekiirus
65253 0xFEE5 TUNDID - Mootori töötunnid 1 sekundit 247 Mootori töötundide koguarv
65256 0xFEE8 VDS - sõiduki suund/kiirus 250 ms 517, 519, 586 Kiirus maapinna suhtes, kompassi suund, kurss
65258 0xFEEA ALT - kõrgus merepinnast 1 sekundit 580 GPS-i kõrgus merepinnast
65262 0xFEEE ET1 - Mootori temperatuur 1 1 sekundit 110, 174, 175 Mootori jahutusvedeliku temperatuur, kütuse temperatuur, õli temperatuur
65263 0xFEEF EFLP - mootori vedeliku tase/rõhk 500 ms 96, 100, 94 Kütusetase, õlirõhk, kütuse etteande rõhk
65265 0xFEF1 CCVS - püsikiiruse hoidja/sõiduki kiirus 100 ms 84, 597, 598 Rattapõhine sõiduki kiirus, pidurilüliti, sidurilüliti
65267 0xFEF3 VP - Sõiduki asukoht 250 ms 584, 585 GPS-i laius- ja pikkuskraad
65269 0xFEF5 AMB - ümbritsevad tingimused 1 sekundit 108, 171 Baromeetriline rõhk, ümbritseva õhu temperatuur
65271 0xFEF7 VEP1 - Sõiduki elektrienergia 1 1 sekundit 167, 168, 158 Aku pinge, generaatori pinge, laadimissüsteemi pinge
65276 0xFEFC DD - armatuurlaua ekraan 1 sekundit 182, 183 Kütusekulu (l/h), hetkeline kütusekulu
0xEF00 0xEF00 PROP_A - Omandis olev A (IONNIC USM) 250 ms - IONNIC USM ES-Key paneeli LED-juhtimine

Üksikasjalik SPN-ide loend (kõik toetatud parameetrid)

SPN Parameetri nimi PGN Ühik Resolutsioon Nihe Vahemik
84 Rattapõhine sõiduki kiirus 65265 km/h 1/256 km/h 0 0–250 km/h
91 Gaasipedaali asend 61443 % 0,4% 0 0–100%
92 Mootori koormus protsentides praegusel kiirusel 61443/61444 % 1% 0 0–100%
94 Kütuse etteande rõhk 65263 kPa 4 kPa 0 0–1000 kPa
96 Kütusetase 65263 % 0,4% 0 0–100%
100 Mootori õlirõhk 65263 kPa 4 kPa 0 0–1000 kPa
108 Baromeetriline rõhk 65269 kPa 0,5 kPa 0 0–125 kPa
110 Mootori jahutusvedeliku temperatuur 65262 °C 1°C -40 -40 kuni +210 °C
158 Laadimissüsteemi pinge 65271 V 0,05 V 0 0–3212 V
167 Generaatori pinge 65271 V 0,05 V 0 0–3212 V
168 Aku pinge 65271 V 0,05 V 0 0–3212 V
171 Ümbritseva õhu temperatuur 65269 °C 0,03125 °C -273 -273 kuni +1735 °C
174 Kütuse temperatuur 65262 °C 1°C -40 -40 kuni +210 °C
175 Mootoriõli temperatuur 65262 °C 0,03125 °C -273 -273 kuni +1735 °C
182 Kütuse hind 65276 L/h 0,05 l/h 0 0–3212 l/h
183 Hetkeline kütusekulu 65276 km/l 1/512 km/l 0 0–125 km/l
190 Mootori pöörlemiskiirus 61444 Pöörlemiskiirus 0,125 p/min 0 0–8031 p/min
247 Mootori töötundide koguarv 65253 h 0,05 tundi 0 0–210 554 060 tundi
512 Juhi nõudmisel mootori pöördemoment 61444 % 1% -125 -125% kuni +125%
513 Tegelik mootori pöördemoment 61444 % 1% -125 -125% kuni +125%
517 Kiirus maapinna suhtes 65256 km/h 1/256 km/h 0 0–250 km/h
519 Kurss maapinna suhtes 65256 kraadi 1/128 kraadi 0 0–360°
522 Siduripedaali asend 61445 % 0,4% 0 0–100%
523 Käigukasti praegune käik 61445 varustus 1 -125 -125 kuni +125
524 Käigukasti valitud käik 61445 varustus 1 -125 -125 kuni +125
580 Kõrgus merepinnast 65258 m 0,125 m -2500 -2500 kuni +5531 m
584 Laiuskraad 65267 kraadi 10⁻⁷ kraadi -210 -90° kuni +90°
585 Pikkuskraad 65267 kraadi 10⁻⁷ kraadi -210 -180° kuni +180°
586 Kompassi laager 65256 kraadi 1/128 kraadi 0 0–360°
597 Pidurilüliti 65265 - 2 bitti - Väljas/Sees/Viga/Pole saadaval
598 Siduri lüliti 65265 - 2 bitti - Väljas/Sees/Viga/Pole saadaval
899 Mootori pöördemomendi režiim 61444 - 1 0 0–15 (loendus)
1807. aasta Rooliratta nurk 61449 rad 1/1024 rad -31,374 -31,374 kuni +31,374 rad
1808. aasta Suunamiskiirus 61449 rad/s 1/8192 rad/s -3,92 -3,92 kuni +3,92 rad/s

Kokku: 15 PGN-i, 33 SPN-i aktiivselt simuleeritud

🔲 Toetamata PGN-id (pole veel rakendatud)

Sõidukisimulaator ei genereeri hetkel järgmisi J1939 sõnumeid. Need kujutavad endast võimalikke tulevasi täiustusi:

PGN Kuusnurk Nimi Prioriteet Kasutusjuhtum Keerukus
61440 0xF000 ERC1 - Elektrooniline aeglusti kontroller 1 Madal Aeglusti/mootori piduri juhtimine Keskmine
61441 0xF001 EBC1 - Elektrooniline pidurikontroller 1 Kõrge ABS-i ja pidurisüsteemi olek Kõrge
61442 0xF002 ETC1 - Elektrooniline käigukasti kontroller 1 Keskmine Edastusrežiim, nihe on pooleli Keskmine
64971 0xFDCB VDHR - sõiduki kaugus (kõrge eraldusvõimega) Kõrge Odomeeter 5 mm resolutsiooniga Madal
64972 0xFDCC TCO1 - Sõidumeerik Keskmine Juhikaart, kiirus sõidumeerikult Madal
65132 0xFE6C TPMS - rehvirõhu jälgimine Keskmine Individuaalne rehvirõhk/temperatuur Keskmine
65217 0xFEC1 PTODE - PTO ajami sisselülitamine Madal Jõuvõtuvõlli olek Madal
65248 0xFEE0 VDIST - sõidukite kõrge eraldusvõimega kaugus Kõrge Kogukaugus 5 m resolutsiooniga Madal
65251 0xFEE3 ECFG - mootori konfiguratsioon Madal Mootori mark, mudel, seerianumber Madal
65252 0xFEE4 SHUTDN - Väljalülitamine Madal Mootori seiskamise tühistamine Madal
65260 0xFEEC VI - Sõiduki identifitseerimine Keskmine Täielik VIN-kood käigukastis (osaline impl) Madal
65279 0xFEFF CCVS1 - püsikiiruse hoidja/sõiduki kiirus 1 Keskmine Täiustatud püsikiiruse hoidja andmed Madal
65098 0xFE4A EBC2 - elektrooniline pidurikontroller 2 Kõrge Üksikute rataste piduri olek Kõrge
65099 0xFE4B EBC3 - elektrooniline pidurikontroller 3 Keskmine Pidurikatte kulumine Keskmine
65110 0xFE56 IC1 - sisselaske-/väljalasketingimused 1 Madal Sisselaskekollektori rõhk/temperatuur Keskmine
65172 0xFE84 RQST - päring Madal Taotle ECU-lt konkreetset PGN-i Keskmine
65226 0xFECA AT1I – järeltöötlus 1 Sisselaskegaas Madal Diislikütuse tahkete osakeste filtri sisselaskeava Madal
65227 0xFECB AT1O – järeltöötlus 1 väljalaskegaas Madal DPF-i väljalaskeava, NOx-andur Madal
65247 0xFEDF EFL/P2 - mootori vedeliku tase/rõhk 2 Madal Täiendavad vedeliku rõhud Madal
65266 0xFEF2 LFE - kütusekulu Keskmine Keskmine kütusekulu reisi kohta Madal
65270 0xFEF6 TD - turbolaadur Madal Ülelaadimisrõhk, turbiini kiirus Keskmine
65272 0xFEF8 VEP2 - Sõiduki elektrienergia 2 Madal Täiendavad elektribussid Madal

Miks neid ei rakendata

Põhjus Mõjutatud PGN-id Krahv
Ei ole seotud tavalise sõidukisimulaatoriga ERC1, PTO, SHUTDN, ECFG, AT1I, AT1O, TD 7
Nõuab rehvifüüsika mudelit Rehvirõhu jälgimissüsteem 1
Nõuab ABS/pidurisüsteemiga mudelit EBC1, EBC2, EBC3 3
Nõuab täiustatud edastust ETC1 1
Madala prioriteediga / kosmeetiline VI (VIN), VDHR, VDIST, TCO1, LFE 5
Nõuab heitgaaside/heitgaaside mudelit IC1, AT1I, AT1O 3
Protokolli tasemel (mitte sõiduki andmed) RQST 1
Duplikaat-/täiustatud versioonid CCVS1, EFL/P2, VEP2 3

Kokku: 22 toetuseta PGN-i

🛠️ Tehnilised omadused

  • OpenDRIVE'i teedevõrgu tugi : järgige realistlikku teegeomeetriat
  • Automaatkäigukasti simulatsioon : käiguvahetus kiiruse ja gaasipedaali asendi põhjal
  • Füüsikal põhinev dünaamika : kiirendus, pidurdamine, roolimine realistlike piirangutega
  • DDS-i integratsioon : otsene avaldamine J1939 autotööstuse PSM-teemade alusel
  • Qt6 GUI : Reaalajas visualiseerimine ja käsitsi juhtimine

J1939 DDS-i lüüsi arhitektuuriks

Järgnev järjestusskeem illustreerib täielikku andmevoogu J1939 CAN-siini sõnumitest läbi lüüsi DDS-i abonentideni:

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)

Järjestusskeemi selgitus

1. Sõnumi genereerimise etapp

  • Sõidukisimulaator arvutab realistlikke sõiduki parameetreid juhi sisendite ja füüsikaandmete põhjal
  • Kodeerib parameetrid J1939 CAN-kaadritesse õige PGN/SPN-struktuuriga
  • Edastab virtuaalsele CAN-liidesele (vcan0)

2. CAN-vastuvõtu faas

  • SocketCanReaderi Qt-lõim loeb pidevalt CAN-liidesest
  • Valideerib CAN-kaadri vormingut (29-bitine laiendatud ID)
  • Edastab Qt signaali toores kaadriandmetega

3. J1939 dekodeerimise faas

  • J1939Decoder ekstraheerib CAN ID-st protokolliinfo:
    • PGN : Parameetrirühma number (tuvastab sõnumi tüübi)
    • Allika aadress : ECU identifikaator (0-253)
    • Prioriteet : sõnumi kiireloomulisus (0 = kõrgeim, 7 = madalaim)
  • Dekodeerib andmete kasuliku koormuse individuaalseteks SPN-ideks, kasutades konfiguratsiooni:
    • Biti asukoht ja pikkus
    • Skaalafaktor ja nihe
    • Inseneriüksused

4. DDS-i avaldamise etapp

  • Värav avaldab C_Parameter_Group_Definition (PGN metaandmed) esimesel esinemisel
  • Iga sõnumis oleva SPN-i kohta:
    • Loob C_Parameter sõnumi väärtuse ja olekuga
    • Lisab ajatempli ja allika identifitseerimise
    • Avaldab DDS-teemas
  • Perioodilised olekuvärskendused (1 Hz) avaldavad lüüsi tervise

5. Tarbimisfaas

  • GVA rakendused (HMI, LDMX) tellivad J1939 DDS teemasid
  • Parameetrite värskenduste saamine DDS-i vahevara kaudu
  • Kasutajaliidese elementide (spidomeeter, tahhomeeter, käigunäidik) värskendamine

Protokolli üksikasjad

J1939 CAN ID struktuur (29-bitine)

 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)

Näide CAN-kaadri dekodeerimisest

 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)

Kiirjuhend

1. Ehita sõidukisimulaator

 cd build
cmake ..
make gva-vehicle-sim

2. Virtuaalse CAN-i seadistamine

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

3. Käivita sõidukisimulaator

 # 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. Käivitage J1939 värav

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

5. Jälgige LDMX-iga

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

Konfiguratsioon

Sõidukisimulaatori konfiguratsioon

Loo fail 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 lüüsi konfiguratsioon

PGN/SPN definitsioonide ja skaleerimisparameetrite kohta vaata faili /etc/gva/j1939-config.json .

Kasutusjuhud

1. HMI arendus

  • Sõiduki armatuurlaua arendus ilma füüsilise sõidukita
  • Näidikupaneeli renderdamise ja animatsioonide testimine
  • Hoiatus-/häirekünniste valideerimine

2. Algoritmi testimine

  • Testige ökosõidu algoritme simuleeritud kütusekulu abil
  • Ennustava hoolduse loogika valideerimine
  • Testige autonoomset sõiduotsuse langetamist

3. Integratsioonitestimine

  • Kontrollige otsast lõpuni andmevoogu: CAN → DDS → Rakendus
  • Testi värava jõudlust koormuse all
  • Andmete sünkroniseerimise valideerimine alamsüsteemide vahel

4. Koolitus ja demonstratsioon

  • Ohutu keskkond operaatorite koolitamiseks
  • Kliendidemonstratsioonid ilma sõidukita
  • GVA arhitektuuri õppevahend

Toimivusomadused

Mõõdik Väärtus
CAN-kaadrite genereerimise kiirus Kuni 100 Hz PGN kohta
DDS-i avaldamise latentsus < 5 ms (kohalik)
Värava läbilaskevõime > 1000 PGN-i sekundis
Protsessori kasutus (simulaator + lüüs) < 10% (4-tuumaline süsteem)
Mälu jalajälg ~50 MB (kokku)

Võrdlus: füüsiline vs simuleeritud

Aspekt Füüsiline sõiduk Simulaator
Riistvara maksumus 50 000+ dollarit 0 dollarit (ainult tarkvara)
Seadistusaeg Tunnid (juhtmestik, konfiguratsioon) Minutid
Reprodutseeritavus Piiratud (juhi varieeruvus) Täiuslik (deterministlik)
Ohutus Kahjustuste/vigastuste oht Nullriski
Stsenaariumide kontroll Raske (ilm, liiklus) Täielik kontroll
Andmete logimine Vajab varustust Sisseehitatud
Paralleeltestimine Üks sõiduk korraga Mitu eksemplari

Veaotsing

Levinud probleemid

CAN-liidest ei leitud

 # Verify vcan0 exists
ip link show vcan0

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

DDS-sõnumeid pole

 # 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

Värav ei dekodeeri sõnumeid

 # Check CAN frames are being sent
candump vcan0

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

Taotle demonstratsiooni juba täna.