ORB SLAM3をnoetic/ROSでビルドして動作確認する。

ORB_SLAM2を試せたと思ったらORB_SLAM3もみつけた。

github.com

Raspberry Pi 4B 4Gだとビルドできなかったので、 8GメモリのボードにUbuntu 20.04をインストールした環境で試した。

git cloneしてビルドするとエラーがいくつかでる。 githubのissueにも報告されている。 https://github.com/UZ-SLAMLab/ORB_SLAM3/issues/321

とりあえずForkしてnoeticでビルドできるように直しておいた。

github.com

変更点はそんなに多くない。以下のコードの演算処理を書き換えればOK。

  • src/LocalMapping.cc
  • src/CameraModels/KannalaBrandt8.cpp
x3D = x3D_h.get_minor<3,1>(0,0) / x3D_h(3);

を以下に修正する。

x3D = x3D_h.get_minor<3,1>(0,0) * (1 / x3D_h(3));

ROSのビルド

OpenCVの依存チェックで3.0までしかチェックしていないので、4に変更しておく必要がある。 3を4に変更しただけなので、OpenCV3の環境だとエラーがでちゃうと思う。

Webカメラ(USB)での動作確認

とりあえずusb-camで確認した。usb-camのノードをインストールしてない場合はインストールしておく必要がある。

sudo apt install ros-noetic-usb-cam

キャリブレーションとかなしだと、精度いまいちな気はするけど、とりあえず。

roscore
rosrun usb_cam usb_cam_node /usb_cam/image_raw:=/camera/image_raw
rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml 

最近だとlibuvc-cameraを使った方が良いっぽい。libuvc-cameraの使い方は別の記事でまとめた。

ma38su.hatenablog.com

Raspberry Pi 4BのUbuntu 20.04で動かしたときの、メモリ消費量は2G前後だった。 ビルドだけできれば、4GBモデルでも動きそう。

最も、必要なROSのノード、すべてをひとつのデバイス上で実行する必要はないので、 USBカメラをつないだデバイスと、ORB_SLAMをつないだデバイスを分けて実行してもよい。

ma38su.hatenablog.com