夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

SceneUnderstandingを学ぶ MRTKと併用して使用しHoloLens実機で動かす

本日はツールの調査枠です。

SceneUnderstandingに関して調査しています。

〇SceneUnderstandingとは?

SceneUnderstandingはMicrosoftによって提供されているMRTKの拡張ツールで、HoloLensによって取得する空間認識機能を拡張します。

次のGitリポジトリで公開されています。

github.com

旧MixedRealityToolkit(HoloToolkit)では[SpatialUnderstanding]と呼ばれる機能が提供されており、MRTKに同梱されていましたが、MRTKv2移行は2.51現在は別の機能として提供されています。

〇Spatial Mapping(SpatialAwareness)との違い

HoloLensの特徴として[SpatialAwareness(空間認識)]機能があります。

[SceneUnderstanging]も[Spatialmapping]もどちらもHoloLensデバイス自体のセンサーにアクセスしてAPI経由で情報を受けとりますが、二つには次のような違いがあります。

・[SpatialMapping]には検知エリアに制限がありますが、[SceneUnderstanding]には制限がありません。無制限で検出を行えます。

・SpatialMappingに比べ[SceneUnderstanding]は壁や床、オブジェクトを解析することができます。

f:id:Holomoto-Sumire:20201223215028p:plain

前回まででNabMesh-Simpleシーンの機能の解析を行っています。

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

前回はMRTKをSceneUnderstandingのプロジェクトに導入しました。

〇SceneUnderstandingのInputをMRTKで代用する

今回はNavMesh-Simpleシーンで行っていたキーボードのインプットをHoloLensのVoiceInputに切り替えます。

①NavMesh-Simpleシーンのhierarchyウィンドウから[SceneUnderstandingMenu]を選択しinspectorウィンドウから[SampleInputManager]コンポーネントをディアクティブにします。

f:id:Holomoto-Sumire:20201230172636j:plain

[SampleInputManager]コンポーネントはSceneUnderstandingの入力を受け持つコンポーネントです。HoloLens実機では機能しないため残しておいても問題はないとは思いますが、今回はわかりやすくするためにディアクティブにします。

次にMRTKのInputに置き換えます。

②hierarchyウィンドウから[MixedRealityToolkit]オブジェクトを開き、inspectorウィンドウから構成を[DefaultHoloLens2ConfigurationProfile]に変更し[Clone]を押して複製します。

f:id:Holomoto-Sumire:20201230172355j:plain

③サイドタブから[Input]を開き構成を[Clone]します。

f:id:Holomoto-Sumire:20201230172825j:plain

④[Speech]タブを開き[Clone]を行います。

f:id:Holomoto-Sumire:20201230173134j:plain

⑤[+Add a New Speech Command]をクリックして新しいコマンドを作成します。

f:id:Holomoto-Sumire:20201230173329j:plain

⑥作成したコマンドの[KeyWord]に[Go There]を入力し[KeyCord]には[G]を指定します。

f:id:Holomoto-Sumire:20201230173843j:plain

これでUnityEditor内で実行時にGキーを押すことで[Go There]と発話したイベントを発火することができます。

次に発火するイベントを作成します。

⑦hierarchyウィンドウから[SceneUnderstandingMenu]オブジェクトを選択しinspectorウィンドウから[SpeechInputHandler]コンポーネントを加えます。

[SpeechInputHandler]コンポーネントはMRTKで提供されているコンポーネントで音声コマンドに対してのイベントを指定、実行できます。

f:id:Holomoto-Sumire:20201230174341j:plain

⑧[SpeechInputHandler]コンポーネントの[Keyword]に[Go There]を入力します。

f:id:Holomoto-Sumire:20201230174629j:plain

これはこの[SpeechInpuHandler]コンポーネントがどの音声コマンドに対応して発火するかを設定します。

⑨[SpeechInpuHandler]コンポーネントの[response]を次のように設定します。

f:id:Holomoto-Sumire:20201230175001j:plain

・イベントターゲットにhierarchyウィンドウから[NavMesh]オブジェクトを指定します。

・イベントには[SceneUnderstandingPathFindingController.MoveAgent()]を指定します。

〇SceneUnderStandingの機能を理解する

SceneUnderstandingの機能はhierarchyウィンドウから[SceneUnderstandingManager]オブジェクトの[SceneUnderstandingManager]コンポーネントによって処理が開始されます。

今回実機で実行中にSceneUnderstandningの機能を実行するために[SceneUnderstandingManager]コンポーネントをディアクティブに変更します。

f:id:Holomoto-Sumire:20201230230038j:plain

hierarchyウィンドウに[PressableButtonHoloLens2]を配置してpressイベントに[SceneUnderstandingManager]コンポーネントをアクティブにするように設定します。

f:id:Holomoto-Sumire:20201230230230j:plain

実機にデプロイします。

〇HoloLens実機で動かす。

youtu.be

今回ナビメッシュの機能は試すことができませんでした。

SceneUnderstandingで生成された空間メッシュにコライダーが貼られることがなく、もう少し調査が必要そうですが、MRTKとSceneUnderstandingを併用して実機で動かすことができました。