Simulator Kenderaan J1939

Simulator Kenderaan dengan Sokongan J1939 CAN

Gambaran Keseluruhan

Simulator Kenderaan ( gva-vehicle-sim ) ialah alat pengujian dan pembangunan yang komprehensif untuk platform GVA (Senibina Kenderaan Generik). Ia menyediakan simulasi dinamik kenderaan yang realistik dengan penjanaan mesej bas CAN J1939 bersepadu, membolehkan pengujian perkakasan-dalam-gelung tanpa memerlukan perkakasan fizikal kenderaan.

Manfaat Simulasi J1939 untuk Penjanaan Mesej

🎯 Kelebihan Pembangunan & Pengujian

  1. Pembangunan Bebas Perkakasan

    • Membangun dan menguji aplikasi GVA tanpa perkakasan CAN fizikal
    • Tidak perlu ECU kenderaan atau bangku ujian yang mahal
    • Pembangunan selari merentasi pelbagai pasukan
  2. Tingkah Laku Kenderaan yang Realistik

    • Menjana Nombor Kumpulan Parameter (PGN) J1939 yang tulen dan Nombor Parameter yang Disyaki (SPN)
    • Mensimulasikan dinamik kenderaan yang realistik (kelajuan, RPM, pertukaran gear, brek)
    • Menyediakan data sensor yang disegerakkan mengikut masa
  3. Pengurangan Kos

    • Menghapuskan keperluan untuk kenderaan ujian fizikal dalam pembangunan awal
    • Antara muka CAN Maya ( vcan0 ) membolehkan pengujian pada mana-mana stesen kerja Linux
    • Mengurangkan haus dan lusuh pada perkakasan fizikal
  4. Prototaip Pantas

    • Gelung maklum balas segera untuk pembangunan algoritma
    • Penciptaan dan ulangan senario yang mudah
    • Kadar mesej dan corak data yang boleh dikonfigurasikan
  5. Pengujian Integrasi

    • Sahkan fungsi gerbang J1939
    • Aliran data ujian daripada topik CAN ke DDS
    • Sahkan tindak balas HMI terhadap parameter kenderaan
  6. Ujian Boleh Diulang

    • Tingkah laku kenderaan deterministik
    • Senario ujian yang boleh diulang
    • Garis dasar yang konsisten untuk ujian regresi

📊 Sokongan Mesej J1939

✅ PGN yang Disokong Sepenuhnya (Dilaksanakan dalam Simulator Kenderaan)

Simulator kenderaan secara aktif menjana mesej J1939 berikut melalui CAN dan menerbitkannya kepada DDS melalui gerbang:

PGN Heks Nama Kadar SPN Penerangan
61443 0xF003 EEC2 - Pengawal Enjin Elektronik 2 50ms 91, 92 Kedudukan pedal pemecut, peratus beban enjin
61444 0xF004 EEC1 - Pengawal Enjin Elektronik 1 100ms 190, 512, 513 Kelajuan enjin (RPM), tork permintaan pemandu, tork enjin sebenar
61445 0xF005 ETC2 - Pengawal Penghantaran Elektronik 2 100ms 522, 523, 524 Kedudukan klac, gear terpilih, gear semasa
61449 0xF009 VDC2 - Kawalan Dinamik Kenderaan 2 100ms 1807, 1808 Sudut stereng, kadar yaw
65253 0xFEE5 JAM - Jam Enjin 1s 247 Jumlah jam operasi enjin
65256 0xFEE8 VDS - Arah/Kelajuan Kenderaan 250ms 517, 519, 586 Kelajuan di atas tanah, arah kompas, haluan
65258 0xFEEA ALT - Ketinggian 1s 580 Ketinggian GPS di atas paras laut
65262 0xFEEE ET1 - Suhu Enjin 1 1s 110, 174, 175 Suhu penyejuk enjin, suhu bahan api, suhu minyak
65263 0xFEEF EFLP - Aras/Tekanan Bendalir Enjin 500ms 96, 100, 94 Aras bahan api, tekanan minyak, tekanan penghantaran bahan api
65265 0xFEF1 CCVS - Kawalan Pelayaran/Kelajuan Kenderaan 100ms 84, 597, 598 Kelajuan kenderaan berasaskan roda, suis brek, suis klac
65267 0xFEF3 Naib Presiden - Jawatan Kenderaan 250ms 584, 585 Latitud GPS, longitud
65269 0xFEF5 AMB - Keadaan Ambien 1s 108, 171 Tekanan barometrik, suhu udara ambien
65271 0xFEF7 VEP1 - Kuasa Elektrik Kenderaan 1 1s 167, 168, 158 Voltan bateri, voltan alternator, voltan sistem pengecasan
65276 0xFEFC DD - Paparan Papan Pemuka 1s 182, 183 Kadar bahan api (L/j), penjimatan bahan api serta-merta
0xEF00 0xEF00 PROP_A - Hak Milik A (IONNIC USM) 250ms - Kawalan LED untuk panel IONNIC USM ES-Key

