【デモ】HoloLens + Dynamics365 Guides でインクの交換をやってみた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/1447bf7e-dbbe-238d-7988-6833a0b9f0ad.png)
Dynamics365 Guidesでシナリオを作成し、実際にやってみて気づいたこととかあったのでまとめておきます。 

### 【前回】環境構築  
環境構築は先日まとめているのでこちらを参照してください。
基本的には公式のドキュメントを読んでその通りにやっただけです。
[【環境構築】HoloLens + Dynamics365 Guides](https://qiita.com/t-sho/items/4dd8b65ee44182b19849) 

英語より日本語がよいという人はこちらを参考にするのが良いと思います。とても丁寧に書かれているので迷う要素ゼロです。 
[Dynamics 365 Guides Preview Trial の開始手順 (アカウント作成から環境構築、アプリのインストールまで）](http://masashieguchi.hatenablog.com/entry/2019/06/03/224505)

### シナリオ作成  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/94f28c27-7419-8ff9-2467-9822fd8c0975.png)
 
PC側での作業です。StoreからダウンロードしたDynamics365 Guides アプリでシナリオを作成していきます。
今回は保守をイメージしてプリンターのインク交換をシナリオにしてみます。
※家の中にあって、マーカーを張り付けられる大きさで、わりと誰でも作業がイメージしやすいハードウェアを探したらプリンター以外思いつかなかっただけです。

では、早速作っていこうと思います。サインインしたら上記のような画面になるので「Create new Guide」から作成を開始します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/3f8d4b19-75d4-f572-1d13-0062815464c5.png)
名前を入力して、右上の「Next」で次に進みます。作った後で思い出しましたが、preview版では作成した後は名前の変更ができないようなので注意してください。    

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/2ae5886f-5791-f8c7-e460-d3295ae2e303.png)
これは3Dのオブジェクトを配置する際に基準となる位置を決めるものです。  

* Maker：印刷したマーカーを読み取って基準とします。同型の設備がたくさんある場合にお勧めです。  
* MAnual：作業者が基準となる位置を設定します。基準点の微調整が可能だが作業者に位置合わせを任せる必要がある  

今回はマーカーを使うパターンにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/fd87630f-ad19-af61-9c9e-2bb22e062552.png)
「Save to print」でマーカーを印刷します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/c9d7bb6b-c44b-2b77-7e25-9b4d5a73ff2c.png)
実際に印刷されるマーカーのサイズの設定が結構細かいようなのでプリントアウトするときはプリンターの設定に気を付けてください。  
私はEPSON EP-977A3を使っていて、拡大率109%で丁度良いサイズに印刷できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/0d49e8b6-afdb-b08a-02e0-dcc5ab244bf5.png)
今回はこのようにマーカーを印刷してプリンターに貼り付けました。貼り付けてみて思いますが、やっぱりでかい。GAのときはもう少し小さくなるとうれしいかなと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/adefb08d-6d09-5709-9e59-ccd9880722b9.png)
あとは操作をどんどん追加していきます。キャプチャのように作業の1つ1つの工程を並べていきます。この時、一連の操作(ステップ)は横に並べていき、一連の操作の終わりで下の段に移動して作業を縦積みしていきます。
今回は4つの作業に分割しました。

1. 開始  
2. 電源を入れる  
3. インクを交換する  
4. 後処理  

ちなみに、左上のほうに「Save/Refresh」とあるので、こまめに保存しておきましょう。私は2回くらい突然アプリが落ちました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/726b5cde-ee02-ecaf-15e5-6b619d59ddd0.png)
先ほどの一覧から各操作のボックスをクリックするとこのような画面になるので、1つ1つ操作の指示を書いていきます。この時、右下の「Import」をクリックするとローカルのファイルをアップロードできます。  
アップロードしたサービスはCommon Data Service側で保管されているはずです。(自分で確認したわけではないので間違ってたらすみません)

* 3Dモデル  
* 画像  
* 動画  

がアップロード可能です。
※3DモデルはglTF, GLB, FBXフォーマットのみ受け付けるので、それ以外は変換の必要があります。
※プリセットとしてこれだけの3Dパーツは最初から入っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/f40416c4-7f81-0db5-9a98-ab1fe70ab9c9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/3c35d819-ebbc-46bd-8823-b3d0e5cb5bdb.png)
各操作で使用したい画像や3Dモデルは右側のウィンドウからドラッグアンドドロップで持ってくるだけです。画像は「Image or Video」へ、3Dモデルは「3D parts」へ持っていってください。PC側で入れ忘れてもHoloLens側で配置することは可能なので心配しなくてもよいです。ただし、ローカルファイルのインポートだけはPC側で忘れずやってください。

これをすべての操作に対して行えばPC側での作業は終わりです。保存を忘れずに。

### アンカーの設定  
ここからはHoloLens側での設定になります。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">HoloLens側でアプリ立ち上げてアンカーの位置合わせ。<a href="https://twitter.com/hashtag/HoloLens?src=hash&amp;ref_src=twsrc%5Etfw">#HoloLens</a> <a href="https://twitter.com/hashtag/Dynamics365?src=hash&amp;ref_src=twsrc%5Etfw">#Dynamics365</a> <a href="https://twitter.com/hashtag/Guides?src=hash&amp;ref_src=twsrc%5Etfw">#Guides</a><a href="https://t.co/p2MZw7nmuj">https://t.co/p2MZw7nmuj</a></p>&mdash; shota (@Shota7Y) <a href="https://twitter.com/Shota7Y/status/1138651083994124288?ref_src=twsrc%5Etfw">2019年6月12日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


