Simulatore di veicoli J1939
Simulatore di veicoli con supporto CAN J1939
Panoramica
Il simulatore di veicoli ( gva-vehicle-sim ) è uno strumento completo di test e sviluppo per la piattaforma GVA (Generic Vehicle Architecture). Fornisce una simulazione realistica della dinamica del veicolo con generazione integrata di messaggi CAN bus J1939 , consentendo test hardware-in-the-loop senza richiedere l'hardware fisico del veicolo.
Vantaggi della simulazione J1939 per la generazione di messaggi
🎯 Vantaggi di sviluppo e test
Sviluppo indipendente dall'hardware
- Sviluppare e testare applicazioni GVA senza hardware CAN fisico
- Non c'è bisogno di costose centraline elettroniche o banchi di prova per veicoli
- Sviluppo parallelo tra più team
Comportamento realistico del veicolo
- Genera numeri di gruppo di parametri J1939 autentici (PGN) e numeri di parametri sospetti (SPN)
- Simula la dinamica realistica del veicolo (velocità, giri al minuto, cambi di marcia, frenata)
- Fornisce dati del sensore sincronizzati nel tempo
Riduzione dei costi
- Elimina la necessità di veicoli di prova fisici nelle fasi iniziali dello sviluppo
- L'interfaccia CAN virtuale (
vcan0) consente di effettuare test su qualsiasi workstation Linux - Riduce l'usura dell'hardware fisico
Prototipazione rapida
- Ciclo di feedback immediato per lo sviluppo di algoritmi
- Creazione e riproduzione facili degli scenari
- Velocità dei messaggi e modelli di dati configurabili
Test di integrazione
- Convalida la funzionalità del gateway J1939
- Flusso di dati di prova dagli argomenti CAN a DDS
- Verificare la reattività dell'HMI ai parametri del veicolo
Test riproducibili
- Comportamento deterministico del veicolo
- Scenari di test ripetibili
- Baseline coerente per i test di regressione
📊 Supporto messaggi J1939
✅ PGN completamente supportati (implementati in Vehicle Simulator)
Il simulatore del veicolo genera attivamente i seguenti messaggi J1939 tramite CAN e li pubblica su DDS tramite il gateway:
| PGN | Esagono | Nome | Valutare | SPN | Descrizione |
|---|---|---|---|---|---|
| 61443 | 0xF003 | EEC2 - Centralina elettronica del motore 2 | 50 ms | 91, 92 | Posizione del pedale dell'acceleratore, percentuale di carico del motore |
| 61444 | 0xF004 | EEC1 - Centralina elettronica del motore 1 | 100 ms | 190, 512, 513 | Velocità del motore (RPM), coppia richiesta dal conducente, coppia effettiva del motore |
| 61445 | 0xF005 | ETC2 - Controllore elettronico della trasmissione 2 | 100 ms | 522, 523, 524 | Posizione della frizione, marcia selezionata, marcia attuale |
| 61449 | 0xF009 | VDC2 - Controllo dinamico del veicolo 2 | 100 ms | 1807, 1808 | Angolo del volante, velocità di imbardata |
| 65253 | 0xFEE5 | ORE - Ore motore | 1s | 247 | Ore totali di funzionamento del motore |
| 65256 | 0xFEE8 | VDS - Direzione/Velocità del veicolo | 250 ms | 517, 519, 586 | Velocità rispetto al suolo, direzione della bussola, rotta |
| 65258 | 0xFEEA | ALT - Altitudine | 1s | 580 | Altitudine GPS sul livello del mare |
| 65262 | 0xFEEE | ET1 - Temperatura motore 1 | 1s | 110, 174, 175 | Temperatura del liquido di raffreddamento del motore, temperatura del carburante, temperatura dell'olio |
| 65263 | 0xFEEF | EFLP - Livello/pressione del fluido motore | 500 ms | 96, 100, 94 | Livello del carburante, pressione dell'olio, pressione di mandata del carburante |
| 65265 | 0xFEF1 | CCVS - Cruise Control/Velocità del veicolo | 100 ms | 84, 597, 598 | Velocità del veicolo basata sulle ruote, interruttore del freno, interruttore della frizione |
| 65267 | 0xFEF3 | VP - Posizione del veicolo | 250 ms | 584, 585 | Latitudine e longitudine GPS |
| 65269 | 0xFEF5 | AMB - Condizioni ambientali | 1s | 108, 171 | Pressione barometrica, temperatura dell'aria ambiente |
| 65271 | 0xFEF7 | VEP1 - Potenza elettrica del veicolo 1 | 1s | 167, 168, 158 | Tensione della batteria, tensione dell'alternatore, tensione del sistema di carica |
| 65276 | 0xFEFC | DD - Display del cruscotto | 1s | 182, 183 | Portata carburante (L/h), risparmio carburante istantaneo |
| 0xEF00 | 0xEF00 | PROP_A - Proprietario A (USM IONICO) | 250 ms | - | Controllo LED per pannello IONNIC USM ES-Key |
Elenco SPN dettagliato (tutti i parametri supportati)
| SPN | Nome del parametro | PGN | Unità | Risoluzione | Offset | Allineare |
|---|---|---|---|---|---|---|
| 84 | Velocità del veicolo basata sulle ruote | 65265 | chilometri all'ora | 1/256 km/h | 0 | 0-250 km/h |
| 91 | Posizione del pedale dell'acceleratore | 61443 | % | 0,4% | 0 | 0-100% |
| 92 | Percentuale di carico del motore alla velocità attuale | 61443/61444 | % | 1% | 0 | 0-100% |
| 94 | Pressione di mandata del carburante | 65263 | kPa | 4 kPa | 0 | 0-1000 kPa |
| 96 | Livello del carburante | 65263 | % | 0,4% | 0 | 0-100% |
| 100 | Pressione dell'olio motore | 65263 | kPa | 4 kPa | 0 | 0-1000 kPa |
| 108 | Pressione barometrica | 65269 | kPa | 0,5 kPa | 0 | 0-125 kPa |
| 110 | Temperatura del liquido di raffreddamento del motore | 65262 | °C | 1°C | -40 | da -40 a +210°C |
| 158 | Tensione del sistema di carica | 65271 | V | 0,05 V | 0 | 0-3212 V |
| 167 | Tensione dell'alternatore | 65271 | V | 0,05 V | 0 | 0-3212 V |
| 168 | Tensione della batteria | 65271 | V | 0,05 V | 0 | 0-3212 V |
| 171 | Temperatura dell'aria ambiente | 65269 | °C | 0,03125°C | -273 | da -273 a +1735°C |
| 174 | Temperatura del carburante | 65262 | °C | 1°C | -40 | da -40 a +210°C |
| 175 | Temperatura dell'olio motore | 65262 | °C | 0,03125°C | -273 | da -273 a +1735°C |
| 182 | Tasso di carburante | 65276 | L/h | 0,05 L/h | 0 | 0-3212 L/h |
| 183 | Risparmio di carburante istantaneo | 65276 | km/l | 1/512 km/l | 0 | 0-125 km/l |
| 190 | Velocità del motore | 61444 | giri al minuto | 0,125 giri/min | 0 | 0-8031 giri/min |
| 247 | Ore totali del motore | 65253 | H | 0,05 ore | 0 | 0-210.554.060 ore |
| 512 | Coppia motore richiesta dal conducente | 61444 | % | 1% | -125 | -125% a +125% |
| 513 | Coppia effettiva del motore | 61444 | % | 1% | -125 | -125% a +125% |
| 517 | Velocità rispetto al suolo | 65256 | chilometri all'ora | 1/256 km/h | 0 | 0-250 km/h |
| 519 | Corso su terra | 65256 | gradi | 1/128 gradi | 0 | 0-360° |
| 522 | Posizione del pedale della frizione | 61445 | % | 0,4% | 0 | 0-100% |
| 523 | Trasmissione attuale marcia | 61445 | ingranaggio | 1 | -125 | da -125 a +125 |
| 524 | Trasmissione marcia selezionata | 61445 | ingranaggio | 1 | -125 | da -125 a +125 |
| 580 | Altitudine | 65258 | M | 0,125 metri | -2500 | da -2500 a +5531 metri |
| 584 | Latitudine | 65267 | gradi | 10⁻⁷ gradi | -210 | da -90° a +90° |
| 585 | Longitudine | 65267 | gradi | 10⁻⁷ gradi | -210 | da -180° a +180° |
| 586 | Rilevamento della bussola | 65256 | gradi | 1/128 gradi | 0 | 0-360° |
| 597 | Interruttore del freno | 65265 | - | 2 bit | - | Spento/Acceso/Errore/Non disponibile |
| 598 | Interruttore frizione | 65265 | - | 2 bit | - | Spento/Acceso/Errore/Non disponibile |
| 899 | Modalità coppia motore | 61444 | - | 1 | 0 | 0-15 (enumerazione) |
| 1807 | Angolo del volante | 61449 | rad | 1/1024 rad | -31.374 | -31,374 a +31,374 rad |
| 1808 | Tasso di imbardata | 61449 | rad/s | 1/8192 rad/s | -3,92 | -3,92 a +3,92 rad/s |
Totale: 15 PGN, 33 SPN simulati attivamente
🔲 PGN non supportati (non ancora implementati)
I seguenti messaggi J1939 non sono attualmente generati dal simulatore del veicolo. Rappresentano potenziali miglioramenti futuri:
| PGN | Esagono | Nome | Priorità | Caso d'uso | Complessità |
|---|---|---|---|---|---|
| 61440 | 0xF000 | ERC1 - Controllo elettronico del rallentatore 1 | Basso | Controllo del rallentatore/freno motore | Medio |
| 61441 | 0xF001 | EBC1 - Regolatore elettronico dei freni 1 | Alto | ABS, stato del sistema frenante | Alto |
| 61442 | 0xF002 | ETC1 - Controllore elettronico della trasmissione 1 | Medio | Modalità di trasmissione, cambio in corso | Medio |
| 64971 | 0xFDCB | VDHR - Distanza del veicolo (alta risoluzione) | Alto | Contachilometri con risoluzione 5 mm | Basso |
| 64972 | 0xFDCC | TCO1 - Tachigrafo | Medio | Carta del conducente, velocità dal tachigrafo | Basso |
| 65132 | 0xFE6C | TPMS - Monitoraggio della pressione dei pneumatici | Medio | Pressione/temperatura individuale dei pneumatici | Medio |
| 65217 | 0xFEC1 | PTODE - Inserimento della presa di forza | Basso | Stato della presa di forza | Basso |
| 65248 | 0xFEE0 | VDIST - Distanza del veicolo ad alta risoluzione | Alto | Distanza totale con risoluzione di 5 m | Basso |
| 65251 | 0xFEE3 | ECFG - Configurazione del motore | Basso | Marca, modello, numero di serie del motore | Basso |
| 65252 | 0xFEE4 | SHUTDN - Arresto | Basso | Disattivazione dell'arresto del motore | Basso |
| 65260 | 0xFEEC | VI - Identificazione del veicolo | Medio | Trasmissione VIN completa (impl. parziale) | Basso |
| 65279 | 0xFEFF | CCVS1 - Cruise Control/Velocità del veicolo 1 | Medio | Dati migliorati del cruise control | Basso |
| 65098 | 0xFE4A | EBC2 - Regolatore elettronico dei freni 2 | Alto | Stato dei freni delle singole ruote | Alto |
| 65099 | 0xFE4B | EBC3 - Regolatore elettronico dei freni 3 | Medio | Usura delle guarnizioni dei freni | Medio |
| 65110 | 0xFE56 | IC1 - Condizioni di ingresso/scarico 1 | Basso | Pressione/temperatura del collettore di aspirazione | Medio |
| 65172 | 0xFE84 | RQST - Richiesta | Basso | Richiedi PGN specifico da ECU | Medio |
| 65226 | 0xFECA | AT1I - Gas di aspirazione post-trattamento 1 | Basso | Ingresso filtro antiparticolato diesel | Basso |
| 65227 | 0xFECB | AT1O - Gas in uscita post-trattamento 1 | Basso | Uscita DPF, sensore NOx | Basso |
| 65247 | 0xFEDF | EFL/P2 - Livello/Pressione del fluido motore 2 | Basso | Pressioni aggiuntive del fluido | Basso |
| 65266 | 0xFEF2 | LFE - Risparmio di carburante | Medio | Consumo medio di carburante/viaggio | Basso |
| 65270 | 0xFEF6 | TD - Turbocompressore | Basso | Pressione di sovralimentazione, velocità della turbina | Medio |
| 65272 | 0xFEF8 | VEP2 - Potenza elettrica del veicolo 2 | Basso | Ulteriori autobus elettrici | Basso |
Perché questi non vengono implementati
| Motivo | PGN interessati | Contare |
|---|---|---|
| Non pertinente alla simulazione di veicoli di base | ERC1, PTODE, SHUTDN, ECFG, AT1I, AT1O, TD | 7 |
| Richiede un modello fisico degli pneumatici | TPMS | 1 |
| Richiede modello ABS/freno | EBC1, EBC2, EBC3 | 3 |
| Richiede una trasmissione avanzata | ECC1 | 1 |
| Bassa priorità / cosmetica | VI(VIN), VDHR, VDIST, TCO1, LFE | 5 |
| Richiede modello di scarico/emissioni | IC1, AT1I, AT1O | 3 |
| Livello di protocollo (non dati del veicolo) | RQST | 1 |
| Versioni duplicate/migliorate | CCVS1, EFL/P2, VEP2 | 3 |
Totale: 22 PGN non supportati
🛠️ Caratteristiche tecniche
- Supporto della rete stradale OpenDRIVE : segui la geometria stradale realistica
- Simulazione di trasmissione automatica : cambi di marcia basati sulla velocità e sull'acceleratore
- Dinamica basata sulla fisica : accelerazione, frenata, sterzo con vincoli realistici
- Integrazione DDS : pubblicazione diretta su argomenti PSM automobilistici J1939
- Interfaccia grafica utente Qt6 : visualizzazione in tempo reale e controllo manuale
Architettura del gateway da J1939 a DDS
Il seguente diagramma di sequenza illustra il flusso di dati completo dai messaggi del bus CAN J1939 attraverso il gateway agli abbonati DDS:
(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)
Spiegazione del diagramma di sequenza
1. Fase di generazione del messaggio
- Vehicle Simulator calcola parametri realistici del veicolo in base agli input del conducente e alla fisica
- Codifica i parametri nei frame CAN J1939 con la struttura PGN/SPN corretta
- Trasmette all'interfaccia CAN virtuale (vcan0)
2. Fase di ricezione CAN
- Il thread Qt di SocketCanReader legge continuamente dall'interfaccia CAN
- Convalida il formato del frame CAN (ID esteso a 29 bit)
- Emette il segnale Qt con dati di frame grezzi
3. Fase di decodifica J1939
- J1939Decoder estrae le informazioni sul protocollo dall'ID CAN:
- PGN : Numero del gruppo di parametri (identifica il tipo di messaggio)
- Indirizzo sorgente : identificatore ECU (0-253)
- Priorità : urgenza del messaggio (0=massima, 7=minima)
- Decodifica il payload dei dati in singoli SPN utilizzando la configurazione:
- Posizione e lunghezza del bit
- Fattore di scala e offset
- Unità di ingegneria
4. Fase di pubblicazione DDS
- Gateway pubblica
C_Parameter_Group_Definition(metadati PGN) alla prima occorrenza - Per ogni SPN nel messaggio:
- Crea un messaggio
C_Parametercon valore e stato - Aggiunge timestamp e identificazione della fonte
- Pubblica sull'argomento DDS
- Crea un messaggio
- Aggiornamenti periodici sullo stato (1 Hz) pubblicano lo stato del gateway
5. Fase di consumo
- Le applicazioni GVA (HMI, LDMX) si iscrivono agli argomenti J1939 DDS
- Ricevi aggiornamenti dei parametri tramite middleware DDS
- Aggiorna gli elementi dell'interfaccia utente (tachimetro, contagiri, visualizzazione delle marce)
Dettagli del protocollo
Struttura ID CAN J1939 (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)Esempio di decodifica del frame CAN
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)Avvio rapido
1. Costruisci un simulatore di veicoli
cd build
cmake ..
make gva-vehicle-sim2. Configurazione CAN virtuale
sudo scripts/test/j1939/setup-vcan.sh3. Avvia il simulatore del veicolo
# 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. Avviare il gateway J1939
./build/bin/gva-j1939-gateway \
--domain=0 \
--interface=vcan0 \
--config=/etc/gva/j1939-config.json5. Monitorare con LDMX
./build/bin/ldmx
# Navigate to J1939 tab to see live parametersConfigurazione
Configurazione del simulatore del veicolo
Crea 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
}
}Configurazione del gateway J1939
Per le definizioni PGN/SPN e i parametri di ridimensionamento, vedere /etc/gva/j1939-config.json .
Casi d'uso
1. Sviluppo HMI
- Sviluppare il cruscotto del veicolo senza veicolo fisico
- Rendering e animazioni del quadro strumenti di prova
- Convalidare le soglie di avviso/allarme
2. Test dell'algoritmo
- Testare gli algoritmi di guida ecologica con consumo di carburante simulato
- Convalidare la logica di manutenzione predittiva
- Testare il processo decisionale di guida autonoma
3. Test di integrazione
- Verificare il flusso di dati end-to-end: CAN → DDS → Applicazione
- Testare le prestazioni del gateway sotto carico
- Convalidare la sincronizzazione dei dati tra i sottosistemi
4. Formazione e dimostrazione
- Ambiente sicuro per la formazione degli operatori
- Dimostrazioni per i clienti senza veicolo
- Strumento didattico per l'architettura GVA
Caratteristiche delle prestazioni
| Metrico | Valore |
|---|---|
| Velocità di generazione dei frame CAN | Fino a 100 Hz per PGN |
| Latenza di pubblicazione DDS | < 5 ms (locale) |
| Capacità di trasmissione del gateway | > 1000 PGN/sec |
| Utilizzo della CPU (simulatore + gateway) | < 10% (sistema a 4 core) |
| Impronta di memoria | ~50 MB (combinati) |
Confronto: Fisico vs. Simulazione
| Aspetto | Veicolo fisico | Simulatore |
|---|---|---|
| Costo dell'hardware | $ 50.000+ | $0 (solo software) |
| Tempo di installazione | Ore (cablaggio, configurazione) | Minuti |
| Riproducibilità | Limitato (variabilità del conducente) | Perfetto (deterministico) |
| Sicurezza | Rischio di danni/lesioni | Rischio zero |
| Controllo dello scenario | Difficile (meteo, traffico) | Controllo completo |
| Registrazione dei dati | Richiede attrezzatura | Incorporato |
| Test paralleli | Un veicolo alla volta | Più istanze |
Risoluzione dei problemi
Problemi comuni
Interfaccia CAN non trovata
# Verify vcan0 exists
ip link show vcan0
# Recreate if needed
sudo scripts/test/j1939/setup-vcan.shNessun messaggio DDS
# 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=0Il gateway non decodifica i messaggi
# Check CAN frames are being sent
candump vcan0
# Verify configuration file
cat /etc/gva/j1939-config.jsonRichiedi una dimostrazione oggi.