J1939 Симулятор транспортного засобу

Симулятор транспортного засобу з підтримкою J1939 CAN

Огляд

Симулятор транспортного засобу ( gva-vehicle-sim ) – це комплексний інструмент тестування та розробки для платформи GVA (Generic Vehicle Architecture). Він забезпечує реалістичне моделювання динаміки транспортного засобу з інтегрованою генерацією повідомлень шини CAN J1939 , що дозволяє проводити тестування обладнання в циклі без необхідності фізичного обладнання транспортного засобу.

Переваги моделювання J1939 для генерації повідомлень

🎯 Переваги розробки та тестування

  1. Розробка, незалежна від апаратного забезпечення

    • Розробляйте та тестуйте застосунки GVA без фізичного обладнання CAN
    • Немає потреби в дорогих ЕБУ автомобілів або випробувальних стендах
    • Паралельна розробка в кількох командах
  2. Реалістична поведінка транспортного засобу

    • Генерує автентичні номери груп параметрів J1939 (PGN) та номери підозрілих параметрів (SPN)
    • Імітує реалістичну динаміку автомобіля (швидкість, оберти, перемикання передач, гальмування)
    • Забезпечує синхронізовані за часом дані датчиків
  3. Зменшення витрат

    • Усуває необхідність у фізичних випробувальних транспортних засобах на ранніх етапах розробки
    • Віртуальний CAN-інтерфейс ( vcan0 ) дозволяє тестувати на будь-якій робочій станції Linux
    • Зменшує знос фізичного обладнання
  4. Швидке прототипування

    • Миттєвий зворотний зв'язок для розробки алгоритмів
    • Легке створення та відтворення сценаріїв
    • Налаштовувані швидкості повідомлень та шаблони даних
  5. Інтеграційне тестування

    • Перевірити функціональність шлюзу J1939
    • Тестування потоку даних від CAN до DDS
    • Перевірте чутливість HMI до параметрів транспортного засобу
  6. Відтворюване тестування

    • Детермінована поведінка транспортного засобу
    • Повторювані тестові сценарії
    • Послідовна базова лінія для регресійного тестування

📊 Підтримка повідомлень J1939

✅ Повністю підтримувані PGN (реалізовано в симуляторі транспортних засобів)

Симулятор транспортного засобу активно генерує такі повідомлення J1939 через CAN та надсилає їх до DDS через шлюз:

ПГН Шістнадцятковий Ім'я Оцінити SPN Опис
61443 0xF003 EEC2 - Електронний контролер двигуна 2 50 мс 91, 92 Положення педалі акселератора, відсоток навантаження двигуна
61444 0xF004 EEC1 - Електронний контролер двигуна 1 100 мс 190, 512, 513 Обороти двигуна (об/хв), крутний момент, що вимагається водієм, фактичний крутний момент двигуна
61445 0xF005 ETC2 - Електронний контролер трансмісії 2 100 мс 522, 523, 524 Положення зчеплення, вибрана передача, поточна передача
61449 0xF009 VDC2 - Динамічний контроль транспортного засобу 2 100 мс 1807, 1808 Кут повороту керма, кут рискання
65253 0xFEE5 ГОДИНИ - Мотогодини роботи двигуна 1 с 247 Загальна кількість годин роботи двигуна
65256 0xFEE8 VDS - Напрямок/швидкість транспортного засобу 250 мс 517, 519, 586 Швидкість відносно землі, курс по компасу, курс
65258 0xFEEA ALT - Висота 1 с 580 Висота над рівнем моря за GPS
65262 0xFEEE ET1 - Температура двигуна 1 1 с 110, 174, 175 Температура охолоджувальної рідини двигуна, температура палива, температура оливи
65263 0xFEEF EFLP - Рівень/тиск рідини двигуна 500 мс 96, 100, 94 Рівень палива, тиск оливи, тиск подачі палива
65265 0xFEF1 CCVS - Круїз-контроль/Швидкість автомобіля 100 мс 84, 597, 598 Швидкість автомобіля на основі коліс, вимикач гальм, вимикач зчеплення
65267 0xFEF3 VP - Положення транспортного засобу 250 мс 584, 585 Широта, довгота за GPS
65269 0xFEF5 AMB - Умови навколишнього середовища 1 с 108, 171 Атмосферний тиск, температура навколишнього повітря
65271 0xFEF7 VEP1 - Електроживлення транспортного засобу 1 1 с 167, 168, 158 Напруга акумулятора, напруга генератора, напруга системи заряджання
65276 0xFEFC DD - Дисплей на приладовій панелі 1 с 182, 183 Витрата палива (л/год), миттєва економія палива
0xEF00 0xEF00 PROP_A - Власник A (IONNIC USM) 250 мс - Світлодіодне керування для панелі IONNIC USM ES-Key

