Simulateur de véhicule J1939

Simulateur de véhicule avec prise en charge CAN J1939

Aperçu

Le simulateur de véhicule ( gva-vehicle-sim ) est un outil complet de test et de développement pour la plateforme GVA (Generic Vehicle Architecture). Il offre une simulation réaliste de la dynamique du véhicule avec génération intégrée de messages CAN bus J1939 , permettant des tests matériels sans nécessiter de véhicule physique.

Avantages de la simulation J1939 pour la génération de messages

🎯 Avantages en matière de développement et de tests

  1. Développement indépendant du matériel

    • Développer et tester des applications GVA sans matériel CAN physique
    • Pas besoin de calculateurs embarqués coûteux ni de bancs d'essai.
    • Développement parallèle au sein de plusieurs équipes
  2. Comportement réaliste du véhicule

    • Génère des numéros de groupe de paramètres (PGN) J1939 authentiques et des numéros de paramètres suspects (SPN)
    • Simule une dynamique de véhicule réaliste (vitesse, régime moteur, changements de vitesse, freinage).
    • Fournit des données de capteurs synchronisées dans le temps
  3. Réduction des coûts

    • Élimine le besoin de véhicules d'essai physiques au début du développement
    • L'interface CAN virtuelle ( vcan0 ) permet de réaliser des tests sur n'importe quel poste de travail Linux.
    • Réduit l'usure du matériel physique
  4. Prototypage rapide

    • Boucle de rétroaction instantanée pour le développement d'algorithmes
    • Création et relecture faciles des scénarios
    • Débits de messages et modèles de données configurables
  5. Tests d'intégration

    • Valider la fonctionnalité de la passerelle J1939
    • Flux de données de test des sujets CAN vers DDS
    • Vérifier la réactivité de l'IHM aux paramètres du véhicule
  6. Tests reproductibles

    • Comportement déterministe du véhicule
    • Scénarios de test reproductibles
    • Ligne de base cohérente pour les tests de régression

📊 Assistance par message J1939

✅ Prise en charge complète des PGN (implémentés dans le simulateur de véhicule)

Le simulateur de véhicule génère activement les messages J1939 suivants via CAN et les publie sur DDS via la passerelle :

PGN Hex Nom Taux SPN Description
61443 0xF003 EEC2 - Contrôleur électronique de moteur 2 50 ms 91, 92 Position de la pédale d'accélérateur, pourcentage de charge du moteur
61444 0xF004 EEC1 - Contrôleur électronique de moteur 1 100 ms 190, 512, 513 Régime moteur (tr/min), couple demandé par le conducteur, couple moteur réel
61445 0xF005 ETC2 - Contrôleur de transmission électronique 2 100 ms 522, 523, 524 Position de l'embrayage, rapport engagé, rapport actuel
61449 0xF009 VDC2 - Contrôle dynamique du véhicule 2 100 ms 1807, 1808 Angle du volant, vitesse de lacet
65253 0xFEE5 HEURES - Heures moteur 1s 247 Heures totales de fonctionnement du moteur
65256 0xFEE8 VDS - Direction/Vitesse du véhicule 250 ms 517, 519, 586 Vitesse fond, cap compas, route
65258 0xFEEA ALT - Altitude 1s 580 Altitude GPS au-dessus du niveau de la mer
65262 0xFEEE ET1 - Température du moteur 1 1s 110, 174, 175 Température du liquide de refroidissement du moteur, température du carburant, température de l'huile
65263 0xFEEF EFLP - Niveau/pression du liquide moteur 500 ms 96, 100, 94 Niveau de carburant, pression d'huile, pression d'alimentation en carburant
65265 0xFEF1 CCVS - Régulateur de vitesse/Vitesse du véhicule 100 ms 84, 597, 598 Vitesse du véhicule à roues, contacteur de frein, contacteur d'embrayage
65267 0xFEF3 VP - Position du véhicule 250 ms 584, 585 Latitude et longitude GPS
65269 0xFEF5 AMB - Conditions ambiantes 1s 108, 171 Pression barométrique, température de l'air ambiant
65271 0xFEF7 VEP1 - Alimentation électrique du véhicule 1 1s 167, 168, 158 Tension de la batterie, tension de l'alternateur, tension du système de charge
65276 0xFEFC DD - Affichage du tableau de bord 1s 182, 183 Consommation de carburant (L/h), consommation instantanée de carburant
0xEF00 0xEF00 PROP_A - Propriété A (IONNIC USM) 250 ms - Panneau de commande LED pour clé IONNIC USM ES

