ブログ@kaorun55

HoloLensやKinectなどのDepthセンサーを中心に書いています。

HoloLensが認識した空間から、床や壁、天井などの平面を検出する

f:id:kaorun55:20160614103748j:plain

HoloLensのToolkitに、HoloLensが認識した空間を元に平面を検出する機能があります。

上の画像は部屋の隅をキャプチャしたものです。壁2枚と天井を検出しています。

動きは次の動画を見てください。平面検出によって、床、壁、天井、テーブルの検出ができます(手持ちのテーブルは小さいためか、検出できませんでした)。平面および種別床や壁など)はそれぞれアプリで取り出すことができ、壁を使ったアプリケーションに応用できます。

HoloLensが認識した空間から、床や壁、天井などの平面を検出する

平面検出のコードはこちらにあります。C++/CXでビルドされていますが、コード自体はほぼ普通のC++です。

github.com

PlaneFinding

最初に平面検出を試す際は、AcademyのHolograms 230を動かすとよいです。

動画のサンプルプロジェクトはこちらに置いてあります。

このサンプルプロジェクトは、Holograms 230からいくつかのスクリプト、マテリアル、シェーダーを持ってきています。 HoloToolkit-Unity にある平面検出のスクリプトと合わせて「SurfaceMeshesToPlanesプレファブ」を作りました。「SurfaceMeshesToPlanesフォルダ」以下にまとめてあるので、これを別プロジェクトにコピーすればOKです。先の動画のサンプルは、このSurfaceMeshesToPlanesプレファブ」と、HoloToolkit-Unityに入っている「SpatialMappingプレファブ」をシーンに置いただけです。特にコードなどは必要ありません(Player SettingsでSpatialPerceptionにチェックするのを忘れずに)

f:id:kaorun55:20160614105133p:plain

平面検出後の処理

PlaySpaceManagerスクリプトにSurfaceMeshesToPlanes_MakePlanesComplete()があり、平面を検出するとこのメソッドが呼ばれます。これはもともとHolograms 230にあったもので、壁や床に対する処理の例が載っていますので参考にできるでしょう。

これを使うとRoboRaidのような壁から敵が出てくるようなゲームの開発が可能となります。


Microsoft HoloLens: RoboRaid

プロジェクト内で使用しているHoloToolkitについてはこちら

www.naturalsoftware.jp