LoginSignup
16
11

More than 3 years have passed since last update.

SLAMシリーズ ORB-SLAM2のインストールとテスト

Last updated at Posted at 2020-01-14

目的

画素値直接利用のLSD-SLAMと特徴点抽出のORB-SLAM2を使用して比較する。
(なかなか長い道のりです。)

ORB-SLAMとは

PTAMの流れを汲んでいるリアルタイムに動作する特徴点ベースの単眼visual SLAM
2014年に発表された論文・実装

以下のような特徴がある。

・(特徴量を用いるので)回転や光の変化・動的物体などに対してロバスト
・BA(Bundle Adjustment)を使うことで誤差を吸収
・フレームを多めに取ることで局所的に精度の良い自己位置推定を行い、あとで余計なキーフレームを削除(敵者生存戦略)
・初期化を自動で行う

image.png

github/paper

環境

ubuntu16.04
ROS kinetic

pangolinのインストール

依存関係のあるパッケージをインストール

sudo apt-get install libglew-dev
sudo apt-get install cmake
sudo apt-get install libpython2.7-dev
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev
sudo apt-get install libdc1394-22-dev libraw1394-dev
sudo apt-get install libjpeg-dev libpng12-dev libtiff5-dev libopenexr-dev

githubからclone&make&install

mkdir ~/pangolin_ws
cd ~/pangolin_ws
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
make -j
sudo make install

opencvのインストール

依存関係のあるパッケージをインストール

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

githubからclone&make&install

mkdir ~/opencv_ws
cd ~/opencv_ws
git clone https://github.com/opencv/opencv.git
cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j7
sudo make install

Eigen3のインストール

mkdir ~/eigen_ws
cd ~/eigen_ws
wget http://bitbucket.org/eigen/eigen/get/3.3.4.tar.gz
tar -zxf 3.3.4.tar.gz
cd eigen-eigen-5a0156e40feb
mkdir build
cd build
cmake ..
make check
sudo make install

LIBUVCのインストール


mkdir ~/libuvc_ws
cd ~/libuvc_ws
git clone git://github.com/ktossell/libuvc.git
cd libuvc
mkdir build
cd build
cmake ..
make

※ここでエラーがでました。
どうやらlibusb.hを見つけられてなかったみたいです。
cmakeをしたときのログチェックの例
http://kawauso-festival.blogspot.com/2016/08/pclcpython.html

解決策は、バージョンを指定してlibusbをインストール
https://askubuntu.com/questions/225382/install-usblib-package-ubuntu

sudo apt-get install libusb-1.0-0-dev

そしてもう一度

sudo make install

g2oのインストール

g2oはeigenがないとインストールできないので注意です。

依存関係のあるパッケージをインストール

sudo apt install libsuitesparse-dev - qtdeclarative5-dev - qt5-qmake - libqglviewer-dev

gituhubをcloneしてインストール

mkdir ~/g2o_ws
cd ~/g2o_ws
git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o
mkdir build
cd build
cmake ..
make
sudo make install

※もし、cmake .. でエラーが出たら、
https://github.com/raulmur/ORB_SLAM2/issues/647

sudo apt-get install libeigen3-dev instead.

eigen3を先にインストールしていれば、エラーは出ないはず、です。

DBoW2

依存関係のあるパッケージをインストール

sudo apt-get install libboost-dev

githubからcloneしてきてインストール

mkdir ~/DBoW2_ws
cd ~/DBoW2_ws
git clone https://github.com/dorian3d/DBoW2.git
cd DBoW2
mkdir build
cd build
cmake ..

※ここでエラーが出ました。

error "OpenCV 4.x+ requires enabled C++11 support"

解決策は、以下の方法でflagをつけてcmakeを実行。
https://github.com/BVLC/caffe/issues/6358

cmake .. -DCMAKE_CXX_FLAGS="-std=c++11"

C++11じゃないと使えないよ?ということかな。。。

上が通れば

make
sudo make install

ROS kineticのインストール

基本はこの通りに。

一応こちらでも示すと…

・aptへのROSのダウンロード先の登録&公開鍵の取得

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

