J1939 transporto priemonės simuliatorius
Transporto priemonės simuliatorius su J1939 CAN palaikymu
Apžvalga
Transporto priemonės simuliatorius ( gva-vehicle-sim ) yra išsami GVA (bendrosios transporto priemonės architektūros) platformos testavimo ir kūrimo priemonė. Ji užtikrina realistišką transporto priemonės dinamikos modeliavimą su integruotu J1939 CAN magistralės pranešimų generavimu , leidžiančiu atlikti techninius bandymus be fizinės transporto priemonės aparatinės įrangos.
J1939 modeliavimo pranašumai pranešimų generavimui
🎯 Kūrimo ir testavimo privalumai
Aparatinės įrangos nepriklausomas kūrimas
- Kurti ir testuoti GVA programas be fizinės CAN įrangos
- Nereikia brangių transporto priemonės valdymo blokų ar bandymų stendų
- Lygiagretus kūrimas keliose komandose
Realistiškas transporto priemonės elgesys
- Generuoja autentiškus J1939 parametrų grupių numerius (PGN) ir įtariamų parametrų numerius (SPN)
- Imituoja realią transporto priemonės dinamiką (greitį, apsukas, pavarų perjungimą, stabdymą)
- Pateikia laiko sinchronizuotus jutiklių duomenis
Sąnaudų mažinimas
- Pašalina fizinių bandymų transporto priemonių poreikį ankstyvosiose kūrimo stadijose
- Virtuali CAN sąsaja (
vcan0) leidžia testuoti bet kurioje „Linux“ darbo stotyje. - Sumažina fizinės įrangos nusidėvėjimą
Greitas prototipų kūrimas
- Momentinio grįžtamojo ryšio ciklas algoritmų kūrimui
- Paprastas scenarijų kūrimas ir atkūrimas
- Konfigūruojami pranešimų dažniai ir duomenų modeliai
Integracinis testavimas
- J1939 šliuzo funkcionalumo patvirtinimas
- Duomenų srauto iš CAN į DDS temas bandymas
- Patikrinkite HMI reagavimą į transporto priemonės parametrus
Atkartojami tyrimai
- Deterministinis transporto priemonės elgesys
- Pakartotinai testuojami scenarijai
- Nuoseklus regresinio testavimo bazinis taškas
📊 J1939 pranešimų palaikymas
✅ Visiškai palaikomi PGN (įdiegti transporto priemonės simuliatoriuje)
Transporto priemonės simuliatorius aktyviai generuoja šiuos J1939 pranešimus per CAN ir skelbia juos DDS sistemoje per šliuzą:
| PGN | Šešiakampis | Vardas | Įvertinkite | SPN | Aprašymas |
|---|---|---|---|---|---|
| 61443 | 0xF003 | EEC2 - Elektroninis variklio valdiklis 2 | 50 ms | 91, 92 | Akceleratoriaus pedalo padėtis, variklio apkrova procentais |
| 61444 | 0xF004 | EEC1 - Elektroninis variklio valdiklis 1 | 100 ms | 190, 512, 513 | Variklio sūkių skaičius (RPM), vairuotojo pageidaujamas sukimo momentas, faktinis variklio sukimo momentas |
| 61445 | 0xF005 | ETC2 - Elektroninis transmisijos valdiklis 2 | 100 ms | 522, 523, 524 | Sankabos padėtis, pasirinkta pavara, dabartinė pavara |
| 61449 | 0xF009 | VDC2 - Transporto priemonės dinaminis valdymas 2 | 100 ms | 1807, 1808 m. | Vairo kampas, posūkio greitis |
| 65253 | 0xFEE5 | VALANDOS – variklio valandos | 1 sek. | 247 | Bendras variklio darbo valandų skaičius |
| 65256 | 0xFEE8 | VDS - transporto priemonės kryptis / greitis | 250 ms | 517, 519, 586 | Greitis žemės atžvilgiu, kompaso kryptis, kursas |
| 65258 | 0xFEEA | ALT - Aukštis | 1 sek. | 580 | GPS aukštis virš jūros lygio |
| 65262 | 0xFEEE | ET1 - Variklio temperatūra 1 | 1 sek. | 110, 174, 175 | Variklio aušinimo skysčio temperatūra, degalų temperatūra, alyvos temperatūra |
| 65263 | 0xFEEF | EFLP - variklio skysčio lygis / slėgis | 500 ms | 96, 100, 94 | Kuro lygis, alyvos slėgis, kuro tiekimo slėgis |
| 65265 | 0xFEF1 | CCVS - Pastovaus greičio palaikymo sistema / Transporto priemonės greitis | 100 ms | 84, 597, 598 | Ratų pagrindu veikiantis transporto priemonės greitis, stabdžių jungiklis, sankabos jungiklis |
| 65267 | 0xFEF3 | VP – transporto priemonės padėtis | 250 ms | 584, 585 | GPS platuma, ilguma |
| 65269 | 0xFEF5 | AMB - aplinkos sąlygos | 1 sek. | 108, 171 | Barometrinis slėgis, aplinkos oro temperatūra |
| 65271 | 0xFEF7 | VEP1 - Transporto priemonės elektros energija 1 | 1 sek. | 167, 168, 158 | Akumuliatoriaus įtampa, generatoriaus įtampa, įkrovimo sistemos įtampa |
| 65276 | 0xFEFC | DD - prietaisų skydelio ekranas | 1 sek. | 182, 183 | Kuro sąnaudos (l/h), momentinės degalų sąnaudos |
| 0xEF00 | 0xEF00 | PROP_A - Nuosavybės teise priklausantis A (IONNIC USM) | 250 ms | - | IONNIC USM ES-Key pulto LED valdymas |
Išsamus SPN sąrašas (visi palaikomi parametrai)
| SPN | Parametro pavadinimas | PGN | Vienetas | Rezoliucija | Poslinkis | Diapazonas |
|---|---|---|---|---|---|---|
| 84 | Ratų pagrindu veikiantis transporto priemonės greitis | 65265 | km/val. | 1/256 km/val. | 0 | 0–250 km/val. |
| 91 | Akceleratoriaus pedalo padėtis | 61443 | % | 0,4% | 0 | 0–100 % |
| 92 | Variklio procentinė apkrova esant dabartiniam greičiui | 61443/61444 | % | 1% | 0 | 0–100 % |
| 94 | Kuro tiekimo slėgis | 65263 | kPa | 4 kPa | 0 | 0–1000 kPa |
| 96 | Kuro lygis | 65263 | % | 0,4% | 0 | 0–100 % |
| 100 | Variklio alyvos slėgis | 65263 | kPa | 4 kPa | 0 | 0–1000 kPa |
| 108 | Barometrinis slėgis | 65269 | kPa | 0,5 kPa | 0 | 0–125 kPa |
| 110 | Variklio aušinimo skysčio temperatūra | 65262 | °C | 1°C | -40 | Nuo -40 iki +210 °C |
| 158 | Įkrovimo sistemos įtampa | 65271 | V. | 0,05 V | 0 | 0–3212 V |
| 167 | Generatoriaus įtampa | 65271 | V. | 0,05 V | 0 | 0–3212 V |
| 168 | Baterijos įtampa | 65271 | V. | 0,05 V | 0 | 0–3212 V |
| 171 | Aplinkos oro temperatūra | 65269 | °C | 0,03125 °C | -273 | nuo -273 iki +1735 °C |
| 174 | Kuro temperatūra | 65262 | °C | 1°C | -40 | Nuo -40 iki +210 °C |
| 175 | Variklio alyvos temperatūra | 65262 | °C | 0,03125 °C | -273 | nuo -273 iki +1735 °C |
| 182 | Kuro tarifas | 65276 | L/val. | 0,05 l/val. | 0 | 0–3212 l/val. |
| 183 | Momentinės degalų sąnaudos | 65276 | km/l | 1/512 km/l | 0 | 0–125 km/l |
| 190 | Variklio greitis | 61444 | RPM | 0,125 aps./min. | 0 | 0–8031 aps./min. |
| 247 | Bendras variklio darbo valandų skaičius | 65253 | val. | 0,05 val. | 0 | 0–210 554 060 val. |
| 512 | Vairuotojo pageidaujamas variklio sukimo momentas | 61444 | % | 1% | -125 | -125 % iki +125 % |
| 513 | Tikrasis variklio sukimo momentas | 61444 | % | 1% | -125 | -125 % iki +125 % |
| 517 | Greitis virš žemės | 65256 | km/val. | 1/256 km/val. | 0 | 0–250 km/val. |
| 519 | Kursas žemės atžvilgiu | 65256 | laipsnis | 1/128 laipsnio | 0 | 0–360° |
| 522 | Sankabos pedalo padėtis | 61445 | % | 0,4% | 0 | 0–100 % |
| 523 | Transmisijos srovės pavara | 61445 | įranga | 1 | -125 | -125 iki +125 |
| 524 | Pasirinkta transmisijos pavara | 61445 | įranga | 1 | -125 | -125 iki +125 |
| 580 | Aukštis | 65258 | m. | 0,125 m | -2500 | nuo -2500 iki +5531 m |
| 584 | Platuma | 65267 | laipsnis | 10⁻⁷ laipsnių | -210 | Nuo -90° iki +90° |
| 585 | Ilguma | 65267 | laipsnis | 10⁻⁷ laipsnių | -210 | -180° iki +180° |
| 586 | Kompaso guolis | 65256 | laipsnis | 1/128 laipsnio | 0 | 0–360° |
| 597 | Stabdžių jungiklis | 65265 | - | 2 bitai | - | Išjungta / Įjungta / Klaida / Nepasiekiama |
| 598 | Sankabos jungiklis | 65265 | - | 2 bitai | - | Išjungta / Įjungta / Klaida / Nepasiekiama |
| 899 | Variklio sukimo momento režimas | 61444 | - | 1 | 0 | 0–15 (išvardijimas) |
| 1807 m. | Vairo kampas | 61449 | rad | 1/1024 rad | -31,374 | nuo -31,374 iki +31,374 rad |
| 1808 m. | Posūkio greitis | 61449 | rad/s | 1/8192 rad/s | -3,92 | -3,92 iki +3,92 rad/s |
Iš viso: aktyviai imituojami 15 PGN, 33 SPN
🔲 Nepalaikomi PGN (dar neįdiegti)
Šiuo metu transporto priemonės simuliatorius negeneruoja šių J1939 pranešimų. Tai galimi būsimi patobulinimai:
| PGN | Šešiakampis | Vardas | Prioritetas | Naudojimo atvejis | Sudėtingumas |
|---|---|---|---|---|---|
| 61440 | 0xF000 | ERC1 - Elektroninis lėtintuvo valdiklis 1 | Žemas | Lėtintuvo / variklio stabdžio valdymas | Vidutinis |
| 61441 | 0xF001 | EBC1 - Elektroninis stabdžių valdiklis 1 | Aukštas | ABS, stabdžių sistemos būsena | Aukštas |
| 61442 | 0xF002 | ETC1 - Elektroninis transmisijos valdiklis 1 | Vidutinis | Perdavimo režimas, vyksta perjungimas | Vidutinis |
| 64971 | 0xFDCB | VDHR - Atstumas iki transporto priemonės (didelės skiriamosios gebos) | Aukštas | Odometras su 5 mm skiriamąja geba | Žemas |
| 64972 | 0xFDCC | TCO1 – tachografas | Vidutinis | Vairuotojo kortelė, greitis iš tachografo | Žemas |
| 65132 | 0xFE6C | TPMS - padangų slėgio stebėjimas | Vidutinis | Individualus padangų slėgis / temperatūra | Vidutinis |
| 65217 | 0xFEC1 | PTODE - PTO pavaros įjungimas | Žemas | Galios paėmimo būsena | Žemas |
| 65248 | 0xFEE0 | VDIST – didelės raiškos transporto priemonės atstumas | Aukštas | Bendras atstumas su 5 m skiriamąja geba | Žemas |
| 65251 | 0xFEE3 | ECFG - variklio konfigūracija | Žemas | Variklio markė, modelis, serijos numeris | Žemas |
| 65252 | 0xFEE4 | SHUTDN - Išjungimas | Žemas | Variklio išjungimo atšaukimas | Žemas |
| 65260 | 0xFEEC | VI – Transporto priemonės identifikavimas | Vidutinis | Pilnas VIN perdavimas (dalinis impl.) | Žemas |
| 65279 | 0xFEFF | CCVS1 - Pastovaus greičio palaikymo sistema / Transporto priemonės greitis 1 | Vidutinis | Patobulinti pastovaus greičio palaikymo duomenys | Žemas |
| 65098 | 0xFE4A | EBC2 - Elektroninis stabdžių valdiklis 2 | Aukštas | Atskiro rato stabdžių būsena | Aukštas |
| 65099 | 0xFE4B | EBC3 - Elektroninis stabdžių valdiklis 3 | Vidutinis | Stabdžių kaladėlių susidėvėjimas | Vidutinis |
| 65110 | 0xFE56 | IC1 - Įleidimo / išmetimo sąlygos 1 | Žemas | Įsiurbimo kolektoriaus slėgis / temperatūra | Vidutinis |
| 65172 | 0xFE84 | RQST – užklausa | Žemas | Paprašykite konkretaus PGN iš ECU | Vidutinis |
| 65226 | 0xFECA | AT1I – 1 papildomo apdorojimo įsiurbimo dujos | Žemas | Dyzelino kietųjų dalelių filtro įleidimo anga | Žemas |
| 65227 | 0xFECB | AT1O – 1 papildomo apdorojimo išleidimo dujos | Žemas | DPF išleidimo anga, NOx jutiklis | Žemas |
| 65247 | 0xFEDF | EFL/P2 - Variklio skysčio lygis/slėgis 2 | Žemas | Papildomas skysčio slėgis | Žemas |
| 65266 | 0xFEF2 | LFE - degalų ekonomija | Vidutinis | Vidutinės kelionės degalų sąnaudos | Žemas |
| 65270 | 0xFEF6 | TD - turbokompresorius | Žemas | Slėgio padidinimas, turbinos greitis | Vidutinis |
| 65272 | 0xFEF8 | VEP2 - Transporto priemonės elektros energija 2 | Žemas | Papildomi elektriniai autobusai | Žemas |
Kodėl jie nėra įgyvendinami
| Priežastis | Paveikti PGN | Grafas |
|---|---|---|
| Nesusiję su pagrindiniu transporto priemonės simuliatoriumi | ERC1, PTO, SHUTDN, ECFG, AT1I, AT1O, TD | 7 |
| Reikalingas padangų fizikos modelis | Padangų slėgio kontrolės sistema (TPMS) | 1 |
| Reikalingas ABS/stabdžių modelis | EBC1, EBC2, EBC3 | 3 |
| Reikalingas pažangus perdavimas | ETC1 | 1 |
| Žemas prioritetas / kosmetinis | VI (VIN), VDHR, VDIST, TCO1, LFE | 5 |
| Reikalingas išmetamųjų teršalų / emisijų modelis | IC1, AT1I, AT1O | 3 |
| Protokolo lygmuo (ne transporto priemonės duomenys) | RQST | 1 |
| Dublikatų / patobulintų versijų | CCVS1, EFL/P2, VEP2 | 3 |
Iš viso: 22 nepalaikomi PGN
🛠️ Techninės savybės
- „OpenDRIVE“ kelių tinklo palaikymas : sekite tikrovišką kelio geometriją
- Automatinės pavarų dėžės modeliavimas : pavarų perjungimas pagal greitį ir droselį
- Fizikos dėsniais paremta dinamika : greitėjimas, stabdymas, vairavimas su realiais apribojimais
- DDS integracija : tiesioginis publikavimas J1939 automobilių PSM temose
- Qt6 GUI : vizualizacija realiuoju laiku ir rankinis valdymas
J1939 į DDS šliuzo architektūrą
Šioje sekos diagramoje pavaizduotas visas duomenų srautas iš J1939 CAN magistralės pranešimų per šliuzą DDS abonentams:
(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)
Sekos diagramos paaiškinimas
1. Pranešimų generavimo etapas
- Transporto priemonės simuliatorius apskaičiuoja realius transporto priemonės parametrus pagal vairuotojo įvestis ir fizikinius duomenis
- Koduoja parametrus į J1939 CAN kadrus su tinkama PGN/SPN struktūra
- Perduoda į virtualią CAN sąsają (vcan0)
2. CAN priėmimo fazė
- „SocketCanReader“ Qt gija nuolat skaito iš CAN sąsajos
- Patvirtina CAN kadro formatą (29 bitų išplėstinis ID)
- Skleidžia Qt signalą su neapdorotais kadro duomenimis
3. J1939 dekodavimo fazė
- J1939Decoder išgauna protokolo informaciją iš CAN ID:
- PGN : Parametrų grupės numeris (nurodo pranešimo tipą)
- Šaltinio adresas : ECU identifikatorius (0–253)
- Prioritetas : pranešimo skubumas (0 = didžiausias, 7 = mažiausias)
- Dekoduoja duomenų apkrovą į atskirus SPN naudodamas konfigūraciją:
- Bito padėtis ir ilgis
- Mastelio koeficientas ir poslinkis
- Inžineriniai vienetai
4. DDS publikavimo etapas
- Šliuzas pirmą kartą pasirodžius skelbia
C_Parameter_Group_Definition(PGN metaduomenis) - Kiekvienam pranešime esančiam SPN:
- Sukuria
C_Parameterpranešimą su reikšme ir būsena - Pridedamas laiko žyma ir šaltinio identifikavimas
- Skelbiama DDS temoje
- Sukuria
- Periodiniai būsenos atnaujinimai (1 Hz) skelbia šliuzo būklę
5. Vartojimo etapas
- GVA programos (HMI, LDMX) prenumeruoja J1939 DDS temas
- Gaukite parametrų atnaujinimus per DDS tarpinę programinę įrangą
- Atnaujinti vartotojo sąsajos elementus (spidometrą, tachometrą, pavarų ekraną)
Protokolo detalės
J1939 CAN ID struktūra (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)CAN rėmelio dekodavimo pavyzdys
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)Greitas paleidimas
1. Sukurkite transporto priemonės simuliatorių
cd build
cmake ..
make gva-vehicle-sim2. Nustatykite virtualų CAN
sudo scripts/test/j1939/setup-vcan.sh3. Paleiskite transporto priemonės simuliatorių
# 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. Paleiskite J1939 šliuzą
./build/bin/gva-j1939-gateway \
--domain=0 \
--interface=vcan0 \
--config=/etc/gva/j1939-config.json5. Stebėjimas naudojant LDMX
./build/bin/ldmx
# Navigate to J1939 tab to see live parametersKonfigūracija
Transporto priemonės simuliatoriaus konfigūracija
Sukurkite 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 šliuzo konfigūracija
PGN/SPN apibrėžimus ir mastelio keitimo parametrus žr. faile /etc/gva/j1939-config.json .
Naudojimo atvejai
1. HMI kūrimas
- Sukurkite transporto priemonės prietaisų skydelį be fizinės transporto priemonės
- Prietaisų skydelio atvaizdavimo ir animacijų bandymas
- Patvirtinti įspėjimo / aliarmo slenksčius
2. Algoritmų testavimas
- Išbandykite ekovairavimo algoritmus su imituotomis degalų sąnaudomis
- Nuspėjamosios priežiūros logikos patvirtinimas
- Išbandykite autonominio vairavimo sprendimų priėmimą
3. Integracinis testavimas
- Patikrinkite duomenų srautą nuo galo iki galo: CAN → DDS → Taikomoji programa
- Šliuzo veikimo bandymas esant apkrovai
- Duomenų sinchronizavimo posistemėse patvirtinimas
4. Mokymai ir demonstravimas
- Saugi aplinka operatorių mokymui
- Klientų demonstracijos be transporto priemonės
- GVA architektūros edukacinė priemonė
Veikimo charakteristikos
| Metrika | Vertė |
|---|---|
| CAN kadrų generavimo dažnis | Iki 100 Hz vienam PGN |
| DDS publikavimo delsa | < 5 ms (vietinis) |
| Šliuzo pralaidumas | > 1000 PGN/sek. |
| CPU naudojimas (simuliatorius + šliuzas) | < 10 % (4 branduolių sistema) |
| Atminties pėdsakas | ~50 MB (iš viso) |
Palyginimas: fizinis ir imitacinis
| Aspektas | Fizinė transporto priemonė | Simuliatorius |
|---|---|---|
| Aparatinės įrangos kaina | 50 000 USD ir daugiau | 0 USD (tik programinė įranga) |
| Nustatymo laikas | Valandos (laidų pajungimas, konfigūracija) | Minutės |
| Atkuriamumas | Ribotas (vairuotojo kintamumas) | Tobulas (deterministinis) |
| Saugumas | Sužalojimo / sužalojimo rizika | Nulinė rizika |
| Scenarijų valdymas | Sudėtinga (oras, eismas) | Visiška kontrolė |
| Duomenų registravimas | Reikalinga įranga | Įmontuotas |
| Lygiagretus testavimas | Po vieną transporto priemonę vienu metu | Keli atvejai |
Trikčių šalinimas
Dažnos problemos
CAN sąsaja nerasta
# Verify vcan0 exists
ip link show vcan0
# Recreate if needed
sudo scripts/test/j1939/setup-vcan.shNėra DDS pranešimų
# 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Šliuzas nedekoduoja pranešimų
# Check CAN frames are being sent
candump vcan0
# Verify configuration file
cat /etc/gva/j1939-config.jsonPaprašykite demonstracijos šiandien.