Amazon Web Services ブログ

自律走行車の構築 パート 3: 自律走行車の接続

自律走行シリーズ 1 回目のブログでは、Donkey カーの構築と Amazon EC2 インスタンスでパイロットサーバーをデプロイしました。そして、2 回目のブログでは Donkey カーの運転を学び、Donkey カーが自律走行を学びました。今回のブログでは、Donkey カーから AWS にテレメトリをストリーミングするプロセスをご紹介します。スケーラブルで信頼性が高く、当社の接続済み自律走行車など様々な接続済みデバイスに対し多機能な一連のサービスを提供する AWS IoT を使用します。


1) AWS 自律走行車を構築し re:Invent の Robocar Rally でレースに参加
2) 自律走行車の構築 パート 2: 自律走行車の運転
3) 自律走行車の構築 パート 3: 自律走行車の接続
4) 近日中に公開予定


AWS IoT のセットアップ

自律走行車は運転中に絶え間なくテレメトリをストリーミングします。自律走行車が稼働していない場合は収集するテレメトリがないため、リソースを使用しないことで無駄を避けます。ワークロードに対応するため、アーキテクチャ全体の稼働においてはサーバーレステクノロジーに依存します。開始するには、まず AWS IoT を使用してフリートモニタリングサービスを設計します。同じ基本的なアーキテクチャを使用して、その数に制限なく自律走行車に使用できます。次の図はフリートモニタリングサービスのアーキテクチャを示しています。

同ソリューションのコンポーネントは、論理的な機能 (および AWS のサービス) 別に色分けされ、ソリューションの各コンポーネントが安全でスケーラブルであり、完全に使用量ベースであることが示されています。この種のオペレーションモデルは様々なビジネスモデルで役立ち、幅広いサイズの顧客にとっても便利です。週末に趣味で自律走行車をレースしてラップタイムを比較したり、自動車メーカーが独自の接続された車両プラットフォームを開発したい場合でも、AWS IoT は安全でスケーラブルな使用量ベースのコスト構造を提供しています。

このソリューションは緑の網掛け部分の Donkey カーから始めます。次にデータが IoT サービスを通過してピンクのセクションに移動します。このセクションは DynamoDB の短期間用データストレージです。その後、S3 の長期間用ストレージである青のセクションに移動します。また、AWS IoT トピックにあるデータはリアルタイムでクエリすることもできます。次で示したようにダッシュボードを操作するのに使用されます。

Donkey カーはインターネットに接続済みであり、テレメトリを AWS IoT などの一元化された場所にストリーミングできる状態です。テレメトリのセキュリティを確かにするには、AWS IoT サービスからの証明書を生成して Donkey カーにデプロイする必要があります。証明書を使うことで、Donkey カーは MQTT での TLSv1.2 を通じて AWS IoT と安全に通信できます。MQTT は、低信号ネットワークの対応に優れた非常に軽量のプロトコルであり、接続の信頼性の課題に対処できます。

セキュリティに対処する最も簡単な方法として、1-Click 証明書作成方法があります。これを行うには、AWS IoT コンソールを開きます。左のナビゲーションペインで [Security] を選択します。次に [Create] ボタンを選択します。

証明書を作成する

AWS IoT コンソール、AWS IoT API を使用して証明書を作成できます。または、過去のブログで行ったように Raspberry Pi で Amazon EC2 Systems Manager Run Command を使って証明書を生成し配信することもできます。EC2 Systems Manager を使用してこのプロセスを実施することで、Raspberry Pi に手動で証明書をコピーする必要がなくなります。

シンプルさを活かすために、AWS IoT コンソールを使用してこのプロセスを完了させます。

AWS サービスへの特定のアクセス許可を Donkey カーに付与するために使用する新しいポリシーを作成します。これにより、どの AWS IoT トピックがアクセスできるのか、そしてどの IoT アクションを適用するのか、といったこのカー特定の詳細設定を行うことができます。

まず、AWS マネジメントコンソールを開きます。AWS IoT コンソールにアクセスし [Security] を選択したら [Policies] を選びます。続いて、[Create] を選択します。

サービスの全機能の使用を防ぐ必要はないため、このポリシーを使用して AWS IoT サービスに対しすべてのアクションを実施できるように許可します。この権限には iot:Publish、iot:Subscribe、iot:Connect、iot: Receive、iot:UpdateThingShadow、iot:GetThingShadow、iot:DeleteThingShadow が含まれます。

証明書とポリシーのほかに、AWS IoT サービスは Donkey カーを説明するモノを作成する必要があります。これを作成するには、左のナビゲーションペインから [Registry] で [Things] を選択します。次に [Create] を選び、モノに名前を指定して [Create thing] をクリックします。

ポリシーとモノの作成が完了したら、これらを先に作成した証明書と関連付けることができます。これを行うには左側のナビゲーションペインの [Security] と [Certificates] を選択します。先に作成した証明書を探し選択します。[Actions] メニューで [Attach Policy] を選択します。[Actions] メニューで [Attach Thing] を選択します。

AWS IoT ルール

これでテレメトリの生成と通信を行う方法ができました。次にソリューションの残りの機能の構築について説明します。このソリューションは 2 つのルールを呼び出すようになっています。1 つはダッシュボードから Amazon DynamoDB にアクセスするためのもの、そしてもう 1 つはテレメトリのリアルタイム分析を行うために Amazon S3 と Amazon Kinesis Analytics にすべてのテレメトリを分散させる Amazon Kinesis Firehose を対象にしたものです。

