yotiky Tech Blog

とあるエンジニアの備忘録

Azure Spatial Anchors と HoloLens 単体で利用した話

Azure Spatial Anchors については、こちらの記事が非常に詳細にまとめられている。

qiita.com

全体を一度読むことをおすすめするが、Azure Spatial Anchorsの概要だけであれば「空間アンカー(Spatial Anchors)は何ができるのか?」と「物理空間とアンカーの座標マップの仕組み」を読むと良い。

目次

まとめ記事の補足

バイス単体で動かすには、チュートリアルにあるAzure Spatial AnchorsのIDとKeyだけあればOK。

CloudAnchorSessionを使ってAnchorデータを保存するとIdentifierが発行されるので、そのIdentifierを保持しておかないとAnchorデータを読み込んだり削除したりできない。Identifierの一覧を取得するような機能はないようだ。

バイス間で共有するには、このIdentifierをお互い知る必要がある。そのためサンプルプロジェクトには、ASP.NET Core Web アプリが入っている。このWebアプリはIdentifierと自動採番した数字を紐づけて辞書として保持する機能だけが含まれる。Identifierを登録、登録時に採番された番号で再度Identifierを引き出せるというわけ。

さらに、メモリにIdentifierをキャッシュするコードと、CosmosDBに保存して永続化するコードの2種類が用意されている。 (永続化するのにCosmosDBである必要はなさそう。)

AzureSpatialAnchors-HoloLens

サンプルプロジェクトは、AndroidiOS、HoloLens全てに対応するコードが含まれたUnityプロジェクトである。

Azure Spatial AnchorsをHoloLens単体で動かすサンプルプロジェクトを作ってみた。

github.com

プロジェクトを作るに当たりこちらの記事を参考にさせて頂いた。

mtaulty.com

公式チュートリアルに従ってAzure Spatial Anchorsを設定し、IDとKeyを埋めれば動くはず。

なお、他のデバイスと共有するコード、およびシェアリングサービスのコードは含まれていない。

f:id:yotiky:20190517171732p:plain 雑な実装なので簡単な使い方だけ。

  • Sessionボタンでセッションの開始と終了
  • Local Clearボタンでローカルで作成したCubeを削除
  • DownloadボタンでAzureにあるAnchor情報を取得してCubeを表示
  • Cloud ClearボタンでAzureにあるAnchor情報を削除
  • セッション開始したあと、Spatial Mappingのメッシュに対してエアタップするとCubeを作成(ローカル&Azureへ保存)

Azure Spatial Anchorsを使うために必要なコード自体は大したことがなく、ポイントは以下の通り。

  • Sessionを開始、終了する
  • AddARAnchor() でGameObjectにアンカーを追加する
  • CloudSpatialAnchorを生成し、GetNativeAnchorPointer()で取得したポインタとその他必要な設定をする
  • 空間スキャンが足りているか確認する
  • AzureサービスにAnchorを保存し発行されたIdentifierをローカルで保持する
  • AzureサービスからIdentifierを指定してAnchorを取得する

※まだ公式ドキュメントに手順が公開されていないため、正式な手法ではないことはご理解ください。

料金

Azure Spatial Anchors の価格はまだ公表されていない。現在プレビューでこのサービス自体は無料で試せる。

参考までに今回の検証でかかった費用は以下の通り。Azure Spatial Anchors 以外にかかった費用ということになるだろう。

リソースグループを2回ほど作り直したのでCostは3段になっている。CosmosDBのチュートリアルを実施していないので、合計でも1円未満。

f:id:yotiky:20190520111357p:plain

その際のトランザクション数だが、最新のリソースグループでの過去1週間のCreatedの数はこんな感じ。合計108?

f:id:yotiky:20190520111409p:plain

[iOS]ブラウザで開いているページをesaのコメント欄に書き込む

iOS 12.0以降で使える「ショートカット」アプリのレシピを作ったので使ってみたい方はリンクからどうぞ。

esa にあげる

セットアップ

  1. 「ショートカット」アプリがない場合はストアからインストール
  2. URLからレシピを入手

    f:id:yotiky:20190514085502j:plain:w360

  3. esa でwriteの権限のあるアクセストークンを発行
    Settings > Applications 内

  4. 「ショートカット」アプリからレシピを開いて、必要な設定を書き換える
    1. 辞書は、1列目(title 1)に任意のタイトル、2列目(post_number 1)に投稿したいesaの記事のPOST番号を入れる
      f:id:yotiky:20190514083957j:plain:w360
      こうすると実行時に投稿先を選択できるので、URLを分類してesaに紐付けることができる。

    2. テキスト(team name)に、esaのチーム名を入力

    3. テキスト(access_token)に、esaで発行したアクセストークンを入力

