J1939 Araç Simülatörü

J1939 CAN desteğine sahip Araç Simülatörü

Genel Bakış

Araç Simülatörü ( gva-vehicle-sim ), GVA (Genel Araç Mimarisi) platformu için kapsamlı bir test ve geliştirme aracıdır. Entegre J1939 CAN veri yolu mesaj üretimi ile gerçekçi araç dinamikleri simülasyonu sağlar ve fiziksel araç donanımına ihtiyaç duymadan donanım tabanlı test yapılmasına olanak tanır.

Mesaj Üretimi için J1939 Simülasyonunun Faydaları

🎯 Geliştirme ve Test Avantajları

  1. Donanımdan Bağımsız Geliştirme

    • Fiziksel CAN donanımına ihtiyaç duymadan GVA uygulamaları geliştirin ve test edin.
    • Pahalı araç ECU'larına veya test tezgahlarına gerek yok.
    • Birden fazla ekip arasında paralel geliştirme
  2. Gerçekçi Araç Davranışı

    • Orijinal J1939 Parametre Grubu Numaraları (PGN) ve Şüpheli Parametre Numaraları (SPN) üretir.
    • Gerçekçi araç dinamiklerini simüle eder (hız, devir, vites değişimleri, frenleme).
    • Zaman senkronize edilmiş sensör verileri sağlar.
  3. Maliyet Azaltma

    • Erken geliştirme aşamasında fiziksel test araçlarına olan ihtiyacı ortadan kaldırır.
    • Sanal CAN arayüzü ( vcan0 ), herhangi bir Linux iş istasyonunda test yapılmasına olanak tanır.
    • Fiziksel donanım üzerindeki aşınma ve yıpranmayı azaltır.
  4. Hızlı Prototipleme

    • Algoritma geliştirme için anlık geri bildirim döngüsü
    • Kolay senaryo oluşturma ve tekrar oynatma
    • Yapılandırılabilir mesaj hızları ve veri kalıpları
  5. Entegrasyon Testi

    • J1939 ağ geçidinin işlevselliğini doğrulayın.
    • CAN'den DDS konularına test verisi akışı
    • HMI'ın araç parametrelerine verdiği tepkiyi doğrulayın.
  6. Tekrarlanabilir Test

    • Deterministik araç davranışı
    • Tekrarlanabilir test senaryoları
    • Regresyon testleri için tutarlı temel çizgi

📊 J1939 Mesaj Desteği

✅ Tamamen Desteklenen PGN'ler (Araç Simülatöründe Uygulanmıştır)

Araç simülatörü, CAN üzerinden aktif olarak aşağıdaki J1939 mesajlarını oluşturur ve bunları ağ geçidi aracılığıyla DDS'ye yayınlar:

