Simulador de vehículo J1939

Simulador de vehículos con soporte CAN J1939

Descripción general

El Simulador de Vehículos ( gva-vehicle-sim ) es una herramienta integral de pruebas y desarrollo para la plataforma GVA (Arquitectura Genérica de Vehículos). Ofrece una simulación realista de la dinámica del vehículo con generación integrada de mensajes de bus CAN J1939 , lo que permite realizar pruebas de hardware en el circuito sin necesidad de hardware físico del vehículo.

Beneficios de la simulación J1939 para la generación de mensajes

🎯 Ventajas de desarrollo y pruebas

  1. Desarrollo independiente del hardware

    • Desarrollar y probar aplicaciones GVA sin hardware CAN físico
    • No se necesitan ECU de vehículos costosos ni bancos de pruebas
    • Desarrollo paralelo en múltiples equipos
  2. Comportamiento realista del vehículo

    • Genera números de grupo de parámetros J1939 (PGN) y números de parámetros sospechosos (SPN) auténticos
    • Simula la dinámica realista del vehículo (velocidad, RPM, cambios de marcha, frenado)
    • Proporciona datos de sensores sincronizados en el tiempo
  3. Reducción de costos

    • Elimina la necesidad de vehículos de prueba físicos en las primeras etapas del desarrollo.
    • La interfaz CAN virtual ( vcan0 ) permite realizar pruebas en cualquier estación de trabajo Linux
    • Reduce el desgaste del hardware físico
  4. Prototipado rápido

    • Bucle de retroalimentación instantánea para el desarrollo de algoritmos
    • Fácil creación y reproducción de escenarios
    • Tasas de mensajes y patrones de datos configurables
  5. Pruebas de integración

    • Validar la funcionalidad de la puerta de enlace J1939
    • Flujo de datos de prueba de CAN a temas DDS
    • Verificar la capacidad de respuesta de la HMI a los parámetros del vehículo
  6. Pruebas reproducibles

    • Comportamiento determinista del vehículo
    • Escenarios de prueba repetibles
    • Línea de base consistente para pruebas de regresión

Soporte de mensajes J1939

✅ PGN totalmente compatibles (implementados en el simulador de vehículos)

El simulador de vehículo genera activamente los siguientes mensajes J1939 a través de CAN y los publica en DDS mediante la puerta de enlace:

PGN Maleficio Nombre Tasa SPN Descripción
61443 0xF003 EEC2 - Controlador electrónico del motor 2 50 ms 91, 92 Posición del pedal del acelerador, porcentaje de carga del motor
61444 0xF004 EEC1 - Controlador electrónico del motor 1 100 ms 190, 512, 513 Velocidad del motor (RPM), par solicitado por el conductor, par motor real
61445 0xF005 ETC2 - Controlador electrónico de transmisión 2 100 ms 522, 523, 524 Posición del embrague, marcha seleccionada, marcha actual
61449 0xF009 VDC2 - Control dinámico del vehículo 2 100 ms 1807, 1808 Ángulo del volante, velocidad de guiñada
65253 0xFEE5 HORAS - Horas del motor 1s 247 Total de horas de funcionamiento del motor
65256 0xFEE8 VDS - Dirección/velocidad del vehículo 250 ms 517, 519, 586 Velocidad sobre el suelo, rumbo de la brújula, curso
65258 0xFEEA ALT - Altitud 1s 580 Altitud GPS sobre el nivel del mar
65262 0xFEEE ET1 - Temperatura del motor 1 1s 110, 174, 175 Temperatura del refrigerante del motor, temperatura del combustible, temperatura del aceite
65263 0xFEEF EFLP - Nivel/presión del líquido del motor 500 ms 96, 100, 94 Nivel de combustible, presión de aceite, presión de suministro de combustible
65265 0xFEF1 CCVS - Control de crucero/Velocidad del vehículo 100 ms 84, 597, 598 Velocidad del vehículo basada en las ruedas, interruptor de freno, interruptor de embrague
65267 0xFEF3 VP - Posición del vehículo 250 ms 584, 585 Latitud y longitud del GPS
65269 0xFEF5 AMB - Condiciones ambientales 1s 108, 171 Presión barométrica, temperatura del aire ambiente
65271 0xFEF7 VEP1 - Energía eléctrica del vehículo 1 1s 167, 168, 158 Voltaje de la batería, voltaje del alternador, voltaje del sistema de carga
65276 0xFEFC DD - Pantalla de tablero 1s 182, 183 Consumo de combustible (L/h), economía de combustible instantánea
0xEF00 0xEF00 PROP_A - Propietario A (IONNIC USM) 250 ms - Control de LED para el panel IONNIC USM ES-Key

