J1939 Симулятор транспортного засобу
Симулятор транспортного засобу з підтримкою J1939 CAN
Огляд
Симулятор транспортного засобу ( gva-vehicle-sim ) – це комплексний інструмент тестування та розробки для платформи GVA (Generic Vehicle Architecture). Він забезпечує реалістичне моделювання динаміки транспортного засобу з інтегрованою генерацією повідомлень шини CAN J1939 , що дозволяє проводити тестування обладнання в циклі без необхідності фізичного обладнання транспортного засобу.
Переваги моделювання J1939 для генерації повідомлень
🎯 Переваги розробки та тестування
Розробка, незалежна від апаратного забезпечення
- Розробляйте та тестуйте застосунки GVA без фізичного обладнання CAN
- Немає потреби в дорогих ЕБУ автомобілів або випробувальних стендах
- Паралельна розробка в кількох командах
Реалістична поведінка транспортного засобу
- Генерує автентичні номери груп параметрів J1939 (PGN) та номери підозрілих параметрів (SPN)
- Імітує реалістичну динаміку автомобіля (швидкість, оберти, перемикання передач, гальмування)
- Забезпечує синхронізовані за часом дані датчиків
Зменшення витрат
- Усуває необхідність у фізичних випробувальних транспортних засобах на ранніх етапах розробки
- Віртуальний CAN-інтерфейс (
vcan0) дозволяє тестувати на будь-якій робочій станції Linux - Зменшує знос фізичного обладнання
Швидке прототипування
- Миттєвий зворотний зв'язок для розробки алгоритмів
- Легке створення та відтворення сценаріїв
- Налаштовувані швидкості повідомлень та шаблони даних
Інтеграційне тестування
- Перевірити функціональність шлюзу J1939
- Тестування потоку даних від CAN до DDS
- Перевірте чутливість HMI до параметрів транспортного засобу
Відтворюване тестування
- Детермінована поведінка транспортного засобу
- Повторювані тестові сценарії
- Послідовна базова лінія для регресійного тестування
📊 Підтримка повідомлень 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:
(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-sim2. Налаштування віртуальної CAN-мережі
sudo scripts/test/j1939/setup-vcan.sh3. Запустіть симулятор транспортного засобу
# 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. Запустіть шлюз J1939
./build/bin/gva-j1939-gateway \
--domain=0 \
--interface=vcan0 \
--config=/etc/gva/j1939-config.json5. Монітор з 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Замовте демонстрацію сьогодні.