PGN Altıgen İsim Oran SPN'ler Tanım
61443 0xF003 EEC2 - Elektronik Motor Kontrol Ünitesi 2 50 ms 91, 92 Gaz pedalı konumu, motor yük yüzdesi
61444 0xF004 EEC1 - Elektronik Motor Kontrol Ünitesi 1 100 ms 190, 512, 513 Motor devri (RPM), sürücü talep torku, gerçek motor torku
61445 0xF005 ETC2 - Elektronik Şanzıman Kontrol Cihazı 2 100 ms 522, 523, 524 Debriyaj konumu, seçilen vites, mevcut vites
61449 0xF009 VDC2 - Araç Dinamik Kontrolü 2 100 ms 1807, 1808 Direksiyon açısı, sapma hızı
65253 0xFEE5 SAATLER - Motor Çalışma Saatleri 1 saniye 247 Toplam motor çalışma saatleri
65256 0xFEE8 VDS - Araç Yönü/Hızı 250 ms 517, 519, 586 Yer üzerindeki hız, pusula yönü, rota
65258 0xFEEA ALT - Rakım 1 saniye 580 GPS ile belirlenen deniz seviyesinden yükseklik
65262 0xÜCRET ET1 - Motor Sıcaklığı 1 1 saniye 110, 174, 175 Motor soğutma suyu sıcaklığı, yakıt sıcaklığı, yağ sıcaklığı
65263 0xFEEF EFLP - Motor Sıvı Seviyesi/Basıncı 500 ms 96, 100, 94 Yakıt seviyesi, yağ basıncı, yakıt dağıtım basıncı
65265 0xFEF1 CCVS - Hız Sabitleyici/Araç Hızı 100 ms 84, 597, 598 Tekerlek tabanlı araç hızı, fren şalteri, debriyaj şalteri
65267 0xFEF3 Başkan Yardımcısı - Araç Konumu 250 ms 584, 585 GPS enlem, boylam
65269 0xFEF5 AMB - Ortam Koşulları 1 saniye 108, 171 Barometrik basınç, ortam hava sıcaklığı
65271 0xFEF7 VEP1 - Araç Elektrik Gücü 1 1 saniye 167, 168, 158 Akü voltajı, alternatör voltajı, şarj sistemi voltajı
65276 0xFEFC DD - Gösterge Paneli 1 saniye 182, 183 Yakıt tüketim oranı (L/saat), anlık yakıt ekonomisi
0xEF00 0xEF00 PROP_A - Tescilli A (IONNIC USM) 250 ms - IONNIC USM ES-Key paneli için LED kontrolü

Ayrıntılı SPN Listesi (Tüm Desteklenen Parametreler)

SPN Parametre Adı PGN Birim Çözünürlük Telafi etmek Menzil
84 Tekerlek Tabanlı Araç Hızı 65265 km/sa 1/256 km/sa 0 0-250 km/sa
91 Gaz Pedalı Konumu 61443 % %0,4 0 0-100%
92 Mevcut Hızda Motor Yükü Yüzdesi 61443/61444 % %1 0 0-100%
94 Yakıt Dağıtım Basıncı 65263 kPa 4 kPa 0 0-1000 kPa
96 Yakıt Seviyesi 65263 % %0,4 0 0-100%
100 Motor Yağı Basıncı 65263 kPa 4 kPa 0 0-1000 kPa
108 Barometrik Basınç 65269 kPa 0,5 kPa 0 0-125 kPa
110 Motor Soğutma Suyu Sıcaklığı 65262 °C 1°C -40 -40 ila +210°C
158 Şarj Sistemi Voltajı 65271 V 0,05 V 0 0-3212 V
167 Alternatör Voltajı 65271 V 0,05 V 0 0-3212 V
168 Pil Voltajı 65271 V 0,05 V 0 0-3212 V
171 Ortam Hava Sıcaklığı 65269 °C 0,03125°C -273 -273 ila +1735°C
174 Yakıt Sıcaklığı 65262 °C 1°C -40 -40 ila +210°C
175 Motor Yağı Sıcaklığı 65262 °C 0,03125°C -273 -273 ila +1735°C
182 Yakıt Oranı 65276 L/sa 0,05 L/saat 0 0-3212 L/saat
183 Anlık Yakıt Tasarrufu 65276 km/L 1/512 km/L 0 0-125 km/L
190 Motor Devri 61444 RPM 0,125 RPM 0 0-8031 RPM
247 Toplam Motor Çalışma Saati 65253 H 0,05 saat 0 0-210.554.060 saat
512 Sürücünün Talebi Motor Torku 61444 % %1 -125 -125% ile +125% arasında
513 Gerçek Motor Torku 61444 % %1 -125 -125% ile +125% arasında
517 Yer Üzerindeki Hız 65256 km/sa 1/256 km/sa 0 0-250 km/sa
519 Yer Üzerindeki Rota 65256 derece 1/128 derece 0 0-360°
522 Debriyaj Pedalı Konumu 61445 % %0,4 0 0-100%
523 İletim Akım Dişlisi 61445 vites 1 -125 -125 ile +125 arası
524 Şanzıman Seçilen Vites 61445 vites 1 -125 -125 ile +125 arası
580 Rakım 65258 M 0,125 m -2500 -2500 ila +5531 m
584 Enlem 65267 derece 10⁻⁷ derece -210 -90° ile +90° arası
585 Boylam 65267 derece 10⁻⁷ derece -210 -180° ile +180° arası
586 Pusula Yönü 65256 derece 1/128 derece 0 0-360°
597 Fren Anahtarı 65265 - 2 bit - Kapalı/Açık/Hata/Mevcut Değil
598 Debriyaj Anahtarı 65265 - 2 bit - Kapalı/Açık/Hata/Mevcut Değil
899 Motor Tork Modu 61444 - 1 0 0-15 (sayısal)
1807 Direksiyon Açısı 61449 rad 1/1024 rad -31.374 -31,374 ila +31,374 rad
1808 Sapma Hızı 61449 rad/s 1/8192 rad/s -3,92 -3,92 ila +3,92 rad/s

