なんかいろいろしてみます

Sep 13, 2020 - 1 minute read - HoloLens

HoloLens 2のResearch modeでセンサ情報を見てみる

HoloLens2でもResearch modeが利用可能になったので公開されているサンプルからセンサ情報を見てみます.

HoloLens 1でのResearch modeの解説は HoloLens RS4のResearch modeを使ってみる(サンプル実行編)

Research modeとは

HoloLensが搭載している各センサ情報を直接取得できるモードになります. HoloLensはポジショントラッキング,ハンドトラッキングなど行うために複数のカメラやIMUを搭載しています. 本来はHoloLens内部での処理だけに利用されユーザーがセンサ情報を直接取得することはできません. しかしResearch modeを有効にすることによりセンサ情報を直接取得して利用することができるようになります.

Research modeの公式ドキュメント

Research modeは研究用途のみでの利用のためストア公開はできません.

Research modeを有効にすることでHoloLensの動作が不安定になったり,バッテリー消費が早くなったりします.

HoloLens 2ではビルドバージョンが19041.1356から正式対応になります. 記事作成時ではまだリリースされていないため,Indider Previewを有効化することでResearch modeを利用可能になります.

HoloLens 2 の Insider Previewの公式ドキュメント

Research modeの設定方法

HoloLens 2 の Research mode の有効化はデバイスポータルから行います.

  1. デバイスポータルの System/Research mode に移動して Allow access to sensor streams のチェックボックスをONにします.
  2. デバイスポータル上部の PowerRestart から再起動を行うとResearch mode を有効化できます.

サンプルプロジェクトについて

HoloLens 2からカメラ情報以外のセンサ情報が新たに取得できるようになりました.

  • 加速度計
  • ジャイロスコープ
  • 磁力計

HoloLens 1から取得できるカメラ情報は HoloLens RS4のResearch modeを使ってみる(サンプル実行編)から参照

そのためHoloLens 1のサンプルプロジェクトは利用できなくなっています. HoloLens 2では以下のサンプルプロジェクトを利用します.

HoloLens2ForCV

センサ情報を可視化してみる

今回は HoloLens2ForCV 内の Samples/SensorVisualization からカメラ情報,センサ情報を可視化してみます.

Research modeを有効にしたHoloLens 2 で SensorVisualizationプロジェクトを実行するとポジショントラッキング用のカメラ画像と,遠距離深度画像,加速度情報を見ることができます.

SensorVisualizationScenario.cpp#define DEPTH_USE_LONG_THROW をコメント化することで近距離深度情報を取得することもできます.

 1 2 3 4 5 6 7 8 91011121314
// Long throw and AHAT modes can not be used at the same time.
#define DEPTH_USE_LONG_THROW <- この行をコメントにする

#ifdef DEPTH_USE_LONG_THROW
        if (sensorDescriptor.sensorType == DEPTH_LONG_THROW)
        {
            winrt::check_hresult(m_pSensorDevice->GetSensor(sensorDescriptor.sensorType, &m_pLTSensor));
        }
#else
        if (sensorDescriptor.sensorType == DEPTH_AHAT)
        {
            winrt::check_hresult(m_pSensorDevice->GetSensor(sensorDescriptor.sensorType, &m_pAHATSensor));
        }
#endif

同様に #define VISUALIZE_ACCEL をコメント化することでジャイロスコープを取得することもできます.

123456789
#define VISUALIZE_ACCEL <- この行をコメントにする

#ifdef VISUALIZE_ACCEL
    m_AccelRenderer->GetAccelSample(&imuSample);
#else
    m_GyroRenderer->GetGyroSample(&imuSample);
#endif

    vectorLength = sqrt(imuSample.x * imuSample.x + imuSample.y * imuSample.y + imuSample.z * imuSample.z);

動画の前半ではカメラ画像が上段,遠距離深度情報が下段,加速度情報が右下に表示されています. 動画後半は近距離深度情報が下段,ジャイロスコープ情報が右下に表示されています.

まとめ

  • HoloLens 2 からIMUセンサの値も取得できるようになった.
  • HoloLens 1のサンプルプロジェクトはHoloLens 2では利用できないので注意
  • 次はサンプルにまだ無い磁力計の表示をしてみる