目次

AWS IoT FleetWise 完全ガイド v2.0

初心者から実務者向けの包括的解説

AWS IoT FleetWise は、自動車・商用車フリートから CAN バス・OBD-II・ROS2・カメラ・LiDAR データを選択的に収集・標準化し、クラウドで分析する車両フリート管理プラットフォームです。常時全データ送信ではなく「急ブレーキ検出時に前後 30 秒のセンサー全て送信」等の条件ベース収集で帯域・通信コストを最小化(従来比 70% 削減)。SageMaker との統合で自動運転・予知保全・ドライバー行動分析モデルを構築。Edge Agent による車載処理で通信断環境での継続動作。自動車メーカー・フリート管理・オートテック企業向けのエンタープライズグレードの車両データプラットフォームです。


目次

  1. 概要
  2. IoT FleetWise が解決する課題
  3. 主な特徴
  4. アーキテクチャ
  5. コアコンポーネント
  6. 主要ユースケース
  7. Signal Catalog 設計
  8. Decoder Manifest
  9. Campaign 設定
  10. Edge Agent 詳細
  11. 設定・操作の具体例
  12. Vision System Data
  13. 類似サービス比較表
  14. ベストプラクティス
  15. トラブルシューティング
  16. 2025-2026 最新動向
  17. 学習リソース・参考文献
  18. 実装例・チェックリスト
  19. まとめ

概要

AWS IoT FleetWise とは

AWS IoT FleetWise は 車両データ収集・整理・分析の統合プラットフォーム として機能し、以下を統合提供します:

  • Signal Catalog: 車両データモデルの定義(エンジン回転数・速度・ブレーキ圧等)
  • Decoder Manifest: CAN バス / OBD-II シグナル ↔ Signal Catalog のマッピング
  • Vehicles & Fleets: 車両・フリート登録・グループ管理
  • Campaigns: 時間ベース / 条件ベースの収集ルール定義・デプロイ
  • Edge Agent: 車載で動作。通信断時のローカル処理・選択的送信
  • Timestream / S3 Integration: 高スループット時系列 DB + 大容量ストレージ
  • API: 走行データの取得・分析・命令送信

ユースケースの広がり

  • OEM(自動車メーカー): コネクテッドカー 100万台からのテレメトリ収集
  • Tier 1 サプライヤー: コンポーネント(トランスミッション・ブレーキ)開発向けの走行データ
  • フリート管理(物流・タクシー): 燃費・安全運転・予知保全データ
  • テレマティクス: ドライバー保険向けの運転評価データ
  • 自動運転企業: AV モデル開発向けの大量センサーデータ
  • EV メーカー: バッテリー劣化・充電パターン分析

IoT FleetWise が解決する課題

課題 従来の方法 IoT FleetWise での解決
大量センサーデータの通信コスト 常時全シグナル送信 → $100-500/車両/月 条件ベース送信 → $5-20/車両/月(70% 削減)
CAN バス・OBD-II の標準化 メーカーごとに異なるフォーマット管理 Signal Catalog で統一。自動スケーリング
走行データの品質・タイムライン 複数ベンダーツール・フォーマット混在 Signal Catalog で統一フォーマット・タイムスタンプ
Edge での条件判定の複雑性 センサーデータ全て送信 → クラウド判定 Edge Agent で「急ブレーキ検出」等をローカル実行
通信断環境での動作 Wi-Fi 切れたら停止。データ損失 Edge Agent がローカルバッファ・再接続時送信
デバイス多様性管理 同一モデルの車でも年式・仕向地で異なる Fleet Provisioning で自動登録・設定
データセット構築の時間 月単位で手動データ収集・整理 自動で標準化→ ML 学習用データセット準備完了

主な特徴

✅ インテリジェントデータ収集

常時全データ送信ではなく、条件をトリガーに必要なデータのみを送信:

通常時(毎分):
- エンジン回転数
- 速度
- 燃料量
→ 1KB/分 のデータ

急ブレーキ検出(条件トリガー):
- 前 30 秒 + 後 30 秒の全シグナル(エンジン・ブレーキ・ステアリング・ABS等)
→ 60KB の追加データ送信
→ 全センサー常時送信比で 99% 削減

✅ CAN バス・OBD-II 対応

多くの自動車メーカーのプロトコルに統一対応:

✓ CAN 2.0B (ISO 11898-1)
✓ CAN FD (Flexible Data-rate)
✓ OBD-II (ISO 14230 / ISO 15765)
✓ Ethernet / Automotive Ethernet (100Mbps)
✓ ROS 2(車両 Robot Operating System)

✅ Vision System Data(カメラ・LiDAR)

2025 年新機能:カメラ・レーダ・LiDAR からの動画・ポイントクラウド収集:

  • ✓ Camera: MP4 動画・画像フレーム
  • ✓ LiDAR: ポイントクラウド(.pcd / .ply)
  • ✓ Radar: 検出オブジェクト(JSON)
  • ✓ Automatic Sync: センサーデータとの自動同期タイムスタンプ

✅ Edge Agent(車載処理)

Automotive Grade Linux(AGL)/ ROS 2 での実行:

  • ✓ CAN データ → シグナル変換(Decoder)
  • ✓ 条件判定: if (speed > 100 && accel < -0.8) then [send burst data]
  • ✓ ローカルバッファ: Wi-Fi 切断時も 1-7 日のバッファ保持
  • ✓ 暗号化送信: TLS 1.3 over MQTT