Toplam: 15 PGN, 33 SPN aktif olarak simüle edildi.

🔲 Desteklenmeyen PGN'ler (Henüz Uygulanmadı)

Aşağıdaki J1939 mesajları şu anda araç simülatörü tarafından oluşturulmamaktadır . Bunlar gelecekteki olası geliştirmeleri temsil etmektedir:

PGN Altıgen İsim Öncelik Kullanım Durumu Karmaşıklık
61440 0xF000 ERC1 - Elektronik Geciktirici Kontrol Cihazı 1 Düşük Geciktirici/motor freni kontrolü Orta
61441 0xF001 EBC1 - Elektronik Fren Kontrol Cihazı 1 Yüksek ABS, fren sistemi durumu Yüksek
61442 0xF002 ETC1 - Elektronik Şanzıman Kontrol Cihazı 1 Orta Şanzıman modu, vites değiştirme işlemi devam ediyor. Orta
64971 0xFDCB VDHR - Araç Mesafesi (Yüksek Çözünürlük) Yüksek 5 mm çözünürlüğe sahip kilometre sayacı Düşük
64972 0xFDCC TCO1 - Takograf Orta Sürücü belgesi, takograftan alınan hız bilgisi. Düşük
65132 0xFE6C TPMS - Lastik Basıncı İzleme Sistemi Orta Bireysel lastik basıncı/sıcaklığı Orta
65217 0xFEC1 PTODE - PTO Sürücü Etkileşimi Düşük Güç çıkış durumu Düşük
65248 0xÜCRETSİZ0 VDIST - Yüksek Çözünürlüklü Araç Mesafesi Yüksek 5 metre çözünürlükle toplam mesafe Düşük
65251 0xFEE3 ECFG - Motor Yapılandırması Düşük Motor markası, modeli, seri numarası Düşük
65252 0xFEE4 KAPATMA - Kapatma Düşük Motor kapatma geçersiz kılma Düşük
65260 0xFEEC VI - Araç Tanımlama Orta Tam VIN iletimi (kısmi uygulama) Düşük
65279 0xFEFF CCVS1 - Hız Sabitleyici/Araç Hızı 1 Orta Gelişmiş hız sabitleyici verileri Düşük
65098 0xFE4A EBC2 - Elektronik Fren Kontrol Cihazı 2 Yüksek Tek tek tekerlek freni durumu Yüksek
65099 0xFE4B EBC3 - Elektronik Fren Kontrol Cihazı 3 Orta Fren balatası aşınması Orta
65110 0xFE56 IC1 - Giriş/Çıkış Koşulları 1 Düşük Emme manifoldu basıncı/sıcaklığı Orta
65172 0xFE84 RQST - Talep Düşük ECU'dan belirli bir PGN isteyin. Orta
65226 0xFECA AT1I - Son İşlem 1 Giriş Gazı Düşük Dizel partikül filtresi girişi Düşük
65227 0xFECB AT1O - Son İşlem 1 Çıkış Gazı Düşük DPF çıkışı, NOx sensörü Düşük
65247 0xFEDF EFL/P2 - Motor Sıvı Seviyesi/Basıncı 2 Düşük Ek sıvı basınçları Düşük
65266 0xFEF2 LFE - Yakıt Ekonomisi Orta Ortalama/seyahat yakıt tüketimi Düşük
65270 0xFEF6 TD - Turboşarj Düşük Takviye basıncı, türbin hızı Orta
65272 0xFEF8 VEP2 - Araç Elektrik Gücü 2 Düşük Ek elektrikli otobüsler Düşük