使い方

ブラウザから共有でショートカットを選択し、「esa にあげる」のレシピを実行する。

f:id:yotiky:20190514085954j:plain:w360

投稿先の記事のコメントにはこんな感じで書き込まれる。
テキスト選択して共有すると選択したテキスト部分も追記してくれる。

f:id:yotiky:20190514083951p:plain

Dynamics 365 Guides in preview Exampleの和訳

Dynamics 365 Guides in preview に同梱されているサンプルシナリオ(Guidesの使い方を説明する内容のもの)を、機械翻訳で和訳したコピーシナリオを作ったので並べておきます。

Guides を使ってみたい方は下記より参考リンクを参照してください。

yotiky.hatenablog.com

目次

1.Welcome to Guides!

オリジナル 和訳
f:id:yotiky:20190509233326p:plain:w480 f:id:yotiky:20190509234517p:plain:w480
f:id:yotiky:20190509233513p:plain:w480 f:id:yotiky:20190509234524p:plain:w480
f:id:yotiky:20190509233633p:plain:w480 f:id:yotiky:20190509234531p:plain:w480

2.What is the step card?

オリジナル 和訳
f:id:yotiky:20190509233639p:plain:w480 f:id:yotiky:20190509234538p:plain:w480
f:id:yotiky:20190509233647p:plain:w480 f:id:yotiky:20190509234546p:plain:w480
f:id:yotiky:20190509233656p:plain:w480 f:id:yotiky:20190509234553p:plain:w480
f:id:yotiky:20190509233702p:plain:w480 f:id:yotiky:20190509234559p:plain:w480
f:id:yotiky:20190509233709p:plain:w480 f:id:yotiky:20190509234606p:plain:w480
f:id:yotiky:20190509233715p:plain:w480 f:id:yotiky:20190509234614p:plain:w480
f:id:yotiky:20190509233723p:plain:w480 f:id:yotiky:20190509234620p:plain:w480

3.What is the tether?

オリジナル 和訳
f:id:yotiky:20190509233728p:plain:w480 f:id:yotiky:20190509234630p:plain:w480
f:id:yotiky:20190509233734p:plain:w480 f:id:yotiky:20190509234637p:plain:w480
f:id:yotiky:20190509233742p:plain:w480 f:id:yotiky:20190509234645p:plain:w480
f:id:yotiky:20190509233748p:plain:w480 f:id:yotiky:20190509234652p:plain:w480
f:id:yotiky:20190509233755p:plain:w480 f:id:yotiky:20190509234658p:plain:w480

4.3D Content

オリジナル 和訳
f:id:yotiky:20190509233802p:plain:w480 f:id:yotiky:20190509234706p:plain:w480
f:id:yotiky:20190509233809p:plain:w480 f:id:yotiky:20190509234712p:plain:w480
f:id:yotiky:20190509233817p:plain:w480 f:id:yotiky:20190509234718p:plain:w480
f:id:yotiky:20190509233824p:plain:w480 f:id:yotiky:20190509234725p:plain:w480
f:id:yotiky:20190509233830p:plain:w480 f:id:yotiky:20190509234732p:plain:w480
f:id:yotiky:20190509233836p:plain:w480 f:id:yotiky:20190509234739p:plain:w480
f:id:yotiky:20190509233843p:plain:w480 f:id:yotiky:20190509234745p:plain:w480
f:id:yotiky:20190509233850p:plain:w480 f:id:yotiky:20190509234751p:plain:w480
f:id:yotiky:20190509233859p:plain:w480 f:id:yotiky:20190509234758p:plain:w480
f:id:yotiky:20190509233906p:plain:w480 f:id:yotiky:20190509234805p:plain:w480
f:id:yotiky:20190509233912p:plain:w480 f:id:yotiky:20190509234821p:plain:w480
f:id:yotiky:20190509233919p:plain:w480 f:id:yotiky:20190509234828p:plain:w480
f:id:yotiky:20190509233925p:plain:w480 f:id:yotiky:20190509234835p:plain:w480
f:id:yotiky:20190509233933p:plain:w480 f:id:yotiky:20190509234843p:plain:w480
f:id:yotiky:20190509233939p:plain:w480 f:id:yotiky:20190509234849p:plain:w480
f:id:yotiky:20190509233946p:plain:w480 f:id:yotiky:20190509234855p:plain:w480
f:id:yotiky:20190509233952p:plain:w480 f:id:yotiky:20190509234901p:plain:w480

