littlewing

人間とコンピューターとメディアの接点をデザインするために考えたこと

HoloLens+Arucoを触ってみた

こちらのリポジトリの「HoloLensArucoTracking」を触ってみた https://github.com/KeyMaster-/HoloLensArucoTracking/

  • Editor用とHoloLens用のSceneがある。
  • 使い方はReadme見れば大体わかる
  • Unity 5.6.3とUnity 2017.3.b10でHoloLens実機ビルドできた。

youtu.be

注意点

特定のIDに反応させたい

  • MainCameraについている、MarkerObjectPlacer.csがONの状態だと、どのマーカーにも 反応してCubeが表示される。
  • 特定のIDを利用したい場合は、TrackedObjectExampleを利用する。

マーカーIDを指定しても反応してくれない

  • READMEにも書いてあるが、ArucoのマーカーIDがOpenCVのものと、本家(このコードはこっち)で異なる。 そのためAruco Marker Generatorなどで、マーカーを作成した場合はIDが異なるので注意。 どのIDが反応しているかを調べるには、先ほど書いたメインカメラについている、MarkerObjectPlacer.csのonDetectionRun()部分で
        for (int i = 0; i < ArucoTracking.marker_count; i++) {
            PoseData pose = trackingRunner.poseDict[ArucoTracking.ids[i]];
            Debug.Log("ID is " + ArucoTracking.ids[i]);  //★この行を追加

            quadInstances[i].transform.localPosition = pose.pos;
            quadInstances[i].transform.localRotation = pose.rot;
        }

などとしてやれば調べることができる。 OpenCVのMarkerID:1はこのコードではID:256として反応した。

マーカーの位置がずれる

MainCameraについているArucoRunner.csに、マーカーの実寸サイズをちゃんと指定してやる必要がある。

一辺、36mmのマーカーなら、Inspector上でMarker Size 0.036と指定してやる。


その他のAruco関連ライブラリ

MarkerBased AR Example

ちなみに、Arucoを動かすことができるAssetがAssetStoreにもある。

こちらも試していましたが、カメラキャリブレーションがそのままでは、ガバガバなので、 ちゃんと使うには自前で調整が必要そうです。

aruco-unity

Unity上でのカメラキャリブレーションに関しては、こちらのプロジェクトにはキャリブレーション用のシーンがありました。

github.com


参考ドキュメント