Trình mô phỏng xe J1939

Phần mềm mô phỏng xe hơi hỗ trợ giao tiếp CAN J1939.

Tổng quan

Phần mềm mô phỏng xe ( gva-vehicle-sim ) là một công cụ thử nghiệm và phát triển toàn diện cho nền tảng GVA (Generic Vehicle Architecture). Nó cung cấp khả năng mô phỏng động lực học xe thực tế với việc tích hợp tạo thông điệp bus CAN J1939 , cho phép thử nghiệm phần cứng trong vòng lặp mà không cần phần cứng xe vật lý.

Lợi ích của mô phỏng J1939 đối với việc tạo tin nhắn

🎯 Ưu điểm trong Phát triển & Thử nghiệm

  1. Phát triển độc lập phần cứng

    • Phát triển và thử nghiệm các ứng dụng GVA mà không cần phần cứng CAN vật lý.
    • Không cần đến các thiết bị điều khiển điện tử (ECU) đắt tiền hoặc các bệ thử nghiệm.
    • Phát triển song song giữa nhiều nhóm.
  2. Hành vi xe cộ thực tế

    • Tạo ra các Mã Nhóm Tham Số (PGN) và Mã Tham Số Nghi Ngờ (SPN) chính xác theo tiêu chuẩn J1939.
    • Mô phỏng động lực học thực tế của xe (tốc độ, vòng tua máy, chuyển số, phanh).
    • Cung cấp dữ liệu cảm biến được đồng bộ hóa theo thời gian.
  3. Giảm chi phí

    • Loại bỏ nhu cầu sử dụng các phương tiện thử nghiệm vật lý trong giai đoạn phát triển ban đầu.
    • Giao diện CAN ảo ( vcan0 ) cho phép kiểm tra trên bất kỳ máy trạm Linux nào.
    • Giảm hao mòn phần cứng vật lý
  4. Tạo mẫu nhanh

    • Vòng phản hồi tức thời cho việc phát triển thuật toán
    • Tạo và phát lại kịch bản dễ dàng
    • Tốc độ gửi tin nhắn và kiểu dữ liệu có thể cấu hình
  5. Kiểm thử tích hợp

    • Xác thực chức năng cổng J1939
    • Luồng dữ liệu kiểm thử từ CAN đến các chủ đề DDS
    • Kiểm tra khả năng phản hồi của giao diện người dùng (HMI) đối với các thông số của xe.
  6. Kiểm thử có thể tái tạo

    • Hành vi phương tiện mang tính xác định
    • Các kịch bản kiểm thử có thể lặp lại
    • Cơ sở nhất quán cho kiểm thử hồi quy

📊 Hỗ trợ tin nhắn J1939

✅ Hỗ trợ đầy đủ PGN (Đã được tích hợp trong Trình mô phỏng phương tiện)

Bộ mô phỏng xe chủ động tạo ra các thông báo J1939 sau qua CAN và gửi chúng đến DDS thông qua cổng kết nối:

PGN Hex Tên Tỷ lệ SPNs Sự miêu tả
61443 0xF003 EEC2 - Bộ điều khiển động cơ điện tử 2 50ms 91, 92 Vị trí bàn đạp ga, phần trăm tải trọng động cơ
61444 0xF004 EEC1 - Bộ điều khiển động cơ điện tử 1 100ms 190, 512, 513 Tốc độ động cơ (vòng/phút), mô-men xoắn theo yêu cầu của người lái, mô-men xoắn thực tế của động cơ
61445 0xF005 ETC2 - Bộ điều khiển truyền động điện tử 2 100ms 522, 523, 524 Vị trí ly hợp, số đã chọn, số hiện tại
61449 0xF009 VDC2 - Hệ thống điều khiển động lực xe 2 100ms 1807, 1808 Góc lái, tốc độ quay
65253 0xFEE5 GIỜ - Giờ hoạt động của động cơ 1 giây 247 Tổng số giờ hoạt động của động cơ
65256 0xFEE8 VDS - Hướng/Tốc độ của phương tiện 250ms 517, 519, 586 Tốc độ trên mặt đất, hướng la bàn, đường đi
65258 0xFEEA ALT - Độ cao 1 giây 580 Độ cao GPS so với mực nước biển
65262 0xFEEE ET1 - Nhiệt độ động cơ 1 1 giây 110, 174, 175 Nhiệt độ nước làm mát động cơ, nhiệt độ nhiên liệu, nhiệt độ dầu
65263 0xFEEF EFLP - Mức/Áp suất chất lỏng động cơ 500ms 96, 100, 94 Mức nhiên liệu, áp suất dầu, áp suất cung cấp nhiên liệu
65265 0xFEF1 CCVS - Hệ thống kiểm soát hành trình/Tốc độ xe 100ms 84, 597, 598 Tốc độ xe dựa trên bánh xe, công tắc phanh, công tắc ly hợp
65267 0xFEF3 Phó Chủ tịch - Vị trí Xe 250ms 584, 585 Vĩ độ, kinh độ GPS
65269 0xFEF5 AMB - Điều kiện môi trường xung quanh 1 giây 108, 171 Áp suất khí quyển, nhiệt độ không khí xung quanh
65271 0xFEF7 VEP1 - Hệ thống điện xe 1 1 giây 167, 168, 158 Điện áp ắc quy, điện áp máy phát điện, điện áp hệ thống sạc
65276 0xFEFC DD - Màn hình hiển thị trên bảng điều khiển 1 giây 182, 183 Mức tiêu thụ nhiên liệu (L/h), mức tiết kiệm nhiên liệu tức thời
0xEF00 0xEF00 PROP_A - Độc quyền A (IONNIC USM) 250ms - Điều khiển đèn LED cho bảng điều khiển IONNIC USM ES-Key

Danh sách SPN chi tiết (Tất cả các tham số được hỗ trợ)

SPN Tên tham số PGN Đơn vị Nghị quyết Bù lại Phạm vi
84 Tốc độ xe dựa trên bánh xe 65265 km/h 1/256 km/h 0 0-250 km/h
91 Vị trí bàn đạp ga 61443 % 0,4% 0 0-100%
92 Tỷ lệ tải trọng động cơ ở tốc độ hiện tại 61443/61444 % 1% 0 0-100%
94 Áp suất cung cấp nhiên liệu 65263 kPa 4 kPa 0 0-1000 kPa
96 Mức nhiên liệu 65263 % 0,4% 0 0-100%
100 Áp suất dầu động cơ 65263 kPa 4 kPa 0 0-1000 kPa
108 Áp suất khí quyển 65269 kPa 0,5 kPa 0 0-125 kPa
110 Nhiệt độ nước làm mát động cơ 65262 °C 1°C -40 -40 đến +210°C
158 Điện áp hệ thống sạc 65271 V 0,05 V 0 0-3212 V
167 Điện áp máy phát điện 65271 V 0,05 V 0 0-3212 V
168 Điện áp pin 65271 V 0,05 V 0 0-3212 V
171 Nhiệt độ không khí xung quanh 65269 °C 0,03125°C -273 -273 đến +1735°C
174 Nhiệt độ nhiên liệu 65262 °C 1°C -40 -40 đến +210°C
175 Nhiệt độ dầu động cơ 65262 °C 0,03125°C -273 -273 đến +1735°C
182 Tỷ lệ nhiên liệu 65276 L/giờ 0,05 L/giờ 0 0-3212 L/h
183 Tiết kiệm nhiên liệu tức thời 65276 km/L 1/512 km/L 0 0-125 km/L
190 Tốc độ động cơ 61444 RPM 0,125 vòng/phút 0 0-8031 vòng/phút
247 Tổng số giờ hoạt động của động cơ 65253 h 0,05 giờ 0 0-210.554.060 giờ
512 Mô-men xoắn động cơ theo yêu cầu của người lái 61444 % 1% -125 -125% đến +125%
513 Mô-men xoắn thực của động cơ 61444 % 1% -125 -125% đến +125%
517 Tốc độ trên mặt đất 65256 km/h 1/256 km/h 0 0-250 km/h
519 Khóa học trên mặt đất 65256 độ 1/128 độ 0 0-360°
522 Vị trí bàn đạp ly hợp 61445 % 0,4% 0 0-100%
523 Bộ truyền động hiện tại 61445 bánh răng 1 -125 -125 đến +125
524 Hộp số đã chọn 61445 bánh răng 1 -125 -125 đến +125
580 Độ cao 65258 m 0,125 m -2500 -2500 đến +5531 m
584 Vĩ độ 65267 độ 10⁻⁷ độ -210 -90° đến +90°
585 Kinh độ 65267 độ 10⁻⁷ độ -210 -180° đến +180°
586 Hướng la bàn 65256 độ 1/128 độ 0 0-360°
597 Công tắc phanh 65265 - 2 bit - Tắt/Bật/Lỗi/Không khả dụng
598 Công tắc ly hợp 65265 - 2 bit - Tắt/Bật/Lỗi/Không khả dụng
899 Chế độ mô-men xoắn động cơ 61444 - 1 0 0-15 (liệt kê)
1807 Góc vô lăng 61449 rad 1/1024 rad -31,374 -31,374 đến +31,374 rad
1808 Tốc độ quay ngang 61449 rad/s 1/8192 rad/giây -3,92 -3,92 đến +3,92 rad/s

