Amazon Web Services ブログ

AWS IoT サービスを使用したコネクテッドカーのプロトタイプの構築

自動車業界では大変革が起きています。ソフトウェアのイノベーションに牽引され、自動車の概念は単なる移動手段としての役割を超えています。車両は、高度運転支援システム (ADAS)、高度なインフォテインメント、コネクティビティ機能を備えた知的なマシンに進化しています。
こうした高度な機能を実現するには、自動車メーカーは様々なソースからのデータを管理する必要があり、大規模にデータを収集するソリューションが求められています。このニーズに AWS IoT サービスが役立ちます。
クラウド上にデータがあれば、データ分析ツールの構築、予防保全の実現、またエンドユーザー向けの生成 AI サービスにデータを活用するなど、新しい可能性が広がります。

ソリューション概要

この記事では、図 1 に示されている様々なユースケースに対応するために、複数の車両からデータを収集する、スケーラブルで企業向けの環境を整えた構造を、Raspberry Pi で動作させた車のモデルを使って構築する方法を案内します。

Use cases

図 1 – ユースケース

全体のアーキテクチャ

図 2 は、アーキテクチャの概要を示しています。

overall architecture

図 2 – 全体のアーキテクチャ

ハードウェアとローカルコントローラ

ハードウェアとしては、機械部品と電子部品をすべて提供するこのシンプルなキットを使用します。また、Raspberry Pi も必要です。キットの組み立てとテストの手順は、メーカーのウェブサイトに記載されていますので、このブログ記事では説明しません。

Smart car kit for Raspberry Pi

図 3 – Raspberry Pi 用スマートカーキット

車両は WebSocket を使った React で書かれた Web インターフェースで制御されます。
ローカル Web アプリでは、カメラの映像を見たり、速度を調整したり、移動方向を制御したり、ライトを制御することができます。
よりリアルな運転体験のために、ゲームコントローラを使うこともできます。

local car controller

図 4 – ローカルカーコントローラー

物理的なプロトタイプを使うことで、上で説明したサービスの機能が実用的な方法でユースケースに適用できることを効果的にシミュレーションできます。

データの収集と可視化

車両が生成したデータは、AWS IoT FleetWise を使用して仮想 CAN インターフェースを介してクラウドに送信されます。各データ指標は AWS IoT のルール で処理され、Amazon Timestream に保存されます。
すべてのデータは Amazon Managed Grafana を使用したダッシュボードに表示されます。

Data collection

図 5 – データ収集

ウォークスルー

詳細な手順と完全なコードはこの GitHub のリポジトリで入手できます。
フルリポジトリをダウンロードし、Readme.md ファイルに記載されているステップバイステップのアプローチに従うことをお勧めします。
この記事では全体のアーキテクチャを説明し、主要なステップのコマンドを提供します。

前提条件

  • AWS アカウント
  • インストール済みの AWS CLI
  • Raspberry Pi 用の スマートカー キット
  • Raspberry PI
  • Python と JavaScript の基本的な知識

ハードウェアとローカルコントローラ

Raspberry Pi に車両制御ソフトウェアと AWS IoT FleetWise 向けの Edge Agent をインストールするには、以下の手順を実行します。詳しい手順は、リポジトリの Readme.md ファイルの 6 番目の項目に記載されています。

  1. 仮想 CAN インターフェースを設定する
  2. AWS IoT FleetWise 用の Edge Agent をビルドしてインストールする
  3. 車両の運転と制御用のサーバーとアプリケーションをインストールする

Architecture after Step 1

図 6 – ステップ 1 後のアーキテクチャ

基本的なクラウドインフラストラクチャの構築

AWS CloudFormation は、Amazon Timestream と Amazon Managed Grafana に必要なすべてのリソースを展開するために使用されます。
テンプレートは、Cloud フォルダ内の付随する リポジトリにあります。

Architecture after Step 2

図 7 – ステップ 2 後のアーキテクチャ

Amazon Managed Grafana のデプロイ (AWS CLI)

最初にデプロイするコンポーネントは Amazon Managed Grafana で、AWS IoT FleetWise で収集されたデータを表示するダッシュボードをホストします。リポジトリの “Cloud/Infra” フォルダ内にある CloudFormation の 01-Grafana-Instance.yml テンプレートを使って、次のコマンドでリソースをデプロイします。

aws cloudformation create-stack \ 
--stack-name macchinetta-grafana-instance \ 
--template-body file://01-Grafana-Instance.yml \ 
--capabilities CAPABILITY_NAMED_IAM 

CloudFormation が CREATE_COMPLETE 状態に到達したら、新しい Grafana ワークスペースが表示されるはずです。

Amazon Managed Grafana Workspace

図 8 – Amazon Managed Grafana ワークスペース

Amazon Timestream のデプロイ (AWS CLI)

