More Related Content Similar to 20180424 orb slam (20) More from Takuya Minagawa (20) 20180424 orb slam5. 紹介するコード
5
ORB SLAM2
https://github.com/raulmur/ORB_SLAM2
人工知能?
機械学習使ってません
ARの世界では有名な研究/コード
私が書いたコードではない
仕事でずっとこれのカスタマイズに格闘してたので
紹介
カスタマイズされたコードは出せないので、元の
コードについて解説
7. ORB-SLAMとは?
7
単眼カメラのVisual SLAM
Mur-Artal, R., Montiel, J. M. M., & Tardos, J. D. (2015).
ORB-SLAM:AVersatile and Accurate Monocular
SLAM System. IEEETransactions on Robotics,
ソースコード:
https://github.com/raulmur/ORB_SLAM2
動画:
https://www.youtube.com/watch?v=ufvPS5wJAx0
9. Structure from Motion (SfM)
9
同じ対象を撮影した複数の画像(例えば動画)から、対
象の三次元形状を復元する
バンドル調整を用いて、複数のカメラの相対位置、焦点距
離、対象の三次元点座標を同時に推定する
<バンドル調整>
測定結果とパラメータから誤差を計算し、誤差を小さくする方向にパ
ラメータを調整していく
15. ORB-SLAMの仕組み
15
Tracking、 Local Mapping、Loop Closingの3つのスレッド
が並列に動作
Tracking: 入力フレームのカメラ位置/姿勢を推定
Local Mapping: 地図(点群)を生成/更新
Loop Closing: カメラ位置/姿勢の誤差の蓄積を除去
全スレッドでORB特徴を利用
MAP
点(XYZ)とそれに紐づいた代表ORB特徴
各キーフレームの全ORB特徴を保持
Place Recognition:
ORBによるBags-of-Wordsでクエリー画像に近いキーフレームを検索
追跡失敗時やMapping時に対応点が見つからない時、Loopを探す
時などに利用
38. ORB-SLAMの依存ライブラリ
38
Pangolin
ビジュアライゼーションに必要
https://github.com/stevenlovegrove/Pangolin
OpenCV (2.4.11と3.2でテスト)
画像の操作と特徴量の抽出
http://opencv.org
Eigen3
g2oを動かすのに必要
http://eigen.tuxfamily.org
DBoW2
Place Recognitionに使用。ORB-SLAM2に同梱
g2o
幾何学的な最適化に使用。ORB-SLAM2に同梱
ROS (Hydro or Newer)
リアルタイムで動かす時、カメラ出力をROSのトピックとして動かす必要
http://ros.org
43. ORB-SLAMコードの特徴
43
実装は論文通り
論文とコードの対応を見つけやすい
論文と実装が違うというケースも割とあるので
ほとんど全てのパラメータがメンバ変数になっており、関数の
引数として渡されることがないため、各関数がどのようなパラ
メータに依存してるかが非常にわかりにくい。
そのため、カスタマイズの影響範囲を見積もるのがツライ
マルチスレッドなので尚ツライ。。。
リアルタイム/マルチスレッドのため、デバッグがツライ。。。
例えばLocal Mappingがデバッグ処理で遅れたらTrackingも止まる
printfデバッグ
なんかよい方法あったら教えて下さい。
44. まとめ
44
単眼カメラによるSparseなVisual SLAM
Tracking、Mapping、Loop Closingを別スレッドで動かすこ
とでリアルタイムに動作
PTAMはTrackingとMappingのみ
処理が高速でロバストな特徴量であるORBをTracking、
Mapping、Loop Closingで共通して使用
Place Recognitionにも活用
論文と照らし合わせながらソースコードを読んだ方が理
解が早い。
マルチスレッドで処理が複雑、かつクラス同士が複雑に絡み
合っており、カスタマイズは非常にツライ。。。