SlideShare a Scribd company logo
1 of 58
Download to read offline
2018/05/27 3D Vision勉強会@関東
ORB-SLAM Code Reading
takmin
自己紹介
2
株式会社ビジョン&ITラボ 代表取締役
皆川 卓也(みながわ たくや)
「コンピュータビジョン勉強会@関東」主催
博士(工学)
略歴:
1999-2003年
日本HP(後にアジレント・テクノロジーへ分社)にて、ITエンジニアとしてシステム構築、プリ
セールス、プロジェクトマネジメント、サポート等の業務に従事
2004-2009年
コンピュータビジョンを用いたシステム/アプリ/サービス開発等に従事
2007-2010年
慶應義塾大学大学院 後期博士課程にて、コンピュータビジョンを専攻
単位取得退学後、博士号取得(2014年)
2009年-現在
フリーランスとして、コンピュータビジョンのコンサル/研究/開発等に従事(2018年法人化)
http://visitlab.jp
コンピュータビジョン勉強会@関東
 こんなテーマでやってきました!
「コンピュータビジョン最
先端ガイド」の輪読会
ECCV読み会
強化学習縛り
論文読み会
AR/VRを支える
技術
ICCV読み会
CVPR読み会
CVでこんなもの作
りました大LT大会
CVの便利なツール/
ライブラリ
CVのお仕事
ハッカソン
OpenCV祭り
有名論文読み会
三次元形状計測・
認識
「CV勉強会」で検索!
https://sites.google.com/site/cvsaisentan/
ORB-SLAMとは?
4
 単眼カメラの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
ORB-SLAMコードリーディング
5
 ORB SLAM2
 https://github.com/raulmur/ORB_SLAM2
 ORB_SLAM2はORB_SLAMをステレオカメラと
RGBD向けに拡張したもの
 元のORB_SLAMのソースコードもあるが、単眼カメ
ラの機能もORB_SLAM2に統合しているので、2を
使うのが望ましい
 ここでは主に単眼カメラ部分についてのみ解説
 アルゴリズムについてはsyinari0123さんの解
説があったので割愛
ORB-SLAMを動かす
6
 githubからソースコードを入手
 C++11コンパイラが必要
 Visual Studio2015では無理だった(2017では?)
 必要なライブラリをインストールしてbuild.shと
いうシェルを起動すればビルドできる。
 KITTI等の既存データセットを動かす場合
 リアルタイムで動作させたいときはROSをセット
アップした後、build_ros.shでビルド
ORB-SLAMの依存ライブラリ
7
 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
ORB-SLAMのサンプル
8
 あらかじめ、以下のサンプルコードが用意されており、コ
ンパイルすれば使える。
 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
 外部接続したカメラ映像にキューブを重畳表示するサンプル
外部接続カメラでORB-SLAMを動かす
9
 外部接続カメラを使用するのはROS (Robot
Operating System)とROS上でカメラを動かす
ためのモジュールをインストールする必要が
ある。
 例えば、 https://github.com/bosch-ros-pkg/usb_cam
 カメラから映像を取得するトピック名を
/camera/image_rawとして実行した状態で、
ORB-SLAMのros_monoやros_mono_arを動
かす
ORB-SLAMのコード構成
10
メインのコード群
ビルドのスクリプト
リアルタイムカメラ入力を扱うためのビルドス
クリプト
各データセットのための試験コードやAR等の実
行ファイル
DBoW2とg2o
Place Recognitionを行うための学習済み辞書
データ
ORB-SLAMコードの特徴
11
 実装は論文通り
 論文とコードの対応を見つけやすい
 論文と実装が違うというケースも割とあるので
 MonoとStereoとRGB-Dが一緒になっているので、それぞ
れを分離して読み解く必要
 ほとんど全てのパラメータがメンバ変数になっており、関
数の引数として渡されることがないため、各関数がどの
ようなパラメータに依存してるかが非常にわかりにくい。
 そのため、カスタマイズの影響範囲を見積もるのがツライ
 リアルタイム/マルチスレッドのため、デバッグがツライ。。。
 例えばLocal Mappingがデバッグ処理で遅れたらTrackingも止
まる
ORB-SLAMのコード
12
System.h
main()からcv::Mat形式の画像
を一枚一枚
System::TrackMonocular()で
Systemに渡す
Examplesフォルダにサンプル
ORB-SLAMのコード
13
System.h
Tracking.h
LocalMapping.h
LoopClosing.h
Map.hORBVocabulary.h
KeyFrameDatabase.h
Frame.h
KeyFrame.h
ORB-SLAMのコード
14
Read
Read/
Write
Read/Write
共有メモリ
Read/Write
Read
ORB-SLAMコードリーディング
15
本日お話しする範囲
 Systemの使い方
 Systemクラスの処理概要
 Trackingスレッドの処理概要
 LocalMappingスレッドの処理概要
 LoopClosingスレッドの処理概要
