Symulator pojazdu J1939

Symulator pojazdu z obsługą J1939 CAN

Przegląd

Symulator pojazdu ( gva-vehicle-sim ) to kompleksowe narzędzie testowe i programistyczne dla platformy GVA (Generic Vehicle Architecture). Zapewnia realistyczną symulację dynamiki pojazdu ze zintegrowanym generowaniem komunikatów magistrali CAN J1939 , umożliwiając testowanie w pętli sprzętowej bez konieczności instalowania fizycznego sprzętu w pojeździe.

Korzyści z symulacji J1939 w generowaniu wiadomości

🎯 Zalety rozwoju i testowania

  1. Rozwój niezależny od sprzętu

    • Twórz i testuj aplikacje GVA bez fizycznego sprzętu CAN
    • Nie ma potrzeby stosowania drogich sterowników ECU ani stanowisk testowych
    • Równoległy rozwój w wielu zespołach
  2. Realistyczne zachowanie pojazdu

    • Generuje autentyczne numery grup parametrów J1939 (PGN) i numery podejrzanych parametrów (SPN)
    • Symuluje realistyczną dynamikę pojazdu (prędkość, obroty silnika, zmiana biegów, hamowanie)
    • Zapewnia zsynchronizowane w czasie dane z czujników
  3. Redukcja kosztów

    • Eliminuje potrzebę fizycznych pojazdów testowych na wczesnym etapie rozwoju
    • Wirtualny interfejs CAN ( vcan0 ) umożliwia testowanie na dowolnej stacji roboczej z systemem Linux
    • Zmniejsza zużycie sprzętu fizycznego
  4. Szybkie prototypowanie

    • Natychmiastowa pętla sprzężenia zwrotnego do rozwoju algorytmów
    • Łatwe tworzenie i odtwarzanie scenariuszy
    • Konfigurowalne szybkości przesyłania wiadomości i wzorce danych
  5. Testowanie integracyjne

    • Sprawdź funkcjonalność bramy J1939
    • Przepływ danych testowych z CAN do tematów DDS
    • Sprawdź reakcję HMI na parametry pojazdu
  6. Powtarzalne testy

    • Deterministyczne zachowanie pojazdu
    • Powtarzalne scenariusze testowe
    • Spójna linia bazowa do testów regresyjnych

📊 Obsługa wiadomości J1939

✅ W pełni obsługiwane PGN-y (zaimplementowane w symulatorze pojazdu)

Symulator pojazdu aktywnie generuje następujące komunikaty J1939 przez magistralę CAN i publikuje je w systemie DDS za pośrednictwem bramy:

PGN Klątwa Nazwa Wskaźnik SPN-y Opis
61443 0xF003 EEC2 - Elektroniczny sterownik silnika 2 50 ms 91, 92 Pozycja pedału przyspieszenia, obciążenie silnika w procentach
61444 0xF004 EEC1 - Elektroniczny sterownik silnika 1 100 ms 190, 512, 513 Prędkość obrotowa silnika (obr./min), moment obrotowy wymagany przez kierowcę, rzeczywisty moment obrotowy silnika
61445 0xF005 ETC2 - Elektroniczny sterownik skrzyni biegów 2 100 ms 522, 523, 524 Pozycja sprzęgła, wybrany bieg, aktualny bieg
61449 0xF009 VDC2 - Kontrola dynamiki pojazdu 2 100 ms 1807, 1808 Kąt kierownicy, prędkość odchylenia
65253 0xFEE5 GODZINY - Godziny pracy silnika 1s 247 Całkowita liczba godzin pracy silnika
65256 0xFEE8 VDS – Kierunek/Prędkość pojazdu 250 ms 517, 519, 586 Prędkość nad ziemią, kierunek kompasu, kurs
65258 0xFEEA ALT - Wysokość 1s 580 Wysokość GPS nad poziomem morza
65262 0xOPŁATA ET1 - Temperatura silnika 1 1s 110, 174, 175 Temperatura płynu chłodzącego silnika, temperatura paliwa, temperatura oleju
65263 0xFEEF EFLP – Poziom/ciśnienie płynu silnikowego 500 ms 96, 100, 94 Poziom paliwa, ciśnienie oleju, ciśnienie dostarczania paliwa
65265 0xFEF1 CCVS – Tempomat/Prędkość pojazdu 100 ms 84, 597, 598 Prędkość pojazdu oparta na kołach, przełącznik hamulca, przełącznik sprzęgła
65267 0xFEF3 VP - Pozycja pojazdu 250 ms 584, 585 Szerokość i długość geograficzna GPS
65269 0xFEF5 AMB - Warunki otoczenia 1s 108, 171 Ciśnienie barometryczne, temperatura powietrza otoczenia
65271 0xFEF7 VEP1 - Zasilanie elektryczne pojazdu 1 1s 167, 168, 158 Napięcie akumulatora, napięcie alternatora, napięcie układu ładowania
65276 0xFEFC DD - Wyświetlacz deski rozdzielczej 1s 182, 183 Zużycie paliwa (l/h), chwilowe zużycie paliwa
0xEF00 0xEF00 PROP_A - Własnościowy A (IONNIC USM) 250 ms - Sterowanie LED dla panelu IONNIC USM ES-Key

