Amazon Web Services ブログ

写真測量と AWS IoT TwinMaker によるデジタルツインの構築

この記事は Greg Biegel によって書かれた Building a Digital Twin with Photogrammetry and AWS IoT TwinMaker を翻訳したものです。

はじめに

このブログ記事では、ドローンで撮影した写真を使用して、現実世界の環境の 3D モデルをデジタルツイン内に作成する方法を学びます。デジタルツインは、物理システムを仮想的に表現したもので、定期的にデータで更新され、それらが表すアセットの構造、状態、動作を模倣します。デジタルツインは、複数のデータソースを 1 つの画面でつなぎ、実用的な洞察を提供することで、より迅速かつ適切な意思決定を可能にします。しかし、デジタルツインをゼロから構築して管理するには、時間を要し、複雑で、多大なコストがかかります。さまざまな専門スキルを持つ開発者のチームが協力して、さまざまなソースからのデータを組み合わせた統合ソリューションを構築する必要があるのです。開発者達は、ストリーミングデータからライブで洞察を生成し、状況に応じた視覚化を行って、エンドユーザーをデータに結び付ける必要があります。AWS IoT TwinMaker を使用すると、物理環境のデジタルツインを簡単に作成し、ブラウザを介して大規模で複雑な物理構造をインタラクティブに 3D デジタル表現するアプリケーションを構築できます。

概要

AWS IoT TwinMaker の主な機能の 1 つは、既存の 3D モデル (CAD や BIM モデル、点群スキャンなど) を AWS IoT TwinMaker シーンにインポートし、他のシステムから取得したデータをこのモデル上に重ねることができることです。AWS IoT TwinMaker シーンはリアルタイム WebGL ビューポートを使用しており、glTF 形式をサポートしています。CAD モデルと BIM モデルは設計どおりのアセットの構造を表しますが、そのようなモデルが存在しない場合や、構築されたアセットが設計と異なる場合もあります。現在の状態を可能な限り反映した 3D モデルをデジタルツイン内に提供することは重要です。現実世界の 3D モデルを作成するためのメカニズムは数多くありますが、一般的な方法はレーザースキャン写真測量法です。

レーザースキャンでは、物理環境の精度の高い 3D モデルを作成するために、特殊でしばしば高価な機器を使用します。一方、写真測量法は、重なり合った複数の 2D 写真から 3D 情報を抽出する手法で、Structure from Motion (SfM) などのコンピュータービジョン技術が使用されます。

この投稿では、低コストの航空写真プラットフォーム (民生用のクアッドコプター – DJI Phantom 4 Pro) と写真測量法を組み合わせて、AWS IoT TwinMaker で構築された、広範囲にわたるアセットの写実的なモデルを作成する方法にフォーカスします。この方法に従うと、レーザースキャンでは非常に高価または作成が不可能なアセットの 3D モデルをすばやく構築できます。このモデルは、その後のドローンの飛行によって迅速かつ頻繁に更新できるため、デジタルツインが現実を正確に反映していることを確実にできます。説明に先立ち、このモデルでは、絶対的な精度よりも写実性が優先されることに留意してください。

このブログでは、ドローンの自動飛行によって座標情報が組み込まれた写真を撮影する方法についても説明します。その後、それらの画像を写真測量処理パイプラインに送り、AWS IoT TwinMaker での 3D 可視化に利用できるシーンを自動的に作成します。本記事では、人気のオープンソースの写真測量ソフトウェアを使用してデータを glTF 形式に処理し、AWS IoT TwinMaker にインポートします。処理パイプラインは、DroneDeploy や他の写真測量エンジンからエクスポートできる OBJ ファイルもサポートしています。

ソリューションの仕組み

データ収集

写真測量法では、ソースとなる航空写真の性質を利用して効果的な 3D モデルを作成します。これには次のようなものがあります。

  • 画像間の重複度が高い
  • どの写真にも水平線が見えない
  • 直上からと、斜め上からの両方の写真を撮影している
  • 撮影高度は、モデルが必要とする解像度に基づいて設定される

熟練したドローンパイロットが手動で撮影して写真測量を行うことも可能ですが、飛行と撮影を自動化することで、より一貫した結果を得ることができます。飛行計画ツールを使えば、適切な場所、高度、重なり具合の画像を撮影する自律飛行計画を作成して、効果的な写真測量処理を行うことができます。図 1 に示すのは、この記事の画像撮影に使用した、屋内外の視覚データ用の人気のリアリティキャプチャプラットフォームである DroneDeploy の飛行計画作成画面です。

図 1 — DroneDeploy の飛行計画作成画面

