MRが楽しい

MRやVRについて学習したことを書き残す

HoloLens2-ResearchMode-UnityでIMUセンサ(加速度計/ジャイロ/磁力計)の情報を取得する

本日は HoloLens2 の技術調査枠です。
HoloLens2-ResearchMode-UnityにIMUセンサのAPIを追加したので利用手順を記事にします。
f:id:bluebirdofoz:20210726050036j:plain

HoloLens2のIMU情報

HoloLens2 の ResearchMode では、加速度計、ジャイロ、磁力計の3種類の IMU センサ情報が取得可能です。
docs.microsoft.com

今回はこれらのセンサ情報の取得 API を HoloLens2-ResearchMode-Unity のプラグインに追加し、Unity プロジェクトから利用してみました。
github.com

前提条件

HoloLens2 で ResearchMode が有効である必要があります。
ResearchMode を有効にする手順は以下の記事を参照ください。
bluebirdofoz.hatenablog.com

公開リポジトリ

現在は以下の fork リポジトリにブランチを作成して公開しています。
github.com

前回の遠距離(LongThrow)Depthセンサと同様にプルリクエストを実施予定です。

プロジェクトのダウンロード

以下のリポジトリの Add_IMUSensorAPI ブランチを開きます。
github.com
f:id:bluebirdofoz:20210726050158j:plain

Add_IMUSensorAPI ブランチに切り替えたら[Download ZIP]でプロジェクトを取得します。
f:id:bluebirdofoz:20210726050209j:plain

ダウンロードした zip ファイルを展開します。
f:id:bluebirdofoz:20210726050220j:plain

パスの長さが一定以上になると FileNotFound のエラーが発生することがあります。
この方法でプロジェクトを取得した場合は、ファイルパスが短くなるように変更することをお勧めします。
f:id:bluebirdofoz:20210726050230j:plain

IMUセンサ取得のサンプルシーン

プロジェクト直下の UnitySample フォルダを Unity で開きます。
f:id:bluebirdofoz:20210726050242j:plain

IMU センサ情報の取得サンプルの ImuViewSample シーンを開きます。
・Assets/Scenes/ImuViewSample.unity
f:id:bluebirdofoz:20210726050252j:plain

加速度計、ジャイロ、磁力計の情報を取得するためのサンプルコードは ResearchModeImuStream.cs を参照ください。
・Assets/Scripts/ResearchModeImuStream.cs
f:id:bluebirdofoz:20210726050302j:plain

[File -> Build Settings..]を開きます。
デフォルトでは PointCloudSample シーンが選択されているので[Add Open Scenes]で ImuViewSample シーンを追加し、こちらをビルドシーンに切り替えます。
f:id:bluebirdofoz:20210726050312j:plain

HoloLens2 にインストールするため、[UniversalWindowsPlatform]に[Switch Platform]で切り替えます。
f:id:bluebirdofoz:20210726050321j:plain

[Build]を実行し、出力された VisualStduio ソリューションファイルを開きます。
f:id:bluebirdofoz:20210726050332j:plain

Package.appxmanifestファイルの編集とインストール

ビルド設定を[Release][ARM64]に設定します。
プラグインは[ARM64]ビルドで作成されているため、[ARM]では動作しません。
f:id:bluebirdofoz:20210726050402j:plain

次にアプリケーションにセンサを参照する権限を与えるため、manifest ファイルを編集します。
ソリューションから Package.appxmanifest をXML(テキスト)エディターで開きます。
f:id:bluebirdofoz:20210726050412j:plain

IMU センサを参照する場合は[Capabilities]タグ内に[DeviceCapability Name="backgroundSpatialPerception"]の設定を追記します。

<DeviceCapability Name="backgroundSpatialPerception" />

f:id:bluebirdofoz:20210726050423j:plain

インストール先に HoloLens2 のIPアドレスの[リモートコンピュータ]または、USB接続をして[デバイス]を指定します。
メニューから[デバッグ -> デバッグなしで開始]を実行してビルドと HoloLens2 へのインストールを行います。
f:id:bluebirdofoz:20210726050434j:plain

HoloLens2上での動作確認

センサのアクセス許可を設定する初回起動時は正常に動作しないため、一度アクセス許可を設定した後、アプリを完全に終了して再起動します。
正常に動作すると、加速度計、ジャイロ、磁力計のリアルタイムの取得値がテキストに表示されます。
下部に表示される2つの3Dオブジェクトは、左側が加速度計のベクトルを、右側がジャイロの回転を視覚化しています。
f:id:bluebirdofoz:20210726050508j:plain

カメラセンサ情報を同時に取得する場合(Tips)

IMU センサ情報の取得のための Capability と、Depth などのカメラセンサ情報の取得のための Capability は異なります。
同時に Depth センサの情報も取得する場合は Package.appxmanifest に以下の追加の権限設定が必要です。

[Package]タグの[xmlns:mobile]の後に、以下の[xmlns:rescap]の設定を追記します。

xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"

f:id:bluebirdofoz:20210726050446j:plain

[Capabilities]タグ内に[rescap:Capability Name="perceptionSensorsExperimental"]の設定を追記します。

<rescap:Capability Name="perceptionSensorsExperimental"/>

f:id:bluebirdofoz:20210726050456j:plain

こちらの詳細は以下の記事を参照ください。
bluebirdofoz.hatenablog.com