✅ Timestream 統合

高スループット時系列データベース(4000 TPS/車両):

✓ 自動スケーリング(10万車両 × 10 Hz = 100万 TPS 対応)
✓ 即座にクエリ可能(インデックスなし)
✓ ホット・コールド階層化(最近 1 ヶ月はホット・その他はコールド)
✓ SageMaker との直接連携で ML 学習

✅ Cellular IoT 対応(LTE-M・NB-IoT)

Wi-Fi 非搭載車向けのセルラー通信サポート:

  • ✓ LTE-M: 低帯域・低消費電力・長距離対応
  • ✓ NB-IoT: IoT 専用低速通信(50-250 kbps)
  • ✓ eSIM: リモートから通信事業者切り替え
  • ✓ Cost 最適化: セルラー + 条件ベース送信で月額 $15-30/車両

アーキテクチャ

┌─────────────────────────────────────────────────────────────┐
│ 車両(コネクテッドカー)                                   │
├─────────────────────────────────────────────────────────────┤
│ CAN Bus / OBD-II / Ethernet / ROS 2 / Camera / LiDAR      │
│                                                             │
│ ┌──────────────────────────────────────────────────────┐   │
│ │ AWS IoT FleetWise Edge Agent                        │   │
│ │ ┌────────────────────────────────────────────────┐   │   │
│ │ │ Signal Decoder: CAN → Signal Catalog マッピング │   │   │
│ │ ├────────────────────────────────────────────────┤   │   │
│ │ │ Condition Evaluator: if (speed > 100) ...    │   │   │
│ │ ├────────────────────────────────────────────────┤   │   │
│ │ │ Local Buffer: Wi-Fi 断時バッファ (1-7 days)  │   │   │
│ │ ├────────────────────────────────────────────────┤   │   │
│ │ │ TLS Encryption: MQTT over TLS 1.3            │   │   │
│ │ └────────────────────────────────────────────────┘   │   │
│ └──────────────────────────────────────────────────────┘   │
└────────────────┬─────────────────────────────────────────────┘
                 │
   ┌─────────────▼──────────────────┐
   │ AWS IoT FleetWise (Cloud)      │
   ├────────────────────────────────┤
   │ Signal Catalog                 │
   │ Decoder Manifest               │
   │ Campaign Management            │
   │ Fleet Provisioning             │
   └────────────┬────────────────────┘
                │
  ┌─────────────┼─────────────┬─────────────┐
  │             │             │             │
▼ ▼         ▼ ▼         ▼ ▼         ▼ ▼
Timestream  S3          SageMaker  Grafana
時系列 DB   大容量      ML 学習     ダッシュ
           ストレージ              ボード

コアコンポーネント

1. Signal Catalog(シグナルカタログ)

車両データモデルの定義。Branch(フォルダ)と Sensor(実値)で階層構造:

{
  "name": "automotive-signal-catalog",
  "nodes": [
    {
      "branch": {
        "fullyQualifiedName": "Vehicle",
        "description": "Vehicle root"
      }
    },
    {
      "branch": {
        "fullyQualifiedName": "Vehicle.Engine",
        "description": "Engine data"
      }
    },
    {
      "sensor": {
        "fullyQualifiedName": "Vehicle.Engine.RPM",
        "dataType": "UINT16",
        "description": "Engine revolutions per minute",
        "unit": "rpm",
        "min": 0,
        "max": 8000
      }
    },
    {
      "sensor": {
        "fullyQualifiedName": "Vehicle.Speed",
        "dataType": "FLOAT",
        "unit": "km/h",
        "min": 0,
        "max": 300
      }
    },
    {
      "sensor": {
        "fullyQualifiedName": "Vehicle.Brake.PedalPosition",
        "dataType": "FLOAT",
        "unit": "%",
        "min": 0,
        "max": 100
      }
    },
    {
      "sensor": {
        "fullyQualifiedName": "Vehicle.Transmission.Gear",
        "dataType": "STRING",
        "enum": ["P", "R", "N", "D", "S", "L"]
      }
    }
  ]
}

特性:

  • Fully Qualified Name で階層パス定義(ドット区切り)
  • データ型: UINT8 / INT16 / FLOAT / STRING / DOUBLE / LONG
  • ユニット: rpm・km/h・°C・V・A 等
  • Min / Max: 値の範囲バリデーション

2. Decoder Manifest(デコーダーマニフェスト)

CAN バス → Signal Catalog シグナル のマッピング:

{
  "name": "vehicle-decoder",
  "modelManifestArn": "arn:aws:iotfleetwise:...:model-manifest/automotive-signal-catalog",
  "signalDecodersToAdd": [
    {
      "fullyQualifiedName": "Vehicle.Engine.RPM",
      "type": "CAN_SIGNAL",
      "canSignal": {
        "messageId": 0x100,          // CAN ID
        "isBigEndian": true,
        "isSigned": false,
        "startBit": 0,
        "offset": 0,                 // オフセット (値の変換)
        "factor": 0.25,              // スケール係数
        "length": 16                 // ビット長
      }
    },
    {
      "fullyQualifiedName": "Vehicle.Speed",
      "type": "CAN_SIGNAL",
      "canSignal": {
        "messageId": 0x200,
        "isBigEndian": true,
        "isSigned": false,
        "startBit": 0,
        "factor": 0.1,
        "length": 16
      }
    }
  ]
}

