J1939 차량 시뮬레이터

J1939 CAN을 지원하는 차량 시뮬레이터

개요

차량 시뮬레이터 ( gva-vehicle-sim )는 GVA(Generic Vehicle Architecture) 플랫폼을 위한 포괄적인 테스트 및 개발 도구입니다. 이 시뮬레이터는 통합된 J1939 CAN 버스 메시지 생성 기능을 통해 현실적인 차량 동역학 시뮬레이션을 제공하며, 실제 차량 하드웨어 없이도 하드웨어 인 더 루프 테스트를 가능하게 합니다.

메시지 생성을 위한 J1939 시뮬레이션의 이점

🎯 개발 및 테스트의 장점

  1. 하드웨어 독립적 개발

    • 물리적인 CAN 하드웨어 없이 GVA 애플리케이션을 개발하고 테스트하세요.
    • 값비싼 차량 ECU나 테스트 벤치가 필요 없습니다.
    • 여러 팀에 걸친 병렬 개발
  2. 현실적인 차량 움직임

    • 정확한 J1939 파라미터 그룹 번호(PGN)와 의심스러운 파라미터 번호(SPN)를 생성합니다.
    • 차량의 실제 역학(속도, RPM, 기어 변속, 제동)을 시뮬레이션합니다.
    • 시간에 맞춰 동기화된 센서 데이터를 제공합니다.
  3. 비용 절감

    • 초기 개발 단계에서 물리적 시험 차량의 필요성을 없애줍니다.
    • 가상 CAN 인터페이스( vcan0 )를 사용하면 모든 Linux 워크스테이션에서 테스트할 수 있습니다.
    • 물리적 하드웨어의 마모를 줄여줍니다.
  4. 신속 프로토타이핑

    • 알고리즘 개발을 위한 즉각적인 피드백 루프
    • 간편한 시나리오 생성 및 재생
    • 메시지 전송 속도 및 데이터 패턴 설정 가능
  5. 통합 테스트

    • J1939 게이트웨이 기능 검증
    • CAN에서 DDS 토픽으로의 테스트 데이터 흐름
    • 차량 매개변수에 대한 HMI의 반응성을 검증합니다.
  6. 재현 가능한 테스트

    • 결정론적 차량 동작
    • 반복 가능한 테스트 시나리오
    • 회귀 분석을 위한 일관된 기준선

📊 J1939 메시지 지원

✅ PGN 완벽 지원 (차량 시뮬레이터에 구현됨)

차량 시뮬레이터는 CAN을 통해 다음과 같은 J1939 메시지를 능동적으로 생성하고 게이트웨이를 통해 DDS에 게시합니다.

PGN 마녀 이름 비율 SPNs 설명
61443 0xF003 EEC2 - 전자 엔진 컨트롤러 2 50ms 91, 92 가속 페달 위치, 엔진 부하율
61444 0xF004 EEC1 - 전자 엔진 컨트롤러 1 100밀리초 190, 512, 513 엔진 회전수(RPM), 운전자 요구 토크, 실제 엔진 토크
61445 0xF005 ETC2 - 전자식 변속기 제어기 2 100밀리초 522, 523, 524 클러치 위치, 선택된 기어, 현재 기어
61449 0xF009 VDC2 - 차량 동적 제어 2 100밀리초 1807년, 1808년 스티어링 휠 각도, 요율
65253 0xFEE5 엔진 가동 시간 1초 247 총 엔진 작동 시간
65256 0xFEE8 VDS - 차량 방향/속도 250ms 517, 519, 586 지상 속도, 나침반 방향, 항로
65258 0xFEEA ALT - 고도 1초 580 GPS를 이용한 해발 고도 측정
65262 0xFEEE ET1 - 엔진 온도 1 1초 110, 174, 175 엔진 냉각수 온도, 연료 온도, 오일 온도
65263 0xFEEF EFLP - 엔진 유체 레벨/압력 500ms 96, 100, 94 연료 레벨, 오일 압력, 연료 공급 압력
65265 0xFEF1 CCVS - 크루즈 컨트롤/차량 속도 100밀리초 84, 597, 598 휠베이스 차량 속도, 브레이크 스위치, 클러치 스위치
65267 0xFEF3 VP - 차량 위치 250ms 584, 585 GPS 위도, 경도
65269 0xFEF5 AMB - 주변 환경 조건 1초 108, 171 기압, 주변 기온
65271 0xFEF7 VEP1 - 차량 전기 전력 1 1초 167, 168, 158 배터리 전압, 교류 발전기 전압, 충전 시스템 전압
65276 0xFEFC DD - 대시 디스플레이 1초 182, 183 연료 소모율(L/h), 순간 연비
0xEF00 0xEF00 PROP_A - 독점 A (IONNIC USM) 250ms - IONNIC USM ES-Key 패널용 LED 제어