・ROSのインストール&初期設定

sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
sudo rosdep init
rosdep update

・環境変数の設定

cd
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

・ROSのパッケージインストーラのインストール

sudo apt-get install python-rosinstall

・ワークスペースのパスを環境変数に追加

cd
source /opt/ros/kinetic/setup.bash

・ROSのワークスペース

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

・ワークスペースの中をビルドできるかテスト

cd catkin_ws
catkin_make

・自分のワークスペースをインストール環境に配置&確認

source devel/setup.bash
echo $ROS_PACKAGE_PATH

ORB-SLAM2 のインストール

いよいよです。

mkdir ~/orb_slam2_ws
cd orb_slam2_ws
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh
./build.sh

※ここでエラー
解決策は、.ccのファイルに片っ端から#include "unistd.h"を付けます。
http://ei0124.blog.fc2.com/blog-entry-21.html

おそらくは./build.shでエラーすると思います
「usleepとか知らねえ」とか言われます
よって原因である.ccのファイルに片っ端から#include "unistd.h"を付けていきます
(10個くらいのファイルに付けた気がする)
やりまくればいつかは通ります

追記: 2018/7/31
修正するべき.ccは11もありました
~/orb_slam2_ws/ORB_SLAM2/src/LocalMapping.cc
~/orb_slam2_ws/ORB_SLAM2/src/LoopClosing.cc
~/orb_slam2_ws/ORB_SLAM2/src/System.cc
~/orb_slam2_ws/ORB_SLAM2/src/Tracking.cc
~/orb_slam2_ws/ORB_SLAM2/src/Viewer.cc
~/orb_slam2_ws/ORB_SLAM2/Examples/Monocular/mono_euroc.cc
~/orb_slam2_ws/ORB_SLAM2/Examples/Monocular/mono_kitti.cc
~/orb_slam2_ws/ORB_SLAM2/Examples/Monocular/mono_tum.cc
~/orb_slam2_ws/ORB_SLAM2/Examples/RGB-D/rgbd-tum.cc
~/orb_slam2_ws/ORB_SLAM2/Examples/Stereo/stereo_euroc.cc
~/orb_slam2_ws/ORB_SLAM2/Examples/Stereo/stereo_kitti.cc
以上、追記終わり

ORB-SLAM2のテスト

適当にデータをダウンロードしてきて動かしてみます。

mkdir ~/orb_slam2_ws/dataset
cd ~/orb_slam2_ws/dataset
wget https://vision.in.tum.de/rgbd/dataset/freiburg1/rgbd_dataset_freiburg1_xyz.tgz
tar -zxf rgbd_dataset_freiburg1_xyz.tgz
cd .. 
cd ORB_SLAM2 (※この場所じゃないとできないです)
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml ../dataset/rgbd_dataset_freiburg1_xyz

ROSで動かす

テストで何やらうまくいったみたいなので、ROS上でも動かせるか確認します。

export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$HOME/orb-slam2_ws/ORB_SLAM2/Examples/ROS
cd ~/orb-slam2_ws/ORB_SLAM2
chmod +x build_ros.sh
./build_ros.sh   

ここで./build_ros.shのエラーが出ました。
先ほどのブログを参考に解決していきます。

今回のエラーはパスが通っていないことでした
と、いうわけでCMakeLists.txtをいじります

いじるべきCMakeLists.txtは
~/orb_slam2_ws/ORB_SLAM2/Examples/ROS/ORB_SLAM2/CMakeLists.txt
にあります