DroneDeploy プラットフォームの飛行計画機能と自律運用機能を使用して、AWS IoT TwinMaker でモデル化するアセットを表すデータを撮影しました。対象のアセットは、西オーストラリア州フリーマントルにある廃墟となった発電所です。前のスクリーンショットに示されているように、ドローンは 160 フィートの高さで飛行し、9 分足らずで 6 エーカーのエリアをカバーし、149 枚の画像を撮影しました。図 2 に、ドローンで撮影し、3Dモデル生成に使用した航空写真の例を 2 つ示します。ご覧の通り、画像間の重複度が高いことがわかります。

図2 — 写真測量を効果的に行うための重複度の高い撮影画像

写真測量処理パイプラインのアーキテクチャ

航空写真を撮影したら、それを写真測量エンジンに入力して 3D モデルを作成する必要があります。DroneDeploy は強力な写真測量エンジンを提供しており、図 3 に示すように、作成された 3D モデルを OBJ 形式でエクスポートできます。

図 3 — モデルの出力

人気のオープンソースである OpenDroneMap プラットフォームの NodeODM コンポーネントを活用して、座標情報が組み込まれた画像を完全にサーバーレスで処理する写真測量処理パイプラインを作成しました。パイプラインはコンピューティングに AWS FargateAWS Lambda を活用し、OpenDroneMap によって作成された 3D モデルを含む AWS IoT TwinMaker シーンを出力として作成します。

このパイプラインは、DroneDeploy の写真測量エンジンによって作成された 3D モデルの処理もサポートしており、DroneDeploy からエクスポートされた OBJ ファイルから AWS IoT TwinMaker シーンを作成することもできます。

写真測量処理パイプラインのアーキテクチャを図 4 に示します。

図 4 — パイプラインアーキテクチャ

OpenDroneMap 写真測量処理エンジンを使用したパイプラインを実行するには、次の手順に従います。

  1. Fargate タスクは、docker.io の公開レジストリにある OpenDroneMap の NodeODM イメージを使用して開始されます。
  2. ドローンの飛行で取得した、座標情報が組み込まれた画像のセットが、Amazon S3 に作成したランディングバケットに zip ファイルとしてアップロードされます。
  3. zip ファイルをアップロードすると、データ処理 Lambda の実行をトリガーする Amazon S3 イベント通知が発行されます。
  4. データ処理 Lambda はファイルを解凍し、Fargate で実行されている NodeODM で新しい処理ジョブを開始し、すべての画像を NodeODM タスクにアップロードします。
  5. ステータスチェック Lambda は定期的に NodeODM タスクをポーリングして、処理ジョブの完了を確認します。
  6. NodeODM 処理ジョブが完了すると、ジョブの出力は処理済みファイル用の S3 バケットに保存されます。
  7. 出力された zip ファイルを保存すると、glTF 変換 Lambda をトリガーする Amazon S3 イベント通知が発行されます。
  8. glTF 変換 Lambda は、NodeODM 処理ジョブが出力した OBJ ファイルをバイナリ glTF ファイルに変換し、ワークスペース用の S3 バケットにアップロードします。このバケットは AWS IoT TwinMaker ワークスペースに関連付けられ、CloudFormation スタックによってワークスペースの立ち上げと同時に作成されます。
  9. glTF 変換 Lambdaは、生成した glTF ファイルを使用して AWS IoT TwinMaker ワークスペースに新しいシーンを作成します。

DroneDeploy の写真測量エンジンを使用して 3D モデルを作成する場合は、エクスポートした OBJ zip ファイルを処理済みバケットに直接アップロードすることで、手順 7 〜 9 が上記と同じく実行されます。

写真測量処理パイプラインの実行が完了すると、図 5 に示すように、AWS IoT TwinMaker ワークスペースに対象のアセットについて生成された 3D モデルを含む新しいシーンが作成されます。

図 5 — AWS IoT TwinMaker 上に生成された 3D シーン

導入の前提条件

このブログの手順をセットアップして実行するには、AWS アカウントが必要です。AWS CloudFormation テンプレートは、必要な VPC とネットワーク設定、AWS Lambda 関数、AWS Identity and Access Management (IAM) ロール、Amazon S3 バケット、AWS Fargate タスク、Application Load Balancer、Amazon DynamoDB テーブル、および AWS IoT TwinMaker ワークスペースを設定してインストールします。このテンプレートは、バージニア州北部リージョン (us-east-1) で実行するように設計されています。以下のサービスの一部には費用が発生する可能性があります。

  • Amazon Simple Storage Service (Amazon S3)
  • Amazon DynamoDB
  • Amazon VPC
  • Amazon CloudWatch
  • AWS Lambda における処理関数および変換関数
  • AWS Fargate
  • AWS IoT TwinMaker

導入手順