Детальний список SPN (усі підтримувані параметри)

Спеціальна мережа (СПН) Назва параметра ПГН Одиниця Роздільна здатність Зсув Діапазон
84 Швидкість колісного транспортного засобу 65265 км/год 1/256 км/год 0 0-250 км/год
91 Положення педалі акселератора 61443 % 0,4% 0 0-100%
92 Відсоток навантаження двигуна при поточній швидкості 61443/61444 % 1% 0 0-100%
94 Тиск подачі палива 65263 кПа 4 кПа 0 0-1000 кПа
96 Рівень палива 65263 % 0,4% 0 0-100%
100 Тиск моторного масла 65263 кПа 4 кПа 0 0-1000 кПа
108 Атмосферний тиск 65269 кПа 0,5 кПа 0 0-125 кПа
110 Температура охолоджувальної рідини двигуна 65262 °C 1°C -40 від -40 до +210°C
158 Напруга системи заряджання 65271 В 0,05 В 0 0-3212 В
167 Напруга генератора змінного струму 65271 В 0,05 В 0 0-3212 В
168 Напруга акумулятора 65271 В 0,05 В 0 0-3212 В
171 Температура навколишнього повітря 65269 °C 0,03125°C -273 від -273 до +1735°C
174 Температура палива 65262 °C 1°C -40 від -40 до +210°C
175 Температура моторного масла 65262 °C 0,03125°C -273 від -273 до +1735°C
182 Витрата палива 65276 л/год 0,05 л/год 0 0-3212 л/год
183 Миттєва економія палива 65276 км/л 1/512 км/л 0 0-125 км/л
190 Швидкість двигуна 61444 Обороти на хвилину 0,125 об/хв 0 0-8031 об/хв
247 Загальна кількість годин роботи двигуна 65253 год 0,05 год 0 0–210 554 060 год
512 Крутний момент двигуна, що вимагається водієм 61444 % 1% -125 від -125% до +125%
513 Фактичний крутний момент двигуна 61444 % 1% -125 від -125% до +125%
517 Швидкість відносно землі 65256 км/год 1/256 км/год 0 0-250 км/год
519 Курс по землі 65256 градус 1/128 градуса 0 0-360°
522 Положення педалі зчеплення 61445 % 0,4% 0 0-100%
523 Поточна передача трансмісії 61445 спорядження 1 -125 від -125 до +125
524 Вибрана передача трансмісії 61445 спорядження 1 -125 від -125 до +125
580 Висота 65258 м 0,125 м -2500 від -2500 до +5531 м
584 Широта 65267 градус 10⁻⁷ градусів -210 від -90° до +90°
585 Довгота 65267 градус 10⁻⁷ градусів -210 від -180° до +180°
586 Пеленг компаса 65256 градус 1/128 градуса 0 0-360°
597 Гальмівний вимикач 65265 - 2 біти - Вимк./Увімк./Помилка/Недоступно
598 Перемикач зчеплення 65265 - 2 біти - Вимк./Увімк./Помилка/Недоступно
899 Режим крутного моменту двигуна 61444 - 1 0 0-15 (перерахування)
1807 рік Кут повороту керма 61449 радіація 1/1024 рад -31,374 від -31,374 до +31,374 рад
1808 рік Швидкість рисання 61449 рад/с 1/8192 рад/с -3,92 від -3,92 до +3,92 рад/с

Всього: 15 PGN, 33 SPN активно змодельовані

🔲 Непідтримувані PGN (ще не реалізовано)

Наступні повідомлення J1939 наразі не генеруються симулятором транспортного засобу. Вони відображають потенційні майбутні вдосконалення:

ПГН Шістнадцятковий Ім'я Пріоритет Випадок використання Складність
61440 0xF000 ERC1 - Електронний контролер ретардера 1 Низький Управління ретардером/гальмом двигуна Середній
61441 0xF001 EBC1 - Електронний контролер гальм 1 Високий ABS, стан гальмівної системи Високий
61442 0xF002 ETC1 - Електронний контролер трансмісії 1 Середній Режим трансмісії, перемикання триває Середній
64971 0xFDCB VDHR - Відстань до транспортного засобу (висока роздільна здатність) Високий Одометр з роздільною здатністю 5 мм Низький
64972 0xFDCC TCO1 - Тахограф Середній Картка водія, швидкість з тахографа Низький
65132 0xFE6C TPMS - Система контролю тиску в шинах Середній Тиск/температура індивідуальних шин Середній
65217 0xFEC1 PTODE - Вмикання приводу ВОМ Низький Стан відбору потужності Низький
65248 0xFEE0 VDIST - Відстань до транспортного засобу високої роздільної здатності Високий Загальна відстань з роздільною здатністю 5 м Низький
65251 0xFEE3 ECFG - Конфігурація двигуна Низький Марка двигуна, модель, серійний номер Низький
65252 0xFEE4 SHUTDN - Вимкнення Низький Ігнорування вимкнення двигуна Низький
65260 0xFEEC VI - Ідентифікація транспортного засобу Середній Повна передача VIN-коду (часткова імплементація) Низький
65279 0xFEFF CCVS1 - Круїз-контроль/Швидкість автомобіля 1 Середній Покращені дані круїз-контролю Низький
65098 0xFE4A EBC2 - Електронний контролер гальм 2 Високий Стан індивідуальних колісних гальм Високий
65099 0xFE4B EBC3 - Електронний контролер гальм 3 Середній Знос гальмівних накладок Середній
65110 0xFE56 IC1 - Умови впуску/випуску 1 Низький Тиск/температура у впускному колекторі Середній
65172 0xFE84 RQST - Запит Низький Запит конкретного PGN від ECU Середній
65226 0xFECA AT1I - Доочистка 1 впускного газу Низький Впускний отвір сажового фільтра Низький
65227 0xFECB AT1O – Вихідний газ доочищення 1 Низький Випускний отвір DPF, датчик NOx Низький
65247 0xFEDF EFL/P2 - Рівень/тиск рідини двигуна 2 Низький Додатковий тиск рідини Низький
65266 0xFEF2 LFE - Економія палива Середній Середня витрата палива/подорож Низький
65270 0xFEF6 TD - Турбокомпресор Низький Тиск наддуву, швидкість турбіни Середній
65272 0xFEF8 VEP2 - Електроживлення транспортного засобу 2 Низький Додаткові електричні автобуси Низький

Чому це не впроваджується

Причина Уражені PGN Кількість
Не стосується базового симулятора транспортних засобів ERC1, PTODE, SHUTDN, ECFG, AT1I, AT1O, TD 7
Потрібна фізична модель шин TPMS (Система управління тиском у трубопроводах) 1
Потрібна модель з ABS/гальмами ЕБК1, ЕБК2, ЕБК3 3
Потрібна розширена передача І т.д.1 1
Низький пріоритет / косметичний VI (VIN), VDHR, VDIST, TCO1, LFE 5
Потрібна модель вихлопних газів/вимиктів IC1, AT1I, AT1O 3
Рівень протоколу (не дані транспортного засобу) РКСТ 1
Дублікати/покращені версії CCVS1, EFL/P2, VEP2 3

Всього: 22 непідтримувані PGN

🛠️ Технічні характеристики

  • Підтримка дорожньої мережі OpenDRIVE : дотримання реалістичної геометрії доріг
  • Симуляція автоматичної трансмісії : перемикання передач залежно від швидкості та дросельної заслінки
  • Динаміка на основі фізики : розгін, гальмування, рульове керування з реалістичними обмеженнями
  • Інтеграція DDS : пряма публікація в темах J1939 Automotive PSM
  • Графічний інтерфейс Qt6 : Візуалізація в режимі реального часу та ручне керування

Архітектура шлюзу DDS від J1939 до J1939

Наведена нижче діаграма послідовності ілюструє повний потік даних від повідомлень шини CAN J1939 через шлюз до абонентів 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)

Пояснення діаграми послідовностей

1. Фаза генерації повідомлень

  • Симулятор транспортного засобу розраховує реалістичні параметри транспортного засобу на основі даних водія та фізики
  • Кодує параметри в CAN-кадри J1939 з належною структурою PGN/SPN
  • Передає дані на віртуальний CAN-інтерфейс (vcan0)