ORB-SLAMコードリーディング
16
本日お話しする範囲
 Systemの使い方
 Systemクラスの処理概要
 Trackingスレッドの処理概要
 LocalMappingスレッドの処理概要
 LoopClosingスレッドの処理概要
ライブラリ使用方法流れ
17
using namespace ORB_SLAM2;
System SLAM(voc_file, setting_file, System::MONOCULAR, true);
cv::VideoCapture cap(0);
cv::Mat frame;
while(true){
cap >> frame;
double time_stamp = (double)clock();
if(frame.empty())
break;
SLAM.TrackMonocular(frame, time_stamp);
}
SLAM.Shutdown();
SLAM.SaveKeyFrameTrajectoryTUM(“KeyFrameTrajectory.txt”);
ライブラリ使用方法流れ
18
using namespace ORB_SLAM2;
System SLAM(voc_file, setting_file, System::MONOCULAR, true);
cv::VideoCapture cap(0);
cv::Mat frame;
while(true){
cap >> frame;
double time_stamp = (double)clock();
if(frame.empty())
break;
SLAM.TrackMonocular(frame, time_stamp);
}
SLAM.Shutdown();
SLAM.SaveKeyFrameTrajectoryTUM(“KeyFrameTrajectory.txt”);
using namespace ORB_SLAM2;
/*VisualWordファイル、カメラパラメータファ
イル、モノクロ/ステレオ/RGBD、画面表示の
順で引数を与える */
System SLAM(voc_file, setting_file,
System::MONOCULAR, true);
ライブラリ使用方法流れ
19
using namespace ORB_SLAM2;
System SLAM(voc_file, setting_file, System::MONOCULAR, true);
cv::VideoCapture cap(0);
cv::Mat frame;
while(true){
cap >> frame;
double time_stamp = (double)clock();
if(frame.empty())
break;
SLAM.TrackMonocular(frame, time_stamp);
}
SLAM.Shutdown();
SLAM.SaveKeyFrameTrajectoryTUM(“KeyFrameTrajectory.txt”);
動画ファイルやカメラ等から画像のキャプ
チャ(cv::Mat)およびタイムスタンプ(double)を
取得
ライブラリ使用方法流れ
20
using namespace ORB_SLAM2;
System SLAM(voc_file, setting_file, System::MONOCULAR, true);
cv::VideoCapture cap(0);
cv::Mat frame;
while(true){
cap >> frame;
double time_stamp = (double)clock();
if(frame.empty())
break;
SLAM.TrackMonocular(frame, time_stamp);
}
SLAM.Shutdown();
SLAM.SaveKeyFrameTrajectoryTUM(“KeyFrameTrajectory.txt”);
/*Systemインスタンスに画像とタイムスタンプ
を渡す*/
SLAM.TrackMonocular(frame, time_stamp);
ライブラリ使用方法流れ
21
using namespace ORB_SLAM2;
System SLAM(voc_file, setting_file, System::MONOCULAR, true);
cv::VideoCapture cap(0);
cv::Mat frame;
while(true){
cap >> frame;
double time_stamp = (double)clock();
if(frame.empty())
break;
SLAM.TrackMonocular(frame, time_stamp);
}
SLAM.Shutdown();
SLAM.SaveKeyFrameTrajectoryTUM(“KeyFrameTrajectory.txt”);
/*SLAMを修了後、キーフレームの姿勢を
ファイルに保存*/
SLAM.Shutdown();
SLAM.SaveKeyFrameTrajectoryTUM(“KeyFra
meTrajectory.txt”);
ORB-SLAMコードリーディング
22
本日お話しする範囲
 Systemの使い方
 Systemクラスの処理概要
 Trackingスレッドの処理概要
 LocalMappingスレッドの処理概要
 LoopClosingスレッドの処理概要
