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ı
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
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.
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.
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ı
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.
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:
(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_Parametermesajı oluşturur. - Zaman damgası ve kaynak tanımlaması ekler.
- DDS konusuna yayın yapar.
- Değer ve durum içeren
- 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-sim2. Sanal CAN'ı Kurun
sudo scripts/test/j1939/setup-vcan.sh3. 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 \
--headless4. J1939 Ağ Geçidini Başlatın
./build/bin/gva-j1939-gateway \
--domain=0 \
--interface=vcan0 \
--config=/etc/gva/j1939-config.json5. LDMX ile İzleme
./build/bin/ldmx
# Navigate to J1939 tab to see live parametersYapı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.shDDS 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=0Ağ geçidi mesajları çözemiyor.
# Check CAN frames are being sent
candump vcan0
# Verify configuration file
cat /etc/gva/j1939-config.jsonBugün bir tanıtım talebinde bulunun.