Szczegółowa lista SPN (wszystkie obsługiwane parametry)

SPN Nazwa parametru PGN Jednostka Rezolucja Zrównoważyć Zakres
84 Prędkość pojazdu na kołach 65265 km/h 1/256 km/h 0 0-250 km/h
91 Pozycja pedału przyspieszenia 61443 % 0,4% 0 0-100%
92 Obciążenie silnika w procentach przy aktualnej prędkości 61443/61444 % 1% 0 0-100%
94 Ciśnienie dostarczania paliwa 65263 kPa 4 kPa 0 0-1000 kPa
96 Poziom paliwa 65263 % 0,4% 0 0-100%
100 Ciśnienie oleju silnikowego 65263 kPa 4 kPa 0 0-1000 kPa
108 Ciśnienie barometryczne 65269 kPa 0,5 kPa 0 0-125 kPa
110 Temperatura płynu chłodzącego silnika 65262 °C 1°C -40 -40 do +210°C
158 Napięcie układu ładowania 65271 V 0,05 V 0 0-3212 V
167 Napięcie alternatora 65271 V 0,05 V 0 0-3212 V
168 Napięcie akumulatora 65271 V 0,05 V 0 0-3212 V
171 Temperatura powietrza otoczenia 65269 °C 0,03125°C -273 -273 do +1735°C
174 Temperatura paliwa 65262 °C 1°C -40 -40 do +210°C
175 Temperatura oleju silnikowego 65262 °C 0,03125°C -273 -273 do +1735°C
182 Stawka paliwa 65276 l/h 0,05 l/godz. 0 0-3212 l/h
183 Natychmiastowa oszczędność paliwa 65276 km/l 1/512 km/l 0 0-125 km/l
190 Prędkość obrotowa silnika 61444 obr./min 0,125 obr./min 0 0-8031 obr./min
247 Całkowita liczba godzin pracy silnika 65253 H 0,05 godz. 0 0-210 554 060 godzin
512 Moment obrotowy silnika na żądanie kierowcy 61444 % 1% -125 -125% do +125%
513 Rzeczywisty moment obrotowy silnika 61444 % 1% -125 -125% do +125%
517 Prędkość nad ziemią 65256 km/h 1/256 km/h 0 0-250 km/h
519 Kurs nad ziemią 65256 stopień 1/128 stopnia 0 0-360°
522 Pozycja pedału sprzęgła 61445 % 0,4% 0 0-100%
523 Przekładnia prądowa 61445 bieg 1 -125 -125 do +125
524 Wybrany bieg skrzyni biegów 61445 bieg 1 -125 -125 do +125
580 Wysokość 65258 M 0,125 m -2500 -2500 do +5531 m
584 Szerokość 65267 stopień 10⁻⁷ stopni -210 -90° do +90°
585 Długość geograficzna 65267 stopień 10⁻⁷ stopni -210 -180° do +180°
586 Namiar kompasu 65256 stopień 1/128 stopnia 0 0-360°
597 Przełącznik hamulca 65265 - 2 bity - Wył./Wł./Błąd/Niedostępne
598 Przełącznik sprzęgła 65265 - 2 bity - Wył./Wł./Błąd/Niedostępne
899 Tryb momentu obrotowego silnika 61444 - 1 0 0-15 (wyliczenie)
1807 Kąt kierownicy 61449 rad 1/1024 rad -31.374 -31,374 do +31,374 radów
1808 Prędkość odchylenia 61449 rad/s 1/8192 rad/s -3,92 -3,92 do +3,92 rad/s

Łącznie: 15 PGN, 33 SPN aktywnie symulowane

🔲 Nieobsługiwane PGN-y (jeszcze nie zaimplementowane)

Następujące komunikaty J1939 nie są obecnie generowane przez symulator pojazdu. Stanowią one potencjalne przyszłe udoskonalenia:

PGN Klątwa Nazwa Priorytet Przypadek użycia Złożoność
61440 0xF000 ERC1 - Elektroniczny sterownik retardera 1 Niski Sterowanie retarderem/hamulcem silnikowym Średni
61441 0xF001 EBC1 - Elektroniczny sterownik hamulca 1 Wysoki ABS, stan układu hamulcowego Wysoki
61442 0xF002 ETC1 - Elektroniczny sterownik skrzyni biegów 1 Średni Tryb skrzyni biegów, zmiana biegów w toku Średni
64971 0xFDCB VDHR – Odległość pojazdu (wysoka rozdzielczość) Wysoki Licznik kilometrów z rozdzielczością 5 mm Niski
64972 0xFDCC TCO1 - Tachograf Średni Karta kierowcy, prędkość z tachografu Niski
65132 0xFE6C TPMS – monitorowanie ciśnienia w oponach Średni Indywidualne ciśnienie/temperatura opon Średni
65217 0xFEC1 PTODE - Włączanie napędu WOM Niski Status wału odbioru mocy Niski
65248 0xFEE0 VDIST – odległość pojazdu w wysokiej rozdzielczości Wysoki Całkowita odległość z rozdzielczością 5 m Niski
65251 0xFEE3 ECFG – Konfiguracja silnika Niski Marka, model, numer seryjny silnika Niski
65252 0xFEE4 SHUTDN - wyłączenie Niski Ominięcie wyłączenia silnika Niski
65260 0xFEEC VI - Identyfikacja pojazdu Średni Pełna skrzynia biegów VIN (częściowa implementacja) Niski
65279 0xFEFF CCVS1 - Tempomat/Prędkość pojazdu 1 Średni Ulepszone dane tempomatu Niski
65098 0xFE4A EBC2 - Elektroniczny sterownik hamulca 2 Wysoki Status hamulca indywidualnego koła Wysoki
65099 0xFE4B EBC3 - Elektroniczny sterownik hamulca 3 Średni Zużycie okładzin hamulcowych Średni
65110 0xFE56 IC1 - Warunki wlotowe/wydechowe 1 Niski Ciśnienie/temperatura kolektora dolotowego Średni
65172 0xFE84 RQST - Prośba Niski Poproś o konkretny PGN z ECU Średni
65226 0xFECA AT1I – Oczyszczanie spalin 1 wlotu gazu Niski Wlot filtra cząstek stałych Niski
65227 0xFECB AT1O – Oczyszczanie spalin 1, wylot gazu Niski Wylot DPF, czujnik NOx Niski
65247 0xFEDF EFL/P2 – Poziom/ciśnienie płynu silnikowego 2 Niski Dodatkowe ciśnienia płynu Niski
65266 0xFEF2 LFE - Oszczędność paliwa Średni Średnie zużycie paliwa na trasie Niski
65270 0xFEF6 TD - Turbosprężarka Niski Ciśnienie doładowania, prędkość turbiny Średni
65272 0xFEF8 VEP2 - Zasilanie elektryczne pojazdu 2 Niski Dodatkowe autobusy elektryczne Niski

Dlaczego nie są one wdrażane

Powód Dotknięte PGN-y Liczyć
Nie dotyczy podstawowego symulatora pojazdu ERC1, PTODE, SHUTDN, ECFG, AT1I, AT1O, TD 7
Wymaga modelu fizyki opon TPMS 1
Wymagany model z ABS/hamulcem EBC1, EBC2, EBC3 3
Wymaga zaawansowanej skrzyni biegów ETC1 1
Niski priorytet / kosmetyka VI (VIN), VDHR, VDIST, TCO1, LFE 5
Wymagany model wydechowy/emisyjny IC1, AT1I, AT1O 3
Poziom protokołu (nie dane pojazdu) RQST 1
Wersje duplikowane/ulepszone CCVS1, EFL/P2, VEP2 3

Łącznie: 22 nieobsługiwane PGN-y

🛠️ Cechy techniczne

  • Obsługa sieci drogowej OpenDRIVE : podążaj za realistyczną geometrią drogi
  • Symulacja automatycznej skrzyni biegów : zmiana biegów w zależności od prędkości i przepustnicy
  • Dynamika oparta na fizyce : Przyspieszanie, hamowanie, kierowanie z realistycznymi ograniczeniami
  • Integracja DDS : bezpośrednie publikowanie w tematach J1939 Automotive PSM
  • Qt6 GUI : Wizualizacja w czasie rzeczywistym i sterowanie ręczne

Architektura J1939 do bramy DDS

Poniższy diagram sekwencji ilustruje kompletny przepływ danych od komunikatów magistrali CAN J1939 poprzez bramkę do abonentów 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)

Wyjaśnienie diagramu sekwencji

1. Faza generowania wiadomości

  • Symulator pojazdu oblicza realistyczne parametry pojazdu na podstawie danych wprowadzanych przez kierowcę i praw fizyki
  • Koduje parametry do ramek CAN J1939 z odpowiednią strukturą PGN/SPN
  • Przesyła do wirtualnego interfejsu CAN (vcan0)

