HoloLens+Arucoを触ってみた
こちらのリポジトリの「HoloLensArucoTracking」を触ってみた https://github.com/KeyMaster-/HoloLensArucoTracking/
- Editor用とHoloLens用のSceneがある。
- 使い方はReadme見れば大体わかる
- Unity 5.6.3とUnity 2017.3.b10でHoloLens実機ビルドできた。
注意点
特定の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にもある。
こちらも試していましたが、カメラキャリブレーションがそのままでは、ガバガバなので、 ちゃんと使うには自前で調整が必要そうです。
HoloLensでのARマーカー(ArUco)、現状ではカメラのフレームレートの低さとシャッタ速度が設定できなくてロバスト性が低く、本来の位置トラッキング性能と比べると体験としては著しく質が下がりますね…。これをそのまま使う予定は今の所無いのですが。
— あるしおうね (@AmadeusSVX) 2017年5月5日
aruco-unity
Unity上でのカメラキャリブレーションに関しては、こちらのプロジェクトにはキャリブレーション用のシーンがありました。