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~
    入門編

    View Slide

  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 サ ー ビ ス

    View Slide

  3. 本日お話すること
    IoT デバイスから送信されたテレメトリデータを Azure を使って Unity アプリケーションにリアルタイムにストリーム配信する仕組みについて
    画像引用元: http://tech-pic.com/materials/13/24/307

    2
    HoloLens 2
    IoT デバイス
    (シミュレーター)
    IoT デバイスからテレメトリデータを送信
    Azure サービスでデータを受信 & 処理
    クライアントアプリにリアルタイム送信



    3

    View Slide

  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/

    View Slide

  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. リソースグループの新規作成

    View Slide

  6. View Slide

  7. なんかよく分からんけど、
    それっぽい構成がデプロイされてる

    View Slide

  8. 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

    View Slide

  9. Bicep とは
    実際に Bicep ファイルの中身を覗いてみよう!
    // ターゲットスコープ
    TargetScope = ‘resourceGroup’
    // パラメーター (実行時に指定)
    param storageSKU string = ‘StandardLRS’
    // 変数
    var uniqueStorageName = ‘qiitaNightAzureStorage’
    // リソース宣言
    resource ‘@’ = {

    }
    ※ Symbolic-name (シンボリック名) は Azure リソース名ではなく、
    Bicep ファイル内の他のリソースから参照する際に使用する名前です。

    View Slide

  10. 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

    View Slide

  11. 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

    View Slide

  12. IoT データの流れ(1)
    IoT デバイス (シミュレーター) から Azure Digital Twins へデータを送信する




    シミュレータから Azure IoT Hub へデータを送信
    IoT Hub のイベントを Event Grid システムトピックが検出
    Event Grid トリガーで telemetryfunction (関数) が実行される
    Azure Digital Twins のデータが更新される

    View Slide

  13. Azure Digital Twins から SignalR Service へデータをブロードキャストする
    IoT データの流れ(2)



    Azure Digital Twins のデータ更新イベントを
    Event Grid トピックで検出
    Event Grid トリガーで broadcast (関数) が実行される
    Azure SignalR Service へ テレメトリーデータをブロードキャスト

    View Slide

  14. Unity アプリから SignalR Service へ接続 & ストリームデータの受信
    IoT データの流れ(3)



    Unity アプリから negotiate (関数) を実行 ( POST リクエスト )
    SignalR Service のトークン、エンドポイント情報が返却される
    Azure SignalR Service へ接続 /
    テレメトリーデータのストリームの受信を開始

    View Slide

  15. Azure Portal 上で実際に確認してみる

    View Slide

  16. IoT Hub にテレメトリデータが届いてるかどうか、Azure IoT Explorer を使ってデータを確認する
    Azure Portal 上で実際に確認してみる
    https://github.com/Azure/azure-iot-explorer
    デバイスシミュレーターからの JSON データの受信を確認

    View Slide

  17. Event Grid システムトピックでイベントが 10回 発行されているか確認する
    Azure Portal 上で実際に確認してみる

    View Slide

  18. telemetryfunction が 10回 実行されているかどうか確認する
    Azure Portal 上で実際に確認してみる
    デバイスメッセージをデシリアライズ化 (オブジェクト)
    テレメトリーデータを Dictionary (連想配列) に格納
    ADT API を使って テレメトリーデータ を
    エンドポイントへ送信

    View Slide

  19. Azure Digital Twins API の操作回数が 10回 になっているか確認する
    Azure Portal 上で実際に確認してみる

    View Slide

  20. Event Grid トピックで 10回 イベントが発行されているか確認する
    Azure Portal 上で実際に確認してみる

    View Slide

  21. broadcast 関数が 10回 実行されているかどうか確認する
    Azure Portal 上で実際に確認してみる
    Event Grid データをデシリアライズ化 (オブジェクト)
    SignalR Service へメッセージを追加
    テレメトリーデータを Dictionary (連想配列) に追加

    View Slide

  22. Azure SignalR Service のメトリックを確認する
    Azure Portal 上で実際に確認してみる
    Message Count のメトリックで
    ログを取れると思っていたけど、なぜか取れなかった、、、。
    同時刻に OutBound Traffic が発生していたので
    何かトラフィックが発生しているのは確か、、。

    View Slide

  23. Unity Editor 上で IoT データの受信を確認できました
    Azure Portal 上で実際に確認してみる
    目視確認で大体1秒から2秒前後でシミュレーターの
    データが Unity アプリに反映されました

    View Slide

  24. 参考文献・出典
    ・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

    View Slide

  25. 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 を実行する必要があるため

    View Slide

  26. 補足情報: 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 経由で受け取り、時系列での
    データ履歴を確認できるツール

    View Slide

  27. Thank you!
    Twitter アカウント
    @Futo_Horio #QiitaNight

    View Slide