5.Features to know

オリジナル 和訳
f:id:yotiky:20190509234000p:plain:w480 f:id:yotiky:20190509234907p:plain:w480
f:id:yotiky:20190509234006p:plain:w480 f:id:yotiky:20190509234914p:plain:w480
f:id:yotiky:20190509234013p:plain:w480 f:id:yotiky:20190509234921p:plain:w480
f:id:yotiky:20190509234019p:plain:w480 f:id:yotiky:20190509234928p:plain:w480
f:id:yotiky:20190509234026p:plain:w480 f:id:yotiky:20190509234935p:plain:w480
f:id:yotiky:20190509234035p:plain:w480 f:id:yotiky:20190509234943p:plain:w480
f:id:yotiky:20190509234041p:plain:w480 f:id:yotiky:20190509234950p:plain:w480
f:id:yotiky:20190509234047p:plain:w480 f:id:yotiky:20190509235002p:plain:w480
f:id:yotiky:20190509234054p:plain:w480 f:id:yotiky:20190509235009p:plain:w480
f:id:yotiky:20190509234102p:plain:w480 f:id:yotiky:20190509235016p:plain:w480
f:id:yotiky:20190509234110p:plain:w480 f:id:yotiky:20190509235022p:plain:w480
f:id:yotiky:20190509234117p:plain:w480 f:id:yotiky:20190509235029p:plain:w480

6.How to build steps

オリジナル 和訳
f:id:yotiky:20190509234123p:plain:w480 f:id:yotiky:20190509235035p:plain:w480
f:id:yotiky:20190509234131p:plain:w480 f:id:yotiky:20190509235045p:plain:w480
f:id:yotiky:20190509234143p:plain:w480 f:id:yotiky:20190509235052p:plain:w480
f:id:yotiky:20190509234154p:plain:w480 f:id:yotiky:20190509235059p:plain:w480
f:id:yotiky:20190509234200p:plain:w480 f:id:yotiky:20190509235109p:plain:w480
f:id:yotiky:20190509234207p:plain:w480 f:id:yotiky:20190509235115p:plain:w480
f:id:yotiky:20190509234215p:plain:w480 f:id:yotiky:20190509235122p:plain:w480
f:id:yotiky:20190509234222p:plain:w480 f:id:yotiky:20190509235129p:plain:w480
f:id:yotiky:20190509234229p:plain:w480 f:id:yotiky:20190509235136p:plain:w480

7.Authoring tips and tricks

オリジナル 和訳
f:id:yotiky:20190509234238p:plain:w480 f:id:yotiky:20190509235144p:plain:w480
f:id:yotiky:20190509234246p:plain:w480 f:id:yotiky:20190509235150p:plain:w480
f:id:yotiky:20190509234257p:plain:w480 f:id:yotiky:20190509235156p:plain:w480
f:id:yotiky:20190509234304p:plain:w480 f:id:yotiky:20190509235203p:plain:w480
f:id:yotiky:20190509234312p:plain:w480 f:id:yotiky:20190509235209p:plain:w480

Completion

オリジナル 和訳
f:id:yotiky:20190509234319p:plain:w480 f:id:yotiky:20190509235215p:plain:w480

おまけ

PC Application

f:id:yotiky:20190510075250p:plain f:id:yotiky:20190510075307p:plain f:id:yotiky:20190510075324p:plain f:id:yotiky:20190510075339p:plain

f:id:yotiky:20190510075418p:plain f:id:yotiky:20190510075404p:plain f:id:yotiky:20190510075433p:plain

3D toolkit

組み込みの3Dオブジェクト 一覧

Markers f:id:yotiky:20190510074912p:plain

Arrows f:id:yotiky:20190510074943p:plain f:id:yotiky:20190510074939p:plain

Generic Tools f:id:yotiky:20190510075031p:plain

Hands f:id:yotiky:20190510075041p:plain f:id:yotiky:20190510075044p:plain

Numbers f:id:yotiky:20190510075118p:plain

