Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Azure Digital Twins と Azure SignalR Service を使って IoT データを Mixed Reality に接続する

Azure Digital Twins と Azure SignalR Service を使って IoT データを Mixed Reality に接続する

堀尾風仁 Futo Horio

April 28, 2023
Tweet

More Decks by 堀尾風仁 Futo Horio

Other Decks in Technology

Transcript

  1. Azure Digital Twins と Azure SignalR Service を使って IoT データを

    Mixed Reality に接続する #QiitaNight 株式会社神戸デジタル・ラボ 堀尾 風仁 / Futo Horio Qiita Night ~Azure~ 入門編
  2. 堀 尾 風 仁 株 式 会 社 神 戸

    デ ジ タ ル ・ ラ ボ コ ミ ュ ニ テ ィ 運 営 ・ H o l o M a g i c i a n s M i c r o s o f t M V P f o r M i x e d R e a l i t y Twitter アカウント @Futo_Horio 好 き な A z u r e サ ー ビ ス
  3. 本日お話すること IoT デバイスから送信されたテレメトリデータを Azure を使って Unity アプリケーションにリアルタイムにストリーム配信する仕組みについて 画像引用元: http://tech-pic.com/materials/13/24/307 1

    2 HoloLens 2 IoT デバイス (シミュレーター) IoT デバイスからテレメトリデータを送信 Azure サービスでデータを受信 & 処理 クライアントアプリにリアルタイム送信 2 1 3 3
  4. Azure Digital Twins と Unity を使用して Mixed Reality デジタルツインを構築する IoT

    データを HoloLens 2 上にリアルタイムストリーム配信をする Azure サービス構成を手軽に試すことができる https://learn.microsoft.com/ja-jp/training/paths/build-mixed-reality-azure-digital-twins-unity/
  5. Azure リソースデプロイ方法 Microsoft Learn の中でどのように Azure リソースがデプロイされているのか? PS > az

    deployment group create -f azuredeploy.bicep -g ${projectname}-rg ¥ --parameters projectName=${projectname} userId=${userid} appRegObjectId=${objectid} ¥ > ARM_deployment_out.txt PS > az group create --name ${projectname}-rg --location eastus 2. 作成したリソースグループへ 必要な Azure リソースをデプロイ 1. リソースグループの新規作成
  6. Bicep とは ARMテンプレート (Bicep) ARMテンプレート (JSON) Azure Resource Manager (ARM)

    トランスパイル (変換) ・Azure リソースを宣言型の構文を用いてデプロイするためのドメイン固有言語 ( DSL ) ・ARM テンプレート (JSON) と同等の内容をより簡潔に記述することが可能 ・Bicep は ARM テンプレート (JSON) へトランスパイルされた後、実行される ( e.g. TypeScript -> JavaScript ) Azure/bicep (GitHub) : https://github.com/Azure/bicep
  7. Bicep とは 実際に Bicep ファイルの中身を覗いてみよう! // ターゲットスコープ TargetScope = ‘resourceGroup’

    // パラメーター (実行時に指定) param storageSKU string = ‘StandardLRS’ // 変数 var uniqueStorageName = ‘qiitaNightAzureStorage’ // リソース宣言 resource <symbolic-name> ‘<full-type-name>@<api-version>’ = { <resource-properties> } ※ Symbolic-name (シンボリック名) は Azure リソース名ではなく、 Bicep ファイル内の他のリソースから参照する際に使用する名前です。
  8. Azure インフラ構成 Bicep を使ってデプロイされた Azure リソースの構成 リソースグループ ロケーション: eastus Azure

    IoT Hub Event Grid SignalR Service Serverless Function App broadcast negotiate telemetryfunction Azure Digital Twins T98 T99 T100 T101 T102 T103 T104 T105 T106 T107 Event Grid システムトピック Event Grid トピック Azure AD App Insights ユーザー Azure Digital Twins データ所有者 アプリケーション (サービスプリンシパル) Azure Digital Twins データ所有者 デプロイ関連 マネージドID (ユーザー割り当て) Azure Container Instance デプロイスクリプト postdeploy.sh を実行 ・リソースグループ所有者 ・Azure Digital Twins データ所有者 ・ストレージ BLOB データ共同作成者 Azure Storage Account bladeremoteassets IoT デバイス HoloLens 2 画像引用元: http://tech-pic.com/materials/13/24/307
  9. Azure インフラ構成 Azure 各サービスの役割を整理してみる ・デバイスの管理 (デバイスツイン/モジュールツイン) ・テレメトリーデータの受信 ・IoT Hub、Azure Digital

    Twins のイベントの検出 ・テレメトリデータのストリーム配信 ・デジタルツインの作成 ・テレメトリデータの格納 ・Azure Digital Twins のデータ更新 ・SignalR Service へのテレメトリデータ送信 ・SignalR Service の認証情報の提供 (negotiate関数) IoT Hub Event Grid Functions Azure Digital Twins SignalR Service
  10. IoT データの流れ(1) IoT デバイス (シミュレーター) から Azure Digital Twins へデータを送信する

    1 2 3 4 シミュレータから Azure IoT Hub へデータを送信 IoT Hub のイベントを Event Grid システムトピックが検出 Event Grid トリガーで telemetryfunction (関数) が実行される Azure Digital Twins のデータが更新される
  11. Azure Digital Twins から SignalR Service へデータをブロードキャストする IoT データの流れ(2) 1

    2 3 Azure Digital Twins のデータ更新イベントを Event Grid トピックで検出 Event Grid トリガーで broadcast (関数) が実行される Azure SignalR Service へ テレメトリーデータをブロードキャスト
  12. Unity アプリから SignalR Service へ接続 & ストリームデータの受信 IoT データの流れ(3) 1

    2 3 Unity アプリから negotiate (関数) を実行 ( POST リクエスト ) SignalR Service のトークン、エンドポイント情報が返却される Azure SignalR Service へ接続 / テレメトリーデータのストリームの受信を開始
  13. broadcast 関数が 10回 実行されているかどうか確認する Azure Portal 上で実際に確認してみる Event Grid データをデシリアライズ化

    (オブジェクト) SignalR Service へメッセージを追加 テレメトリーデータを Dictionary (連想配列) に追加
  14. Azure SignalR Service のメトリックを確認する Azure Portal 上で実際に確認してみる Message Count のメトリックで

    ログを取れると思っていたけど、なぜか取れなかった、、、。 同時刻に OutBound Traffic が発生していたので 何かトラフィックが発生しているのは確か、、。
  15. 参考文献・出典 ・Azure Digital Twins と Unity を使用して Mixed Reality デジタルツインを構築する

    https://learn.microsoft.com/ja-jp/training/paths/build-mixed-reality-azure-digital-twins-unity/ ・MicrosoftDocs/mslearn-mr-adt-in-unity (GitHub) https://github.com/MicrosoftDocs/mslearn-mr-adt-in-unity ・Microsoft Learn 「Azure Digital Twins と Unity を使用して Mixed Reality デジタルツインを構築する」解説(Azure Digital Twins編) (宮浦さんの記事) https://qiita.com/miyaura/items/dc78983d7094038e9f29 本資料作成時に、参考にしたサイト一覧 ・Azure Digital Twins (ADT) を開発する https://microsoftlearning.github.io/AZ-220JA-Microsoft-Azure-IoT-Developer/Instructions/Labs/LAB_AK_19-azure-digital-twins.html
  16. Q & A 個人的に気になった部分の Q & A を作成してみました Q1. なぜ

    SignalR サーバーレスモードでは negotiate 関数が必要なのか? A. Azure SignalR Service のアクセストークン、エンドポイントをクライアントアプリに提供するため Q2. Azure Digital Twins と接続される Event Grid は システムトピックではないのか? A. Event Grid システムトピックが Azure Digital Twins に対応していないため Q3. なぜ IoT デバイスから Azure Digital Twins へ直接データを送信しないのか? A. 直接 Azure Digital Twins へ送ることも可能 デバイスの管理やデータの処理等を考えると IoT Hub や Event Grid を挿む方が便利だから Q4. Azure Digital Twins で過去データ等のグラフ化は可能かどうか? A. Azure Data Explorer (Kusto) を使用すれば可能 Q5. Bicep で デプロイスクリプトを使用してシェルスクリプトを実行する理由は? A. Bicep で実現できるのはリソースの定義がメインで、 デジタルツインの作成や Event Grid のルーティング等の設定を行うための Azure CLI を実行する必要があるため
  17. 補足情報: Azure Digital Twins Azure Digital Twins に格納した IoT データを有効活用するためのツール

    Azure Digital Twins Explorer Azure Data Explorer (Kusto) 3D Scenes Studio リアルタイムの IoT データを可視化・活用するためのツール データ履歴を可視化するツール モデルの定義やデジタルツインの作成、 ツイングラフ等、Azure Digital Twins の 基本的な操作を行えるツール 3Dモデルと Azure Digital Twins のデー タを紐づけ、ビヘイビア (ルール) を定義 することでエラーが発生している箇所に 色付けやウィジェットを作成できるツール Azure Digital Twins のデータ変更履歴を Event Grid 経由で受け取り、時系列での データ履歴を確認できるツール