System::System()
23
Systemコンストラクタ(System.cc: 32 - 114)内の
主な処理
1. VisualVocabulary読み込み(l.64)
2. Recognition Database生成(l.75)
3. Map生成(l.78)
4. 結果表示画面生成(l.81)
5. Tracking生成(l.86)
6. Local Mapping生成およびスレッド起動(l.90)
7. Loop Closing生成およびスレッド起動(l.94)
8. スレッド間相互参照設定(l.106)
System::System()
24
Systemコンストラクタ(System.cc: 32 - 114)内の
主な処理
1. VisualVocabulary読み込み(l.64)
2. Recognition Database生成(l.75)
3. Map生成(l.78)
4. 結果表示画面生成(l.81)
5. Tracking生成(l.86)
6. Local Mapping生成およびスレッド起動(l.90)
7. Loop Closing生成およびスレッド起動(l.94)
8. スレッド間相互参照設定(l.106)
mpVocabulary = new ORBVocabulary();
bool bVocLoad = mpVocabulary->loadFromTextFile(strVocFile);
System::System()
25
Systemコンストラクタ(System.cc: 32 - 114)内の
主な処理
1. VisualVocabulary読み込み(l.64)
2. Recognition Database生成(l.75)
3. Map生成(l.78)
4. 結果表示画面生成(l.81)
5. Tracking生成(l.86)
6. Local Mapping生成およびスレッド起動(l.90)
7. Loop Closing生成およびスレッド起動(l.94)
8. スレッド間相互参照設定(l.106)
// 引数にVisualVocabularyを与えてDB生成
mpKeyFrameDatabase = new KeyFrameDatabase(*mpVocabulary);
System::System()
26
Systemコンストラクタ(System.cc: 32 - 114)内の
主な処理
1. VisualVocabulary読み込み(l.64)
2. Recognition Database生成(l.75)
3. Map生成(l.78)
4. 結果表示画面生成(l.81)
5. Tracking生成(l.86)
6. Local Mapping生成およびスレッド起動(l.90)
7. Loop Closing生成およびスレッド起動(l.94)
8. スレッド間相互参照設定(l.106)
mpMap = new Map();
System::System()
27
Systemコンストラクタ(System.cc: 32 - 114)内の
主な処理
1. VisualVocabulary読み込み(l.64)
2. Recognition Database生成(l.75)
3. Map生成(l.78)
4. 結果表示画面生成(l.81)
5. Tracking生成(l.86)
6. Local Mapping生成およびスレッド起動(l.90)
7. Loop Closing生成およびスレッド起動(l.94)
8. スレッド間相互参照設定(l.106)
// カメラからの映像にORBを描画する画面
mpFrameDrawer = new FrameDrawer(mpMap);
// 点群とカメラ位置を描画する画面
mpMapDrawer = new MapDrawer(mpMap, strSettingsFile);
System::System()
28
Systemコンストラクタ(System.cc: 32 - 114)内の
主な処理
1. VisualVocabulary読み込み(l.64)
2. Recognition Database生成(l.75)
3. Map生成(l.78)
4. 結果表示画面生成(l.81)
5. Tracking生成(l.86)
6. Local Mapping生成およびスレッド起動(l.90)
7. Loop Closing生成およびスレッド起動(l.94)
8. スレッド間相互参照設定(l.106)
/* 描画画面、VisualVocabulary、KeyFrame DB、Map、カメラパラ
メータ、などを引数に与える*/
mpTracker = new Tracking(this, mpVocabulary, mpFrameDrawer,
mpMapDrawer, mpMap, mpKeyFrameDatabase,
strSettingsFile, mSensor);
System::System()
29
Systemコンストラクタ(System.cc: 32 - 114)内の
主な処理
1. VisualVocabulary読み込み(l.64)
2. Recognition Database生成(l.75)
3. Map生成(l.78)
4. 結果表示画面生成(l.81)
5. Tracking生成(l.86)
6. Local Mapping生成およびスレッド起動(l.90)
7. Loop Closing生成およびスレッド起動(l.94)
8. スレッド間相互参照設定(l.106)
/* 描画画面、VisualVocabulary、KeyFrame DB、Map、カメラパラ
メータ、などを引数に与え、このスレッドで動作させる*/
mpTracker = new Tracking(this, mpVocabulary, mpFrameDrawer,
mpMapDrawer, mpMap, mpKeyFrameDatabase,
strSettingsFile, mSensor);
System::System()
30
Systemコンストラクタ(System.cc: 32 - 114)内の
主な処理
1. VisualVocabulary読み込み(l.64)
2. Recognition Database生成(l.75)
3. Map生成(l.78)
4. 結果表示画面生成(l.81)
5. Tracking生成(l.86)
6. Local Mapping生成およびスレッド起動(l.90)
7. Loop Closing生成およびスレッド起動(l.94)
8. スレッド間相互参照設定(l.106)
/* Mapを渡してLocalMappingインスタンスを生成し、
新規スレッドでRun()を起動*/
mpLocalMapper = new
LocalMapping(mpMap, mSensor==MONOCULAR);
mptLocalMapping = new
thread(&ORB_SLAM2::LocalMapping::Run,mpLocalMapper);
System::System()
31
Systemコンストラクタ(System.cc: 32 - 114)内の
主な処理
1. VisualVocabulary読み込み(l.64)
2. Recognition Database生成(l.75)
3. Map生成(l.78)
4. 結果表示画面生成(l.81)
5. Tracking生成(l.86)
6. Local Mapping生成およびスレッド起動(l.90)
7. Loop Closing生成およびスレッド起動(l.94)
8. スレッド間相互参照設定(l.106)
/* MapとVocabularyとDBを渡してLoopClosingインスタンスを生成
し、新規スレッドでRun()を起動*/
mpLoopCloser = new LoopClosing(mpMap,
mpKeyFrameDatabase, mpVocabulary,
mSensor!=MONOCULAR);
mptLoopClosing = new
thread(&ORB_SLAM2::LoopClosing::Run, mpLoopCloser);
System::System()
32
Systemコンストラクタ(System.cc: 32 - 114)内の
主な処理
1. VisualVocabulary読み込み(l.64)
2. Recognition Database生成(l.75)
3. Map生成(l.78)
4. 結果表示画面生成(l.81)
5. Tracking生成(l.86)
6. Local Mapping生成およびスレッド起動(l.90)
7. Loop Closing生成およびスレッド起動(l.94)
8. スレッド間相互参照設定(l.106)
mpTracker->SetLocalMapper(mpLocalMapper);
mpTracker->SetLoopClosing(mpLoopCloser);
mpLocalMapper->SetTracker(mpTracker);
mpLocalMapper->SetLoopCloser(mpLoopCloser);
mpLoopCloser->SetTracker(mpTracker);
mpLoopCloser->SetLocalMapper(mpLocalMapper);
System::TrackMonocular()
33
 カメラやビデオから取得した画像