写真測量処理パイプラインの導入

  1. サンプルの Lambda デプロイパッケージをダウンロードします。このパッケージには、上記のデータ処理 Lambda、ステータスチェック Lambda、および glTF 変換 Lambda のコードが含まれています。
  2. Amazon S3 コンソールに移動します。
  3. S3 バケットを作成します。
  4. ダウンロードした Lambda デプロイパッケージを、前のステップで作成した S3 バケットにアップロードします。ファイルはそのまま zip のままにしておきます。
  5. Lambda デプロイパッケージが S3 に配置されたら、CloudFormation テンプレートを起動します。
  6. スタックのクイック作成」画面の「パラメータ」セクションで、次の操作を行います。
    1. Prefix パラメータに、バケット名のプレフィックスを入力します。このプレフィックスにより、スタックのバケット名がグローバルに一意になります。
    2. DeploymentBucket パラメータに、Lambda デプロイパッケージをアップロードしたバケットの名を入力します。
    3. 大規模なデータセットを処理する場合は、ドキュメントを参照し、リストから適切な値を選んで Fargate タスクの Memory CPU のパラメータを変更してください。
  7. スタックの作成」を選択して、写真測量処理パイプラインのリソースを作成します。
  8. 完了したら、新しい S3 ランディングバケットに移動します。図 6 に示すように、「リソース」タブにリンクがあります。
  9. 画像を含む zip ファイルを S3 バケットにアップロードします。

図 6 — バケットリソースのアップロード

写真測量処理パイプラインの実行

写真測量処理パイプラインは、座標情報が組み込まれた画像を含む zip ファイルをアップロードすると自動的に開始されます。処理ジョブには 1 時間以上かかることがあります (提供された画像の数、Fargate 処理タスクで提供される CPU とメモリによって異なります)。ジョブの進行状況は、ステータスチェック Lambda の Amazon CloudWatch ログ内のステータスを確認することで追跡できます。処理中のジョブがアクティブになると、ステータスチェック Lambda は (5 分間隔の) ジョブ実行時にステータスを出力します。出力には、以下に示すように、処理ジョブの進行状況がパーセンテージ値として含まれます。

図 7 — 写真測量ジョブの進捗状況

3D モデルに基づくデジタルツインの構築

写真測量処理パイプラインが完了し、AWS IoT TwinMaker ワークスペースに新しいシーンが作成されたら、データソースに紐ついたコンポーネントを関連付けことで、3D モデルを使用したデータの視覚的な状態や、データ駆動の条件に基づいた視覚的な手がかりを提供できます。

また、Grafana 用 AWS IoT TwinMaker アプリケーションプラグインを使用してダッシュボードを設定し、デジタルツインを他のユーザーと共有できます。

クリーンアップ

料金が発生しないように、このブログの作業は必ずクリーンアップしてください。終了したら、次の順序でリソースを削除します。

  1. 作成したシーンをすべて AWS IoT TwinMaker ワークスペースから削除します。
  2. ランディングバケット、処理済みバケット、ワークスペース用バケット内のすべてのファイルを削除します。
  3. CloudFormation スタックを削除します。

まとめ

このブログでは、オープンソースソフトウェアを介してドローンの画像を 3D モデルに処理できるサーバーレスの写真測量処理パイプラインを作成し、生成された 3D モデルに基づいて AWS IoT TwinMaker シーンを作成しました。さらに、このパイプラインでは、DroneDeploy が提供しているものなど、他の写真測量エンジンで作成され、OBJ 形式でエクスポートされた 3D モデルを処理できます。パイプラインはドローン画像の処理を実証するために使用されていますが、座標情報が組み込まれた画像データならなんでも処理することができます。民生用のハードウェアのみを使用して、現実世界の大規模なアセットの写実的な 3D モデルをすばやく作成できることにより、データソースと紐つけて他のユーザーと共有できる最新のモデルを維持できるため、ユーザーはリッチな視覚情報とともに表示されたデータに基づいて意思決定を行うことができます。このブログで説明されているパイプラインは、GitHub リポジトリで公開されています。

これで、ビジュアルアセットを用意することができました。組み込みコネクタや、AWS IoT TwinMaker のユーザーガイドで説明されているように独自のコネクタを作成することで、さまざまなソースから取得した現実世界のデータと組み合わせることができます。


著者について


Greg Biegel は、西オーストラリア州パースにある AWS プロフェッショナルサービスのシニアクラウドアーキテクトです。彼は、鉱業、エネルギー、産業分野のお客様と協力して貴重なビジネス成果を達成できるよう支援することに時間を費やすのが大好きです。ダブリンのトリニティ・カレッジで博士号を取得し、ソフトウェア開発で 20 年以上の経験があります。

この記事はソリューションアーキテクトの岡本晋太朗が翻訳しました。