前回ORB-SLAM3のビルドとデモの実行に成功したので次に具体的な中身を見ていきたいと思います。
ORB-SLAMの解説は沢山あるので今回は概要だけ確認していきます。
サンプルコードの内容・使い方についてはこちら。link
ORB-SLAM3処理概要
主要な処理要素は4つあります。
- Tracking
- Local Mapping
- ATLAS
- Loop & Map Merging
- FULL BA
それぞれの処理はスレッドで動いています。
下図はよく見かけるシステム図。
最早このスタイルが分かりやすいかどうか疑問ですが
Tracking
図に書いてあるままですが、下記の4項目を実施。
- ORB特徴抽出:フレームからORB特徴点を抽出します
- 初期ポーズ推定:前のフレームからの相対移動、リローカライゼーション、または新しいマップの作成を行います
- 局所マップのトラッキング:現在のフレームを局所マップに対して追跡し、マップとの一致を確認します。
- キーフレームの挿入:必要に応じて、現在のフレームをキーフレームとして挿入します。
この機能へのインプトとして画像[Frame]とIMUデータの2つが存在します。
先代のアルゴリズムとの違いはIMUデータの取り扱いが可能な点や魚眼タイプのカメラモデルへの対応がなされている点です。
Local Mapping
新しいキーフレームを受け取り、局所的なマップの更新を実施。
位置検出に失敗した場合はATLASで扱っている現在のActive MapをNon-active Mapへ切り替えます。[新機能]
IMUデータからフレーム間の相対移動やスケールなどを推定します。
Loop & Map Merging
ATLASのActive Mapに関してループ閉じ込み検出とマップのマージを実施。
この処理は再訪した場所の特定を行い、データの最適化を行うことで累積誤差を修正しマップ精度を向上させる機能があります。
ATLAS
ORB-SLAM3のオリジナル機能。
トラッキングに失敗したマップも保存しておくことで、後で既存のマップと統合することが出来るようになっています。
概要は以上で次はプロジェクトのフォルダ構造を確認していきます。
フォルダ構成
ORB-SLAM3
├ include/ | アルゴリズム本体
├ src/ | アルゴリズム本体
├ Examples/ | SLAMの使い方例
├ Examples_old/
├ Thirdparty/ | 依存ライブラリ
├ Vocabulary/ | DBoW2用
├ evaluation/ | 精度評価用スクリプト
├ build.sh | ビルドスクリプト
├ build_ros.sh | ros用ビルドスクリプト
├ Calibration_Tutorial.pdf | キャリブレーションに関する説明
├ Changelog.md
├ CMakeLists.txt
├ Dependencies.md
├ LICENSE
├ README.md
└ build/ | ビルド時に生成される
次回はExamplesフォルダ内を中心に見ていきます。