2. Faza odbioru CAN

  • Wątek Qt SocketCanReader ciągle odczytuje dane z interfejsu CAN
  • Sprawdza format ramki CAN (rozszerzony identyfikator 29-bitowy)
  • Wysyła sygnał Qt z surowymi danymi ramki

3. Faza dekodowania J1939

  • Dekoder J1939 wyodrębnia informacje o protokole z identyfikatora CAN:
    • PGN : Numer grupy parametrów (identyfikuje typ wiadomości)
    • Adres źródłowy : Identyfikator ECU (0-253)
    • Priorytet : Pilność wiadomości (0=najwyższa, 7=najniższa)
  • Dekoduje ładunek danych na poszczególne SPN-y przy użyciu konfiguracji:
    • Pozycja i długość bitu
    • Współczynnik skali i przesunięcie
    • Jednostki inżynieryjne

4. Faza publikacji DDS

  • Gateway publikuje C_Parameter_Group_Definition (metadane PGN) przy pierwszym wystąpieniu
  • Dla każdego SPN w wiadomości:
    • Tworzy komunikat C_Parameter z wartością i statusem
    • Dodaje znacznik czasu i identyfikację źródła
    • Publikuje w temacie DDS
  • Okresowe aktualizacje statusu (1 Hz) publikują informacje o stanie bramy

5. Faza konsumpcji

  • Aplikacje GVA (HMI, LDMX) subskrybują tematy J1939 DDS
  • Odbieraj aktualizacje parametrów za pośrednictwem oprogramowania pośredniczącego DDS
  • Zaktualizuj elementy interfejsu użytkownika (prędkościomierz, obrotomierz, wyświetlacz biegów)

Szczegóły protokołu

Struktura identyfikatora CAN J1939 (29-bitowa)

 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)

Przykład dekodowania ramek 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)

Szybki start

1. Zbuduj symulator pojazdu

 cd build
cmake ..
make gva-vehicle-sim

2. Konfiguracja wirtualnej sieci CAN

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

3. Uruchom symulator pojazdu

 # 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. Uruchom bramę J1939

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

5. Monitoruj za pomocą LDMX

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

Konfiguracja

Konfiguracja symulatora pojazdu

Utwórz plik 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
  }
}

Konfiguracja bramy J1939

Definicje PGN/SPN i parametry skalowania można znaleźć w /etc/gva/j1939-config.json .

Przypadki użycia

1. Rozwój HMI

  • Utwórz tablicę rozdzielczą pojazdu bez fizycznego pojazdu
  • Test renderowania i animacji zestawu wskaźników
  • Sprawdź progi ostrzegawcze/alarmowe

2. Testowanie algorytmów

  • Testuj algorytmy jazdy ekologicznej z symulowanym zużyciem paliwa
  • Sprawdź logikę konserwacji predykcyjnej
  • Testuj autonomiczne podejmowanie decyzji podczas jazdy

3. Testowanie integracyjne

  • Zweryfikuj przepływ danych od początku do końca: CAN → DDS → Aplikacja
  • Test wydajności bramy pod obciążeniem
  • Sprawdź synchronizację danych między podsystemami

4. Szkolenie i demonstracja

  • Bezpieczne środowisko do szkolenia operatorów
  • Pokazy dla klientów bez pojazdu
  • Narzędzie edukacyjne dla architektury GVA

Charakterystyka wydajności

Metryczny Wartość
Szybkość generowania ramek CAN Do 100 Hz na PGN
Opóźnienie publikacji DDS < 5 ms (lokalnie)
Przepustowość bramy > 1000 PGN/sek.
Wykorzystanie procesora (symulator + bramka) < 10% (system 4-rdzeniowy)
Ślad pamięci ~50 MB (łącznie)

Porównanie: fizyczne i symulowane

Aspekt Pojazd fizyczny Symulator
Koszt sprzętu 50 000+ dolarów 0 zł (tylko oprogramowanie)
Czas konfiguracji Godziny (okablowanie, konfiguracja) Protokół
Powtarzalność Ograniczona (zmienność sterownika) Doskonały (deterministyczny)
Bezpieczeństwo Ryzyko uszkodzenia/urazu Zero ryzyka
Kontrola scenariuszy Trudne (pogoda, ruch) Pełna kontrola
Rejestrowanie danych Wymaga sprzętu Wbudowany
Testowanie równoległe Jeden pojazd na raz Wiele instancji

Rozwiązywanie problemów

Typowe problemy

Nie znaleziono interfejsu CAN

 # Verify vcan0 exists
ip link show vcan0

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

Brak wiadomości 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

Brama nie dekoduje wiadomości

 # Check CAN frames are being sent
candump vcan0

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

Zamów demonstrację już dziś.