Unityでシミュレーション環境を作って、OBR SLAM3で自己位置推定してみた。環境はWindows上でUnityを動かし、WSL上でOBR SLAM3を動かしている。
動作としては以下のような感じ。動いてはいるものの、マップ生成は全くうまくいっていない。。どなたか原因に心あたりや、こうしたらうまくいったなどあれば教えていただけると幸いです。ひとまず環境構築方法を記載しておきます。
前準備
以下に作った改造用コードが置いてあるのでダウンロードしておく。
OBR SLAM3側
以下のページを参考に、WSLにOBR SLAM3をインストールする。
build.sh実行前に、改造用コードに以下のコードが入っているので差し替えておく。
- mono_inertial_euroc.cc
Unity側
今回は町として以下のパッケージを使うのでインポートしておく。特に制限はないので、使いたい街を使ってもOK。
-
File -> Open Sceneから以下のファイルを開く。
- Assets/CityVoxelPack/DemoScenes/Demo.unity
-
CubeObjectを作成して、CubeMove.csをアタッチする。
-
CubeObjectにカメラを追加し、カメラにcamera_udp.csをアタッチし、ip_addをWSLのIPアドレス(172.21.*.*となっているもの)に変更する。(アップデートでlocalhostでも通信できるようになったらしいので不要かも。)
-
オブジェクトの向き、位置、方向を調整する。
実行
-
Unity側で再生を押す。
-
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
-
ウィンドウが表示された後、Unity側でCubeを動かすとFrameとMapが表示される。
うまくいっていない原因の考察
- OBR SLAMのサンプルコードの映像入力を書き換えただけなので、ほかに変更しなきゃいけない部分がある?(カメラキャリブレーションなど)
- 画面がきれいすぎて特徴点を抽出できない?