Symbols f:id:yotiky:20190510075125p:plain

Zones f:id:yotiky:20190510075132p:plain f:id:yotiky:20190510075136p:plain

Dynamics 365 Guides in preview

Dynamics 365 Guides in preview を試してみたので、作業時に参照したドキュメントのリンク集です。(詳細はそのうちどこかから公開されるはず)

検証環境はHoloLens1です。

previewに同梱されているExampleについては以下も参考にしてください。

yotiky.hatenablog.com

目次

Official Documents

Overview

Overview of Dynamics 365 Guides in preview

  • スライド式のテキストカードでナビゲーション
  • 画像とビデオ、3Dホログラフィックでの補足
  • PC Applicationでシナリオの作成、HoloLensで配置
  • Power BIでGuidesの使用状況のレポート

Sign up

Sign up for Dynamics 365 Guides in preview

Authoring overview

Overview of authoring in Dynamics 365 Guides in preview

Before you start authoring a guide in Dynamics 365 Guides in preview

Author in the PC application

Use the PC authoring application to create a guide in Dynamics 365 Guides in preview

Test and place holograms with the HoloLens application

Test and place holograms using HoloLens Author mode (Dynamics 365 Guides in preview)

Operator's manual

Operator's manual for Dynamics 365 Guides in preview

Analyze your guides

Overview of Guides Analytics, Power BI reports for Dynamics 365 Guides in preview

『MVP4U』の概念のポイント

MVP

  • ベースはMV(R)P
  • Model(以下M)とView(以下V)の責務を別ける
  • Presenter(以下P)は薄く、MとVを糊付けする程度の責務(主にRxで伝搬)
  • View[V]はコンポーネントを束ねPに対するインターフェースを担う
  • Usecase[M]はモデルを束ねPに対するインターフェースを担う
  • ComponentはアタッチしたGameObject自体に作用するもの
  • FrontOrchestratorはアタッチしたGameObjectに影響しないもので、Component同士の連携をサポートする
    • ComponentOrchestrator、CompositeComponent
    • 従来~Manager、~Contorollerと定義しがちだったものはこの辺に来ることが多い
  • Component/FrontOrcastraorで階層を作ることでヒエラルキーのGameObjectとScriptの階層がある程度似たような構造になる
  • データ、処理がUI/UXに作用させるためだけのものであれば、Component/FrontOrcastraor内で済ませ、P/Mは経由しない

エンジン

  • MVP4Uは舞台をイメージした作り
  • チャプターは暗転してシーンが切り替わるような時の1シーン
  • 登場する人、物が入れ替わる(チャプターを跨いで存在しない)
  • シナリオを通して必要な値はContext(文脈)として保持する
  • エンジンはその辺を動かすための基盤なので無くても良い
  • 代わりにチャプターを切り替える仕組みが欲しいところ
  • Scene遷移では新たシナリオ(台本)に替えて舞台を改めて始める、そのための仕組みが欲しいところ

初期化順序

  • 初期化の手綱をゲームループから奪還して手中に収める
  • ゲームループからのエントリーポイントを1箇所に限定する
  • それを起点に必要な初期化はスクリプト内で伝播させる
  • 影響範囲が局所的で狭いComponentは、Startなどで処理しこの伝播に乗らなくて良い

Unityへの依存

  • Clean Architectureを目指すならUnityに依存するのはVまで
  • MVP4UはClean Architectureを目指さないので全体でUnityに依存してもOK
  • MonoBehaviorを継承するのはVとPまで
    • Pを含めるのは初期化順を制御したい
    • MでWebアクセスUnityのクラスを使う場合は、UniRxのObservable.FromCoroutineを使ってMonoBehaviourは継承しない

適用するプロジェクト

  • 2人以上、開発3ヶ月以上、リリース後もアップデートして運用を続けるなどに該当する
  • これに満たないものへ適用するのはコスパが悪そう
  • これ以下、もしくはサンプルやプロトタイピング
    • VMの2層+Component/FrontOchestratorあたりを意識しながら作ると後で応用しやすい
    • Mでは、主に外部アクセスを切り出しておく
    • Component/FrontOchestratorでは、初期化をコントロールしやすいようにしておく
    • 加えてヒエラルキーのオブジェクトツリーとソースコードの親子関係をある程度一致させておく

HoloLens の Windows のバージョン

HoloLens の Windows のバージョン