(cv::Mat)を引数として とタイムスタンプ
(timestamp)と一緒に入力
 内部では、画像とタイムスタンプをそのま
まトラッカー(mpTracker)の
GrabImageMonocular()メンバ関数へ渡し
て、カメラ姿勢や追跡中の点群の情報な
どを取得
ORB-SLAMコードリーディング
34
本日お話しする範囲
 Systemの使い方
 Systemクラスの処理概要
 Trackingスレッドの処理概要
 LocalMappingスレッドの処理概要
 LoopClosingスレッドの処理概要
Tracking::GrabImageMonocular()
35
 引数として、
System::TrackMonocular()から画像と
タイムスタンプが渡される
 画像をグレースケールに変換
 Frame構築
 Tracking::Track()関数呼び出し
 カメラの姿勢を返す
Tracking::GrabImageMonocular()
36
 引数として、
System::TrackMonocular()から画像と
タイムスタンプが渡される
 画像をグレースケールに変換
 Frame構築
 Tracking::Track()関数呼び出し
 カメラの姿勢を返す
mpCurrentFrame = Frame(mImGray, timestamp,
mpORBextractorLeft, mpORBVocabulary,
mK, mDistCoef, mbf, mThDepth);
グレースケール画像 タイムスタンプ
Tracking::GrabImageMonocular()
37
 引数として、
System::TrackMonocular()から画像と
タイムスタンプが渡される
 画像をグレースケールに変換
 Frame構築
 Tracking::Track()関数呼び出し
 カメラの姿勢を返す
mpCurrentFrame = Frame(mImGray, timestamp,
mpORBextractorLeft, mpORBVocabulary,
mK, mDistCoef, mbf, mThDepth);
ORB検出器
(Frameコンストラクタ内で使用)
VisualVocabulary
Tracking::GrabImageMonocular()
38
 引数として、
System::TrackMonocular()から画像と
タイムスタンプが渡される
 画像をグレースケールに変換
 Frame構築
 Tracking::Track()関数呼び出し
 カメラの姿勢を返す
mpCurrentFrame = Frame(mImGray, timestamp,
mpORBextractorLeft, mpORBVocabulary,
mK, mDistCoef, mbf, mThDepth);
カメラ行列 歪パラメータ Monocular SLAMでは使用しない
Tracking::Track()
39
Track()
Frame::Frame()
Tracking::Track()
40
Track()
Frame::Frame()
MonocularInitializ
ation()
• 対応点が十分とれた2つのフレー
ムからMapとCamera Poseの初期値
算出
• FとHを並行して求めて、良い方の
モデルを採用
• 詳細はInitializer::Initialize()参照
Tracking::Track()
41
Track()
Frame::Frame()
• Local Map Points
の追跡
• カメラ姿勢推定
Track Local Map
TrackWithMotionModel()
TrackLocalMap()
TrackReferenceKeyFrame()
Tracking成功Tracking失敗
OK
NG
NG
OK
OKNG
前フレームのキーポイ
ントと対応する点を現
フレームから速度一定
と仮定して探索し、対
応点からポーズ推定
BoWで対応キーフレー
ムの対応点を探索し、
ポーズ推定
対応するLocal Mapを
Refineして、ポーズ推定
Tracking::Track()
43
Track()
Frame::Frame()
KeyFrameが条件を満たしているか
の判定
if(NeedNewKeyFrame())
CreateNewKeyFrame();
ORB-SLAMコードリーディング
44
本日お話しする範囲
 Systemの使い方
 Systemクラスの処理概要
 Trackingスレッドの処理概要
 LocalMappingスレッドの処理概要
 LoopClosingスレッドの処理概要