CAN 信号の計算式:

Physical Value = (Raw Value × Factor) + Offset

例: RPM = (Raw_RPM × 0.25) + 0
例: Speed = (Raw_Speed × 0.1) + 0

3. Vehicle(車両登録)

{
  "vehicleName": "vehicle-001",
  "modelManifestArn": "arn:aws:iotfleetwise:...:model-manifest/automotive-signal-catalog",
  "decoderManifestArn": "arn:aws:iotfleetwise:...:decoder-manifest/vehicle-decoder",
  "attributes": {
    "make": "Toyota",
    "model": "Prius",
    "year": "2024",
    "vin": "JTDRF5C50L5123456",
    "gpsDeviceId": "device-001",
    "oilChangeInterval": "10000"  // カスタム属性
  }
}

4. Fleet(フリート)

複数車両をグループ化:

{
  "fleetName": "taxi-fleet-tokyo",
  "description": "Tokyo taxi fleet for ride-sharing",
  "signalCatalogArn": "arn:aws:iotfleetwise:...:signal-catalog/automotive-signal-catalog",
  "vehicles": [
    "vehicle-001",
    "vehicle-002",
    "vehicle-003"
  ]
}

5. Campaign(キャンペーン)

データ収集ルールの定義・デプロイ:

{
  "name": "hard-braking-detection",
  "targetArn": "arn:aws:iotfleetwise:...:fleet/taxi-fleet-tokyo",
  "signalCatalogArn": "arn:aws:iotfleetwise:...:signal-catalog/automotive-signal-catalog",
  "collectionScheme": {
    "conditionBasedCollectionScheme": {
      "expression": "(Vehicle.Brake.PedalPosition > 80) && (Vehicle.Speed > 30)",
      "triggerMode": "RISING_EDGE",     // 条件成立時のみ
      "conditionLanguageVersion": 1,
      "minimumTriggerIntervalMs": 5000  // 5 秒以内の連続トリガー防止
    }
  },
  "signalsToCollect": [
    {
      "name": "Vehicle.Speed",
      "maxSampleCount": 200,             // 最大 200 サンプル
      "minimumSamplingIntervalMs": 100   // 0.1 秒ごと
    },
    {
      "name": "Vehicle.Engine.RPM",
      "maxSampleCount": 200,
      "minimumSamplingIntervalMs": 100
    },
    {
      "name": "Vehicle.Brake.PedalPosition",
      "maxSampleCount": 200,
      "minimumSamplingIntervalMs": 50   // より高速サンプリング
    },
    {
      "name": "Vehicle.Transmission.Gear"
    }
  ],
  "dataDestinationConfigs": [
    {
      "timestreamConfig": {
        "timestreamTableArn": "arn:aws:timestream:us-east-1:...:database/FleetWiseDB/table/VehicleData",
        "executionRoleArn": "arn:aws:iam::...:role/FleetWiseRole"
      }
    },
    {
      "s3Config": {
        "bucket": "fleet-data-bucket",
        "prefix": "hard-braking-events/",
        "executionRoleArn": "arn:aws:iam::...:role/FleetWiseRole"
      }
    }
  ],
  "startTime": "2024-05-01T00:00:00Z",
  "expiryTime": "2024-12-31T23:59:59Z"
}

収集スキーム種類:

  1. Time-based: 10 秒ごと → 定期的なデータ
  2. Condition-based: if (speed > 100) → イベントドリブン
  3. Hybrid: 両者の組み合わせ

主要ユースケース

✅ 1. 自動運転・先進運転支援システム(ADAS)開発

データ収集:
- 急ブレーキ・急ハンドル イベント時の全センサーデータ
- カメラ映像・LiDAR ポイントクラウド
- GPS 位置・天気・路面状態

用途:
- SageMaker で CNN モデル学習(画像認識)
- 走行パターン分析→ ADAS アルゴリズム改善

効果:
- テスト車両 10 台 → 月 100TB データ自動収集
- モデル精度向上 5-10%

✅ 2. 予知保全(Predictive Maintenance)

監視信号:
- エンジン温度・油圧・回転数
- トランスミッション挙動
- ブレーキシステム圧力

分析:
- Timestream でトレンド分析
- SageMaker で故障予測モデル構築
- 「部品交換までの走行距離」予測

効果:
- 故障率 30% 削減
- 修理コスト $500/車両/年 削減

✅ 3. ドライバー行動分析・安全スコアリング

監視信号:
- 急加速・急ブレーキ検出
- 信号無視・速度超過
- ハンドル操作の急激性

分析:
- ドライバー別安全スコア(0-100)
- リスクランク分類(Safe / Caution / Risk)
- 保険料算出

効果:
- 安全ドライバー: 保険料 10-20% 割引
- 危険運転検出率 95%

✅ 4. EV バッテリー劣化予測

監視信号:
- 充放電曲線・温度・電圧
- 内部抵抗(セル不均衡)
- 充電速度・深放電回数

分析:
- バッテリー劣化度(SOH: State of Health)
- 残寿命予測(RUL: Remaining Useful Life)
- バッテリー交換時期通知

効果:
- バッテリー劣化を 6 ヶ月前に検知
- 交換コスト最適化(早期・遅延交換回避)

✅ 5. 燃費最適化・CO2 削減