Tổng cộng: 15 PGN, 33 SPN được mô phỏng tích cực

🔲 Các định dạng PGN không được hỗ trợ (Chưa được triển khai)

Các thông báo J1939 sau đây hiện không được trình mô phỏng xe tạo ra . Chúng thể hiện những cải tiến tiềm năng trong tương lai:

PGN Hex Tên Sự ưu tiên Trường hợp sử dụng Độ phức tạp
61440 0xF000 ERC1 - Bộ điều khiển hãm điện tử 1 Thấp Điều khiển phanh hãm/phanh động cơ Trung bình
61441 0xF001 EBC1 - Bộ điều khiển phanh điện tử 1 Cao ABS, trạng thái hệ thống phanh Cao
61442 0xF002 ETC1 - Bộ điều khiển truyền động điện tử 1 Trung bình Chế độ truyền động, đang chuyển số Trung bình
64971 0xFDCB VDHR - Khoảng cách giữa các phương tiện (Độ phân giải cao) Cao Đồng hồ đo quãng đường với độ phân giải 5mm Thấp
64972 0xFDCC TCO1 - Máy ghi tốc độ Trung bình Thẻ lái xe, tốc độ từ máy ghi tốc độ. Thấp
65132 0xFE6C TPMS - Hệ thống giám sát áp suất lốp Trung bình Áp suất/nhiệt độ lốp riêng lẻ Trung bình
65217 0xFEC1 PTODE - Thúc đẩy sự gắn kết trong PTO Thấp Trạng thái truyền tải điện Thấp
65248 0xFEE0 VDIST - Khoảng cách xe độ phân giải cao Cao Tổng khoảng cách với độ phân giải 5m Thấp
65251 0xFEE3 ECFG - Cấu hình động cơ Thấp Hãng sản xuất, kiểu máy, số sê-ri Thấp
65252 0xFEE4 SHUTDN - Tắt máy Thấp Ghi đè tắt động cơ Thấp
65260 0xFEEC VI - Nhận dạng phương tiện Trung bình Truyền tải đầy đủ số VIN (áp dụng một phần) Thấp
65279 0xFEFF CCVS1 - Hệ thống điều khiển hành trình/Tốc độ xe 1 Trung bình Dữ liệu điều khiển hành trình được cải tiến Thấp
65098 0xFE4A EBC2 - Bộ điều khiển phanh điện tử 2 Cao Trạng thái phanh từng bánh xe Cao
65099 0xFE4B EBC3 - Bộ điều khiển phanh điện tử 3 Trung bình Mòn má phanh Trung bình
65110 0xFE56 IC1 - Điều kiện đầu vào/đầu ra 1 Thấp Áp suất/nhiệt độ đường ống nạp Trung bình
65172 0xFE84 Yêu cầu - Yêu cầu Thấp Yêu cầu PGN cụ thể từ ECU Trung bình
65226 0xFECA AT1I - Xử lý khí nạp sau 1 Thấp Đầu vào bộ lọc hạt diesel Thấp
65227 0xFECB AT1O - Xử lý sau 1 khí đầu ra Thấp Đầu ra DPF, cảm biến NOx Thấp
65247 0xFEDF EFL/P2 - Mức/Áp suất chất lỏng động cơ 2 Thấp Áp suất chất lỏng bổ sung Thấp
65266 0xFEF2 LFE - Tiết kiệm nhiên liệu Trung bình Mức tiêu hao nhiên liệu trung bình/chuyến đi Thấp
65270 0xFEF6 TD - Bộ tăng áp Thấp Áp suất tăng, tốc độ tuabin Trung bình
65272 0xFEF8 VEP2 - Hệ thống điện cho xe cộ 2 Thấp Xe buýt điện bổ sung Thấp