LoopMapping::Run()
45
Run()
LoopMapping::Run()
46
Run()
新しいKeyFrameが来たかの判定
CheckNewKeyFrames();
LoopMapping::Run()
47
Run()
• キーフレームを挿入して
Covisibility GraphとSpanning
Treeを更新
• BoW表現を計算
ProcessNewKeyFrame();
LoopMapping::Run()
48
Run()
キーフレームの点のうち、ロバスト
でないものを除去
MapPointCulling();
LoopMapping::Run()
49
Run()
Covisibility Graph上の隣接キーフ
レームを用いて追跡点の三次元
座標を算出しMap Points生成
CreateNewMapPoints();
もう一つ隣のキーフレームを用い
て残った追跡点のMap Points生成
SearchInNeighbors();
LoopMapping::Run()
50
Run()
バンドル調整で現キーフレームと
隣接キーフレームの姿勢、および
それらから観測できる点群を最適
化
Optimizer::LocalBundleAdjustmen
t(mpCurrentKeyFrame,&mbAbort
BA, mpMap);
LoopMapping::Run()
51
Run()Covisibility Graph上の隣接キーフ
レームのうち、他と重複の大きいも
のを除去
KeyFrameCulling();
ORB-SLAMコードリーディング
52
本日お話しする範囲
 Systemの使い方
 Systemクラスの処理概要
 Trackingスレッドの処理概要
 LocalMappingスレッドの処理概要
 LoopClosingスレッドの処理概要
LoopClosing::Run()
53
Run()
LoopClosing::Run()
54
Run()
新規キーフレームの取得
CheckNewKeyFrames();
LoopClosing::Run()
55
Run()
Covisibility Graph上のループ候補
を取得
DetectLoop();
LoopClosing::Run()
56
Run()
• ループ上で隣接するキーフレー
ム間の対応点を算出
• キーフレーム間の相似変換算出
(3D to 3D)
ComputeSim3();
LoopClosing::Run()
57
Run()
• 相似変換を伝播させてカメラ姿
勢補正
• Essential Graph上でLoop
Closingにより各カメラ姿勢を最
適化
• カメラ姿勢最適化後、点群の位
置を最適化
CorrectLoop();
まとめ
58
 実装は論文通りなので、論文と照らし合わせながらソー
スコードを読んだ方が理解が早い。
 巨大なヒューリスティックの塊
 Systemクラスがメインで、Trackingをメインスレッドで動か
し、LocalMapping、LoopClosingのスレッドを生成。
 各クラス内の処理ではほとんどメンバー関数自体には引
数を渡さず、メンバー変数を直接変更するため、各関数
の影響範囲が見えづらい
 リアルタイムかつマルチスレッドで処理が複雑、かつクラ
ス同士が複雑に絡み合っており、カスタマイズは非常に
ツライ。。。

More Related Content

What's hot

SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向SSII
 
ロボティクスにおける SLAM 手法と実用化例
ロボティクスにおける SLAM 手法と実用化例ロボティクスにおける SLAM 手法と実用化例
ロボティクスにおける SLAM 手法と実用化例Yoshitaka HARA
 
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~SSII
 
Visual-SLAM技術を利用した 果樹園の3次元圃場地図の作成
Visual-SLAM技術を利用した果樹園の3次元圃場地図の作成Visual-SLAM技術を利用した果樹園の3次元圃場地図の作成
Visual-SLAM技術を利用した 果樹園の3次元圃場地図の作成Masahiro Tsukano
 
SLAM入門 第2章 SLAMの基礎
SLAM入門 第2章 SLAMの基礎SLAM入門 第2章 SLAMの基礎
SLAM入門 第2章 SLAMの基礎yohei okawa
 
Direct Sparse Odometryの解説
Direct Sparse Odometryの解説Direct Sparse Odometryの解説
Direct Sparse Odometryの解説Masaya Kaneko
 
オープンソース SLAM の分類
オープンソース SLAM の分類オープンソース SLAM の分類
オープンソース SLAM の分類Yoshitaka HARA
 
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。ROBOTIS Japan
 
CNN-SLAMざっくり
CNN-SLAMざっくりCNN-SLAMざっくり
CNN-SLAMざっくりEndoYuuki
 
SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介miyanegi
 
Cartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAMCartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAMYoshitaka HARA
 
20090924 姿勢推定と回転行列
20090924 姿勢推定と回転行列20090924 姿勢推定と回転行列
20090924 姿勢推定と回転行列Toru Tamaki
 
ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築Yoshitaka HARA
 
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成MobileRoboticsResear
 
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理Toru Tamaki
 
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日Kitsukawa Yuki
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解Koji Terada
 

What's hot (20)

Visual slam
Visual slamVisual slam
Visual slam
 
SLAM勉強会(PTAM)
SLAM勉強会(PTAM)SLAM勉強会(PTAM)
SLAM勉強会(PTAM)
 
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
 
ロボティクスにおける SLAM 手法と実用化例
ロボティクスにおける SLAM 手法と実用化例ロボティクスにおける SLAM 手法と実用化例
ロボティクスにおける SLAM 手法と実用化例
 
20180424 orb slam
20180424 orb slam20180424 orb slam
20180424 orb slam
 
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
 
Visual-SLAM技術を利用した 果樹園の3次元圃場地図の作成
Visual-SLAM技術を利用した果樹園の3次元圃場地図の作成Visual-SLAM技術を利用した果樹園の3次元圃場地図の作成
Visual-SLAM技術を利用した 果樹園の3次元圃場地図の作成
 