監視信号:
- 走行パターン(市街地・高速・郊外)
- エンジン效率・ギア選択
- 外気温・交通渋滞状況

分析:
- 走行距離別燃費ランキング
- ドライバー別燃費改善提案
- ルート最適化

効果:
- フリート燃費 5-15% 改善
- CO2 排出量 10% 削減
- 年間燃料コスト $5000/100台削減

✅ 6. OEM 品質改善・リコール対応

監視信号:
- 異常振動・異音(オーディオ分析)
- 電装系の異常コード(DTC)
- トランスミッション不具合

分析:
- リコール対象部品の早期検知
- 大量デプロイ前の潜在問題発見
- サプライチェーン品質改善

効果:
- リコールコスト $10-50M/年 削減
- ブランド信頼度向上

✅ 7. フリート管理・運行効率化

監視信号:
- 走行時間・走行距離・停止時間
- 回転数・アイドル時間
- ドアオープン・バック時間

分析:
- 車両稼働率(年 70-90%)
- ドライバー生産性スコア
- メンテナンススケジュール最適化

効果:
- 車両稼働時間 20% 向上
- ドライバー管理コスト 30% 削減

✅ 8. 自動車盗難防止・GPS 追跡

監視信号:
- GPS 位置・速度
- エンジン状態(ON / OFF)
- ドア・イグニッション操作

分析:
- 異常走行パターン検出(夜間・異常速度)
- 盗難の兆候検知
- リアルタイム GPS トラッキング

効果:
- 盗難検知速度 < 5 分
- 盗難率 60% 削減

✅ 9. V2X(Vehicle-to-Everything)通信テスト

監視信号:
- 他車との通信ログ
- 路側機(RSU)との通信
- インフラセンサー情報

分析:
- 通信安定性・遅延分析
- 協調運転シミュレーション
- C-V2X / DSRC 規格検証

効果:
- 協調運転テストコスト 40% 削減
- 通信信頼度 99.9% 達成

✅ 10. 車両ダイナミクス研究(研究機関向け)

監視信号:
- 加速度(3 軸)・角速度
- 操舵角・サスペンション圧
- タイヤ温度・グリップ

分析:
- 車両動力学モデル改善
- サスペンション設計最適化
- タイヤ性能テスト

効果:
- ハンドリング特性向上
- 安全性マージン 10-15% 向上

✅ 11. 商用車(トラック・バス)の遠隔診断

監視信号:
- エンジンオイル温度・圧力
- ブレーキ圧力・パッド摩耗度
- ミッション油温・スリップ

分析:
- 整備時期の自動判定
- 部品交換の優先度付け
- 出張修理の事前通知

効果:
- ダウンタイム 50% 削減
- 修理予約効率 40% 向上

✅ 12. 配送・物流の可視化・最適化

監視信号:
- GPS 位置・走行経路
- 配送停止時間・ドア開閉回数
- 冷蔵車温度・湿度(生鮮物流向け)

分析:
- ドライバー効率スコア
- 最適ルート提案
- 配送遅延の早期予測

効果:
- 配送時間 10-20% 短縮
- ドライバー給与最適化 5%

Signal Catalog 設計

階層構造の設計方針

❌ フラット設計(スケール困難)
Vehicle.RPM
Vehicle.Speed
Vehicle.TorqueConvert_Temperature
Vehicle.TransmissionFluidTemp

✅ 階層設計(保守性・スケール性)
Vehicle
├── Engine
│   ├── RPM
│   ├── Temperature
│   ├── OilPressure
│   └── FuelConsumption
├── Transmission
│   ├── Gear
│   ├── FluidTemp
│   └── TorqueOut
├── Brake
│   ├── PedalPosition
│   ├── Pressure
│   └── PadWear
├── Suspension
│   ├── FrontLeft_Pressure
│   ├── FrontRight_Pressure
│   ├── RearLeft_Pressure
│   └── RearRight_Pressure
└── Environmental
    ├── ExternalTemp
    ├── Humidity
    └── AmbientLight

データ型の選択

{
  "dataType": "UINT8",      // 0-255 (1 byte) - 状態フラグ・ギア
  "dataType": "INT16",      // -32768-32767 (2 bytes) - 温度・圧力
  "dataType": "UINT16",     // 0-65535 (2 bytes) - RPM・速度
  "dataType": "FLOAT",      // 単精度浮動小数点 - センサー値の変換
  "dataType": "DOUBLE",     // 倍精度浮動小数点 - 高精度(GPS 座標)
  "dataType": "LONG",       // 64 bit 整数 - ミリ秒タイムスタンプ
  "dataType": "STRING"      // テキスト - VIN・エラーコード
}

Unit(ユニット)定義

速度: km/h, m/s, mph, knots
回転数: rpm, rad/s
温度: °C, °F, K
圧力: bar, psi, kPa, Pa
電圧: V, mV
電流: A, mA
電力: W, kW
エネルギー: J, kWh
燃料: L, gal
距離: km, m, mile
時間: ms, s, h
加速度: m/s², g
角速度: rad/s, °/s

Decoder Manifest

CAN フレーム構造の理解

CAN Message ID: 0x123 (291 decimal)
DLC: 8 (Data Length: 8 bytes = 64 bits)