Vì sao những điều này không được thực hiện?

Lý do PGN bị ảnh hưởng Đếm
Không liên quan đến mô phỏng xe cơ bản ERC1, PTODE, SHUTDN, ECFG, AT1I, AT1O, TD 7
Yêu cầu mô hình vật lý lốp xe TPMS 1
Yêu cầu mẫu xe có hệ thống phanh ABS/điều hòa. EBC1, EBC2, EBC3 3
Yêu cầu hệ thống truyền động tiên tiến ETC1 1
Mức độ ưu tiên thấp / mang tính thẩm mỹ VI (VIN), VDHR, VDIST, TCO1, LFE 5
Yêu cầu mô hình khí thải/khí thải IC1, AT1I, AT1O 3
Ở cấp độ giao thức (không phải dữ liệu xe) YÊU CẦU 1
Phiên bản trùng lặp/cải tiến CCVS1, EFL/P2, VEP2 3

Tổng cộng: 22 PGN không được hỗ trợ

🛠️ Đặc điểm kỹ thuật

  • Hỗ trợ mạng lưới đường bộ OpenDRIVE : Tuân theo hình dạng đường bộ thực tế.
  • Mô phỏng hộp số tự động : Chuyển số dựa trên tốc độ và ga.
  • Động lực học dựa trên vật lý : Gia tốc, phanh, lái với các ràng buộc thực tế
  • Tích hợp DDS : Xuất bản trực tiếp lên các chủ đề PSM ô tô J1939
  • Giao diện người dùng Qt6 : Hiển thị trực quan theo thời gian thực và điều khiển thủ công

Kiến trúc cổng J1939 sang DDS

Sơ đồ trình tự sau đây minh họa toàn bộ luồng dữ liệu từ các thông điệp trên bus CAN J1939 thông qua cổng kết nối đến các thuê bao 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)

Giải thích sơ đồ trình tự

1. Giai đoạn tạo tin nhắn

  • Phần mềm mô phỏng xe tính toán các thông số xe thực tế dựa trên thao tác của người lái và các quy luật vật lý.
  • Mã hóa các tham số vào khung CAN J1939 với cấu trúc PGN/SPN phù hợp.
  • Truyền dữ liệu đến giao diện CAN ảo (vcan0)

2. Giai đoạn tiếp nhận CAN

  • Luồng SocketCanReader của Qt liên tục đọc dữ liệu từ giao diện CAN.
  • Xác thực định dạng khung CAN (ID mở rộng 29 bit)
  • Phát ra tín hiệu Qt với dữ liệu khung thô.

3. Giai đoạn giải mã J1939

  • J1939Decoder trích xuất thông tin giao thức từ ID CAN:
    • PGN : Mã số nhóm tham số (xác định loại thông báo)
    • Địa chỉ nguồn : Mã định danh ECU (0-253)
    • Mức độ ưu tiên : Độ khẩn cấp của tin nhắn (0=cao nhất, 7=thấp nhất)
  • Giải mã dữ liệu tải trọng thành các SPN riêng lẻ bằng cách sử dụng cấu hình:
    • Vị trí và chiều dài của mũi khoan
    • Hệ số tỷ lệ và độ lệch
    • Đơn vị kỹ thuật