상세 SPN 목록 (지원되는 모든 매개변수 포함)

스펜 매개변수 이름 PGN 단위 해결 오프셋 범위
84 휠베이스 차량 속도 65265 km/h 1/256 km/h 0 0-250km/h
91 가속 페달 위치 61443 % 0.4% 0 0-100%
92 현재 속도에서의 엔진 부하율 61443/61444 % 1% 0 0-100%
94 연료 공급 압력 65263 kPa 4kPa 0 0-1000 kPa
96 연료 레벨 65263 % 0.4% 0 0-100%
100 엔진 오일 압력 65263 kPa 4kPa 0 0-1000 kPa
108 기압 65269 kPa 0.5 kPa 0 0-125 kPa
110 엔진 냉각수 온도 65262 °C 1°C -40 -40°C ~ +210°C
158 충전 시스템 전압 65271 다섯 0.05V 0 0-3212V
167 교류 발전기 전압 65271 다섯 0.05V 0 0-3212V
168 배터리 전압 65271 다섯 0.05V 0 0-3212V
171 주변 공기 온도 65269 °C 0.03125°C -273 -273 ~ +1735°C
174 연료 온도 65262 °C 1°C -40 -40°C ~ +210°C
175 엔진 오일 온도 65262 °C 0.03125°C -273 -273 ~ +1735°C
182 연료비 65276 리터/시간 0.05리터/시간 0 0-3212 L/h
183 순간 연비 65276 km/L 1/512 km/L 0 0-125km/L
190 엔진 속도 61444 RPM 0.125 RPM 0 0-8031 RPM
247 총 엔진 가동 시간 65253 시간 0.05시간 0 0-210,554,060시간
512 운전자 요구 엔진 토크 61444 % 1% -125 -125%에서 +125%까지
513 실제 엔진 토크 61444 % 1% -125 -125%에서 +125%까지
517 지상 속도 65256 km/h 1/256 km/h 0 0-250km/h
519 지상 코스 65256 1/128도 0 0-360°
522 클러치 페달 위치 61445 % 0.4% 0 0-100%
523 변속기 전류 기어 61445 기어 1 -125 -125에서 +125까지
524 변속기 선택 기어 61445 기어 1 -125 -125에서 +125까지
580 고도 65258 0.125m -2500 -2500m ~ +5531m
584 위도 65267 10⁻⁷도 -210 -90° ~ +90°
585 경도 65267 10⁻⁷도 -210 -180° ~ +180°
586 나침반 방위 65256 1/128도 0 0-360°
597 브레이크 스위치 65265 - 2비트 - 꺼짐/켜짐/오류/사용 불가
598 클러치 스위치 65265 - 2비트 - 꺼짐/켜짐/오류/사용 불가
899 엔진 토크 모드 61444 - 1 0 0-15 (열거형)
1807 스티어링 휠 각도 61449 라드 1/1024 라디안 -31.374 -31.374에서 +31.374 라디안
1808 요율 61449 라드/초 1/8192 라디안/초 -3.92 -3.92 ~ +3.92 라디안/초

총 15개의 PGN과 33개의 SPN이 활발하게 시뮬레이션되었습니다.

🔲 지원되지 않는 PGN (아직 구현되지 않음)

다음 J1939 메시지는 현재 차량 시뮬레이터에서 생성되지 않습니다 . 이는 향후 개선될 가능성이 있는 항목입니다.