Byte Layout:
┌────┬────┬────┬────┬────┬────┬────┬────┐
│ B0 │ B1 │ B2 │ B3 │ B4 │ B5 │ B6 │ B7 │
└────┴────┴────┴────┴────┴────┴────┴────┘
 Bit: 0-7  8-15 16-23 ...               63

Signal "RPM":
- startBit: 0 (Byte 0 の Bit 0 から開始)
- length: 16 bits
- isBigEndian: true
- factor: 0.25
- offset: 0

計算例:
Raw data (Hex): 0x04 0x00 = 0x0400 (Big Endian)
= 1024 (decimal)
Physical = 1024 × 0.25 + 0 = 256 rpm

マルチバイト信号のマッピング

{
  "fullyQualifiedName": "Vehicle.Engine.RPM",
  "type": "CAN_SIGNAL",
  "canSignal": {
    "messageId": 256,        // 0x100
    "isBigEndian": true,     // Motorola byte order
    "isSigned": false,
    "startBit": 0,
    "offset": 0,
    "factor": 0.25,
    "length": 16
  }
}

Campaign 設定

条件ベース収集の Expression

-- Expression Language (JavaScript-like)

-- 単純な条件
Vehicle.Speed > 100

-- AND / OR 組み合わせ
(Vehicle.Brake.PedalPosition > 80) && (Vehicle.Speed > 30)

-- 複雑な条件
(Vehicle.Engine.RPM > 6000) || 
(Vehicle.Transmission.Gear == "S") && (Vehicle.Speed > 150)

-- 関数利用(計画中)
abs(Vehicle.Acceleration) > 0.8  // 急加速・急ブレーキ

データ蓄積・転送戦略

┌────────────────────────────────────┐
│ Edge Agent(車載)                 │
├────────────────────────────────────┤
│ Local Buffer (SSD)                 │
│ • 7 日分のコンディション満たさない│
│   データ保持                       │
│ • サイズ: 最大 50GB                 │
├────────────────────────────────────┤
│ Condition Evaluator                │
│ • 条件チェック: 100ms ごと         │
│ • トリガー時: バースト送信 (1MB)   │
├────────────────────────────────────┤
│ Network Manager                    │
│ • Wi-Fi 優先・セルラーフォールバック
│ • オフピーク時間帯での送信         │
│ • 圧縮率: 70%                      │
└────────────────────────────────────┘

Edge Agent 詳細

Edge Agent の構成

AWS IoT FleetWise Edge Agent
├── Signal Decoder
│   ├── CAN バス受信
│   ├── Decoder Manifest マッピング
│   └── Raw → Signal 変換
├── Campaign Engine
│   ├── Condition Evaluator
│   └── Collection Executor
├── Local Data Store
│   ├── SSD バッファ(1-7 日)
│   └── 消費電力最適化
├── Connectivity Manager
│   ├── MQTT over TLS 1.3
│   ├── Auto-reconnect(指数バックオフ)
│   └── Cellular / Wi-Fi 自動選択
└── Security
    ├── X.509 証明書認証
    ├── データ暗号化(TLS + AES-256)
    └── Over-the-Air(OTA)更新対応

Automotive Grade Linux(AGL)への統合

# AGL での Edge Agent インストール
wget https://github.com/aws/aws-iot-fleetwise-edge/releases/\
  download/v1.2.0/aws-iot-fleetwise-edge-arm64.tar.gz
tar -xzf aws-iot-fleetwise-edge-arm64.tar.gz
sudo ./install.sh

# コンフィグ設定
cat > /etc/aws-iot-fleetwise/config.json << 'EOF'
{
  "vehicleName": "vehicle-001",
  "region": "us-east-1",
  "certificatePath": "/opt/aws-iot-fleetwise/certs/device.pem",
  "privateKeyPath": "/opt/aws-iot-fleetwise/certs/private.key",
  "canInterface": "vcan0",
  "bufferSize": "50GB",
  "sampleInterval": "100ms"
}
EOF

# サービス起動
sudo systemctl start aws-iot-fleetwise
sudo systemctl enable aws-iot-fleetwise

ROS 2 との連携

# ROS 2 Node として Edge Agent を動作
# Topic から Signal を抽出

import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Imu

class FleetWiseNode(Node):
    def __init__(self):
        super().__init__('fleetwise_node')
        self.subscription = self.create_subscription(
            Imu, '/imu/data', self.imu_callback, 10)
        self.fleetwise_publisher = self.create_publisher(
            Float64, '/fleetwise/acceleration', 10)
    
    def imu_callback(self, msg):
        # IMU データ → FleetWise Signal 変換
        acceleration = msg.linear_acceleration.x
        self.fleetwise_publisher.publish(acceleration)

def main(args=None):
    rclpy.init(args=args)
    node = FleetWiseNode()
    rclpy.spin(node)

if __name__ == '__main__':
    main()

設定・操作の具体例

CLI による Campaign 作成

# 1. Signal Catalog 作成
aws iotfleetwise create-signal-catalog \
  --name vehicle-signals \
  --nodes file://signal-catalog.json

# 2. Fleet 作成
aws iotfleetwise create-fleet \
  --fleet-name taxi-fleet \
  --signal-catalog-arn arn:aws:iotfleetwise:...:signal-catalog/vehicle-signals

# 3. Vehicle 登録
aws iotfleetwise create-vehicle \
  --vehicle-name vehicle-001 \
  --model-manifest-arn arn:aws:iotfleetwise:...:model-manifest/vehicle-manifest \
  --decoder-manifest-arn arn:aws:iotfleetwise:...:decoder-manifest/vehicle-decoder

