これちのPost-it

技術ネタをペラペラと

ProjectNorthStar を 6DoF 化してみる

もう他の記事でも紹介されているかもしれませんが自分のメモも兼ねてまとめておきます。

前回の記事で ProjectNorthStar を組み立てました。

korechipostit.hatenablog.com

ただし ProjectNorthStar で使われる LeapMotion は手の認識のみを行うため AR グラスを作ったからといって 6DoF 機能はありません。

つまり ProjectNorthStar だけでは AR のオブジェクトを現実空間に定位させることができないということですね。

でもそれだとできることに制限がありますし HoloLens みたいに空中に AR オブジェクトを固定したいなと。そこで SLAM が可能な RealSense T265 を組み合わせることで今回 ProjectNorthStar を 6DoF 化させてみました!

見た目はこんな感じ。上に乗っかっているのは RealSense。

f:id:korechi:20190310235358j:plain:h400

作ったデモ

費用

  • ProjectNorthStar
    • 23,176円
      • 内訳:9396(LeapMortion)+1480(ヘッドギア)+1080(ネジ)+2980*2(ディスプレイ)+5046(リフレクター)+547(HDMIケーブル)
  • realsense
    • 25,035円

これを安いと見るか高いと見るかは人それぞれですが、自分はこれで SLAM 可能な AR グラスが自作できるのなら安いかなと思います。

それでは実際に Unity での実装手順を紹介します。

ただしその前に Intel RealSense SDK を PC にインストールしておきましょう。現状 Mac 等の OS には対応していないため Windows マシンにインストールします。(LeapMotion の Orion SDKWindows のみサポートなのでどのみち Windows を使います)

software.intel.com

SDK をインストールすると RealSense 用 Viewer が使えるようになるため、まずはそれで RealSense の自己位置がとれているか確認してみましょう。

ちょっと触ってみましたが、これだけでもすごい!

実装手順

とりあえず詳しい説明は省き、とりあえず 6DoF 化させたい!という人のために、必要最小限の工数で 6DoF 化するための手順を紹介します。

  1. realsense.unitypackage を Unity へインポート github.com
  2. LeapAR.unitypackage を Unity へインポート github.com
  3. LeapAR のシーンをベースに作業を進めるため LeapMotion/Norrth Star/Scenes/NorthStar.scene シーンを開き、別名として保存(test.scene とでもしておきます)
  4. 次に realsense の自己位置を取得するため RealSenseSDK2.0/Scenes/Samples/SLAM.scene シーンを開き hierarchy にある RsDevicePose を Prefab 化 f:id:korechi:20190311002049p:plain
  5. 先ほど保存した test.scene を開き Prefab 化した RsDevicePose を hierarchy に配置
  6. ここの Pose オブジェクトの position と rotation は現実での LeapMotion と RealSense 間の相対位置に合うように調整
  7. 相対位置が良い感じになったら ARCameraRig を Pose オブジェクトの子オブジェクトに
  8. Pose オブジェクトの Inspector 内の RsPoseStreamTransform の Source に RsDevice オブジェクトをアタッチ
  9. 最後に適当なオブジェクト(今回は Cube)を目の前に表示されるように配置して実行 f:id:korechi:20190311002625p:plain

視界の目の間に Cube が表示され、移動すると Cube の見え方が変わるのが確認できるはずです!

Tips

RealSense は裏にねじ穴があるので、比較的折れ曲がりにくい紙を挟んで固定し、下をちょっとはみ出させればうまいこと LeapMotion の裏にさしこむことができます。(ネジは3M*5Bを使用)

f:id:korechi:20190312200147j:plain:h400

f:id:korechi:20190312200335j:plain:h400