Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ORB-SLAMを動かしてみた

10,300 views

Published on

2017/06/10開催のコンピュータビジョン勉強会@関東「AR/VRを支える技術」の発表資料です。

Published in: Technology

ORB-SLAMを動かしてみた

  1. 1. 2017/06/10 CV勉強会@関東 「AR/VRを支える技術」発表資料 ORB-SLAMを動かしてみた takmin
  2. 2. 自己紹介 2 テクニカル・ソリューション・アーキテクト 皆川 卓也(みながわ たくや) フリーエンジニア(ビジョン&ITラボ) 「コンピュータビジョン勉強会@関東」主催 博士(工学) 略歴: 1999-2003年 日本HP(後にアジレント・テクノロジーへ分社)にて、ITエンジニアとしてシステム構築、プリ セールス、プロジェクトマネジメント、サポート等の業務に従事 2004-2009年 コンピュータビジョンを用いたシステム/アプリ/サービス開発等に従事 2007-2010年 慶應義塾大学大学院 後期博士課程にて、コンピュータビジョンを専攻 単位取得退学後、博士号取得(2014年) 2009年-現在 フリーランスとして、コンピュータビジョンのコンサル/研究/開発等に従事 http://visitlab.jp
  3. 3. 昔作ったもの 3  ARウェルカムボード (2010年)  https://www.youtube.com/watch?v=KgQguj78qMA  ソース: https://github.com/takmin/OpenCV-Marker-less-AR 今日はこの話はしません
  4. 4. Visual SLAM 4 ARにおいて、カメラで撮影した画像上に3Dオブジェクトを 重畳表示するためには、撮影対象の三次元形状とそれに 対するカメラの位置と姿勢を正確に求める必要がある Simultaneous Localization And Mapping (SLAM) Localization Mapping
  5. 5. ORB-SLAMとは? 5  単眼カメラの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
  6. 6. その他有名なVisual SLAM論文 6  PTAM  Klein, G., & Murray, D. (2007). Parallel tracking and mapping for small AR workspaces. ISMAR.  TrackingとMappingを別スレッドで動かすことでリアルタイム動 作  FASTで取得した特徴点を画像パッチでマッチングして追跡  DTAM  Newcombe, R.A., Lovegrove, S. J., & Davison,A. J. (2011). DTAM: DenseTracking and Mapping in Real-Time. ICCV.  特徴点ではなく画素の値からDepthを推定することで密な地 図を構築(要GPU)
  7. 7. その他有名なVisual SLAM論文 7  LSD-SLAM  Engel, J., Schops,T., & Cremers, D. (2014). LSD-SLAM: Large- Scale Direct monocular SLAM. ECCV  画像の輝度勾配が大きいところのみDepth推定することで高 速化  SVO  Forster, C., Pizzoli, M., & Scaramuzza, D. (2014). SVO: Fast semi- direct monocular visual odometry. ICRA  地図の作製は特徴点ベースで行い(キーフレームのみ)、ト ラッキング時に特徴点周辺の輝度が合うようにカメラポーズ 推定
  8. 8. ORB-SLAMの仕組み 8
  9. 9. ORB-SLAMの仕組み 9  Tracking、 Local Mapping、Loop Closingの3つのスレッド が並列に動作  Tracking: 入力フレームのカメラ位置/姿勢を推定  Local Mapping: 地図(点群)を生成/更新  Loop Closing: カメラ位置/姿勢の誤差の蓄積を除去  全スレッドでORB特徴を利用  MAP  点(XYZ)とそれに紐づいた代表ORB特徴  各キーフレームの全ORB特徴を保持  Place Recognition:  ORBによるBags-of-Wordsでクエリー画像に近いキーフレームを検索  追跡失敗時やMapping時に対応点が見つからない時、Loopを探す 時などに利用
  10. 10. ORB 10  画素ペアの大小でキーポイントと特徴量を計算するため、非 常に高速  キーポイントは画像ピラミッドの各レベルでFASTにより検出  キーポイント周辺の画素ペアの値の大小を0と1に割り当て(バイナ リ特徴)  バイナリ特徴のため省メモリ  回転に対して不変 ORBで使用する画素ペア (学習された例)
  11. 11. ORB-SLAMの仕組み 11 • XYZ(世界座標系) • 代表ORB特徴
  12. 12. ORB-SLAMの仕組み 12 • キーフレームのカメ ラパラメータ(内部/ 外部) • 全ORB特徴とMap Pointsへのリンク
  13. 13. ORB-SLAMの仕組み 13 • キーフレームをノー ドとした無向グラフ • 共通するMap Points が多いほどエッジの 重さが大きい
  14. 14. ORB-SLAMの仕組み 14 Covisibility Graphから 作成した全域木
  15. 15. キーフレームとグラフ表現 15 SpanningTree に強いエッジ を追加 15個以上の 共有点を持つ 場合エッジを 生成 Covisibility Graphから作 成した全域木 (Spanning Tree)
  16. 16. ORB-SLAMの仕組み 16 事前に作成した VocabularyTree
  17. 17. ORB-SLAMの仕組み 17 キーフレームの BoW表現
  18. 18. ORB-SLAMの仕組み 18 入力フレームから Fastキーポイントと ORB特徴抽出
  19. 19. ORB-SLAMの仕組み 19 • キーポイント追跡しカメラ 姿勢推定 • 前フレーム追跡失敗時 はBoWで対応キーフ レーム検索
  20. 20. ORB-SLAMの仕組み 20 • キーポイントとMap上 の点とをマッチング • カメラ姿勢再計算
  21. 21. ORB-SLAMの仕組み 21 • キーフレームの 条件を満たして いるか判定
  22. 22. ORB-SLAMの仕組み 22 • キーフレームを挿入して Covisibility Graphと SpanningTreeを更新 • BoW表現を計算
  23. 23. ORB-SLAMの仕組み 23 • キーフレームの点 のうち、ロバストで ないものを除去
  24. 24. ORB-SLAMの仕組み 24 • Covisibility Graph上の 隣接キーフレームを用 いてMap Points生成
  25. 25. ORB-SLAMの仕組み 25 • バンドル調整で現キー フレームと隣接キーフ レーム上の点とカメラ 姿勢を改善
  26. 26. ORB-SLAMの仕組み 26 • Covisibility Graph上の 隣接キーフレームのう ち、他と重複の大きい ものを除去
  27. 27. ORB-SLAMの仕組み 27 • Covisibility Graph 上のループ候補 を取得
  28. 28. ORB-SLAMの仕組み 28 • ループ上で隣接するキーフ レーム間の対応点を算出 • キーフレーム間の相似変 換算出(3D to 3D)
  29. 29. ORB-SLAMの仕組み 29 • ループ候補を統合 • 相似変換を伝播させ てカメラ姿勢補正
  30. 30. ORB-SLAMの仕組み 30 • Essential Graph上でLoop Closingにより各カメラ姿勢 を最適化 • カメラ姿勢最適化後、点群 の位置を最適化
  31. 31. ORB-SLAMを動かす 31  ソースコード  https://github.com/raulmur/ORB_SLAM2  C++11  ORB_SLAM2はORB_SLAMをステレオカメラとRGBD向け に拡張したもの  元のORB_SLAMのソースコードもあるが、単眼カメラの機能も ORB_SLAM2に統合しているので、2を使うのが望ましい  必要なライブラリをインストールしてbuild.shというシェル を起動すればビルドできる。  KITTI等の既存データセットを動かす場合  リアルタイムでどうさせたいときはROSのセットアップした後、 build_ros.shでビルド
  32. 32. ORB-SLAMの依存ライブラリ 32  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
  33. 33. ORB-SLAMのサンプル 33  あらかじめ、以下のサンプルコードが用意されており、コ ンパイルすれば使える。  Examples/Monocular/mono_euroc.cc  EuRoCデータセット用サンプル  Examples/Monocular/mono_kitti.cc  KITTIデータセット用サンプル  Examples/Monocular/mono_tum.cc  TUMデータセット用サンプル  Examples/ROS/ORB_SLAM2/src/ros_mono.cc  外部接続したカメラで動かすためのサンプル  Examples/ROS/ORB_SLAM2/src/AR/ros_mono_ar.cc  外部接続したカメラ映像にキューブを重畳表示するサンプル
  34. 34. 外部接続カメラでORB-SLAMを動かす 34  外部接続カメラを使用するのはROS (Robot Operating System)とROS上でカメラを動かすためのモジュールをイ ンストールする必要がある。  例えば、 https://github.com/bosch-ros-pkg/usb_cam  カメラから映像を取得するトピック名を /camera/image_rawとして実行した状態で、ORB-SLAMの ros_monoやros_mono_arを動かす
  35. 35. まとめ 35  単眼カメラによるSparseなVisual SLAM  Tracking、Mapping、Loop Closingを別スレッドで動かすこ とでリアルタイムに動作  PTAMはTrackingとMappingのみ  処理が高速でロバストな特徴量であるORBをTracking、 Mapping、Loop Closingで共通して使用  Place Recognitionにも活用  ソースコードが公開されている  C++11のサポートやROSの使用を考えるとLinux環境が良い

×