# 4. Campaign 作成・デプロイ
aws iotfleetwise create-campaign \
  --name hard-braking-capture \
  --target-arn arn:aws:iotfleetwise:...:fleet/taxi-fleet \
  --signal-catalog-arn arn:aws:iotfleetwise:...:signal-catalog/vehicle-signals \
  --collection-scheme file://campaign.json \
  --signals-to-collect file://signals.json \
  --data-destination-configs file://destinations.json

# 5. Campaign デプロイ
aws iotfleetwise start-campaign \
  --campaign-name hard-braking-capture

# 6. キャンペーン状態確認
aws iotfleetwise get-campaign \
  --name hard-braking-capture

SDK(Python)での操作

import boto3
import json

client = boto3.client('iotfleetwise')

def create_and_deploy_campaign():
    # Campaign 作成
    response = client.create_campaign(
        name='predictive-maintenance',
        targetArn='arn:aws:iotfleetwise:...:fleet/fleet-001',
        signalCatalogArn='arn:aws:iotfleetwise:...:signal-catalog/signals',
        collectionScheme={
            'timeBasedCollectionScheme': {
                'periodMs': 10000  # 10 秒ごと
            }
        },
        signalsToCollect=[
            {
                'name': 'Vehicle.Engine.Temperature',
                'maxSampleCount': 100
            },
            {
                'name': 'Vehicle.Engine.OilPressure',
                'maxSampleCount': 100
            }
        ],
        dataDestinationConfigs=[
            {
                'timestreamConfig': {
                    'timestreamTableArn': 'arn:aws:timestream:...',
                    'executionRoleArn': 'arn:aws:iam::...:role/FleetWiseRole'
                }
            }
        ]
    )
    
    # Campaign デプロイ
    client.start_campaign(name='predictive-maintenance')
    
    return response

# 実行
campaign = create_and_deploy_campaign()
print(f"Campaign created: {campaign['campaignId']}")

Timestream クエリでデータ分析

-- 過去 24 時間の平均 RPM
SELECT measure_time, AVG(measure_value::double) as avg_rpm
FROM vehicle_data
WHERE measure_name = 'Vehicle.Engine.RPM'
  AND measure_time > ago(24h)
GROUP BY measure_time, vehicle_id
ORDER BY measure_time DESC;

-- 急ブレーキイベントの抽出
SELECT measure_time, vehicle_id, measure_value::double as brake_pedal
FROM vehicle_data
WHERE measure_name = 'Vehicle.Brake.PedalPosition'
  AND measure_value::double > 80
  AND measure_time > ago(7d)
ORDER BY measure_time DESC
LIMIT 1000;

-- 複数シグナルの結合分析
SELECT v1.measure_time, v1.vehicle_id,
       v1.measure_value::double as speed,
       v2.measure_value::double as rpm,
       v3.measure_value::double as brake_pedal
FROM vehicle_data v1
JOIN vehicle_data v2 
  ON v1.measure_time = v2.measure_time 
  AND v1.vehicle_id = v2.vehicle_id
JOIN vehicle_data v3
  ON v1.measure_time = v3.measure_time
  AND v1.vehicle_id = v3.vehicle_id
WHERE v1.measure_name = 'Vehicle.Speed'
  AND v2.measure_name = 'Vehicle.Engine.RPM'
  AND v3.measure_name = 'Vehicle.Brake.PedalPosition'
  AND v1.measure_time > ago(1d)
LIMIT 10000;

IaC(Terraform)での構築

# Terraform: IoT FleetWise セットアップ

resource "aws_iotfleetwise_signal_catalog" "vehicle_signals" {
  name = "vehicle-signals"
  
  node {
    branch {
      fully_qualified_name = "Vehicle"
    }
  }
  
  node {
    sensor {
      fully_qualified_name = "Vehicle.Engine.RPM"
      data_type           = "UINT16"
      unit                = "rpm"
    }
  }
  
  node {
    sensor {
      fully_qualified_name = "Vehicle.Speed"
      data_type           = "FLOAT"
      unit                = "km/h"
    }
  }
}

resource "aws_iotfleetwise_fleet" "taxi_fleet" {
  name                  = "taxi-fleet"
  signal_catalog_arn    = aws_iotfleetwise_signal_catalog.vehicle_signals.arn
}

resource "aws_iotfleetwise_campaign" "hard_braking" {
  name               = "hard-braking-detection"
  fleet_arn          = aws_iotfleetwise_fleet.taxi_fleet.arn
  signal_catalog_arn = aws_iotfleetwise_signal_catalog.vehicle_signals.arn
  
  collection_scheme {
    condition_based_collection_scheme {
      expression                  = "(Vehicle.Brake.PedalPosition > 80) && (Vehicle.Speed > 30)"
      trigger_mode                = "RISING_EDGE"
      minimum_trigger_interval_ms = 5000
    }
  }
  
  signals_to_collect {
    name                       = "Vehicle.Speed"
    max_sample_count           = 200
    minimum_sampling_interval_ms = 100
  }
  
  signals_to_collect {
    name = "Vehicle.Brake.PedalPosition"
    max_sample_count = 200
  }
  
  data_destination_configs {
    timestream_config {
      timestream_table_arn = aws_timestream_table.vehicle_data.arn
      execution_role_arn   = aws_iam_role.fleetwise.arn
    }
  }
}