DynamoDB ルール

まず、DynamoDB のルール作成から始めます。AWS IoT コンソールの左のナビゲーションペインで [Rules] を選択します。次に [Create] ボタンを選択します。

[Create a rule] ページでルールに名前を指定し、データのタイプとレコードを使用している AWS サービスを簡単に識別できる説明を追加します。

[Add action] を選択し [Split message into multiple columns of a database table (DynamoDBv2)] を選びます。

次に [Configure action] を選択します。

新しいテーブルを作成するか、既存のテーブルを使用することができます。[Create a new resource] を選択して新しいテーブルを作成します。

[Create DynamoDB table] ウィザードの手順に従います。テーブル名は AutonomousVehicles とし、フリート内すべてのカーにおいて固有の vehicleID 属性でプライマリキー (パーティションキー) を設定します。属性時間にソートキーを追加します。これによりクエリの DynamoDB を最も効率的に使用することができます。設定はデフォルトのままにしておきます。1 つのカーからのテレメトリを処理するにはこれで十分です。

DynamoDB がテーブルを作成している間に、TTL 属性をセットして DynamoDB のコストを極めて抑えるようにすることができます。デフォルトで読み込みキャパシティーユニット (5)、書き込みキャパシティーユニット (5) にしておけば、月額料金は約 2.50 USD です。RCU と WCU は手動で上下調整できます。また、Auto Scaling を使用することも可能です。コストを抑えるため、DynamoDB がユーザーが定義した属性をベースにして、アイテムを自動的に期限切れにできるように許可します。今回の例では、テレメトリに TTL タイムスタンプを追加します。Donkey カーで実行する我々のプログラムでは、DynamoDB TTL の属性を現在の Unix タイムスタンプそして 2592000 (30 日) でセットし、これを DynamoDB で保存します。30 日後、DynamoDB が TTL 属性が期限切れになったことを見て自動的にそのアイテムを削除します。

[Continue] を選択して TTL を有効にします。残りの AWS IoT アクションの設定に戻り、ドロップダウンリストからテーブル名を選択します。表示されない場合は更新の矢印をクリックします。次に [Create a new role] を選択し、AutonomousVehiclesDynamoDB またはそれに似た名前を付けます。[Update role] を選び [Add action] を選択します。

選択内容をすべて確認します。準備が完了したら [Create rule] を選択します。

Kinesis Firehose ルール

これと似たステップに従って、Kinesis Firehose にすべてのテレメトリを送信する別のルールを作成します。左のナビゲーションペインで [Rules] を選択します。次に [Create] ボタンを選択します。

[Create a rule] ページでルールに名前を指定し、データのタイプとレコードを使用している AWS サービスを簡単に識別できる説明を追加します。

[Add action] を選択し [Send messages to an Amazon Kinesis Firehose stream] を選びます。

次に [Configure action] を選択します。

新しいストリームを作成するか、既存のストリームを使用することができます。[Create a new resource] を選択して新しいストリームを作成します。

[Create delivery stream] ウィザードに従い、配信ストリームの名前を指定します。[Next] を選択します。

[Next] を選択します。

Amazon S3 が選択されていることを確認します。テレメトリの保存先にしたい S3 バケットとプレフィックスを選択します。

IAM ロールの [Create new, or Choose] を選択します。ドロップダウンリストから [Create a new IAM Role] を選択し、ロール名を指定します。[Allow] を選択します。続いて、[Next] を選択します。

最後に設定内容をすべて確認し [Create delivery stream] を選択します。

[Configure action] 画面に戻り、作成した新しいストリームを選択します。

Amazon Kinesis Firehose ストリームにアクセスするため、AWS IoT が使用する [Create a new role] を選択します。ロールの名前を指定したら [Update role] を選択してから [Add action] を選びます。

すべての設定を確認し、準備ができたら [Create rule] を選択します。

これで AWS IoT サービスの準備が完了し、テレメトリのストリームが来るのを待機している状態になります。AWS IoT はサーバーレスで使用量ベースなので、デプロイや有効にしている状態でコストが発生することはありません。Amazon Kinesis Firehose と Amazon S3 でも、取り込んだデータのボリュームをベースにして料金が決定されるようになっています。これでテレメトリを生成し、AWS IoT コンソールを使用して適切なトピックに送信されているか確認することができます。

また、このテレメトリをほぼリアルタイムで使用できるようにするため、直接 AWS IoT に接続するダッシュボードを構築する方法もあります。Amazon S3 でホストされているダッシュボードの例です。これは完全にサーバーレスであり、内在するウェブサーバーの管理は不要です。IoT テレメトリを視覚化する例については、こちらのチュートリアルをご覧ください。

「エンドツーエンド IoT アプリケーションのデプロイ (Deploy an End-to–End IoT Application)」(pdf)

こちらのブログもご覧ください。

「Amazon Kinesis Analytics と Amazon QuickSight で IoT データの視覚化とモニタリングを構築 (Build a Visualization and Monitoring Dashboard for IoT Data with Amazon Kinesis Analytics and Amazon QuickSight)」

次回のブログでは、この経過と今後の自律走行車について取り上げる予定です。