J1939 車両シミュレータ

J1939 CAN 対応車両シミュレータ

概要

車両シミュレータgva-vehicle-sim )は、GVA(Generic Vehicle Architecture)プラットフォーム向けの包括的なテストおよび開発ツールです。J1939 CANバスメッセージ生成機能を統合したリアルな車両ダイナミクスシミュレーションを提供し、物理的な車両ハードウェアを必要とせずにハードウェア・イン・ザ・ループ(HIL)テストを可能にします。

メッセージ生成におけるJ1939シミュレーションの利点

🎯 開発とテストの利点

  1. ハードウェアに依存しない開発

    • 物理的なCANハードウェアなしでGVAアプリケーションを開発およびテストする
    • 高価な車両ECUやテストベンチは不要
    • 複数のチームにまたがる並行開発
  2. リアルな車両挙動

    • 本物の J1939 パラメータ グループ番号 (PGN) と疑わしいパラメータ番号 (SPN) を生成します
    • リアルな車両ダイナミクス(速度、回転数、ギアチェンジ、ブレーキ)をシミュレートします
    • 時間同期されたセンサーデータを提供
  3. コスト削減

    • 開発初期段階で物理的なテスト車両が不要になります
    • 仮想CANインターフェース( vcan0 )により、あらゆるLinuxワークステーションでテストが可能
    • 物理的なハードウェアの消耗を軽減
  4. ラピッドプロトタイピング

    • アルゴリズム開発のための即時フィードバックループ
    • 簡単なシナリオ作成と再生
    • 設定可能なメッセージレートとデータパターン
  5. 統合テスト

    • J1939ゲートウェイの機能を検証する
    • CANからDDSへのテストデータフローのトピック
    • 車両パラメータに対するHMIの応答性を検証する
  6. 再現可能なテスト

    • 決定論的な車両挙動
    • 繰り返し可能なテストシナリオ
    • 回帰テストのための一貫したベースライン

📊 J1939 メッセージのサポート

✅ 完全にサポートされている PGN(車両シミュレータに実装)

車両シミュレーターは、CAN 経由で次の J1939 メッセージをアクティブに生成し、ゲートウェイ経由で DDS に公開します。

PGNヘックス名前レートSPN説明
61443 0xF003 EEC2 - 電子エンジンコントローラー2 50ミリ秒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 - 車両の方向/速度250ミリ秒517、519、586対地速度、コンパス方位、コース
65258 0xFEEA ALT - 高度1秒580 GPS海抜高度
65262 0x料金ET1 - エンジン温度1 1秒110、174、175エンジン冷却水温度、燃料温度、オイル温度
65263 0xFEEF EFLP - エンジン液面/圧力500ミリ秒96、100、94燃料レベル、油圧、燃料供給圧力
65265 0xFEF1 CCVS - クルーズコントロール/車速100ミリ秒84、597、598車輪式車速計、ブレーキスイッチ、クラッチスイッチ
65267 0xFEF3 VP - 車両位置250ミリ秒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) 250ミリ秒- IONNIC USM ES-Keyパネル用LEDコントロール

詳細な SPN リスト (サポートされているすべてのパラメータ)

SPNパラメータ名PGNユニット解決オフセット範囲
84車輪ベースの車両速度65265 km/h時速1/256キロメートル0 0~250 km/h
91アクセルペダルの位置61443 % 0.4% 0 0~100%
92現在の速度でのエンジン負荷率61443/61444 % 1% 0 0~100%
94燃料供給圧力65263 kPa 4kPa 0 0~1000kPa
96燃料レベル65263 % 0.4% 0 0~100%
100エンジンオイル圧力65263 kPa 4kPa 0 0~1000kPa
108気圧65269 kPa 0.5 kPa 0 0~125 kPa
110エンジン冷却水温度65262 °C 1℃ -40 -40~+210°C
158充電システム電圧65271 V 0.05V 0 0-3212V
167オルタネーター電圧65271 V 0.05V 0 0-3212V
168バッテリー電圧65271 V 0.05V 0 0-3212V
171周囲温度65269 °C 0.03125℃ -273 -273~+1735°C
174燃料温度65262 °C 1℃ -40 -40~+210°C
175エンジンオイル温度65262 °C 0.03125℃ -273 -273~+1735°C
182燃料率65276リットル/時0.05 L/時0 0~3212 L/時
183瞬間燃費65276 km/L 1/512 km/L 0 0~125 km/L
190エンジン回転数61444回転数0.125 回転0 0~8031回転
247総エンジン時間65253 h 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キロメートル0 0~250 km/h
519地上コース652561/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.125メートル-2500 -2500~+5531メートル
584緯度6526710⁻⁷度-210 -90°~+90°
585経度6526710⁻⁷度-210 -180°~+180°
586針路652561/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 rad/s 1/8192 rad/s -3.92 -3.92~+3.92 rad/s

合計: 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 0xFEE0 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
プロトコルレベル(車両データではない)要求1
複製/拡張バージョンCCVS1、EFL/P2、VEP2 3

合計: 22 サポートされていない PGN

🛠️ 技術的特徴

  • OpenDRIVE 道路ネットワークサポート: リアルな道路形状を再現
  • オートマチックトランスミッションシミュレーション:速度とスロットルに基づいてギアが切り替わります
  • 物理ベースのダイナミクス:現実的な制約を伴う加速、ブレーキ、ステアリング
  • DDS統合: J1939 Automotive 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トピックに公開
  • 定期的なステータス更新(1 Hz)でゲートウェイの健全性を公開

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 j1939-config.json を参照してください。

ユースケース

1. HMI開発

  • 実車を使わずに車両ダッシュボードを開発する
  • インストルメントクラスターのレンダリングとアニメーションをテストする
  • 警告/アラームのしきい値を検証する

2.アルゴリズムのテスト

  • 燃料消費量をシミュレートしてエコドライブアルゴリズムをテストする
  • 予測保守ロジックの検証
  • 自動運転の意思決定をテストする

3.統合テスト

  • エンドツーエンドのデータフローを検証: CAN → DDS → アプリケーション
  • 負荷状態でのゲートウェイのパフォーマンスをテストする
  • サブシステム間のデータ同期を検証する

4.トレーニングとデモンストレーション

  • オペレータトレーニングのための安全な環境
  • 車両を使わずに顧客向けデモンストレーションを実施
  • GVA建築の教育ツール

パフォーマンス特性

メトリック価値
CANフレーム生成レートPGNあたり最大100 Hz
DDS パブリッシングレイテンシ< 5 ms (ローカル)
ゲートウェイスループット> 1000 PGN/秒
CPU使用率(シミュレータ + ゲートウェイ) < 10% (4コアシステム)
メモリフットプリント約50 MB(合計)

比較: 物理 vs. シミュレーション

側面物理的な車両シミュレーター
ハードウェアコスト5万ドル以上$0(ソフトウェアのみ)
セットアップ時間時間(配線、構成)
再現性限定的(ドライバーの変動性)完璧(決定論的)
安全性損傷/怪我の危険ゼロリスク
シナリオコントロール困難(天候、交通)完全な制御
データロギング装備が必要内蔵
並列テスト一度に1台の車両複数のインスタンス

トラブルシューティング

よくある問題

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

今すぐデモをリクエストしてください。