最初にプリンターに貼ったマーカーの検出をして初期位置を確定させます。複数台の同型機でマーカーを使う場合、マーカーを張る位置を間違えないようにしましょう。3Dモデルがずれます。
プリンターに貼ったマーカーをHololensで読み取ると位置が表示されるので、あとは前後の奥行などを微調整します。


<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Dynamics365 Guidesのアンカー設定<a href="https://t.co/SXdiWYbel4">https://t.co/SXdiWYbel4</a><a href="https://twitter.com/hashtag/HoloLens?src=hash&amp;ref_src=twsrc%5Etfw">#HoloLens</a> <a href="https://twitter.com/hashtag/Dynamics365?src=hash&amp;ref_src=twsrc%5Etfw">#Dynamics365</a></p>&mdash; shota (@Shota7Y) <a href="https://twitter.com/Shota7Y/status/1138652245212352512?ref_src=twsrc%5Etfw">2019年6月12日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

アンカーの設置は言葉やキャプチャだとどんな感じで設定していくのか伝わらないと思ったので、こうして動画にしました。
まず、操作が視線カーソル(gaze)で操作可能です。視点を表す白い点が常に正面にあるので、それを使って操作をします。視点カーソルが3Dのオブジェクトにあたると、当たり判定が検出されて3Dモデルを操作したり、次のステップにページ送りをしたりできます。

#### アンカー設置で気づいたこと
* 位置やスケールの微調整が難しい(「あとほんの少し左に…」が結構難しい)  
* アンカーの向きの調整がめんどくさい(Hololens2だともっと直感的に操作可能だがHololens1だと何度もエアタップを駆使しないといけない)  
* 視線カーソル(gaze)だけで操作可能なので楽  
* Unityとスクリプトでがりがりやる必要がないので開発期間を大幅に短縮できる  
* 両手の3Dモデルを配置する際、ある右手と同じスケールかつ同じ向きの3Dモデルを左手としてを複製したい(単純な複製は可能)  
* 四角形のzoneは縦横比を変えられるようになってほしい  

### 実際に作業者として実行してみる  

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Dynamics365 Guidesで作成したシナリオを実際に動かしてみた<a href="https://t.co/qOGc6l7cP5">https://t.co/qOGc6l7cP5</a><a href="https://twitter.com/hashtag/HoloLens?src=hash&amp;ref_src=twsrc%5Etfw">#HoloLens</a> <a href="https://twitter.com/hashtag/Dynamics365?src=hash&amp;ref_src=twsrc%5Etfw">#Dynamics365</a></p>&mdash; shota (@Shota7Y) <a href="https://twitter.com/Shota7Y/status/1138652668178587648?ref_src=twsrc%5Etfw">2019年6月12日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

作成したシナリオを実際に自分で試してみました。これはその時に撮った動画です。
すこし駆け足気味なところはすみません。

#### 実際に作業して気づいたこと  

* マニュアルや3D作業手順書に最適  
* エアタップしなくていいので作業に集中出来る  
* アンカーのサイズは小さめがいい(デフォルトだと大きすぎて邪魔になる)  
* アンカー設置しすぎると逆に邪魔(わかりやすくしたつもりが視界がごちゃごちゃして逆効果)  
* 自分が操作するイメージでアンカーを置くと作業するとき3Dと重なって逆に邪魔になるので向きはずらした方がよい
* 視点が変わると3Dがずれてる(調整あるのみ？)  
* 録画して分かるアンカーのズレ(録画と比較する必要はないかもだが、個人差は確認したほうが良い)

実際に自分で環境を立てて動かしてみるといろんな気づきがあるし、使う上での勘所もなんとなく掴めたかなと思います。

### レポートの出力
Guidesは作業者が各工程でどれくらいのパフォーマンスを出しているか、苦手な工程は何か、という分析を行うためにPower BIへデータを出力できるようになっています。

[Analyze guides created with Dynamics 365 Guides in preview](https://docs.microsoft.com/en-us/dynamics365/mixed-reality/guides/analytics-guide)

~~この手順に沿ってやってみたのですが、残念ながらテンプレートファイルを開いて読み込む際にエラーとなりうまくいきませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/c536b35a-9d9b-a7ee-b302-0411f5e012a9.png)
トレース手順が分からないのでフォーラムに投稿してみようと思います。解決したらそれも記載しようと思います。~~

[Dynamics 365 Guides Forum](https://community.dynamics.com/365/guides/f/dynamics-365-guides-forum/351101/error-when-opening-in-powerbi-to-output-guide-report/956980#956980)にエラーのことを投げたらバグがあったようでテンプレートをアップデートしてくれました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/83374c88-496e-9a8c-2910-8bcf5d8412f5.png)
これでタスクごとにかかった時間がユーザごとに見える化できます。それによってユーザごとに苦手としている作業がわかるのでどんなフォローアップをすればいいのかが分析できるようになったり、フォローアップによって改善がみられたのかどうかといった使い方もできますね。
テンプレートのアップデートをしてくれたことに感謝です。

ここまでで、余計な作業を除いて、実作業2時間くらいです。
実際には、フリーの3Dモデルをネットで探して入れて見たり、色んなアンカーを表示させてみたり、動画を撮ったりなどいろいろやってたので多分トータル5時間くらいは触ってました。(平日夜にやってたので2日間に分かれてます)