SLAM入門 第2章 SLAMの基礎
SLAM入門 第2章 SLAMの基礎SLAM入門 第2章 SLAMの基礎
SLAM入門 第2章 SLAMの基礎
 
Direct Sparse Odometryの解説
Direct Sparse Odometryの解説Direct Sparse Odometryの解説
Direct Sparse Odometryの解説
 
オープンソース SLAM の分類
オープンソース SLAM の分類オープンソース SLAM の分類
オープンソース SLAM の分類
 
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
 
CNN-SLAMざっくり
CNN-SLAMざっくりCNN-SLAMざっくり
CNN-SLAMざっくり
 
SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介
 
Cartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAMCartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAM
 
20090924 姿勢推定と回転行列
20090924 姿勢推定と回転行列20090924 姿勢推定と回転行列
20090924 姿勢推定と回転行列
 
ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築
 
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
 
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理
 
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解
 

Similar to 20180527 ORB SLAM Code Reading

とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例Shinji Tamura
 
SSII2022 [OS3-03] スケーラブルなロボット学習システムに向けて
SSII2022 [OS3-03] スケーラブルなロボット学習システムに向けてSSII2022 [OS3-03] スケーラブルなロボット学習システムに向けて
SSII2022 [OS3-03] スケーラブルなロボット学習システムに向けてSSII
 
