Help us understand the problem. What is going on with this article?

HoloLens RS5でResearch modeを使う

More than 1 year has passed since last update.

HoloLens Advent Calendar 2018 22日目の記事です。
今回は春に行われたHoloLensのバージョンアップ、RS4で実装されたResearch modeをRS5でも使ってみます。

HoloLens Research modeとは

Windows 10 April 2018 Update(RS4)で実装されたHoloLensの機能。
RS4以降のHoloLensで使用することができ、HoloLens上で使われる各種センサの値を可視化する事ができます。
可視化できるデータには以下のものがあります。

・地図作成と頭部トラッキングに使われる4台の環境認識カメラ
・2種類の深度カメラ (近距離センシング用と遠距離センシング用)
・2種類の赤外線反射データ (IRエミッタから照射される赤外線を使う)

計8種類のセンサデータにアクセスでき、アプリ内に埋め込む事も可能。

※Research modeは研究者などを対象にしたモードであり、Research modeの機能を埋め込んだHoloLensアプリをストアに公開する事は厳しいと思われます。

環境

実行環境
HoloLens RS5 日本語対応版
OS Build : 10.0.17763.1

開発環境
Visual Studio 2017

導入

以下のURLに沿って進めていきます。
https://docs.microsoft.com/en-us/windows/mixed-reality/research-mode

<HoloLens側の準備>
[設定] > [更新ととセキュリティ] > [開発者向け]
・「開発者向け機能を使う」と「デバイスポータルを有効にする」をオンにします。

<PC側の準備>
・PC上でデバイスポータルにアクセスします。(https://[IPv4 アドレス])
・デバイスポータルのメニューからResearch modeを選択し、Allow access to sensor streams にチェックを入れ、HoloLensを再起動します。これで、Research modeが利用可能になります。
・以下リポジトリのマスターブランチをCloneします。
 https://github.com/Microsoft/HoloLensForCV
・zipファイルを解凍し、中にあるHoloLensForCV.slnをVisual Studioで開きます。
・HoloLens実機とPCを繋ぎ、Release、x86、SensorStreamViewerをDevice実行でビルドします。

キャプチャ.PNG

・各種センサーが可視化されたデータが表示されます。上部が深度カメラと赤外線反射データ、下部が環境認識カメラを可視化したものになります。
20181222_203547_HoloLens.jpg

上部4つの画像は8bitのBGRAフォーマットで出力されています。
VisualStudio内のFrameRenderer.cpp内の値を変更する事でグレースケールやナイトビジョン風の表示に変える事も可能です。

FrameRenderer.cpp
    // Set color based on a ratio of how closely it matches the surrounding colors.
    UINT32 alpha = static_cast<UINT32>((scaled - integer) * 255);
    UINT32 beta = 255 - alpha;
    return {
        static_cast<byte>((prev.A * beta + next.A * alpha) / 255), // Alpha
        static_cast<byte>((prev.R * beta + next.R * alpha) / 255), // Red
        static_cast<byte>((prev.G * beta + next.G * alpha) / 255), // Green
        static_cast<byte>((prev.B * beta + next.B * alpha) / 255)  // Blue
    };

深度カメラの範囲を指定など。深度は16bitで取得。

FrameRenderer.cpp
                // Use a special pseudo color to render 16 bits depth frame.
                // Since we must scale the output appropriately we use std::bind to
                // create a function that takes the depth scale as input but also matches
                // the required signature.
                const float depthScale = 1.0f / 1000.0f;
                float minReliableDepth, maxReliableDepth;

                if (m_sensorName == L"Long Throw ToF Depth")
                {
                    minReliableDepth = 0.5f;
                    maxReliableDepth = 4.0f;
                }
                else
                {
                    minReliableDepth = 0.2f;
                    maxReliableDepth = 1.0f;
                }

まとめ

HoloLens Research modeを利用する事で各種センサデータを可視化する事ができました。
Unityに埋め込む事ができれば、利用の幅も広がるので、そちらの方もやっていきたいと思います。

実行時の動画を以下に載せました↓
HoloLens RS5 Research mode test

参考

Microsoft Docs / HoloLens Research mode

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away