Amazon Timestream は、1 日に数兆ものタイムシリーズデータポイントを格納し分析できるフルマネージド型のタイムシリーズデータベースです。
このサービスは、AWS IoT FleetWise によって収集されたデータを格納する、デプロイする 2 番目のコンポーネントになります。リポジトリの「Cloud/Infra」フォルダーにある 02-Timestream-DB.yml テンプレートを使用して、次のコマンドでリソースをデプロイします。

aws cloudformation create-stack \ 
--stack-name macchinetta-timestream-database \ 
--template-body file://02-Timestream-DB.yml 
--capabilities CAPABILITY_NAMED_IAM 

CloudFormation が CREATE_COMPLETE 状態に達すると、AWS IoT FleetWise で使用される新しい Timestream テーブル、データベース、および関連するロールが表示されます。

AWS IoT Fleet の設定

AWS IoT FleetWise の基盤を設定し、収集するシグナルを定義し、データを受信するよう構成する時間が来ました。シグナルとは、車両データとそのメタデータを含む基本構造体を定義したものです。

例えば、車のバッテリー電圧を表す信号を作成することができます。

Signal definition 
-	 Type: 				 Sensor 
-	 Data type: 			 float32 
-	 Name: 				 Voltage 
-	 Min:				 0 		
-	 Max:				 8 
-	 Unit:				 Volt 
-	 Full qualified name: Vehicle.Battery.Voltage 

この信号は、車両に関するセマンティックに定義された情報を通信するために、自動車アプリケーションで標準的に使用されています。VSS 仕様に従ってプロトタイプ車をモデル化してください。これがプロトタイプで使用する構造です。この構造は、リポジトリの Cloud/Fleetwise フォルダにある signals.json ファイルに JSON でコード化されています。

Vehicle model in VSS format

図 9 – VSS 形式の車両モデル

ステップ 1: シグナルカタログを作成する (AWS CLI)

  1. 次のコマンドを使って、上記のように signals.json に記述された構造を利用してください。

aws iotfleetwise create-signal-catalog --cli-input-json file://signals.json

  1. コマンドにより返された ARN をコピーします。

AWS コンソールで AWS IoT FleetWise のページを開き、ナビゲーションパネルから シグナルカタログ を選択すると、新しく作成したシグナルカタログが表示されるはずです。

Signal Catalog

図 10 – シグナルカタログ

ステップ 2: 車両モデルを作成する

車両のフォーマットを標準化し、同じタイプの複数の車両で一貫した情報を実施する車両モデルです。

  1. json ファイルを開き、 変数を前のコマンドでコピーした <ARN> に置き換えてください。
  2. 次のコマンドを実行してください:
    aws iotfleetwise create-model-manifest --cli-input-json file://model.json
  3. コマンドが返した ARN をコピーしてください。
  4. 次のコマンドを実行してください:
    aws iotfleetwise update-model-manifest --name  <モデル名> --status ACTIVE

AWS コンソールの AWS IoT FleetWise ページを開き、ナビゲーションパネルから 車両モデル セクションを選択すると、新しく作成した車両モデルが表示されます。

Vehicle model: Signals

図 11 – 車両モデル: シグナル

ステップ 3: デコーダー マニフェストを作成する

デコーダーマニフェスト は、車両からのバイナリデータを人間が読める形式にデコードすることを可能にします。私たちのプロトタイプでは CAN バスプロトコル を使用しています。これらの信号は、生の CAN バスデータをデコードするための情報を含むテキストファイルである CAN DBC (CAN Database) ファイルからデコードされる必要があります。

  1. decoder.json ファイルを開き、 変数を前のコマンドでコピーした ARN に置き換えます。
  2. 次のコマンドを実行してモデルを作成します:
    aws iotfleetwise create-model-manifest --cli-input-json file://model.json
  3. 次のコマンドを実行してデコーダを有効にします:
    aws iotfleetwise update-decoder-manifest --name <デコーダ名> --status ACTIVE

AWS コンソールの AWS IoT FleetWise ページを開き、ナビゲーションパネルから 車両モデル セクションを選択すれば、新しく作成したデコーダーマニフェストが表示されるはずです。

Vehicle model: Signals

図 12 – 車両モデル: デコーダーマニフェスト

ステップ 4: 車両を作成する

AWS IoT FleetWise には独自の車両コンストラクトがありますが、その基盤となるリソースは AWS IoT Core のモノで、デバイス (車両) の静的なメタデータを含む物理デバイスの表現です。

  1. AWS コンソールを AWS IoT FleetWise ページ で開きます
  2. ナビゲーションパネルで車両を選択します
  3. 車両を作成を選択します
  4. リストボックスから車両モデルと関連するマニフェストを選択します

Vehicle properties

図 13 – 車両のプロパティ

ステップ 5: キャンペーンを作成してデプロイする