2. Фаза прийому CAN

  • Потік Qt SocketCanReader безперервно читає з інтерфейсу CAN
  • Перевіряє формат CAN-кадру (29-бітний розширений ідентифікатор)
  • Випромінює сигнал Qt з необробленими даними кадру

3. Фаза декодування J1939

  • J1939Decoder витягує інформацію про протокол з CAN ID:
    • PGN : Номер групи параметрів (визначає тип повідомлення)
    • Адреса джерела : ідентифікатор ЕБУ (0-253)
    • Пріоритет : терміновість повідомлення (0=найвищий, 7=найнижчий)
  • Декодує корисне навантаження даних в окремі SPN за допомогою конфігурації:
    • Положення та довжина біта
    • Коефіцієнт масштабування та зміщення
    • Інженерні підрозділи

4. Фаза публікації DDS

  • Gateway публікує C_Parameter_Group_Definition (метадані PGN) при першому з'явленні
  • Для кожного імені служби підтримки (SPN) у повідомленні:
    • Створює повідомлення C_Parameter зі значенням та статусом
    • Додає позначку часу та ідентифікацію джерела
    • Публікує в темі DDS
  • Періодичні оновлення стану (1 Гц) для стану шлюзу публікації

5. Фаза споживання

  • Застосування GVA (HMI, LDMX) підписатися на теми J1939 DDS
  • Отримання оновлень параметрів через проміжне програмне забезпечення DDS
  • Оновлення елементів інтерфейсу користувача (спідометр, тахометр, індикація передач)

Деталі протоколу

Структура ідентифікатора CAN J1939 (29-бітна)

 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)

Приклад декодування 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)

Швидкий старт

1. Зберіть симулятор транспортного засобу

 cd build
cmake ..
make gva-vehicle-sim

2. Налаштування віртуальної CAN-мережі

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

3. Запустіть симулятор транспортного засобу

 # 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. Запустіть шлюз J1939

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

5. Монітор з LDMX

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

Конфігурація

Конфігурація симулятора транспортного засобу

Створіть файл 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
  }
}

Конфігурація шлюзу J1939

Див. /etc/gva/j1939-config.json для визначення PGN/SPN та параметрів масштабування.

Варіанти використання

1. Розробка HMI

  • Розробка панелі приладів транспортного засобу без фізичного транспортного засобу
  • Тестування рендерингу та анімації панелі приладів
  • Перевірити пороги попередження/тривоги

2. Тестування алгоритмів

  • Тестування алгоритмів еко-водіння з імітацією витрати палива
  • Перевірити логіку прогнозного обслуговування
  • Тестування прийняття рішень в автономному водінні

3. Інтеграційне тестування

  • Перевірте наскрізний потік даних: CAN → DDS → Застосування
  • Тестування продуктивності шлюзу під навантаженням
  • Перевірка синхронізації даних між підсистемами

4. Навчання та демонстрація

  • Безпечне середовище для навчання операторів
  • Демонстрації для клієнтів без транспортного засобу
  • Навчальний інструмент для архітектури GVA

Характеристики продуктивності

Метрика Значення
Швидкість генерації CAN-кадрів До 100 Гц на PGN
Затримка публікації DDS < 5 мс (локальний)
Пропускна здатність шлюзу > 1000 PGN/сек
Використання процесора (симулятор + шлюз) < 10% (4-ядерна система)
Обсяг пам'яті ~50 МБ (разом)

Порівняння: фізичне проти змодельованого

Аспект Фізичний транспортний засіб Симулятор
Вартість обладнання від 50 000 доларів США 0 доларів США (лише програмне забезпечення)
Час налаштування Години (проводка, конфігурація) Хвилини
Відтворюваність Обмежена (мінливість драйвера) Ідеальний (детермінований)
Безпека Ризик пошкодження/травми Нульовий ризик
Контроль сценаріїв Складно (погода, рух транспорту) Повний контроль
Реєстрація даних Потрібне обладнання Вбудований
Паралельне тестування Один транспортний засіб за раз Кілька екземплярів

Усунення несправностей

Поширені проблеми

CAN-інтерфейс не знайдено

 # Verify vcan0 exists
ip link show vcan0

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

Немає повідомлень 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

Шлюз не декодує повідомлення

 # Check CAN frames are being sent
candump vcan0

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

Замовте демонстрацію сьогодні.