LSD-SLAMは作成した点群がなんとなーく物の形を形作っているのがわかると思います.
これは得られた画素をそのまま扱い,(半)密に配置しているためです.
しかし,これは比較的新しい手法で,PTAM以降visualSLAMは画像の中から特徴的な部分を取り出し,その対応を取ってマップに配置していく特徴ベースで疎なものでした.
ORB-SLAMはPTAM以降発展した技術を取り込み,初期化を自動化し,キーフレームを局所的に多く取り,あとから間引く適者生存戦略を取ることで,そのなかでも現時点で最高レベルの精度を誇っています.
こんなのです.
オープンソースで公開されている上,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
usbカメラの使い方はLSD-SLAMをROSで試す2-カメラの設定とキャリブレーション-を参考
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を用いる場合
LSD_room.bagについてはLSD-SLAMをROSで試す1-インストールとビルドとクイックスタート-を参考
カメラで実行の際のコマンドをいかに変更
$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置いたところに変えてください.
いつも参考にしております。
返信削除今後も更新よろしくお願いします。
とても参考になりました!
返信削除ありがとうございます!
それなら良かったです!
削除