CloudConductorの特長と最新動向(OSSユーザーのための勉強会#7)
CloudConductorの特長と最新動向(OSSユーザーのための勉強会#7)CloudConductorの特長と最新動向(OSSユーザーのための勉強会#7)
CloudConductorの特長と最新動向(OSSユーザーのための勉強会#7)cloudconductor
 
2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation
2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation
2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentationTakuya Minagawa
 
20190706cvpr2019_3d_shape_representation
20190706cvpr2019_3d_shape_representation20190706cvpr2019_3d_shape_representation
20190706cvpr2019_3d_shape_representationTakuya Minagawa
 
object detection with lidar-camera fusion: survey
object detection with lidar-camera fusion: surveyobject detection with lidar-camera fusion: survey
object detection with lidar-camera fusion: surveyTakuya Minagawa
 
Share pointを支えるsql server2014最新情報 tokyo_公開用
Share pointを支えるsql server2014最新情報 tokyo_公開用Share pointを支えるsql server2014最新情報 tokyo_公開用
Share pointを支えるsql server2014最新情報 tokyo_公開用Yukio Kumazawa
 
run Keras model on opencv
run Keras model on opencvrun Keras model on opencv
run Keras model on opencvTakuya Minagawa
 
レガシー Web からの脱却 ~ 開発者が次に目指すべき Web アプリの姿とは?
レガシー Web からの脱却 ~ 開発者が次に目指すべき Web アプリの姿とは?レガシー Web からの脱却 ~ 開発者が次に目指すべき Web アプリの姿とは?
レガシー Web からの脱却 ~ 開発者が次に目指すべき Web アプリの姿とは?Akira Inoue
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発Tomoharu ASAMI
 
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Toshiaki Maki
 
セミナー資料「STAR-CCM+ クラウド活用ハンズオンセミナー with Rescale」
セミナー資料「STAR-CCM+ クラウド活用ハンズオンセミナー with Rescale」セミナー資料「STAR-CCM+ クラウド活用ハンズオンセミナー with Rescale」
セミナー資料「STAR-CCM+ クラウド活用ハンズオンセミナー with Rescale」Rescale Japan株式会社
 
20181130 lidar object detection survey
20181130 lidar object detection survey20181130 lidar object detection survey
20181130 lidar object detection surveyTakuya Minagawa
 
20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れる20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れるKenji Wada
 
モバイルが モーションセンサーに 出会ったら
モバイルがモーションセンサーに出会ったらモバイルがモーションセンサーに出会ったら
モバイルが モーションセンサーに 出会ったらAkira Hatsune
 
Relationship betweenddd and mvc
Relationship betweenddd and mvcRelationship betweenddd and mvc
Relationship betweenddd and mvcTakao Tetsuro
 
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説Daisuke Nishino
 
Azure Remote Renderingを試す
Azure Remote Renderingを試すAzure Remote Renderingを試す
Azure Remote Renderingを試すTakahiro Miyaura
 

Similar to 20180527 ORB SLAM Code Reading (20)

とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例
 
3DFeat-Net
3DFeat-Net3DFeat-Net
3DFeat-Net
 
SSII2022 [OS3-03] スケーラブルなロボット学習システムに向けて
SSII2022 [OS3-03] スケーラブルなロボット学習システムに向けてSSII2022 [OS3-03] スケーラブルなロボット学習システムに向けて
SSII2022 [OS3-03] スケーラブルなロボット学習システムに向けて
 
CloudConductorの特長と最新動向(OSSユーザーのための勉強会#7)
CloudConductorの特長と最新動向(OSSユーザーのための勉強会#7)CloudConductorの特長と最新動向(OSSユーザーのための勉強会#7)
CloudConductorの特長と最新動向(OSSユーザーのための勉強会#7)
 
2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation
2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation
2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation
 
20190706cvpr2019_3d_shape_representation
20190706cvpr2019_3d_shape_representation20190706cvpr2019_3d_shape_representation
20190706cvpr2019_3d_shape_representation
 
object detection with lidar-camera fusion: survey
object detection with lidar-camera fusion: surveyobject detection with lidar-camera fusion: survey
object detection with lidar-camera fusion: survey
 
Share pointを支えるsql server2014最新情報 tokyo_公開用
Share pointを支えるsql server2014最新情報 tokyo_公開用Share pointを支えるsql server2014最新情報 tokyo_公開用
Share pointを支えるsql server2014最新情報 tokyo_公開用
 
run Keras model on opencv
run Keras model on opencvrun Keras model on opencv
run Keras model on opencv
 
Semantic segmentation2
Semantic segmentation2Semantic segmentation2
Semantic segmentation2
 
レガシー Web からの脱却 ~ 開発者が次に目指すべき Web アプリの姿とは?
レガシー Web からの脱却 ~ 開発者が次に目指すべき Web アプリの姿とは?レガシー Web からの脱却 ~ 開発者が次に目指すべき Web アプリの姿とは?
レガシー Web からの脱却 ~ 開発者が次に目指すべき Web アプリの姿とは?
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
 
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
 
セミナー資料「STAR-CCM+ クラウド活用ハンズオンセミナー with Rescale」
セミナー資料「STAR-CCM+ クラウド活用ハンズオンセミナー with Rescale」セミナー資料「STAR-CCM+ クラウド活用ハンズオンセミナー with Rescale」
セミナー資料「STAR-CCM+ クラウド活用ハンズオンセミナー with Rescale」
 
20181130 lidar object detection survey
20181130 lidar object detection survey20181130 lidar object detection survey
20181130 lidar object detection survey
 
20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れる20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れる
 
モバイルが モーションセンサーに 出会ったら
モバイルがモーションセンサーに出会ったらモバイルがモーションセンサーに出会ったら
モバイルが モーションセンサーに 出会ったら
 
Relationship betweenddd and mvc
Relationship betweenddd and mvcRelationship betweenddd and mvc
Relationship betweenddd and mvc
 
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
 
Azure Remote Renderingを試す
Azure Remote Renderingを試すAzure Remote Renderingを試す
Azure Remote Renderingを試す
 

More from Takuya Minagawa

Machine Learning Operations (MLOps): Overview, Definition, and Architecture
Machine Learning Operations (MLOps): Overview, Definition, and ArchitectureMachine Learning Operations (MLOps): Overview, Definition, and Architecture
Machine Learning Operations (MLOps): Overview, Definition, and ArchitectureTakuya Minagawa
 
点群SegmentationのためのTransformerサーベイ
点群SegmentationのためのTransformerサーベイ点群SegmentationのためのTransformerサーベイ
点群SegmentationのためのTransformerサーベイTakuya Minagawa
 
Learning to Solve Hard Minimal Problems
Learning to Solve Hard Minimal ProblemsLearning to Solve Hard Minimal Problems
Learning to Solve Hard Minimal ProblemsTakuya Minagawa
 
ConditionalPointDiffusion.pdf
ConditionalPointDiffusion.pdfConditionalPointDiffusion.pdf
ConditionalPointDiffusion.pdfTakuya Minagawa
 
楽しいコンピュータビジョンの受託仕事
楽しいコンピュータビジョンの受託仕事楽しいコンピュータビジョンの受託仕事
楽しいコンピュータビジョンの受託仕事Takuya Minagawa
 
20200910コンピュータビジョン今昔物語(JPTA講演資料)
20200910コンピュータビジョン今昔物語(JPTA講演資料)20200910コンピュータビジョン今昔物語(JPTA講演資料)
20200910コンピュータビジョン今昔物語(JPTA講演資料)Takuya Minagawa
 
2020/07/04 BSP-Net (CVPR2020)
2020/07/04 BSP-Net (CVPR2020)2020/07/04 BSP-Net (CVPR2020)
2020/07/04 BSP-Net (CVPR2020)Takuya Minagawa
 
20190131 lidar-camera fusion semantic segmentation survey
20190131 lidar-camera fusion semantic segmentation survey20190131 lidar-camera fusion semantic segmentation survey
20190131 lidar-camera fusion semantic segmentation surveyTakuya Minagawa
 
object detection with lidar-camera fusion: survey (updated)
object detection with lidar-camera fusion: survey (updated)object detection with lidar-camera fusion: survey (updated)
object detection with lidar-camera fusion: survey (updated)Takuya Minagawa
 
CVPR2018のPointCloudのCNN論文とSPLATNet
CVPR2018のPointCloudのCNN論文とSPLATNetCVPR2018のPointCloudのCNN論文とSPLATNet
CVPR2018のPointCloudのCNN論文とSPLATNetTakuya Minagawa
 
Curiosity driven exploration
Curiosity driven explorationCuriosity driven exploration
Curiosity driven explorationTakuya Minagawa
 
「コンピュータビジョン勉強会@関東」紹介資料
「コンピュータビジョン勉強会@関東」紹介資料「コンピュータビジョン勉強会@関東」紹介資料
「コンピュータビジョン勉強会@関東」紹介資料Takuya Minagawa
 
車載カメラの映像から歩行者に関わる危険を予測する技術
車載カメラの映像から歩行者に関わる危険を予測する技術車載カメラの映像から歩行者に関わる危険を予測する技術
車載カメラの映像から歩行者に関わる危険を予測する技術Takuya Minagawa
 
20170806 Discriminative Optimization
20170806 Discriminative Optimization20170806 Discriminative Optimization
20170806 Discriminative OptimizationTakuya Minagawa
 
LiDAR点群とSfM点群との位置合わせ
LiDAR点群とSfM点群との位置合わせLiDAR点群とSfM点群との位置合わせ
LiDAR点群とSfM点群との位置合わせTakuya Minagawa
 

More from Takuya Minagawa (20)

Machine Learning Operations (MLOps): Overview, Definition, and Architecture
Machine Learning Operations (MLOps): Overview, Definition, and ArchitectureMachine Learning Operations (MLOps): Overview, Definition, and Architecture
Machine Learning Operations (MLOps): Overview, Definition, and Architecture
 
MobileNeRF
MobileNeRFMobileNeRF
MobileNeRF
 
点群SegmentationのためのTransformerサーベイ
点群SegmentationのためのTransformerサーベイ点群SegmentationのためのTransformerサーベイ
点群SegmentationのためのTransformerサーベイ
 
Learning to Solve Hard Minimal Problems
Learning to Solve Hard Minimal ProblemsLearning to Solve Hard Minimal Problems
Learning to Solve Hard Minimal Problems
 
ConditionalPointDiffusion.pdf
ConditionalPointDiffusion.pdfConditionalPointDiffusion.pdf
ConditionalPointDiffusion.pdf
 
楽しいコンピュータビジョンの受託仕事
楽しいコンピュータビジョンの受託仕事楽しいコンピュータビジョンの受託仕事
楽しいコンピュータビジョンの受託仕事
 
20210711 deepI2P
20210711 deepI2P20210711 deepI2P
20210711 deepI2P
 
20201010 personreid
20201010 personreid20201010 personreid
20201010 personreid
 
20200910コンピュータビジョン今昔物語(JPTA講演資料)
20200910コンピュータビジョン今昔物語(JPTA講演資料)20200910コンピュータビジョン今昔物語(JPTA講演資料)
20200910コンピュータビジョン今昔物語(JPTA講演資料)
 
2020/07/04 BSP-Net (CVPR2020)
2020/07/04 BSP-Net (CVPR2020)2020/07/04 BSP-Net (CVPR2020)
2020/07/04 BSP-Net (CVPR2020)
 
20200704 bsp net
20200704 bsp net20200704 bsp net
20200704 bsp net
 
20190131 lidar-camera fusion semantic segmentation survey
20190131 lidar-camera fusion semantic segmentation survey20190131 lidar-camera fusion semantic segmentation survey
20190131 lidar-camera fusion semantic segmentation survey
 
object detection with lidar-camera fusion: survey (updated)
object detection with lidar-camera fusion: survey (updated)object detection with lidar-camera fusion: survey (updated)
object detection with lidar-camera fusion: survey (updated)
 
CVPR2018のPointCloudのCNN論文とSPLATNet
CVPR2018のPointCloudのCNN論文とSPLATNetCVPR2018のPointCloudのCNN論文とSPLATNet
CVPR2018のPointCloudのCNN論文とSPLATNet
 
Curiosity driven exploration
Curiosity driven explorationCuriosity driven exploration
Curiosity driven exploration
 
「コンピュータビジョン勉強会@関東」紹介資料
「コンピュータビジョン勉強会@関東」紹介資料「コンピュータビジョン勉強会@関東」紹介資料
「コンピュータビジョン勉強会@関東」紹介資料
 
車載カメラの映像から歩行者に関わる危険を予測する技術
車載カメラの映像から歩行者に関わる危険を予測する技術車載カメラの映像から歩行者に関わる危険を予測する技術
車載カメラの映像から歩行者に関わる危険を予測する技術
 
20170806 Discriminative Optimization
20170806 Discriminative Optimization20170806 Discriminative Optimization
20170806 Discriminative Optimization
 
Cvpr2017事前読み会
Cvpr2017事前読み会Cvpr2017事前読み会
Cvpr2017事前読み会
 
LiDAR点群とSfM点群との位置合わせ
LiDAR点群とSfM点群との位置合わせLiDAR点群とSfM点群との位置合わせ
LiDAR点群とSfM点群との位置合わせ
 

20180527 ORB SLAM Code Reading