Vision System Data

2025 年新機能:カメラ・レーダ・LiDAR からの動画・センサーデータ統合収集:

{
  "name": "vision-system-campaign",
  "targetArn": "arn:aws:iotfleetwise:...:fleet/av-testing-fleet",
  "signalCatalogArn": "arn:aws:iotfleetwise:...:signal-catalog/vision-signals",
  "collectionScheme": {
    "conditionBasedCollectionScheme": {
      "expression": "Vehicle.Perception.Confidence < 0.8",  // 低信頼度検出時
      "triggerMode": "RISING_EDGE",
      "minimumTriggerIntervalMs": 1000
    }
  },
  "dataDestinationConfigs": [
    {
      "s3Config": {
        "bucket": "av-test-data",
        "prefix": "vision-events/",
        "compressionFormat": "GZIP"
      }
    }
  ],
  "visionSystemDataInputs": [
    {
      "cameraDeviceId": "camera-front",
      "dataFormat": "MP4",
      "resolution": "1920x1080",
      "frameRate": 30,
      "bitRate": "5Mbps"
    },
    {
      "lidarDeviceId": "lidar-top",
      "dataFormat": "PCD",
      "pointsPerSecond": 2000000,
      "includeIntensity": true
    }
  ]
}

類似サービス比較表

特性 FleetWise Cerence Drive Sonatus Vehicle Cloud Bosch Fleet Management Fleet Complete
CAN / OBD-II ✅ 完全対応 ✅ 対応 ✅ 対応 ✅ 対応 △ 限定的
条件ベース収集 ✅ Expression △ テンプレート △ 限定 ✅ ルールエンジン △ 基本的
Vision System ✅ GA(2025) △ 限定 ✅ カメラ重視 △ 非対応 △ 非対応
Edge Agent ✅ AGL / ROS 2 △ クラウド処理 △ クラウド処理 ✅ Edge 対応 △ クラウド処理
Cellular IoT ✅ LTE-M/NB-IoT △ Wi-Fi 主体 △ 回線依存 ✅ マルチ回線 ✅ マルチ回線
Data Cost 💰 $5-30/車両/月 💰💰 $50-100/月 💰💰 $40-80/月 💰💰💰 $100+/月 💰💰 $30-60/月
Timestream ✅ 統合 △ 外部 DB △ 外部 DB △ 独自 DB △ 独自 DB
SageMaker ✅ 統合 △ API 連携 △ API 連携 △ 統合困難 △ 統合困難
学習曲線 🟩 中程度 🟥 複雑 🟥 複雑 🟩 中程度 🟥 複雑
マネージド ✅ AWS マネージド △ SaaS ✅ SaaS △ ハイブリッド ✅ SaaS

ベストプラクティス

✅ 1. Signal Catalog の設計・バージョン管理

❌ フラット&変更困難な Signal 定義
再デプロイ時に全キャンペーン停止必要

✅ 階層的・拡張性重視の Signal 設計
新 Signal 追加時も既存キャンペーン無影響
Version = Signal Catalog の更新日時で管理

✅ 2. Edge Agent のローカルバッファ活用

❌ Wi-Fi 断 = 全データ喪失
→ 通信コストのみ発生。エラーデータなし

✅ 条件ベース Collection + Local Buffer
→ イベント時の詳細データ保持
→ 再接続後の一括送信
→ 通信コスト大幅削減

✅ 3. Campaign の段階的デプロイ

❌ 全フリート同時に新 Campaign デプロイ
→ リソース枯渇・データ品質低下

✅ A/B テスト的な段階的デプロイ
→ 1% のフリートで 1 週間テスト
→ 品質確認後に 100% ロールアウト

✅ 4. Timestream の層化保存

ホット層(最近 1 ヶ月): SSD
→ 高速クエリ・SageMaker 学習

コールド層(1-12 ヶ月): HDD
→ 低コスト保存・アーカイブ

削除: 1 年以上前のデータ
→ コンプライアンス条件に応じて設定

✅ 5. データ圧縮・フィルタリング

# Edge Agent で送信前に圧縮・フィルタ

def preprocess_signals(signals):
    # 1. ノイズ除去(移動平均)
    signals = moving_average(signals, window=3)
    
    # 2. 不要な精度削減(4 小数点 → 1 小数点)
    signals = round_values(signals, precision=1)
    
    # 3. GZIP 圧縮
    signals = gzip_compress(signals)
    
    # 結果: データサイズ 70% 削減
    return signals

✅ 6. エラーハンドリング・リトライ戦略

接続失敗の段階的対応:
1. 即座リトライ(1 秒後)
2. 指数バックオフ(2・4・8・16 秒)
3. セルラー通信へのフォールバック
4. ローカルバッファへの保存

✅ 7. Security・認証管理

# デバイス証明書の自動ローテーション
aws iotfleetwise create-certificate \
  --validity-period-days 365

# IAM ロール・ポリシー最小権限設定
{
  "Effect": "Allow",
  "Action": "iotfleetwise:GetCampaignData",
  "Resource": "arn:aws:iotfleetwise:...:campaign/campaign-name"
}

トラブルシューティング