Liste détaillée des SPN (tous les paramètres pris en charge)

SPN Nom du paramètre PGN Unité Résolution Compenser Gamme
84 Vitesse des véhicules à roues 65265 km/h 1/256 km/h 0 0-250 km/h
91 Position de la pédale d'accélérateur 61443 % 0,4% 0 0-100%
92 Pourcentage de charge du moteur à la vitesse actuelle 61443/61444 % 1% 0 0-100%
94 Pression d'alimentation en carburant 65263 kPa 4 kPa 0 0-1000 kPa
96 Niveau de carburant 65263 % 0,4% 0 0-100%
100 Pression d'huile moteur 65263 kPa 4 kPa 0 0-1000 kPa
108 Pression barométrique 65269 kPa 0,5 kPa 0 0-125 kPa
110 Température du liquide de refroidissement du moteur 65262 °C 1°C -40 -40 à +210 °C
158 Tension du système de charge 65271 V 0,05 V 0 0-3212 V
167 Tension de l'alternateur 65271 V 0,05 V 0 0-3212 V
168 Tension de la batterie 65271 V 0,05 V 0 0-3212 V
171 Température de l'air ambiant 65269 °C 0,03125°C -273 -273 à +1735 °C
174 Température du carburant 65262 °C 1°C -40 -40 à +210 °C
175 Température de l'huile moteur 65262 °C 0,03125°C -273 -273 à +1735 °C
182 Taux de carburant 65276 L/h 0,05 L/h 0 0-3212 L/h
183 Consommation de carburant instantanée 65276 km/L 1/512 km/L 0 0-125 km/L
190 Régime moteur 61444 tr/min 0,125 tr/min 0 0-8031 tr/min
247 Nombre total d'heures moteur 65253 h 0,05 h 0 0-210 554 060 h
512 Couple moteur demandé par le conducteur 61444 % 1% -125 -125 % à +125 %
513 Couple moteur réel 61444 % 1% -125 -125 % à +125 %
517 Vitesse sur sol 65256 km/h 1/256 km/h 0 0-250 km/h
519 Parcours sur le terrain 65256 deg 1/128 deg 0 0-360°
522 Position de la pédale d'embrayage 61445 % 0,4% 0 0-100%
523 Engrenage de courant de transmission 61445 engrenage 1 -125 -125 à +125
524 Rapport de transmission sélectionné 61445 engrenage 1 -125 -125 à +125
580 Altitude 65258 m 0,125 m -2500 -2500 à +5531 m
584 Latitude 65267 deg 10⁻⁷ degrés -210 -90° à +90°
585 Longitude 65267 deg 10⁻⁷ degrés -210 -180° à +180°
586 Orientation au compas 65256 deg 1/128 deg 0 0-360°
597 Interrupteur de frein 65265 - 2 bits - Éteint/Marche/Erreur/Non disponible
598 Interrupteur d'embrayage 65265 - 2 bits - Éteint/Marche/Erreur/Non disponible
899 Mode de couple moteur 61444 - 1 0 0-15 (énumération)
1807 Angle du volant 61449 rad 1/1024 rad -31,374 -31,374 à +31,374 rad
1808 Vitesse de lacet 61449 rad/s 1/8192 rad/s -3,92 -3,92 à +3,92 rad/s

Total : 15 PGN, 33 SPN simulés activement

🔲 Formats PGN non pris en charge (Pas encore implémenté)

Les messages J1939 suivants ne sont actuellement pas générés par le simulateur de véhicule. Ils représentent des améliorations potentielles futures :

