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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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:

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)

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_Parameter con valore e stato
    • Aggiunge timestamp e identificazione della fonte
    • Pubblica sull'argomento DDS
  • 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-sim

2. Configurazione CAN virtuale

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

3. 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 \
  --headless

4. Avviare il gateway J1939

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

5. Monitorare con LDMX

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

Configurazione

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.sh

Nessun 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=0

Il gateway non decodifica i messaggi

 # Check CAN frames are being sent
candump vcan0

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

Richiedi una dimostrazione oggi.