ORB_SLAM3 やり方

最近リリースされたORB_SLAM3をやってみました。Ubuntu16.04(ROS kinetic)で、すでにORB_SLAM2をインストール済みの環境で構築しました。

$ cd ~
$ git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
$ cd ORB_SLAM3
$ chmod +x build.sh
$ ./build.sh

主にEigenからwarningがかなり出ましたが、これでスタンドアローン版はビルドできました。次にROS上でのビルドです。

$ export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/ORB_SLAM3/Examples/ROS
$ chmod +x build_ros.sh
$ ./build_ros.sh

ここでエラーが発生しました。

 fatal error: Eigen/Core: そのようなファイルやディレクトリはありません

このコマンドでテキストエディタを開きinclude_directoriesにEigenを追加します。(同じ名前のファイルがORB_SLAM3/CMakeLists.txtにもありますが、以下のファイルです。)

$ gedit ./Examples/ROS/ORB_SLAM3/CMakeLists.txt

書き換え後はこのようになります。

include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/../../../
${PROJECT_SOURCE_DIR}/../../../include
${Pangolin_INCLUDE_DIRS}
${EIGEN3_INCLUDE_DIR}
)

再度ビルドを実行したらうまくいきました。次は実行していきます。

$ source ~/ORB_SLAM3/Examples/ROS/ORB_SLAM3/build/devel/setup.bash
$ roscore
$ rosrun ORB_SLAM3 Mono ~/ORB_SLAM3/Vocabulary/ORBvoc.txt ~/ORB_SLAM3/Examples/Monocular/TUM1.yaml
$ rosbag play LSD_room.bag /image_raw:=/camera/image_raw

とりあえずこれで動きました。rosbagでLSD_SLAMのサンプル動画を動かしていますがファイルを持っていない方は以下のコマンドでダウンロードしてください。

$ wget http://vmcremers8.informatik.tu-muenchen.de/lsd/LSD_room.bag.zip

デジカメで撮影した映像で試して見ました。デジカメのキャリブレーションファイル(.yaml)は既にORB_SLAM2で作成していました。しかし、そのyamlファイルをORB_SLAM3でも使うには一行追加が必要です。
Camera.type: "PinHole"
もしくは
Camera.type: "KannalaBrandt8"
を5行目あたりに追加します。

ソースコード(src/Tracking.cc)を確認するとその2種類で分岐されていました。KannalaBrandt8が何を表すかよく分かりませんが、Kannala-Brandt Camera modelという言葉が魚眼レンズに関する論文に書いてありました。yamlファイル書き換え後は以下のようになります(冒頭部分の抜粋)。

%YAML:1.0
#--------------------------------------------------------------------------------------------
# Camera Parameters. Adjust them!
#--------------------------------------------------------------------------------------------
Camera.type: "PinHole"
# Camera calibration and distortion parameters (OpenCV) 

ORB_SLAM2とORB_SLAM3の比較ですどちらも大学内で撮影した同じ映像を同じ設定で入力しています。ORB_SLAM2だとカメラの位置の初期化が行えていません。一応、特徴点の抽出の設定を少し緩くするとORB_SLAM2でももう少しマシにはなります。一方でORB_SLAM3だと最初から設定を変えなくてもうまく行っています。
youtu.be
youtu.be

ちょっと前まではもっとエラーが出て、いろいろ書き換えないと動かなかったのですがバグ修正が入ったようで簡単に動いてくれました。



ノートPCにもORB_SLAM3をインストールしてみました。スペック不足で./build.shを実行中にフリーズしてなかなかうまくいきませんでした。

gedit ./build.sh

で、make -j とある箇所をmake -j3 としました。それでもフリーズします。terminalには

virtual memory exhausted: Cannot allocate memory

と表示されていました。仮想メモリが足りないと言うことで、まずは仮想メモリの容量を確認します。

free -h

でサイズを確認すると1GB程度しかありませんでした。以下のサイトを参考にして合計10GBに増やしました。
tyablog.net
一度~/ORB_SLAM3/のディレクトリを削除して、

sudo rm -rf ~/ORB_SLAM3/

再度Gitからクローンしました。さらにメモリを軽くするためPCを再起動してからビルドしました。フリーズしてるのか処理中なのかよく分からない状態が何度かありましたが、最後までビルドできました。
./build_ros.shを実行する際も同様に make -j を make -j3 に書き換えて、再起動をしてから実行しました。無事にインストールが完了して動作確認を行えました。