PGN Hex Nom Priorité Cas d'utilisation Complexité
61440 0xF000 ERC1 - Contrôleur de ralentisseur électronique 1 Faible Commande de ralentisseur/frein moteur Moyen
61441 0xF001 EBC1 - Contrôleur de frein électronique 1 Haut État du système ABS et du système de freinage Haut
61442 0xF002 ETC1 - Contrôleur de transmission électronique 1 Moyen Mode de transmission, changement de vitesse en cours Moyen
64971 0xFDCB VDHR - Distance véhicule (Haute résolution) Haut Odomètre avec une résolution de 5 mm Faible
64972 0xFDCC TCO1 - Tachygraphe Moyen Carte conducteur, vitesse relevée par le tachygraphe Faible
65132 0xFE6C TPMS - Surveillance de la pression des pneus Moyen Pression/température individuelle des pneus Moyen
65217 0xFEC1 PTODE - Engagement du programme PTO Faible État de la prise de force Faible
65248 0xFEE0 VDIST - Distance véhicule haute résolution Haut Distance totale avec une résolution de 5 m Faible
65251 0xFEE3 ECFG - Configuration du moteur Faible Marque, modèle et numéro de série du moteur Faible
65252 0xFEE4 SHUTDN - Arrêt Faible Désactivation de l'arrêt moteur Faible
65260 0xFEEC VI - Identification du véhicule Moyen Transmission VIN complète (implémentation partielle) Faible
65279 0xFEFF CCVS1 - Régulateur de vitesse/Vitesse du véhicule 1 Moyen Données améliorées du régulateur de vitesse Faible
65098 0xFE4A EBC2 - Contrôleur de frein électronique 2 Haut État individuel des freins de roue Haut
65099 0xFE4B EBC3 - Contrôleur de frein électronique 3 Moyen Usure des garnitures de freins Moyen
65110 0xFE56 IC1 - Conditions d'admission/d'échappement 1 Faible Pression/température du collecteur d'admission Moyen
65172 0xFE84 RQST - Demande Faible Demande de PGN spécifique à l'ECU Moyen
65226 0xFECA AT1I - Post-traitement 1 Admission Gaz Faible entrée du filtre à particules diesel Faible
65227 0xFECB AT1O - Posttraitement 1 Sortie Gaz Faible Sortie du FAP, capteur NOx Faible
65247 0xFEDF EFL/P2 - Niveau/pression du liquide moteur 2 Faible Pressions de fluides supplémentaires Faible
65266 0xFEF2 LFE - Économie de carburant Moyen Consommation moyenne de carburant par trajet Faible
65270 0xFEF6 TD - Turbocompresseur Faible Pression de suralimentation, vitesse de la turbine Moyen
65272 0xFEF8 VEP2 - Alimentation électrique des véhicules 2 Faible Bus électriques supplémentaires Faible

Pourquoi ces mesures ne sont-elles pas mises en œuvre ?

Raison PGN affectés Compter
Sans rapport avec la simulation de véhicule de base ERC1, PTODE, SHUTDN, ECFG, AT1I, AT1O, TD 7
Nécessite un modèle physique des pneus TPMS 1
Nécessite un modèle avec ABS/freins EBC1, EBC2, EBC3 3
Nécessite une transmission avancée ETC1 1
Priorité faible / cosmétique VI (VIN), VDHR, VDIST, TCO1, LFE 5
Nécessite un modèle d'échappement/d'émissions IC1, AT1I, AT1O 3
Au niveau du protocole (et non des données du véhicule) RQST 1
Versions dupliquées/améliorées CCVS1, EFL/P2, VEP2 3

Total : 22 PGN non pris en charge

🛠️ Caractéristiques techniques

  • Prise en charge du réseau routier OpenDRIVE : Suivi d’une géométrie routière réaliste
  • Simulation de transmission automatique : Changements de vitesse en fonction de la vitesse et de l'accélérateur
  • Dynamique basée sur la physique : Accélération, freinage, direction avec des contraintes réalistes
  • Intégration DDS : Publication directe sur les sujets J1939 Automotive PSM
  • Interface graphique Qt6 : visualisation en temps réel et contrôle manuel

Architecture de passerelle J1939 vers DDS

Le diagramme de séquence suivant illustre le flux de données complet des messages du bus CAN J1939 à travers la passerelle jusqu'aux abonnés 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)

Explication du diagramme de séquence

1. Phase de génération des messages

  • Le simulateur de véhicule calcule des paramètres réalistes du véhicule en fonction des entrées du conducteur et de la physique.
  • Encode les paramètres dans des trames CAN J1939 avec une structure PGN/SPN appropriée.
  • Transmet à l'interface CAN virtuelle (vcan0)

