Unityで自己位置推定(OBR SLAM3)やってみた

UnityでOBR SLAM3を動かしてみた。環境はWindows上でUnityを動かし、WSL上でOBR SLAM3を動かしている。

動作としては以下のような感じ。動いてはいるものの、マップ生成は全くうまくいっていない。

youtu.be

前準備

以下に通信用のコード(Linon_SDK)が置いてあるのでダウンロードしておく。

GitHub - wooolwooolwoool/Linon_SDK

OBR SLAM3側

以下のページを参考に、WSLにOBR SLAM3をインストールする。

WSLでORB SLAM3を動かす(完成版) - ぼうびろく

build.sh実行前に、Linon_SDKに以下のコードが入っているので差し替えておく。

  • mono_inertial_euroc.cc

Unity側

今回は町として以下のパッケージを使うのでインポートしておく。特に制限はないので、使いたい街を使ってもOK。

assetstore.unity.com

  1. File -> Open Sceneから以下のファイルを開く。

    • Assets/CityVoxelPack/DemoScenes/Demo.unity
  2. CubeObjectを作成して、CubeMove.csをアタッチする。

  3. CubeObjectにカメラを追加し、カメラにcamera_udp.csをアタッチし、ip_addをWSLのIPアドレス(172.21..となっているもの)に変更する。(アップデートでlocalhostでも通信できるようになったらしいので不要かも。)

  4. オブジェクトの向き、位置、方向を調整する。

実行

  1. Unity側で再生を押す。
  2. OBR SLAM3側で以下のコマンドを実行する。

    $ ./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml ../Datasets/EuRoc/MH01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono
    
  3. ウィンドウが表示された後、Unity側でCubeを動かすとFrameとMapが表示される。