AWS IoT TwinMakerを使用してデジタルツインをつくってみた

## はじめに

[SRA Advent Calendar 2022](https://qiita.com/advent-calendar/2022/sra)の19日目です。  
関西事業部の南部です。  
可能な限り誕生日の本日(12/19)に記事を書くようにして早6年。46歳になりました。  
今回は、チームで取り組み、事業部の技術発表会で発表した内容を中心にお届けします。  

## デジタルツインとは  

メタバースと共に様々なところで聞こえてくるようになったので、ご存じの方も多いでしょうが、少しだけ説明すると、  
「デジタルツイン（Digital Twin）」とは、「デジタル空間上の双子」を意味し、 
現実世界の機器や設備の状態を仮想空間のモデルに即時に反映し、仮想空間上に再現する技術のことです。

一般的なデジタル空間上でのシミュレーションとデジタルツインとの特徴の違いは次の2点です。

1. 現実世界との連動している
1. リアルタイム性が高い

⇒ 従来のシミュレーションに比べて、**早くより精度の高い結果を得ることができます。**

ちょっとWebで検索するだけでいろいろな活用例が見つかります。  
- [川崎重工業](https://xtech.nikkei.com/atcl/nxt/column/18/02091/00007/?i_cid=nbpnxt_reco_atype)
- [SIEMENS](https://new.siemens.com/jp/ja/products/automation/industry-software/automation-software/tia-portal/virtual-commissioning.html)
- [立体シャトル自動倉庫](https://prtimes.jp/main/html/rd/p/000000015.000041816.html)
- [PLATEAU](https://www.mlit.go.jp/plateau/)
- [森ビル](https://www.mori.co.jp/company/press/release/2021/03/20210329110000004153.html)

## Y:やったこと

### デモ内容

- 会議室をデジタルツインしてみた

    会議室に設置した人感センサーがONになるとデジタル空間上のセンサーがリアルタイムでONになる  
  　⇒ 現実世界をオペレーターがデジタルツイン上で監視するイメージ

    <img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154223/a274c175-ce38-fced-2446-7e63842dd06b.png">

- デモ動画
    <iframe width="100%" height="490" src="https://www.youtube.com/embed/eLBL4z-5snA" title="Degital Twin Demo" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

    :::note info  
    人を検知していない状態(センサ青)  
    ↓
    人を検知(センサ赤)
    ↓
    人を検知しなくなった(センサ青)
    
    というデモです。リアルタイム性が高いはずが、なんだかもっさりとしたデモになってしまった。

### 作成工程

1. 3Dモデル作成  
    会議室の3Dモデルを作成する。今回は、CAD等を使用せずに動画や写真から作成した。

    1. 3Dモデル用データ収集  
        - 対象物の動画を撮影する(使用機材: iPhone)
        - 対象物を部屋の中心に配置し、1～2分ほどの動画を撮影する
        - 対象物以外のものを映さないよう注意しながら撮影する
        - 撮影する距離感は一定に保つ

        <img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154223/d05d97fa-f1a3-6e23-d8e9-1ea86c95eac8.png">

    1. 画像切り出し	(Screentogif)
        - 撮影した動画から必要な枚数の画像を撮影する
        - 動画に対して1秒当たりの撮影枚数を指定できるので、数秒の動画で大量の画像を用意することが可能

    1. 3Dモデル作成	(Meshroom)
        - Meshroomを実行するためにはNVIDIAのGPUが必須  
            →AWSで構築できる仮想サーバーEC2(Elastic Compute Cloud)で要件を満たした仮想サーバーを構築することが可能(g4.dn系)  
        <img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154223/86a7d246-5708-4c42-db61-8dd404520ed0.png">

    1. 対象切り出し	(blender)
        - 不要な部分(頂点や背景)の削除を行う

        <img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154223/96263858-d815-c2f2-888b-95c0b5e8508e.png">

        - 切り出し結果

        <img width="40%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154223/9ccbe1e5-5295-0861-70e0-2e11de33282c.png">

    :::note info  
    **失敗例**
    - 部屋全体を3Dモデル化しようとした
        <img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154223/63beb5e7-792c-7951-3017-5b60b65a1769.png">

    - 3Dモデル作成結果
    →個別に作成したほうが3Dモデルの完成度は高い
        <img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154223/2202b354-c3b7-ebff-9b83-48bd8f500b0f.png">

1. 情報入力デバイス準備
    現実世界情報を取得するデバイスを用意する。

    - 利用デバイス  
    　　マイコン : M5StickC plus  
    　　人感センサー: M5StickC PIR Hat 

        <img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154223/72efa3be-3e16-24c8-0be4-f9ff6f30c9f9.png">

    1. デバイスの実装
        - ファームウェアの書き込み
            - 書き込みソフトインストール
            - 起動、該当マイコン選択、最新Verを指定し書き込み
            - Wifi Setting で接続先の情報入力

            <img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154223/53911965-f528-31ce-2235-4cc8300deee6.png">

        - センサー処理の書き込み
            - web上で実装(マイコンはPC接続)
            - Run で動作確認、ダウンロードで書き込み
            - **ノーコードプログラミングで実装可能** 

            <img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154223/58d97253-012f-72b4-c40a-2cec93d0845b.png">

    1. デバイスの情報(センサー情報)をクラウドへアップロード
        - メッセージ送受信
            - 実装の指定間隔で通知

            <img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154223/2a8deaa4-4bb9-ad89-7f8a-67ef8711d471.png">

1. デジタルツイン作成
    AWS IoT TwinMaker を使用した。
    
    1. サービス 全体構成  
        すべてAWSサービスで構築できるので構築作業は簡単

        <img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154223/c8dcfdeb-c5af-dd3b-e254-55d4ba418c43.png">

    1. デジタルツインの作成
        - 作成した3Dモデルとセンサー情報表示箇所使用してデジタルツインを作成する
        - 3Dモデルは座標位置や角度等を操作し、自由に設置することができる
        - 作成モデルはすぐGUI上に反映されるため、視覚的にわかりやすい

        <img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154223/ef04d8f4-ab4b-06f0-0f9b-9e54ecb47a40.png">

    1. デジタルツインの提供
        AWS Managed Grafanaを利用することで、Webアプリケーションを作成せずにデジタルツインを利用することができる

        <img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154223/118a7e50-2e37-718e-7abb-b55ffaa1a5d9.png">

## W：わかったこと

### デジタルツイン作成
- 作業はAWSコンソール上の操作で完結するので簡単だった
- 多くのクラウドサービスを利用する必要があった
    ⇒ カスタマイズのためにはIoT関連のサービスについて知識が多く必要だと感じた
- 本来早いはずの現実情報の反映速度が遅かった  
    ⇒ 調査、改善する必要がある

### 3Dモデル作成

- 写真から3Dモデルが手軽に作成できるが、簡単に利用してみるレベルだと結果はかなり悪かった（粗かった）  
    ⇒ デジタルツインを利用した高精度なシミュレータ作成時には、より正確な3Dモデルの作成が必要であると感じた

### 情報入力デバイス準備

- デバイスの実装のお手ごろ感が新鮮だった  
    ⇒ マイコンをPCに接続しweb上でプログラミング後、そのまま動作確認とソフト書き込みを行うことができる

## T：次にすること

画像認識とデジタルツインを組み合わせて何かサービスを検討してみようかと考えています。

## さいごに

目指したものと実際に出来たものに差はあったが、業務では創作出来ないものを実際に作るという体験が出来たのは良かった。  
また実際に動作するものでデモを実施出来たため、技術発表会の参加者によりデジタルツインがどういうものか伝えることが出来たのはよかった。  
これで終わりではなく、これをスタートとして、またチームで取り組んで行きたいと思います。

## 参考URL

- [AWS IoT TwinMakerで自分の部屋のデジタルツインを作ってみた](https://aws.amazon.com/jp/builders-flash/202203/twinmaker-room-visualization/?awsf.filter-name=*all)