Bunlar Neden Uygulanmıyor?

Sebep Etkilenen PGN'ler Saymak
Temel araç simülasyonuyla ilgili değil. ERC1, PTODE, SHUTDN, ECFG, AT1I, AT1O, TD 7
Lastik fizik modeli gerektirir. TPMS 1
ABS/fren modelini gerektirir. EBC1, EBC2, EBC3 3
Gelişmiş şanzıman gerektirir ETC1 1
Düşük öncelikli / kozmetik VI (VIN), VDHR, VDIST, TCO1, LFE 5
Egzoz/emisyon modelini gerektirir. IC1, AT1I, AT1O 3
Protokol düzeyinde (araç verisi değil) RQST 1
Çift/geliştirilmiş sürümler CCVS1, EFL/P2, VEP2 3

Toplam: 22 desteklenmeyen PGN

🛠️ Teknik Özellikler

  • OpenDRIVE Yol Ağı Desteği : Gerçekçi yol geometrisini takip edin.
  • Otomatik Şanzıman Simülasyonu : Hız ve gaz tepkisine bağlı olarak vites değişimleri
  • Fizik Temelli Dinamikler : Gerçekçi kısıtlamalarla ivmelenme, frenleme, direksiyon hareketi
  • DDS Entegrasyonu : J1939 Otomotiv PSM konularına doğrudan yayın
  • Qt6 GUI : Gerçek zamanlı görselleştirme ve manuel kontrol

J1939'dan DDS Ağ Geçidi Mimarisine

Aşağıdaki sıralama diyagramı, J1939 CAN veri yolu mesajlarından ağ geçidi üzerinden DDS abonelerine kadar olan tüm veri akışını göstermektedir:

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)

Sıralama Diyagramı Açıklaması

1. Mesaj Oluşturma Aşaması

  • Araç Simülatörü, sürücü girdilerine ve fizik kurallarına dayanarak gerçekçi araç parametrelerini hesaplar.
  • Parametreleri uygun PGN/SPN yapısıyla J1939 CAN çerçevelerine kodlar.
  • Sanal CAN arayüzüne (vcan0) veri iletir.

2. CAN Alım Aşaması

  • SocketCanReader Qt iş parçacığı, CAN arayüzünden sürekli olarak veri okur.
  • CAN çerçeve formatını (29 bit genişletilmiş kimlik) doğrular.
  • Ham çerçeve verileriyle Qt sinyali yayar.

3. J1939 Kod Çözme Aşaması

  • J1939Decoder, CAN ID'den protokol bilgilerini çıkarır:
    • PGN : Parametre Grubu Numarası (mesaj türünü tanımlar)
    • Kaynak Adresi : ECU tanımlayıcısı (0-253)
    • Öncelik : Mesajın aciliyeti (0=en yüksek, 7=en düşük)
  • Yapılandırmayı kullanarak veri yükünü ayrı ayrı SPN'lere dönüştürür:
    • Uç konumu ve uzunluğu
    • Ölçek faktörü ve ofset
    • Mühendislik birimleri