PGN 마녀 이름 우선 사항 사용 사례 복잡성
61440 0xF000 ERC1 - 전자식 감속기 제어기 1 낮은 리타더/엔진 브레이크 제어 중간
61441 0xF001 EBC1 - 전자식 브레이크 컨트롤러 1 높은 ABS, 브레이크 시스템 상태 높은
61442 0xF002 ETC1 - 전자식 변속기 제어기 1 중간 변속 모드, 변속 진행 중 중간
64971 0xFDCB VDHR - 차량 거리(고해상도) 높은 5mm 해상도의 주행거리계 낮은
64972 0xFDCC TCO1 - 타코그래프 중간 운전면허증, 타코그래프 속도계 낮은
65132 0xFE6C TPMS - 타이어 공기압 모니터링 시스템 중간 개별 타이어 압력/온도 중간
65217 0xFEC1 PTODE - PTO 드라이브 참여 낮은 동력 인출 상태 낮은
65248 0x수수료0 VDIST - 고해상도 차량 거리 측정 높은 5m 해상도로 측정한 총 거리 낮은
65251 0xFEE3 ECFG - 엔진 구성 낮은 엔진 제조사, 모델, 시리얼 번호 낮은
65252 0xFEE4 SHUTDN - 셧다운 낮은 엔진 정지 무시 기능 낮은
65260 0xFEEC VI - 차량 식별 중간 전체 VIN 전송(부분 구현) 낮은
65279 0xFEFF CCVS1 - 크루즈 컨트롤/차량 속도 1 중간 향상된 크루즈 컨트롤 데이터 낮은
65098 0xFE4A EBC2 - 전자식 브레이크 컨트롤러 2 높은 개별 휠 브레이크 상태 높은
65099 0xFE4B EBC3 - 전자식 브레이크 컨트롤러 3 중간 브레이크 라이닝 마모 중간
65110 0xFE56 IC1 - 흡기/배기 조건 1 낮은 흡기 매니폴드 압력/온도 중간
65172 0xFE84 RQST - 요청 낮은 ECU에서 특정 PGN을 요청합니다. 중간
65226 0xFECA AT1I - 후처리 1 흡입 가스 낮은 디젤 미립자 필터 흡입구 낮은
65227 0xFECB AT1O - 후처리 1 출구 가스 낮은 DPF 배출구, NOx 센서 낮은
65247 0xFEDF EFL/P2 - 엔진 유체 레벨/압력 2 낮은 추가 유체 압력 낮은
65266 0xFEF2 LFE - 연료 효율 중간 평균/주행 연비 낮은
65270 0xFEF6 TD - 터보차저 낮은 부스트 압력, 터빈 속도 중간
65272 0xFEF8 VEP2 - 차량 전기 전력 2 낮은 추가 전기 버스 낮은

이러한 사항들이 시행되지 않는 이유는 무엇일까요?

이유 영향을 받은 PGN 세다
기본 차량 시뮬레이션과는 관련이 없습니다. ERC1, PTODE, SHUTDN, ECFG, AT1I, AT1O, TD 7
타이어 물리 모델이 필요합니다. TPMS 1
ABS/브레이크 모델이 필요합니다. EBC1, EBC2, EBC3 3
고급 변속기가 필요합니다 ETC1 1
낮은 우선순위 / 미용 목적 VI(VIN), VDHR, VDIST, TCO1, LFE 5
배기가스/배출가스 모델이 필요합니다. IC1, AT1I, AT1O 3
프로토콜 수준 (차량 데이터 아님) RQST 1
중복/개선된 버전 CCVS1, EFL/P2, VEP2 3

지원되지 않는 PGN 파일 총 22개

🛠️ 기술적 특징

  • OpenDRIVE 도로망 지원 : 실제 도로 형상을 따릅니다.
  • 자동 변속기 시뮬레이션 : 속도와 스로틀에 따른 기어 변속
  • 물리 기반 동역학 : 현실적인 제약 조건을 고려한 가속, 제동, 조향
  • DDS 통합 : J1939 자동차 PSM 토픽으로 직접 게시
  • Qt6 GUI : 실시간 시각화 및 수동 제어

J1939에서 DDS 게이트웨이 아키텍처로

다음 순서도는 J1939 CAN 버스 메시지가 게이트웨이를 거쳐 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)

순서도 설명

1. 메시지 생성 단계

  • 차량 시뮬레이터는 운전자 입력과 물리적 현상을 기반으로 현실적인 차량 매개변수를 계산합니다.
  • 적절한 PGN/SPN 구조를 사용하여 매개변수를 J1939 CAN 프레임으로 인코딩합니다.
  • 가상 CAN 인터페이스(vcan0)로 전송합니다.

2. CAN 수신 단계

  • SocketCanReader Qt 스레드는 CAN 인터페이스에서 지속적으로 데이터를 읽습니다.
  • CAN 프레임 형식(29비트 확장 ID)을 검증합니다.
  • 원시 프레임 데이터를 포함하는 Qt 신호를 방출합니다.