Lista detallada de SPN (todos los parámetros admitidos)

SPN Nombre del parámetro PGN Unidad Resolución Compensar Rango
84 Velocidad del vehículo basada en ruedas 65265 kilómetros por hora 1/256 kilómetros por hora 0 0-250 km/h
91 Posición del pedal del acelerador 61443 % 0,4% 0 0-100%
92 Porcentaje de carga del motor a la velocidad actual 61443/61444 % 1% 0 0-100%
94 Presión de suministro de combustible 65263 kPa 4 kPa 0 0-1000 kPa
96 Nivel de combustible 65263 % 0,4% 0 0-100%
100 Presión de aceite del motor 65263 kPa 4 kPa 0 0-1000 kPa
108 Presión barométrica 65269 kPa 0,5 kPa 0 0-125 kPa
110 Temperatura del refrigerante del motor 65262 °C 1°C -40 -40 a +210°C
158 Voltaje del sistema de carga 65271 V 0,05 V 0 0-3212 V
167 Voltaje del alternador 65271 V 0,05 V 0 0-3212 V
168 Voltaje de la batería 65271 V 0,05 V 0 0-3212 V
171 Temperatura del aire ambiente 65269 °C 0,03125 °C -273 -273 a +1735 °C
174 Temperatura del combustible 65262 °C 1°C -40 -40 a +210°C
175 Temperatura del aceite del motor 65262 °C 0,03125 °C -273 -273 a +1735 °C
182 Tarifa de combustible 65276 L/h 0,05 L/h 0 0-3212 L/h
183 Economía de combustible instantánea 65276 kilómetros por litro 1/512 km/L 0 0-125 km/L
190 Velocidad del motor 61444 RPM 0,125 RPM 0 0-8031 RPM
247 Total de horas del motor 65253 h 0,05 horas 0 0-210.554.060 horas
512 Par motor según demanda del conductor 61444 % 1% -125 -125% a +125%
513 Par motor real 61444 % 1% -125 -125% a +125%
517 Velocidad sobre el suelo 65256 kilómetros por hora 1/256 kilómetros por hora 0 0-250 km/h
519 Curso sobre tierra 65256 grados 1/128 grados 0 0-360°
522 Posición del pedal del embrague 61445 % 0,4% 0 0-100%
523 Transmisión de corriente de transmisión 61445 engranaje 1 -125 -125 a +125
524 Marcha seleccionada de la transmisión 61445 engranaje 1 -125 -125 a +125
580 Altitud 65258 metro 0,125 metros -2500 -2500 a +5531 m
584 Latitud 65267 grados 10⁻⁷ grados -210 -90° a +90°
585 Longitud 65267 grados 10⁻⁷ grados -210 -180° a +180°
586 Marcación de la brújula 65256 grados 1/128 grados 0 0-360°
597 Interruptor de freno 65265 - 2 bits - Apagado/Encendido/Error/No disponible
598 Interruptor de embrague 65265 - 2 bits - Apagado/Encendido/Error/No disponible
899 Modo de par motor 61444 - 1 0 0-15 (enumeración)
1807 Ángulo del volante 61449 genial 1/1024 rad -31.374 -31,374 a +31,374 rad
1808 Velocidad de guiñada 61449 rad/s 1/8192 rad/s -3.92 -3,92 a +3,92 rad/s

Total: 15 PGN, 33 SPN simulados activamente

🔲 PGN no compatibles (aún no implementados)

El simulador de vehículos no genera actualmente los siguientes mensajes J1939. Estos representan posibles mejoras futuras:

