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
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
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
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
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
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
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 :
(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_Parameteravec valeur et statut - Ajoute un horodatage et une identification de la source
- Publié dans le sujet DDS
- Crée un message
- 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-sim2. Configurer le CAN virtuel
sudo scripts/test/j1939/setup-vcan.sh3. 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 \
--headless4. Démarrer la passerelle J1939
./build/bin/gva-j1939-gateway \
--domain=0 \
--interface=vcan0 \
--config=/etc/gva/j1939-config.json5. Moniteur avec LDMX
./build/bin/ldmx
# Navigate to J1939 tab to see live parametersConfiguration
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.shAucun 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=0La passerelle ne décode pas les messages
# Check CAN frames are being sent
candump vcan0
# Verify configuration file
cat /etc/gva/j1939-config.jsonDemandez une démonstration dès aujourd'hui.