J1939 車両シミュレータ
J1939 CAN 対応車両シミュレータ
概要
車両シミュレータ( gva-vehicle-sim )は、GVA(Generic Vehicle Architecture)プラットフォーム向けの包括的なテストおよび開発ツールです。J1939 CANバスメッセージ生成機能を統合したリアルな車両ダイナミクスシミュレーションを提供し、物理的な車両ハードウェアを必要とせずにハードウェア・イン・ザ・ループ(HIL)テストを可能にします。
メッセージ生成におけるJ1939シミュレーションの利点
🎯 開発とテストの利点
ハードウェアに依存しない開発
- 物理的なCANハードウェアなしでGVAアプリケーションを開発およびテストする
- 高価な車両ECUやテストベンチは不要
- 複数のチームにまたがる並行開発
リアルな車両挙動
- 本物の J1939 パラメータ グループ番号 (PGN) と疑わしいパラメータ番号 (SPN) を生成します
- リアルな車両ダイナミクス(速度、回転数、ギアチェンジ、ブレーキ)をシミュレートします
- 時間同期されたセンサーデータを提供
コスト削減
- 開発初期段階で物理的なテスト車両が不要になります
- 仮想CANインターフェース(
vcan0)により、あらゆるLinuxワークステーションでテストが可能 - 物理的なハードウェアの消耗を軽減
ラピッドプロトタイピング
- アルゴリズム開発のための即時フィードバックループ
- 簡単なシナリオ作成と再生
- 設定可能なメッセージレートとデータパターン
統合テスト
- J1939ゲートウェイの機能を検証する
- CANからDDSへのテストデータフローのトピック
- 車両パラメータに対するHMIの応答性を検証する
再現可能なテスト
- 決定論的な車両挙動
- 繰り返し可能なテストシナリオ
- 回帰テストのための一貫したベースライン
📊 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 | 地上コース | 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.125メートル | -2500 | -2500~+5531メートル |
| 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 | 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)
(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-sim2. 仮想CANのセットアップ
sudo scripts/test/j1939/setup-vcan.sh3. 車両シミュレータを起動する
# 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ゲートウェイを起動する
./build/bin/gva-j1939-gateway \
--domain=0 \
--interface=vcan0 \
--config=/etc/gva/j1939-config.json5. 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.shDDSメッセージなし
# 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今すぐデモをリクエストしてください。