2018/10 : RS5

  • 名称:October 2018 Update
  • バージョン:1809
  • HoloLens
  • Desktop
    • Windows 10 October 2018 Update (10.0.17763.107)
  • Windows 10 SDK Version 1809

2018/04 : RS4

  • 名称:April 2018 Update
  • バージョン:1803
  • HoloLens
  • Desktop
    • Windows 10 April 2018 Update (10.0.17134.1)
  • Windows 10 SDK Version 1803

2017/10 : RS3

  • 名称:Fall Creators Update
  • バージョン:1709
  • HoloLens
  • Desktop
    • Windows 10 Desktop October 2017 (10.0.16299.15, Windows 10 Fall Creators Update)
  • Windows SDK (バージョン 10.0.16299.91)

2016/08 : RS1

  • 名称:Anniversary Update (Release)
  • バージョン:1607
  • Windows Holographic August 2016 Update (10.0.14393.0, Windows 10 Anniversary Release) / Release notes
  • Windows 10 SDK (バージョン 10.0.14393.795)

2016/05

2016/03

各バージョンでの新機能

※Relese notesにも詳細がある

RS5

RS4

参考リンク

HoloLens2 これまでのまとめ

2019/03/05時点の目に止まった内容をまとめています。ご参考程度に。
引用お断りなどありましたらご連絡頂けますと対応させて頂きます。

目次

サマリー

HoloLens 2

  • 視野角対角で2倍、片目2K、ピクセル密度2倍以上
    • 視野角非公式情報
      • HL1:30°x17.5° (水平35°とも)
      • HL2:43°x29° (水平52°とも)
    • 解像度(視野1度あたり)
      • HL1 : 23ドット
      • HL2 : 47ドット
    • アスペクト比
      • HL1 : 16:9
      • HL2 : 3:2
  • アイトラッキング
    • 視線による操作(精度高くない)や採虹彩認証によるログイン
  • 両手の指まで認識
    • ものを掴む、ボタンを押す、スライダーをつまむ、ピアノを弾く
  • グラス部分を開閉できるフリップアップ機能
  • クリッカーは無くなる
  • ヘッドバンドはある
  • 前面と後頭部に重量を分散し、バランスをよくして装着感向上
  • ヘルメットとドッキングできるカスタマイズを用意
  • Layout / Remote Assist / Guides がDynamics365で提供される
  • Azure連携の強化
  • オープンプラットフォーム
    • ストア : MSのストア以外に Stream のようなプラットフォームで配信
    • ブラウザ : Firefox 対応予定
    • プラットフォーム : Unreal Engine 4 対応予定
  • devはなくcomのみな扱い
  • 価格
    • 単体買い切り3,500ドル
    • リモートアシスタントツールがセットになったパッケージは、125ドル/月のサブスクリプション
  • 発売日は未定(年内か)
  • 日本も初回出荷対象
    • 日本のプレオーダーページは削除されている
  • スペック
    • ディスプレイ方式が、LCOS->MEMSに、最大光度がより明るく、同じ明るさをより省電力に?
    • センサー類は主に4つ。加速度センサー、角速度センサー、磁気センサー、そしてAzure Kinectセンサー(あとマイクも5つ)
    • HL1はAtom+HPU、HL2はARM系のSnapdragon850+HPU2.0
    • HPUは、HoloLens・MR・空間コンピューティングのために生まれたカスタム・シリコン・チップ
    • カーボンファイバー
    • Foveated Rendering(視線の中心以外をテキトーに表示)は不明
    • カメラは2MPから8MP、動画は720pから1080pへ
    • Wifi802.11acの2x2MIMO
    • Bluetoothは5.0
    • バッテリーは2~3時間、USB-TypeCで急速充電に期待

Azure Kinect

公式リンク

情報サイト

補足

技術情報

公式リンク

今後のロードマップ

f:id:yotiky:20190305202631p:plain

出典元はこちら

  • 移植GuideとMRTK2は3~5月
  • オープンソース向けは3~6月
  • HL2の設計開発ガイダンスとHL2用MRTKの新機能プレビューは4月
  • UEは5月

カメラ性能

HL1 f:id:yotiky:20190305202714p:plain

HL2 f:id:yotiky:20190305202659p:plain

出典元はこちら

静止画で言うと、解像度上がってるけど水平視野角は67degから64degに下がってる。

Azure Spatial Anchors