4. DDS Yayın Aşaması

  • Gateway, C_Parameter_Group_Definition (PGN meta verileri) ilk ortaya çıktığında yayınlar.
  • Mesajdaki her bir SPN için:
    • Değer ve durum içeren C_Parameter mesajı oluşturur.
    • Zaman damgası ve kaynak tanımlaması ekler.
    • DDS konusuna yayın yapar.
  • Periyodik durum güncellemeleri (1 Hz) ağ geçidinin sağlığını yayınlar.

5. Tüketim Aşaması

  • GVA uygulamaları (HMI, LDMX) J1939 DDS konularına abone olur.
  • DDS ara yazılımı aracılığıyla parametre güncellemelerini alın.
  • Kullanıcı arayüzü öğelerini (hız göstergesi, devir göstergesi, vites göstergesi) güncelleyin.

Protokol Detayları

J1939 CAN Kimlik Yapısı (29-bit)

 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)

Örnek CAN Çerçevesi Kod Çözme

 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)

Hızlı Başlangıç

1. Araç Simülatörü Oluşturun

 cd build
cmake ..
make gva-vehicle-sim

2. Sanal CAN'ı Kurun

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

3. Araç Simülatörünü Başlatın

 # 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 Ağ Geçidini Başlatın

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

5. LDMX ile İzleme

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

Yapılandırma

Araç Simülatörü Yapılandırması

vehicle-sim-config.json dosyasını oluşturun:

 {
  "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 Ağ Geçidi Yapılandırması

PGN/SPN tanımları ve ölçeklendirme parametreleri için /etc/gva/j1939-config.json dosyasına bakın.

Kullanım Senaryoları

1. İnsan-Makine Arayüzü Geliştirme

  • Fiziksel bir araç kullanmadan araç gösterge paneli geliştirin.
  • Test cihazı kümesi oluşturma ve animasyonları
  • Uyarı/alarm eşiklerini doğrulayın

2. Algoritma Testi

  • Yakıt tüketimini simüle ederek çevre dostu sürüş algoritmalarını test edin.
  • Tahmine dayalı bakım mantığını doğrulayın.
  • Otonom sürüş karar verme süreçlerini test edin.

3. Entegrasyon Testi

  • Uçtan uca veri akışını doğrulayın: CAN → DDS → Uygulama
  • Yük altında ağ geçidi performansını test edin.
  • Alt sistemler arasında veri senkronizasyonunu doğrulayın.

4. Eğitim ve Gösteri

  • Operatör eğitimi için güvenli ortam
  • Araçsız müşteri tanıtımları
  • GVA mimarisi için eğitim aracı

Performans Özellikleri

Metrik Değer
CAN çerçeve oluşturma hızı PGN başına 100 Hz'e kadar
DDS yayınlama gecikmesi < 5 ms (yerel)
Ağ geçidi verimliliği > 1000 PGN/sn
CPU kullanımı (simülatör + ağ geçidi) < %10 (4 çekirdekli sistem)
Bellek kullanımı ~50 MB (toplam)

Karşılaştırma: Fiziksel ve Simüle Edilmiş

Bakış açısı Fiziksel Araç Simülatör
Donanım Maliyeti 50.000$+ 0$ (sadece yazılım)
Kurulum Süresi Saatler (kablolama, yapılandırma) Dakikalar
Tekrarlanabilirlik Sınırlı (sürücü değişkenliği) Mükemmel (belirleyici)
Emniyet Hasar/yaralanma riski Sıfır risk
Senaryo Kontrolü Zor (hava, trafik) Tam kontrol
Veri Kaydı Ekipman gerektirir. Dahili
Paralel Test Her seferinde bir araç Birden fazla örnek

Sorun giderme

Sık Karşılaşılan Sorunlar

CAN Arayüzü Bulunamadı

 # Verify vcan0 exists
ip link show vcan0

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

DDS Mesajı Yok

 # 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

Ağ geçidi mesajları çözemiyor.

 # Check CAN frames are being sent
candump vcan0

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

Bugün bir tanıtım talebinde bulunun.