PGN Maleficio Nombre Prioridad Caso de uso Complejidad
61440 0xF000 ERC1 - Controlador electrónico del retardador 1 Bajo Control del freno del motor/retardador Medio
61441 0xF001 EBC1 - Controlador electrónico de freno 1 Alto ABS, estado del sistema de frenos Alto
61442 0xF002 ETC1 - Controlador electrónico de transmisión 1 Medio Modo de transmisión, cambio en progreso Medio
64971 0xFDCB VDHR - Distancia del vehículo (alta resolución) Alto Odómetro con resolución de 5 mm Bajo
64972 0xFDCC TCO1 - Tacógrafo Medio Tarjeta de conductor, velocidad del tacógrafo Bajo
65132 0xFE6C TPMS - Monitoreo de presión de neumáticos Medio Presión y temperatura de los neumáticos individuales Medio
65217 0xFEC1 PTODE - Participación en la conducción de la PTO Bajo Estado de la toma de fuerza Bajo
65248 0xFEE0 VDIST - Distancia del vehículo de alta resolución Alto Distancia total con una resolución de 5 m Bajo
65251 0xFEE3 ECFG - Configuración del motor Bajo Marca, modelo y número de serie del motor Bajo
65252 0xFEE4 SHUTDN - Apagado Bajo Anulación de apagado del motor Bajo
65260 0xFEEC VI - Identificación del vehículo Medio Transmisión VIN completa (implementación parcial) Bajo
65279 0xFEFF CCVS1 - Control de crucero/Velocidad del vehículo 1 Medio Datos de control de crucero mejorados Bajo
65098 0xFE4A EBC2 - Controlador electrónico de freno 2 Alto Estado del freno de cada rueda Alto
65099 0xFE4B EBC3 - Controlador electrónico de freno 3 Medio Desgaste del forro de freno Medio
65110 0xFE56 IC1 - Condiciones de entrada/escape 1 Bajo Presión/temperatura del colector de admisión Medio
65172 0xFE84 RQST - Solicitud Bajo Solicitar PGN específico de la ECU Medio
65226 0xFECA AT1I - Postratamiento 1 Gas de admisión Bajo Entrada del filtro de partículas diésel Bajo
65227 0xFECB AT1O - Postratamiento 1 salida de gas Bajo Salida DPF, sensor NOx Bajo
65247 0xFEDF EFL/P2 - Nivel/presión del líquido del motor 2 Bajo Presiones de fluido adicionales Bajo
65266 0xFEF2 LFE - Economía de combustible Medio Economía de combustible promedio/viaje Bajo
65270 0xFEF6 TD - Turbocompresor Bajo Presión de refuerzo, velocidad de la turbina Medio
65272 0xFEF8 VEP2 - Energía eléctrica del vehículo 2 Bajo Autobuses eléctricos adicionales Bajo

¿Por qué no se implementan?

Razón PGN afectados Contar
No es relevante para el simulador básico de vehículo. ERC1, PTODE, SHUTDN, ECFG, AT1I, AT1O, TD 7
Requiere modelo de física de neumáticos Sistema de gestión de la presión de los neumáticos (TPMS) 1
Requiere modelo con ABS/freno EBC1, EBC2, EBC3 3
Requiere transmisión avanzada ETC1 1
Baja prioridad / cosmética VI (VIN), VDHR, VDIST, TCO1, LFE 5
Requiere modelo de escape/emisiones IC1, AT1I, AT1O 3
A nivel de protocolo (no datos del vehículo) RQST 1
Versiones duplicadas/mejoradas CCVS1, EFL/P2, VEP2 3

Total: 22 PGN no compatibles

🛠️ Características técnicas

  • Compatibilidad con la red de carreteras OpenDRIVE : siga la geometría realista de la carretera
  • Simulación de transmisión automática : cambios de marcha en función de la velocidad y el acelerador
  • Dinámica basada en la física : aceleración, frenado y dirección con restricciones realistas
  • Integración DDS : publicación directa en temas PSM automotrices J1939
  • GUI Qt6 : visualización en tiempo real y control manual

Arquitectura de puerta de enlace J1939 a DDS

El siguiente diagrama de secuencia ilustra el flujo de datos completo desde los mensajes del bus CAN J1939 a través de la puerta de enlace hasta los suscriptores 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)

Explicación del diagrama de secuencia

1. Fase de generación de mensajes

  • El simulador de vehículos calcula parámetros realistas del vehículo en función de las entradas del conductor y la física.
  • Codifica parámetros en tramas CAN J1939 con la estructura PGN/SPN adecuada
  • Transmite a la interfaz CAN virtual (vcan0)