Senarai SPN Terperinci (Semua Parameter yang Disokong)

SPN Nama Parameter PGN Unit Resolusi Ofset Julat
84 Kelajuan Kenderaan Berasaskan Roda 65265 km/j 1/256 km/j 0 0-250 km/j
91 Kedudukan Pedal Pemecut 61443 % 0.4% 0 0-100%
92 Peratus Beban Enjin pada Kelajuan Arus 61443/61444 % 1% 0 0-100%
94 Tekanan Penghantaran Bahan Api 65263 kPa 4 kPa 0 0-1000 kPa
96 Tahap Bahan Api 65263 % 0.4% 0 0-100%
100 Tekanan Minyak Enjin 65263 kPa 4 kPa 0 0-1000 kPa
108 Tekanan Barometrik 65269 kPa 0.5 kPa 0 0-125 kPa
110 Suhu Penyejuk Enjin 65262 °C 1°C -40 -40 hingga +210°C
158 Voltan Sistem Pengecasan 65271 V 0.05 V 0 0-3212 V
167 Voltan Alternator 65271 V 0.05 V 0 0-3212 V
168 Voltan Bateri 65271 V 0.05 V 0 0-3212 V
171 Suhu Udara Ambien 65269 °C 0.03125°C -273 -273 hingga +1735°C
174 Suhu Bahan Api 65262 °C 1°C -40 -40 hingga +210°C
175 Suhu Minyak Enjin 65262 °C 0.03125°C -273 -273 hingga +1735°C
182 Kadar Bahan Api 65276 L/j 0.05 L/j 0 0-3212 L/j
183 Penjimatan Bahan Api Segera 65276 km/L 1/512 km/L 0 0-125 km/L
190 Kelajuan Enjin 61444 RPM 0.125 RPM 0 0-8031 RPM
247 Jumlah Jam Enjin 65253 h 0.05 jam 0 0-210,554,060 jam
512 Tork Enjin Permintaan Pemandu 61444 % 1% -125 -125% hingga +125%
513 Tork Enjin Sebenar 61444 % 1% -125 -125% hingga +125%
517 Kelajuan di Atas Tanah 65256 km/j 1/256 km/j 0 0-250 km/j
519 Kursus Atas Tanah 65256 darjah 1/128 darjah 0 0-360°
522 Kedudukan Pedal Klac 61445 % 0.4% 0 0-100%
523 Gear Arus Penghantaran 61445 gear 1 -125 -125 hingga +125
524 Gear Terpilih Transmisi 61445 gear 1 -125 -125 hingga +125
580 Ketinggian 65258 m 0.125 m -2500 -2500 hingga +5531 m
584 Latitud 65267 darjah 10⁻⁷ darjah -210 -90° hingga +90°
585 Longitud 65267 darjah 10⁻⁷ darjah -210 -180° hingga +180°
586 Galas Kompas 65256 darjah 1/128 darjah 0 0-360°
597 Suis Brek 65265 - 2 bit - Mati/Hidup/Ralat/Tidak Tersedia
598 Suis Klac 65265 - 2 bit - Mati/Hidup/Ralat/Tidak Tersedia
899 Mod Tork Enjin 61444 - 1 0 0-15 (penghitungan)
1807 Sudut Stereng 61449 rad 1/1024 rad -31.374 -31.374 hingga +31.374 rad
1808 Kadar Yaw 61449 rad/s 1/8192 rad/s -3.92 -3.92 hingga +3.92 rad/s

Jumlah: 15 PGN, 33 SPN yang disimulasikan secara aktif

🔲 PGN yang Tidak Disokong (Belum Dilaksanakan)

Mesej J1939 berikut tidak dijana oleh simulator kenderaan pada masa ini . Ini mewakili potensi penambahbaikan masa hadapan:

PGN Heks Nama Keutamaan Kes Penggunaan Kerumitan
61440 0xF000 ERC1 - Pengawal Perencat Elektronik 1 Rendah Kawalan brek/rencat enjin Sederhana
61441 0xF001 EBC1 - Pengawal Brek Elektronik 1 Tinggi ABS, status sistem brek Tinggi
61442 0xF002 ETC1 - Pengawal Penghantaran Elektronik 1 Sederhana Mod penghantaran, peralihan sedang dijalankan Sederhana
64971 0xFDCB VDHR - Jarak Kenderaan (Resolusi Tinggi) Tinggi Odometer dengan resolusi 5mm Rendah
64972 0xFDCC TCO1 - Takograf Sederhana Kad pemandu, kelajuan dari takograf Rendah
65132 0xFE6C TPMS - Pemantauan Tekanan Tayar Sederhana Tekanan/suhu tayar individu Sederhana
65217 0xFEC1 PTODE - Penglibatan Pemacu PTO Rendah Status pengangkut kuasa Rendah
65248 0xFEE0 VDIST - Jarak Kenderaan Resolusi Tinggi Tinggi Jumlah jarak dengan resolusi 5m Rendah
65251 0xFEE3 ECFG - Konfigurasi Enjin Rendah Jenama enjin, model, nombor siri Rendah
65252 0xFEE4 SHUTDN - Penutupan Rendah Penggantian penutupan enjin Rendah
65260 0xFEEC VI - Pengenalan Kenderaan Sederhana Transmisi VIN penuh (implan separa) Rendah
65279 0xFEFF CCVS1 - Kawalan Jelajah/Kelajuan Kenderaan 1 Sederhana Data kawalan pelayaran yang dipertingkatkan Rendah
65098 0xFE4A EBC2 - Pengawal Brek Elektronik 2 Tinggi Status brek roda individu Tinggi
65099 0xFE4B EBC3 - Pengawal Brek Elektronik 3 Sederhana Haus lapisan brek Sederhana
65110 0xFE56 IC1 - Keadaan Masuk/Ekzos 1 Rendah Tekanan/suhu manifold pengambilan Sederhana
65172 0xFE84 RQST - Permintaan Rendah Minta PGN khusus daripada ECU Sederhana
65226 0xFECA AT1I - Rawatan Selepas 1 Gas Pengambilan Rendah Saluran masuk penapis zarah diesel Rendah
65227 0xFECB AT1O - Rawatan Selepas 1 Gas Keluar Rendah Soket DPF, sensor NOx Rendah
65247 0xFEDF EFL/P2 - Paras/Tekanan Bendalir Enjin 2 Rendah Tekanan bendalir tambahan Rendah
65266 0xFEF2 LFE - Penjimatan Bahan Api Sederhana Penjimatan bahan api purata/perjalanan Rendah
65270 0xFEF6 TD - Pengecas Turbo Rendah Tekanan rangsangan, kelajuan turbin Sederhana
65272 0xFEF8 VEP2 - Kuasa Elektrik Kenderaan 2 Rendah Bas elektrik tambahan Rendah

Mengapa Ini Tidak Dilaksanakan

Sebab PGN yang terjejas Kiraan
Tidak berkaitan dengan sim kenderaan asas ERC1, PTOD, SHUTDN, ECFG, AT1I, AT1O, TD 7
Memerlukan model fizik tayar TPMS 1
Memerlukan model ABS/brek EBC1, EBC2, EBC3 3
Memerlukan transmisi lanjutan DLL1 1
Keutamaan rendah / kosmetik VI (VIN), VDHR, VDIST, TCO1, LFE 5
Memerlukan model ekzos/pelepasan IC1, AT1I, AT1O 3
Peringkat protokol (bukan data kenderaan) RQST 1
Versi pendua/dipertingkatkan CCVS1, EFL/P2, VEP2 3

Jumlah: 22 PGN yang tidak disokong

🛠️ Ciri-ciri Teknikal

  • Sokongan Rangkaian Jalan OpenDRIVE : Ikuti geometri jalan yang realistik
  • Simulasi Transmisi Automatik : Perubahan gear berdasarkan kelajuan dan pendikit
  • Dinamik Berasaskan Fizik : Pecutan, brek, stereng dengan kekangan yang realistik
  • Integrasi DDS : Penerbitan terus kepada topik PSM Automotif J1939
  • GUI Qt6 : Visualisasi masa nyata dan kawalan manual

Senibina Gerbang J1939 hingga DDS

Gambar rajah jujukan berikut menggambarkan aliran data lengkap daripada mesej bas CAN J1939 melalui pintu masuk kepada pelanggan 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)

Penjelasan Gambarajah Jujukan

1. Fasa Penjanaan Mesej

  • Simulator Kenderaan mengira parameter kenderaan yang realistik berdasarkan input dan fizik pemandu
  • Mengekod parameter ke dalam bingkai CAN J1939 dengan struktur PGN/SPN yang betul
  • Menghantar ke antara muka CAN maya (vcan0)