現象 原因 対策
Edge Agent が起動しない CAN インターフェース非検出 / 証明書エラー ip link show vcan0 で確認。証明書パス検証
Campaign が Campaign が展開されない Signal Catalog との不一致 Campaign の signals と Catalog の FQN 一致確認
Timestream にデータが入らない IAM ロール権限不足 / テーブル名誤り IAM ポリシー・Timestream テーブル名を確認
データ送信量が多すぎる Condition 定義が緩すぎる minimumTriggerIntervalMs を増加・Condition 再評価
通信が頻繁に断になる セルラー電波品質低下 Wi-Fi への切り替え検討・地域確認
CAN シグナルの解析誤り Decoder Manifest の factor / offset 誤り CAN ドキュメントで bit layout 再確認
Edge Agent のメモリ不足 ローカルバッファサイズ過大 バッファサイズを 10GB に削減
S3 エクスポートが遅い データサイズ × ファイル数が多すぎる Parquet フォーマット・パーティション戦略見直し

2025-2026 最新動向

📰 1. Vision System Data 正式 GA

  • カメラ・LiDAR・レーダデータの統合収集が本格化
  • 自動運転企業との連携強化

📰 2. Cellular IoT(LTE-M・NB-IoT)完全サポート

  • Wi-Fi なし環境での運用効率化
  • Cost per Vehicle さらに 20% 削減見通し

📰 3. SageMaker との深い統合

  • Edge Agent での推論(オンデバイス ML)実装予定
  • マルチモーダル学習(センサー + ビジョン)

📰 4. Zero Trust Vehicle Security

  • デバイス証明書の短命化(24h rotate)
  • V2X 通信の暗号化・認証強化

学習リソース・参考文献

公式ドキュメント(8+)

  1. AWS IoT FleetWise Developer Guide
  2. Key Concepts and Features
  3. Signal Catalog Design
  4. Decoder Manifest
  5. Campaign Configuration
  6. Edge Agent Setup
  7. AWS IoT FleetWise Pricing
  8. AWS IoT FleetWise FAQs

パートナー・ベンダー リソース(5+)

  1. AWS IoT FleetWise Edge GitHub
  2. ROS 2 Integration Guide
  3. Automotive Grade Linux(AGL)
  4. CAN Protocol Reference
  5. OBD-II Data Standards

実装例・チェックリスト

チェックリスト: IoT FleetWise 導入前評価

  • [ ] 車両フリートが 100+ 台以上か?
  • [ ] CAN バス / OBD-II データの収集が必要か?
  • [ ] Edge 処理(条件ベース収集)で通信コスト削減 50%+ が可能か?
  • [ ] SageMaker で走行データ分析が必要か?
  • [ ] 自動運転・ADAS 開発が計画中か?
  • [ ] Timestream + Grafana のダッシュボード が必要か?
  • [ ] セルラー IoT(LTE-M・NB-IoT)対応が必要か?

チェックリスト: Signal Catalog・Campaign 設計

  • [ ] Signal Catalog を階層的に設計(Vehicle > Engine > RPM)
  • [ ] CAN ID・Bit Layout・Factor・Offset を正確にマッピング
  • [ ] Campaign の条件 Expression を実装・テスト
  • [ ] minimumTriggerIntervalMs を適切に設定(通信コスト vs データ品質)
  • [ ] Timestream テーブル・S3 バケット作成済み
  • [ ] IAM ロール・ポリシー設定(最小権限)

チェックリスト: Edge Agent 展開準備

  • [ ] Automotive Grade Linux / ROS 2 環境構築済み
  • [ ] Edge Agent のコンパイル・テスト完了
  • [ ] CAN インターフェース(vcan0 等)確認
  • [ ] デバイス証明書生成・Edge Agent に配置
  • [ ] ローカルバッファサイズ設定(推奨 10-50GB)
  • [ ] 通信テスト(Wi-Fi・セルラー両方確認)

チェックリスト: 本番運用準備

  • [ ] Campaign を 1-5% のフリートで A/B テスト(1 週間)
  • [ ] データ品質確認(Timestream でのクエリ結果が正常)
  • [ ] Timestream の層化保存設定(ホット・コールド)
  • [ ] SageMaker での ML パイプライン構築・テスト
  • [ ] 監視・アラート設定(CloudWatch)
  • [ ] Cost Estimation(車両数 × $5-30/月 + Timestream)
  • [ ] ドキュメント・チーム教育完了

まとめ

AWS IoT FleetWise は、自動車・商用車フリート向けの統合データ収集・分析プラットフォームです。CAN バス・OBD-II・ROS2・ビジョンシステム(カメラ・LiDAR)から条件ベースで選択的にデータを収集し、Timestream・S3・SageMaker で大規模分析を実現。Edge Agent による車載処理で通信コストを 70% 削減、通信断環境での継続運用を確保します。

主な利点:

  • 通信コスト削減: 常時全データ送信比で 70-90% 削減
  • 自動運転開発加速: 月 10-100TB の標準化データを自動収集
  • 予知保全: 故障予測で部品交換コスト 30-50% 削減
  • ドライバー分析: 安全スコアリング・保険料最適化
  • EV バッテリー監視: 劣化予測・寿命管理
  • エンタープライズグレード: OEM・Tier 1・テレマティクス企業向けに最適

OEM・フリート管理企業・自動運転企業向けに、2026 年以降の標準的な車両データプラットフォーム として展開が加速します。


最終更新:2026-04-26 バージョン:v2.0