2. Phase de réception CAN

  • Le thread Qt SocketCanReader lit en continu depuis l'interface CAN.
  • Valide le format de trame CAN (ID étendu 29 bits)
  • Émet un signal Qt avec des données de trame brutes

3. Phase de décodage J1939

  • Le décodeur J1939 extrait les informations de protocole de l'identifiant CAN :
    • PGN : Numéro de groupe de paramètres (identifie le type de message)
    • Adresse source : Identifiant de l'ECU (0-253)
    • Priorité : Urgence du message (0 = la plus élevée, 7 = la plus faible)
  • Décode la charge utile de données en SPN individuels à l'aide de la configuration :
    • Position et longueur du foret
    • Facteur d'échelle et décalage
    • unités d'ingénierie

4. Phase de publication DDS

  • Gateway publie C_Parameter_Group_Definition (métadonnées PGN) lors de sa première occurrence
  • Pour chaque SPN dans le message :
    • Crée un message C_Parameter avec valeur et statut
    • Ajoute un horodatage et une identification de la source
    • Publié dans le sujet DDS
  • Des mises à jour d'état périodiques (1 Hz) publient l'état de la passerelle.

5. Phase de consommation

  • Les applications GVA (IHM, LDMX) s'abonnent aux sujets J1939 DDS
  • Réception des mises à jour des paramètres via l'intergiciel DDS
  • Mise à jour des éléments d'interface utilisateur (compteur de vitesse, compte-tours, indicateur de rapport engagé)

Détails du protocole

Structure d'identification CAN J1939 (29 bits)

 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)

Exemple de décodage de trame 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)

Démarrage rapide

1. Créer un simulateur de véhicules

 cd build
cmake ..
make gva-vehicle-sim

2. Configurer le CAN virtuel

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

3. Lancer le simulateur de véhicule

 # 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. Démarrer la passerelle J1939

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

5. Moniteur avec LDMX

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

Configuration

Configuration du simulateur de véhicule

Créer le 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
  }
}

Configuration de la passerelle J1939

Consultez le /etc/gva/j1939-config.json pour les définitions PGN/SPN et les paramètres de mise à l'échelle.

Cas d'utilisation

1. Développement de l'IHM

  • Concevoir un tableau de bord de véhicule sans véhicule physique
  • Test du rendu et des animations du tableau de bord
  • Valider les seuils d'alerte/d'alarme

2. Tests d'algorithmes

  • Tester des algorithmes d'éco-conduite avec une consommation de carburant simulée
  • Valider la logique de maintenance prédictive
  • Tester la prise de décision en conduite autonome

3. Tests d'intégration

  • Vérifier le flux de données de bout en bout : CAN → DDS → Application
  • Testez les performances de la passerelle sous charge.
  • Valider la synchronisation des données entre les sous-systèmes

4. Formation et démonstration

  • Environnement sécurisé pour la formation des opérateurs
  • Démonstrations clients sans véhicule
  • Outil pédagogique pour l'architecture GVA

Caractéristiques de performance

Métrique Valeur
débit de génération de trames CAN Jusqu'à 100 Hz par PGN
latence de publication DDS < 5 ms (local)
Débit de la passerelle > 1000 PGN/sec
Utilisation du processeur (simulateur + passerelle) < 10 % (système à 4 cœurs)
Empreinte mémoire ~50 Mo (combinés)

Comparaison : physique vs. simulée

Aspect Véhicule physique Simulateur
Coût du matériel 50 000 $ et plus 0 $ (logiciel uniquement)
Temps de préparation Heures (câblage, configuration) Minutes
Reproductibilité Limitée (variabilité du conducteur) Parfait (déterministe)
Sécurité Risque de dommages/blessures Zéro risque
Contrôle de scénario Difficile (météo, circulation) Contrôle total
Enregistrement des données Nécessite un équipement Intégré
Tests parallèles Un véhicule à la fois Plusieurs instances

Dépannage

Problèmes courants

Interface CAN introuvable

 # Verify vcan0 exists
ip link show vcan0

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

Aucun message 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

La passerelle ne décode pas les messages

 # Check CAN frames are being sent
candump vcan0

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

Demandez une démonstration dès aujourd'hui.