キャンペーンとは、AWS IoT FleetWise Edge Agent ソフトウェアに対して、どのデータを選択して収集するか、およびクラウドのどこにデータを送信するかを指示するものです。

  1. AWS コンソールで AWS IoT FleetWise のページを開きます
  2. ナビゲーションパネルからキャンペーン を選択します
  3. キャンペーンを作成 を選択します
  4. スキーマタイプでは時間ベースを選択します
  5. キャンペーン期間 では一貫した期間を選択します
  6. 期間 には 10000 と入力します
  7. シグナル名では Actual Vehicle Speed を選択します
  8. 最大サンプル数 count では 1 を選択します
  9. ステップ 7 と 8 を他のすべての信号に対して繰り返します
  10. 送信先では Amazon Timestream を選択します
  11. Timestream データベース名 では macchinettaDB を選択します
  12. Timestream テーブル名 では macchinettaTable を選択します
  13. 次へを選択します
  14. 車両名 では macchinetta を選択します
  15. 次へ を選択します
  16. 確認して 作成 を選択します

図 14 – キャンペーンを作成してデプロイする

デプロイ後、数秒で Amazon Timestream テーブル内のデータが表示されるはずです。

Amazon TimeStream

図 15 – Amazon Timestream テーブル

Amazon Timestream にデータを保存すると、Amazon Managed Grafana を使ってデータを可視化できます。Amazon Managed Grafana は、メトリクスのクエリ、可視化、アラートを行える、人気のオープンソース分析プラットフォーム Grafana の完全マネージドサービスです。

ダッシュボードで、単一の車両からの関連する詳細なデータを表示するために使用します:

Amazon Grafana

図 16 – Amazon Managed Grafana

クリーンアップ

詳しい手順は、Readme.md ファイルの最後に記載されているリポジトリを参照してください。

結論

このソリューションは、ビークル車両データの収集と管理のためのスケーラブルなアーキテクチャ構築において、AWS IoT の力を実証しています。Raspberry Pi 電源の車両プロトタイプから始まり、自動車業界の主要なユースケースにどのように対処できるかを示しました。しかし、これはほんの始まりにすぎません。プロトタイプはモジュール化されており、新しい機能を追加できるよう設計されています。ソリューションを拡張する魅力的な方法をいくつか紹介しましょう。

Fleet Management Web App: AWS Amplify を使用して、車両の全体フリートを監視する包括的な Web アプリケーションを開発します。
このアプリでは、各車両の健全性状態を大まかに把握し、個別の車両の詳細な分析を行えます。

ライブビデオストリーミング: Raspberry Pi アプリケーションに Amazon Kinesis Video Streams ライブラリを統合して、実時間で車両からビデオフィードを可能にします。

予知保全: AWS IoT FleetWise によって収集されたデータを活用し、予知保全モデルを構築することで、車両の信頼性を高め、ダウンタイムを削減することができます。

生成 AI の統合: Amazon Bedrock のような生成 AI サービスを使用して、収集したデータに基づいてパーソナライズされたコンテンツを生成したり、ユーザーの行動を予測したり、車両の性能を最適化することを検討します。

コネクテッド車両ソリューションを次のレベルに引き上げる準備はできましたか? 私たちは、次のことをお勧めします:

  • さらに詳しく見る: AWS IoT サービスとその自動車業界での応用について深く掘り下げましょう。詳細は、AWS IoT のドキュメントをご覧ください。
  • 実際に試す: GitHub のリポジトリにある詳細な手順を参考に、自身でこのプロトタイプを構築してみましょう。
  • 専門家と接する: 質問があれば、弊社の AWS IoT の専門家にご相談ください。
  • コミュニティに参加: AWS IoT コミュニティフォーラムで、経験を共有し、他者から学びましょう。

著者について

Leonardo Fenu はソリューションアーキテクトで、2018年から AWS の顧客が技術をビジネス目標に合わせるのを支援してきました。山でハイキングをしたり家族と過ごしたりしていない時は、ハードウェアやソフトウェアをいじくり回したり、最新のクラウド技術を探求したり、複雑な問題を解決する創造的な方法を見つけたりすることを楽しんでいます。

Edoardo Randazzo は DevOps とクラウドガバナンスを専門とするソリューションアーキテクトです。自由時間には、IoT デバイスを作ったりガジェットをいじったりすることが好きで、それが次の大きなブレークスルーにつながる可能性があるか、単に新しいレゴを買う口実になるかもしれません。

Luca Pallini は AWS のシニアパートナーソリューションアーキテクトで、パートナーが公共部門で優れた成果を上げるのを支援しています。AWS の技術フィールドコミュニティ(TFC)のメンバーとして、特に Oracle Database を中心としたデータベースを専門としています。AWS に入社する前は、データベース設計、アーキテクチャ、クラウド技術で22年以上の経験を積みました。余暇には家族と過ごしたり、ハイキングをしたり、読書をしたり、音楽を聴いたりすることを楽しんでいます。

この記事は Building a connected car physical prototype with AWS IoT services の日本語訳です。

この記事は シニアソリューションアーキテクト渡邊翼が翻訳しました。