2016/12/19

ORB-SLAMの導入

LSD-SLAMの導入をやりましたが,今回はORB-SLAMの導入を行います.



LSD-SLAMは作成した点群がなんとなーく物の形を形作っているのがわかると思います.
これは得られた画素をそのまま扱い,(半)密に配置しているためです.

しかし,これは比較的新しい手法で,PTAM以降visualSLAMは画像の中から特徴的な部分を取り出し,その対応を取ってマップに配置していく特徴ベースで疎なものでした.

ORB-SLAMはPTAM以降発展した技術を取り込み,初期化を自動化し,キーフレームを局所的に多く取り,あとから間引く適者生存戦略を取ることで,そのなかでも現時点で最高レベルの精度を誇っています.
詳しくは2月以降とかに書こうと思います.

こんなのです.




オープンソースで公開されている上,ROSにも対応しているので,今回はこれを導入します.環境はROS indigoです.
詳しくは最新の情報をみましょう.

また,RGB-Dカメラやステレオカメラにも対応したORB-SLAM2も公開されているので興味がある人はこちらを導入してみてください.

インストール

まず,必要なものを持ってきます.

$sudo apt-get install libboost-all-dev
$sudo apt-get install libsuitesparse-dev
$sudo apt-get install libblas-dev
$sudo apt-get install liblapack-dev
$sudo apt-get install libeigen3-dev
$git clone https://github.com/raulmur/ORB_SLAM.git ORB_SLAM

できたORB_SLAMというフォルダに ROS_PACKAGE_PATHを通す。すなわち,

pico ~/.bashrc

.bashrcを開いて

export ROS_PACKAGE_PATH=~/ORB_SLAM:$ROS_PACKAGE_PATH

と一番下に書いて保存.

次にThirdparty/g2o/に移動して
$mkdir build
$cd build
$cmake .. -DCMAKE_BUILD_TYPE=Release
$make
ここでThirdparty/g2o/CMakeLists.txtの97、98行目をPCに最適になるよういじるとパフォーマンスが上がるがとりあえずデフォルト

Thirdparty/DBoW2/に移動して
$mkdir build
$cd build
$cmake .. -DCMAKE_BUILD_TYPE=Release
$make
ここでThirdparty/DBoW2/CMakeLists.txtの4,5行目をPCに最適になるよういじるとパフォーマンスが上がるがとりあえずデフォルト

ORB_SLAMに移動
ROSのindigoなのでmanifest.xmlのopencv2依存をコメントアウト
$mkdir build
$cd build
$cmake .. -DROS_BUILD_TYPE=Release
$make
CMakeLists.txtの12,13行目をPCに最適になるよういじるとパフォーマンスが上がるがとりあえずデフォルト


ORB_SLAM/Data/ORBvoc.txt.tar.gzを解凍しておく

さあ,これで終了です.

ROSではビルドはCMakeLists.txtだけによるので,ROSのビルドシステム,catkinやrosbuildを使わずにもビルドできたことがわかると思います.

カメラで実行

ROS起動
$roscore

本体の実行
$rosrun ORB_SLAM ORB_SLAM PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE
デフォルトでは
$rosrun ORB_SLAM ORB_SLAM /Data/ORBvoc.txt  /Data/Settings.yaml
とすればよい.
ORB-SLAMの現在フレームの表示
$rosrun image_view image_view image:=/ORB_SLAM/Frame _autosize:=true

/camera/image_rawに動画を渡す。とりあえずusbカメラから渡すには
$rosrun usb_cam usb_cam_node __name:=camera



ORB-SLAMマップ表示
$rosrun rviz rviz -d Data/rviz.rviz
これでORB-SLAMの初期化が終了したらFixedFrameをORB_SLAM/Worldにすること。
また、Add→By topic→→/ORB_SLAM/Map/Makerを押さないと表示されないので注意。
*ROSがFuerteなら$rosrun rviz rviz -d Data/rviz.vcg

データセットで実行

例えばLSD_room.bagを用いる場合

実行時に
$rosrun ORB_SLAM ORB_SLAM /Data/ORBvoc.txt  /Data/Settings.yaml /camera/image_raw:=/image_raw
としてください


これはLSD_room.bagの出力が/image_rawなのでORB SLAM内の/camera/image_rawをimage_rawで読み替える必要があるためです。

入力は
$rosbag play ~/LSD_room.bag
(LSD_room.bagがHomeにある場合)とすします。
~以降の部分は自分がLSD_room.bag置いたところに変えてください.



3 件のコメント:

  1. いつも参考にしております。
    今後も更新よろしくお願いします。

    返信削除
  2. とても参考になりました!
    ありがとうございます!

    返信削除
    返信
    1. それなら良かったです!

      削除