2. Fase de recepción de CAN

  • El hilo Qt de SocketCanReader lee continuamente desde la interfaz CAN
  • Valida el formato del marco CAN (ID extendida de 29 bits)
  • Emite señal Qt con datos de cuadro sin procesar

3. Fase de decodificación J1939

  • El decodificador J1939 extrae información del protocolo del ID CAN:
    • PGN : Número de grupo de parámetros (identifica el tipo de mensaje)
    • Dirección de origen : Identificador de la ECU (0-253)
    • Prioridad : Urgencia del mensaje (0=máxima, 7=mínima)
  • Decodifica la carga útil de datos en SPN individuales mediante la configuración:
    • Posición y longitud de la broca
    • Factor de escala y desplazamiento
    • Unidades de ingeniería

4. Fase de publicación de DDS

  • Gateway publica C_Parameter_Group_Definition (metadatos PGN) en la primera aparición
  • Para cada SPN en el mensaje:
    • Crea un mensaje C_Parameter con valor y estado
    • Agrega marca de tiempo e identificación de fuente
    • Publica en el tema DDS
  • Las actualizaciones de estado periódicas (1 Hz) publican el estado de la puerta de enlace

5. Fase de consumo

  • Las aplicaciones GVA (HMI, LDMX) se suscriben a los temas DDS J1939
  • Recibir actualizaciones de parámetros a través del middleware DDS
  • Actualizar elementos de la interfaz de usuario (velocímetro, tacómetro, indicador de marcha)

Detalles del protocolo

Estructura de identificación 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)

Ejemplo de decodificación de trama 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)

Inicio rápido

1. Construye un simulador de vehículos

 cd build
cmake ..
make gva-vehicle-sim

2. Configurar CAN virtual

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

3. Iniciar el simulador de vehículos

 # 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. Iniciar la puerta de enlace J1939

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

5. Monitor con LDMX

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

Configuración

Configuración del simulador de vehículos

Crear 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
  }
}

Configuración de la puerta de enlace J1939

Consulte /etc/gva/j1939-config.json para obtener definiciones de PGN/SPN y parámetros de escala.

Casos de uso

1. Desarrollo de HMI

  • Desarrollar el tablero del vehículo sin vehículo físico
  • Pruebe la representación y las animaciones del grupo de instrumentos
  • Validar umbrales de advertencia/alarma

2. Pruebas de algoritmos

  • Pruebe algoritmos de conducción ecológica con consumo de combustible simulado
  • Validar la lógica del mantenimiento predictivo
  • Prueba la toma de decisiones en la conducción autónoma

3. Pruebas de integración

  • Verificar el flujo de datos de extremo a extremo: CAN → DDS → Aplicación
  • Pruebe el rendimiento de la puerta de enlace bajo carga
  • Validar la sincronización de datos entre subsistemas

4. Capacitación y demostración

  • Entorno seguro para la formación de operadores
  • Demostraciones de clientes sin vehículo
  • Herramienta educativa para la arquitectura GVA

Características de rendimiento

Métrico Valor
Tasa de generación de tramas CAN Hasta 100 Hz por PGN
Latencia de publicación de DDS < 5 ms (local)
Rendimiento de la puerta de enlace > 1000 PGN/seg
Uso de CPU (simulador + puerta de enlace) < 10% (sistema de 4 núcleos)
Huella de memoria ~50 MB (combinados)

Comparación: física vs. simulada

Aspecto Vehículo físico Simulador
Costo del hardware $50,000+ $0 (solo software)
Tiempo de configuración Horas (cableado, configuración) Minutos
Reproducibilidad Limitado (variabilidad del conductor) Perfecto (determinista)
Seguridad Riesgo de daños/lesiones Riesgo cero
Control de escenarios Difícil (clima, tráfico) Control completo
Registro de datos Requiere equipo Incorporado
Pruebas paralelas Un vehículo a la vez Varias instancias

Solución de problemas

Problemas comunes

Interfaz CAN no encontrada

 # Verify vcan0 exists
ip link show vcan0

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

No hay mensajes 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 puerta de enlace no decodifica los mensajes

 # Check CAN frames are being sent
candump vcan0

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

Solicite una demostración hoy.