ここの
set(LIBS
{OpenCV_LIBS}
{EIGEN3_LIBS}
{Pangolin_LIBRARIES}
{PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
{PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
{PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
)

set(LIBS
{OpenCV_LIBS}
{EIGEN3_LIBS}
{Pangolin_LIBRARIES}
{PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
{PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
{PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
-lboost_system
)
としてやります
-lboost systemを追加するんですね
おそらくはこれで
cd ~/orb_slam2_ws/ORB_SLAM2/
./build_ros.sh
で通ります

追記: 2018/7/23
ここでまたエラーしました
対処方法はパスを通してやることです
例えば
sudo ln -s /home/(自身のhomeの名前)/orb_slam2_ws/ORB_SLAM2/Examples/ROS/ORB_SLAM2 /opt/ros/kinetic/share/ORB_SLAM2
としてやります
僕はこれで./build_ros.shを突破しました
-lboost systemがいるかどうかはわかりませんでした・・・
とりあえず付けましたが・・・
以上、追記終わり

私の場合、以上をしても下のエラーが消えなかったのですが、

fatal error: Eigen/Core: No such file or directory

以下のパスを通したら解決しました。
https://github.com/raulmur/ORB_SLAM2/issues/403

sudo ln -s /usr/include/eigen3/Eigen /usr/local/include/Eigen

サンプルを試します。

cd ~/orb-slam2_ws/ORB_SLAM2/Examples
rosws init . /opt/ros/kinetic   
rosws set ~/orb-slam2_ws/ORB_SLAM2/Examples/ROS -t .  
echo "source ~/workspace/orb_slam2_ws/ORB_SLAM2/Examples/setup.bash" >> ~/.bashrc
bash

ここで最初ディレクトリが無いというエラーが出ましたが、home直下のディレクトリ(私の場合workspace)からsourceするのを忘れていただけでした…(余談)

そしてrosmake

cd ~/orb-slam2_ws/ORB_SLAM2/Examples/ROS
rosmake ORB_SLAM2

webカメラで実行準備

・キャリブレーション用アプリインストール

rosdep install camera_calibration
rosmake camera_calibration

・キャリブレーションの実行
※PTAMでする場合専用のキャリブレーションボード使わないとできない

roscore
rosrun usb_cam usb_cam_node
rosrun camera_calibration cameracalibrator.py --size 11x7 --square 0.02 image:=/usb_cam/image_raw

*0.02=キャリブパターンの1マスの大きさ(2cm)
*しばらくいろんな角度からキャリブレーションボードを見せているとcalibrateボタンが押せる
*そこからまたいろんな角度からsaveボタンを押して保存したのちcommit
/tmpの中のcalibrationdata.tar.gzの中にost.txtとost.yamlが出力される

tmpフォルダに行ってost.yamlの名前を変更&移動

cd ..
cd ..
cd tmp
cd calibrationdata.tar.gz 
mv ost.yaml webcam.yaml
mv webcam.yaml /home/okubo14/.ros/camera_info

ORBALSAM2の方のcalibファイルを書き換え(TUMI1.yamlのファイルを参考に)

cp ~/orb_slam2_ws/ORB_SLAM2/Examples/Monocular/TUM1.yaml ~/orb_slam2_ws/ORB_SLAM2/Examples/Monocular/webcam.yaml
nano ~/orb_slam2_ws/ORB_SLAM2/Examples/Monocular/webcam.yaml

fx,fy,cx,cy,k1, k2, p1, p2, k3
の値をost.yaml(webcam.yaml)から抽出して修正

webカメラで実行

・Terminal1

roscore

・Terminal2

rosrun ORB_SLAM2 Mono workspace/orb_slam2_ws/ORB_SLAM2/Vocabulary/ORBvoc.txt workspace/orb_slam2_ws/ORB_SLAM2/Examples/Monocular/webcam.yaml

・Terminal3

rosparam set /usb_cam/pixel_format yuyv
rosparam set /usb_cam/image_height 480
rosparam set /usb_cam/image_width 640
rosparam set /usb_cam/camera_info_url file:///home/okubo/.ros/camera_info/webcam.yaml
rosrun usb_cam usb_cam_node /usb_cam/image_raw:=/camera/image_raw

・ROSのノード見える化と画面録画

rosrun rqt_graph rqt_graph
simplescreenrecorder

stereoカメラでやってみる

sampledataを試してみました。

・Terminal1

roscore

・Terminal2

rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml true

・Terminal3

rosbag play --pause V1_01_easy.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw

bagファイルは👇からdownloadsしたものに変更してます。
http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets

おしまい

eiさん本当にありがとうございました。:bow_tone2:

16
11
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
11