4. Giai đoạn xuất bản DDS

  • Gateway công bố C_Parameter_Group_Definition (siêu dữ liệu PGN) khi xuất hiện lần đầu.
  • Đối với mỗi SPN trong thông điệp:
    • Tạo thông báo C_Parameter với giá trị và trạng thái.
    • Thêm dấu thời gian và thông tin nguồn.
    • Đăng tải lên chủ đề DDS
  • Các bản cập nhật trạng thái định kỳ (1 Hz) công bố tình trạng hoạt động của cổng.

5. Giai đoạn tiêu thụ

  • Các ứng dụng GVA (HMI, LDMX) đăng ký các chủ đề J1939 DDS
  • Nhận các bản cập nhật tham số thông qua phần mềm trung gian DDS.
  • Cập nhật các thành phần giao diện người dùng (đồng hồ tốc độ, đồng hồ vòng tua máy, màn hình hiển thị số)

Chi tiết giao thức

Cấu trúc 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)

Ví dụ về giải mã khung 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)

Hướng dẫn nhanh

1. Xây dựng Trình mô phỏng phương tiện

 cd build
cmake ..
make gva-vehicle-sim

2. Thiết lập CAN ảo

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

3. Khởi động Trình mô phỏng phương tiệ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. Khởi động Cổng J1939

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

5. Giám sát bằng LDMX

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

Cấu hình

Cấu hình mô phỏng phương tiện

Tạo tệp 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
  }
}

Cấu hình cổng J1939

Xem /etc/gva/j1939-config.json để biết định nghĩa PGN/SPN và các tham số tỷ lệ.

Các trường hợp sử dụng

1. Phát triển giao diện người máy (HMI)

  • Phát triển bảng điều khiển xe hơi mà không cần xe thật.
  • Kiểm tra khả năng hiển thị và hoạt ảnh của cụm thiết bị đo.
  • Xác thực ngưỡng cảnh báo/báo động

2. Kiểm thử thuật toán

  • Kiểm tra các thuật toán lái xe tiết kiệm nhiên liệu với mức tiêu thụ nhiên liệu mô phỏng.
  • Xác thực logic bảo trì dự đoán
  • Kiểm tra khả năng ra quyết định của chế độ lái tự động

3. Kiểm thử tích hợp

  • Xác minh luồng dữ liệu từ đầu đến cuối: CAN → DDS → Ứng dụng
  • Kiểm tra hiệu năng của cổng thanh toán dưới tải
  • Xác thực việc đồng bộ hóa dữ liệu giữa các hệ thống con.

4. Đào tạo & Trình diễn

  • Môi trường an toàn cho việc đào tạo người vận hành.
  • Trình diễn sản phẩm cho khách hàng mà không cần xe.
  • Công cụ giáo dục cho kiến trúc GVA

Đặc tính hiệu suất

Số liệu Giá trị
Tốc độ tạo khung CAN Tần số lên đến 100 Hz mỗi PGN
Độ trễ xuất bản DDS < 5 ms (cục bộ)
Thông lượng cổng > 1000 PGN/giây
Mức sử dụng CPU (trình giả lập + cổng kết nối) < 10% (hệ thống 4 lõi)
Dung lượng bộ nhớ ~50 MB (tổng cộng)

So sánh: Thực tế so với mô phỏng

Diện mạo Phương tiện vật lý Trình mô phỏng
Chi phí phần cứng Hơn 50.000 đô la $0 (chỉ phần mềm)
Thời gian thiết lập Thời gian (đấu dây, cấu hình) Phút
Khả năng tái tạo Hạn chế (sự biến đổi của người lái) Hoàn hảo (mang tính xác định)
Sự an toàn Nguy cơ hư hỏng/thương tích Không có rủi ro
Kiểm soát kịch bản Khó khăn (thời tiết, giao thông) Kiểm soát hoàn toàn
Ghi dữ liệu Cần có thiết bị Tích hợp sẵn
Kiểm thử song song Mỗi lần chỉ một xe. Nhiều trường hợp

Khắc phục sự cố

Các vấn đề thường gặp

Không tìm thấy giao diện CAN

 # Verify vcan0 exists
ip link show vcan0

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

Không có tin nhắn 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

Cổng kết nối không giải mã được tin nhắn

 # Check CAN frames are being sent
candump vcan0

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

Hãy yêu cầu trình diễn ngay hôm nay.