2. Fasa Penerimaan CAN

  • Utas Qt SocketCanReader membaca secara berterusan daripada antara muka CAN
  • Mengesahkan format bingkai CAN (ID lanjutan 29-bit)
  • Memancarkan isyarat Qt dengan data bingkai mentah

3. Fasa Dekod J1939

  • J1939Decoder mengekstrak maklumat protokol daripada CAN ID:
    • PGN : Nombor Kumpulan Parameter (mengenal pasti jenis mesej)
    • Alamat Sumber : Pengecam ECU (0-253)
    • Keutamaan : Kecemasan mesej (0=tertinggi, 7=terendah)
  • Menyahkod muatan data ke dalam SPN individu menggunakan konfigurasi:
    • Kedudukan dan panjang bit
    • Faktor skala dan ofset
    • Unit kejuruteraan

4. Fasa Penerbitan DDS

  • Gateway menerbitkan C_Parameter_Group_Definition (metadata PGN) pada kejadian pertama
  • Untuk setiap SPN dalam mesej:
    • Mencipta mesej C_Parameter dengan nilai dan status
    • Menambah cap waktu dan pengenalpastian sumber
    • Menerbitkan ke topik DDS
  • Kemas kini status berkala (1 Hz) menerbitkan kesihatan gerbang

5. Fasa Penggunaan

  • Aplikasi GVA (HMI, LDMX) melanggan topik J1939 DDS
  • Terima kemas kini parameter melalui perisian tengah DDS
  • Kemas kini elemen UI (speedometer, takometer, paparan gear)

Butiran Protokol

Struktur ID CAN J1939 (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)

Contoh Penyahkodan Bingkai 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)

Mula Pantas

1. Bina Simulator Kenderaan

 cd build
cmake ..
make gva-vehicle-sim

2. Sediakan CAN Maya

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

3. Mulakan Simulator Kenderaan

 # 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. Mulakan Gerbang J1939

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

5. Pantau dengan LDMX

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

Konfigurasi

Konfigurasi Simulator Kenderaan

Cipta 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
  }
}

Konfigurasi Gerbang J1939

Lihat /etc/gva/j1939-config.json untuk definisi PGN/SPN dan parameter penskalaan.

Kes Penggunaan

1. Pembangunan HMI

  • Membangunkan papan pemuka kenderaan tanpa kenderaan fizikal
  • Uji pemaparan dan animasi kluster instrumen
  • Sahkan ambang amaran/penggera

2. Pengujian Algoritma

  • Uji algoritma pemanduan eko dengan penggunaan bahan api simulasi
  • Sahkan logik penyelenggaraan ramalan
  • Uji proses membuat keputusan pemanduan autonomi

3. Pengujian Integrasi

  • Sahkan aliran data hujung ke hujung: CAN → DDS → Aplikasi
  • Prestasi gerbang ujian di bawah beban
  • Sahkan penyegerakan data merentasi subsistem

4. Latihan & Demonstrasi

  • Persekitaran selamat untuk latihan pengendali
  • Demonstrasi pelanggan tanpa kenderaan
  • Alat pendidikan untuk seni bina GVA

Ciri-ciri Prestasi

Metrik Nilai
Kadar penjanaan bingkai CAN Sehingga 100 Hz setiap PGN
Latensi penerbitan DDS < 5 ms (tempatan)
Daya pemprosesan gerbang > 1000 PGN/saat
Penggunaan CPU (simulator + get laluan) < 10% (sistem 4-teras)
Jejak ingatan ~50 MB (gabungan)

Perbandingan: Fizikal vs. Simulasi

Aspek Kenderaan Fizikal Simulator
Kos Perkakasan $50,000+ $0 (perisian sahaja)
Masa Persediaan Waktu (pendawaian, konfigurasi) Minit
Kebolehulangan Terhad (kebolehubahan pemacu) Sempurna (deterministik)
Keselamatan Risiko kerosakan/kecederaan Risiko sifar
Kawalan Senario Sukar (cuaca, lalu lintas) Kawalan penuh
Pembalakan Data Memerlukan peralatan Terbina dalam
Pengujian Selari Satu kenderaan pada satu masa Pelbagai contoh

Penyelesaian masalah

Isu-isu Biasa

Antara Muka CAN Tidak Ditemui

 # Verify vcan0 exists
ip link show vcan0

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

Tiada Mesej 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

Gerbang Tidak Menyahkod Mesej

 # Check CAN frames are being sent
candump vcan0

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

Minta demonstrasi hari ini.