3. J1939 디코드 단계

  • J1939Decoder는 CAN ID에서 프로토콜 정보를 추출합니다.
    • PGN : 파라미터 그룹 번호(메시지 유형을 식별함)
    • 소스 주소 : ECU 식별자(0-253)
    • 우선순위 : 메시지 긴급도 (0=가장 높음, 7=가장 낮음)
  • 설정을 사용하여 데이터 페이로드를 개별 SPN으로 디코딩합니다.
    • 비트 위치 및 길이
    • 배율 및 오프셋
    • 엔지니어링 부서

4. DDS 출판 단계

  • 게이트웨이는 C_Parameter_Group_Definition (PGN 메타데이터)이 처음 나타날 때 이를 게시합니다.
  • 메시지에 포함된 각 SPN에 대해:
    • 값과 상태를 포함하는 C_Parameter 메시지를 생성합니다.
    • 타임스탬프와 출처 식별 정보를 추가합니다.
    • DDS 주제에 게시합니다
  • 주기적인 상태 업데이트(1Hz)를 통해 게이트웨이 상태를 게시합니다.

5. 소비 단계

  • GVA 애플리케이션(HMI, LDMX)은 J1939 DDS 토픽을 구독합니다.
  • DDS 미들웨어를 통해 파라미터 업데이트를 수신합니다.
  • UI 요소(속도계, 타코미터, 기어 표시)를 업데이트합니다.

프로토콜 세부 정보

J1939 CAN ID 구조(29비트)

 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)

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)

빠른 시작

1. 차량 시뮬레이터 제작

 cd build
cmake ..
make gva-vehicle-sim

2. 가상 CAN 설정

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

3. 차량 시뮬레이터를 시작하세요

 # 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 게이트웨이 시작

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

5. LDMX를 이용한 모니터링

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

구성

차량 시뮬레이터 구성

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

J1939 게이트웨이 구성

PGN/SPN 정의 및 스케일링 매개변수는 /etc/gva/j1939-config.json 파일을 참조하십시오.

사용 사례

1. HMI 개발

  • 실제 차량 없이 차량 대시보드를 개발하세요
  • 테스트 계측기 클러스터 렌더링 및 애니메이션
  • 경고/알람 임계값을 검증합니다.

2. 알고리즘 테스트

  • 모의 연료 소비량을 사용하여 친환경 운전 알고리즘을 테스트합니다.
  • 예측 유지보수 로직을 검증합니다.
  • 자율 주행 의사 결정 기능을 테스트합니다.

3. 통합 테스트

  • CAN → DDS → 애플리케이션의 엔드투엔드 데이터 흐름을 검증합니다.
  • 부하 상태에서 게이트웨이 성능을 테스트하세요.
  • 하위 시스템 간 데이터 동기화를 검증합니다.

4. 교육 및 시연

  • 안전한 작업자 교육 환경
  • 차량 없이 진행되는 고객 시연
  • GVA 건축을 위한 교육 도구

성능 특성

미터법
CAN 프레임 생성 속도 PGN당 최대 100Hz
DDS 게시 지연 시간 < 5ms (로컬)
게이트웨이 처리량 > 1000 PGN/초
CPU 사용량(시뮬레이터 + 게이트웨이) < 10% (4코어 시스템)
메모리 사용량 (총 용량) 약 50MB

비교: 물리적 vs. 시뮬레이션

측면 물리적 차량 모의 실험 장치
하드웨어 비용 5만 달러 이상 0달러 (소프트웨어만 해당)
설정 시간 소요 시간 (배선, 설정)
재현성 제한적임 (운전자의 변동성) 완벽한 (결정론적)
안전 손해/부상 위험 위험 부담 없음
시나리오 제어 어려움 (날씨, 교통) 완벽한 제어
데이터 로깅 장비가 필요합니다 내장형
병렬 테스트 한 번에 한 대씩 차량 여러 인스턴스

문제 해결

일반적인 문제점

CAN 인터페이스를 찾을 수 없습니다.

 # Verify vcan0 exists
ip link show vcan0

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

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

게이트웨이가 메시지를 디코딩하지 못합니다

 # Check CAN frames are being sent
candump vcan0

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

지금 바로 데모를 요청하세요.