紙の除去
(翻訳バブルロボットのこの部分を参照してください)
特徴点、単眼、完全に自動初期化、PTAMベースのフレームワークに基づいています。
関連研究
A.ロケーション識別(おそらくループを検出するための)
言葉のバッグ
FAB-マップ
DBOW2
戻る情報covisibility複数のを引き受け
B.マップの初期化
モノスラムとLSD-SLAM(深さパラメータの逆数):単眼SLAMは、2つの方法が初期化を必要とします
本論文では、モデルベースの初期化
- シーンプレーン:ホモグラフィ
- 非平面シーン:基本行列
C.単眼SLAM
初期:フィルタジョイントとカメラを使用して、フレーム毎のマップ機能をポーズ:連続するフレーム画像は、コンピューティングリソースの浪費を処理し、累積誤差線形
キーフレームベースのSLAMのPTAM 2つのスレッド(トラックマップ)高速コーナー、無大きなループ検出
大規模単眼:フロントエンドのオプティカルフロー、FAST特徴マッチング、動きBA、また、採用されたスライディングウィンドウ、7 DOF類似性制約ループ検出の後端に基づいてBA 7 -のために最適化のDOF essiontialグラフ
×××
システムフレームワーク
A.特徴選択
パターニングのために、追跡、および再配置検出ループ特性は、各画像特徴抽出<33ミリ秒で同じであり、回転不変性を有します
B. 3つのスレッド
トラック、ローカルマップ構築、閉ループ検出
トラック
カメラ位置姿勢の各フレームについて、キーフレームを挿入し、失われたグローバル・リロケーションとの初期のマッチング特徴点を得るために、前のフレーム、カメラの動きの最適化BA姿勢、。初期位置姿勢を取得した後、システムは、ローカルマップのcovisibilityグラフ可視化を抽出されたキーフレームを維持するために使用されます。その後、現在のフレームと再投影法によるマッチング点に対応するローカルマップを検索し、すべての点が一致で現在の姿勢を最適化します。
ローカルマップ
新しいキーフレームを処理するための責任は、地元のBA最適化された復興の周りにカメラのポーズ。冗長ポイントとキーフレームを除去し、新しい地図ポイントを三角測量。
クローズループ検出
新しい各キーフレームの閉ループ検出は、相似変換は、本ループが累積誤差近景が算出されます。
最後に、類似性制約図の最適化の位置及び向きは、最適化がessensiolグラフです。
Levenverg・マルカートg2toの全てに使用される最適化アルゴリズム
C.マップの点群、およびキーフレームの選択基準
各マップのポイントクラウドの場合は、以下の情報を保存します。
- 図3Dは、ワールド座標系の座標
- ビュー方向n_i、及び対応する接続点群光学中心キーフレーム
- ORB機能記述子
- ORBのスケール不変性の制約、最大距離D_MAX観測点群と最小距離d_min
キーフレームK_Iは、以下の情報を保存します。
- カメラポーズ
- カメラ内部リファレンス
- ORB特徴抽出画像フレーム、歪み補正後
基本的なグラフ和D.convisibiltyグラフ
convisibiltyグラフは:ポイント15を観察しながら、2つのキーフレームの間、キーフレームの一方の側、共通点の重量との間に接続されています
必須グラフ:convisibiltyグラフノードと同じ、しかしより少ない点(同様の最小スパニングツリー)が、新たなキーフレームは、最も一般的な点に接続され、フレーム内に挿入されます。
モデルの位置を識別するために単語のE.バッグ
ループ検出はアルゴリズムおよび再配置DBOW2に基づいて行われます
ビジュアル辞書
キーフレームの重複
トライマッチマッチング特徴点、新たなポイントクラウド三角測量、ループ検出と再配置を促進することを余儀なく
一貫性の改善導入方向マッチング点
地図を自動的に初期化
平面視(ホモグラフィ行列)と非平面図(基本行列)、ヒューリスティック選択モデルに。アルゴリズムのステップ:
- 初期点(ORB)のマッチを探します
- 並列計算二つのモデル:ホモグラフィ行列、及びスコアは各反復における各モデルSM、ホモグラフィ行列、及び前記基本行列について計算されたベースマトリックス、前者の4つの特徴点、8である特徴点、ハイスコアを選択します。スコアは、高くない再起動します
- モデルの選択:ヒューリスティック計算RH
- 動き再構成から移動:ホモグラフィ行列が存在し、ベースマトリックスカード特異値分解を計算した後、実行することが可能であり、slam14 7を話す参照
- BA:BAグローバル最適化、付録を参照してください
トラック
A.ORB特徴抽出
1.2の画像ピラミッド、ピラミッドスケールファクタの隅にFAST抽出層8。高い画像解像度であれば、適切な加算角点。ORBは、コーナーの特徴記述子を計算しています。その後の特徴マッチングのために。
B.初期推定カメラ前の画像フレームでのポーズ
成功したトラック上の画像が考慮されている場合はカメラが等速運動です。さらにフレームの前と後の現在のカメラのマッチポイントの使用を最適化します。十分なマッチングポイントは、検索を拡張することが分かっているわけではありません。
グローバルなポーズを初期化するために再配置することによりC.
検索広げ、まだ十分にマッチングポイントを見つけることができない場合は、単語の現在のフレームバッグの計算は、フレームオプションの数を選択し、ベクトル、各候補フレーム(RANSAC反復ソルバー)の実行PNPアルゴリズムの現在のフレームの位置と方向を計算します。有効な十分な数の点をカバーできる姿勢を見つけた場合は、より多くの電気クラウドに対応するキーフレームを検索します。最後に、カメラで検出されたすべての一致点に基づいて最適化をもたらします。
ローカルマップを追跡D.
カメラが得られるポーズと一致点の初期設定すると、ポイントクラウドは、より以上の一致点を見つけるために画像上に投影することができます。複雑さを軽減するために、唯一のローカルマップをマッピングされました。ローカルマップは、キーK1のセット、さらにK2のグループにキーフレームでキーフレーム隣接K1のcovisibilityグラフを含む、共通のマップ点を有する現在のキーフレームを含む、ローカルマップは、基準キーフレームKref∈K1を有しますそれは、現在最も一般的なフレームマップポイントがあります。各マップ点K1とK2の場合、現在のフレームで次の検索を実行します。
- 画像のエッジが削除された超えて、現在のフレーム画像にマップポイントクラウド投影点xを算出します。
- n個の電流の方向との間のV線計算ビューマップビューポイントクラウド平均角度、N <COS(60)は、対応点群を削除します。
- それはすなわちd∉間隔の不変ポイントクラウドマップを、スケーリングされていない場合、カメラ距離dの中心にマップ点を計算する雲[d_min、D_MAX]、削除ポイント。
- 各フレーム画像の縮尺比d / d_minについて計算
- DのORB機能とサブフレームは、現在のコントラスト機能は点X近傍最良マッチング予測スケール層を行い、中間点の説明をマップ一致していません。
最終的なカメラを最適化するために、現在のフレームにマップの全ての点へのアクセスをもたらします。(目的は、現在のフレーム及び姿勢のローカルマップの最適化上の点との間の複数の一致点を見つけることです)。
E.基準新しいキーフレーム
- グローバル距離の再配置は、20枚の以上の画像を必要とした後、
- アイドル状態にあるローカルマップ構築、または挿入からキーフレームの後に、画像が20以上を有します
- 現在のフレームの追跡は50個の未満ポイントマップであります
- 現在のフレームを追跡する基準キーフレームポイントK_ref 90%未満であります
ローカルマップ構築
A.キーフレーム挿入
含む第一の更新covisibilityグラフ、:エッジによって接続されたKiは、検査及びKiは共通している他のキーフレームのキーフレームのノードを追加します。計算言葉キーフレームの袋、および新しいマップポイント利用三角法を生成します。
B.スクリーニング点群マップ
地図上の三角点維持するためには、その作成後最初の3つの主要なフレームに厳しいテストに合格する必要があり、残っていることを保証するために、曇り点試験は、誤ったデータであることに起因し、ない追跡することができます三角測量。ポイントは、以下の基準を満たしている必要があります。
- トラッキングスレッドは画像の25%以上で特徴点を見つけなければなりません
- あなたが複数のキーフレームの後にマップポイントを作成した場合、それは少なくとも観察他の三つのキーフレームであることのできるものでなければなりません。
試験に合格するマップ点と、それだけ観察場合は3つのキーフレーム未満を除去することができます。このような場合に削除されたキーフレームとローカルBA負ポイント値の異なる状況で生じます。この戦略は、私たちがマップすることができます少し無効なデータが含まれています。
C.は、新しいマップポイントを作成します。
新しいマップポイントは、ポイントを得るための接続TRIANGULATEでのKc covisibilityグラフをキーフレームORB機能によって作成されます。各無比のKiのためのORB機能は、我々は曇り点に見える試合に特徴点かどうかを確認するために、他のキーフレームと一致しません。このマッチングプロセスは、制約条件を満たさないレベルまで、これらのマッチポイントを削除、パートIIIのセクションEに詳細に説明します。三角形のORB特徴点は、挿入ポイントを介してシステム、視差誤差および寸法均一性再投影レビューは、新しい地図のようになるカメラ座標系における奥行き情報を必要とします。最初に2つのキーフレームの観察によって、マップ点が、それにも、他のキーフレーム内の対応する整合点を有しているが、それは詳細検索アルゴリズムに接続された他のキーフレームにマッピングすることができるが、本明細書のセクション5 D部に記載されているが。
D.ローカルBA
covisibilityグラフKcをおよびKiでBA主にローカル鍵Ki現在処理フレーム、及び他のキーフレームが接続され、キーフレームは最適化される地図ポイントを観察しました。これらの他の点のすべてを観察することができるではなく、接続キーフレームKiが最適化スレッドに保持されますが、同じまま。そして、最適化後の最適化中に、無効のマークされたすべての観測データは、詳細な最適化の具体的な付録を破棄されます。
E、地元のスクリーニングキーフレーム
それをシンプルに保つ再構築するためには、ローカルマップ構築のキーフレームは、冗長検出し、それらを削除してみてください。キーフレームの数の増加に伴い、BAは、複雑さが増すに最適化されたため、このためのBAプロセスは、非常に参考になります。同じシーンで実行されているアルゴリズムは、キーフレームの数が限られた場合に制御されるとき、それはシステムの持続的な操作を増加するように、シーンの内容が変化した場合にのみ、キーフレームの数が増加しますセックス。キーフレームKcはポイントの90%が同時に少なくとも三つの他のキーフレームは、Kcは存在することが冗長であることを観察することができれば、我々はそれを削除します。スケール条件は、最も正確な方法にマップのポイントは、それに対応するキーフレームを維持することを確認します。
クローズループ検出
最後に、抽出スレッドローカルマップキーフレームKi--、閉ループを検出します。次のように具体的な手順は次のとおりです。
、候補キーフレーム
まず最低スコアSminの保持、(= 30θmin)でcovisibilityグラフ内のKi単語類似バッグベクトルとそれに隣接する画像を計算します。私たちは、その後、画像認識データベースを検索Sminとのより低いキーフレームのスコアを捨てます。同様の動作のこのDBoW2平均スコアは、良好な堅牢性、前フレーム画像において算出DBoW2を得ることができ、我々はcovisibility情報が使用されます。また、Kiをキーフレームに接続された全ての結果から削除されます。候補ループを得るために、我々は、(キーフレームをcovisibilityグラフに接続されている)は、同じ3つの候補検出ループを有します。環境はほぼすべてのKiの方法であれば、それはいくつかの候補のループを有することができます。
B、相似変換を計算します
単眼SLAMシステムは、7自由度、3つの並進、3つの回転、スケール係数1を有している[6]。このように、ループを閉じ、我々は、累積誤差ループを得るために、キーフレームのKLループ同様の変換に現在のキーフレームからのKiを計算する必要があります。これは、幾何学的な検証ループの相似変換として計算することができます。
セクションEの第三の特定のステップに示すように、まず、ループ候補キーフレームの曇り点との間のマップの対応関係に関連付けられた現在のキーフレームのORB機能を計算します この時点で、各候補のループでは、我々は3Dに、3D対応関係を持っています。我々はホーン相似変換法によって検出された各候補について行うループ反復を、RANSAC(例えば、紙[42])。我々は相似変換シルを見つけるために十分な有効なデータを持っている場合、我々はそれを最適化し、より多くの対応を検索することができます。十分なデータがある場合のKIループが受理されるまで有効にSIL、我々はそれを最適化します。
C、ループ融合
最初のステップは、covisibilityグラフのループに関連する新たなエッジを挿入し、繰り返しループ補正マップポイントの統合です。SILの相似変換は、最初に現在のキーフレームによって補正されたループの両端を整列させることができるように、この補正方法は、鍵Kiと隣接するフレームの全てに適用される、TIWをもたらします。次いで、全ての点マップ雲ループバックキーフレームとその隣接セクションで説明したようにKiは、そのすぐ近く、領域マップの周りの狭い範囲内の対応する対応点探索にマッピングされている観察することができる5セクションD. すべての有効なデータと点群マップマッチング処理計算シル融合。すべてのキーフレーム融合プロセスはcovisibilityグラフの端にそれらを更新する、新しいエッジループ検出を作成するために使用されます。
D、エッセンシャルグラフの最適化
効果的にループを閉じるために、我々は、画像の閉ループ誤差拡散することができ、セクションDに示す第3の部分のように、本質的な図を通して姿勢の最適化をグラフ。相似変換のスケールによってオプティマイザは、紙、[6]と、オフセット補正。エラーおよび付録に示すように、コスト。最適化の後、各ポイントクラウドのマップが修正され、キーフレームに基づいて変換されます。
自分の問題のいくつか:
1。
呼び出しで定義されたどのframe.cppスレッド
、スレッドthreadLeft(フレーム::&ExtractORB、この、0、imLeft)
; threadRightスレッド(フレーム::&ExtractORB、この,. 1、imRight)
CPP 2.キーフレームで使用されます多数のロック?
GetConnectedKeyFramesで3.keyframe.cppなぜSETの使用
PCはどのようなベクトルである4.mappoint.cppを
PredictScaleスケールが5.mappoint.h mnvisbleの面で差GetFoundRatio機能何mnfoundか理由を理解していない
6.localMapping.cpp原則として、視差createnewmapPointsで
7縮尺のローカルマップのcppで言及されたものを継続
ローカルマップCPPは、隣接する二つの隣接するキーフレームとキーフレームを理解するために何を8.SearchInNeighbors、および隣接する隣接の近隣
コード:
単眼スタートモード(一例として、データセットにTUM):
コンパイルされた実行:
./Examples/Monocular/mono_tum語彙/ ORBvoc.txt例/単眼/ TUMX.yaml PATH_TO_SEQUENCE_FOLDER
データ・セット名によって決定されたデータセットをダウンロードするためTUMX.yamlファイル、Xは1、2、、PATH_TO_SEQUENCE_FOLDERデータセットパス
主な機能mono_tum.cppで
mono_tum.cpp;
- データのロードが機能LoadImagesを設定します()。唯一の単眼SLAMを設定することで、これだけの負荷TUMのRGBデータが設定ファイル以来。
- Classオブジェクトの初期化システム:SLAM。システムコンストラクタ:ロード辞書やパラメータファイル、キーフレームのデータベースを作成し、マップ(マップ)を作成し、初期化し、描画(FrameDrawer、Mapdrawer)を作成し、()を追跡するトラックの初期化スレッド。図面が初期化され、スレッドの実行を(描画開始された場合)(ローカルマップ初期化スレッドと実行を開始し、)、)(ループ検出スレッドの実行を初期化して起動します。完了後の初期化プロセスの間にポインタを設定します。
- 各(フレーム)の写真を介してタイムスタンプ順、TrackMonocular()関数の追跡を開始。タイミング。すべてのスレッドのシャットダウンを停止します()。
- 時間カメラの軌道を計算し保存します。
トラックTrackMonocularを見てください():
- ロックは、決意モードのみ配置されていません
- システムをリセットするかどうかを決定します
- GrabImageMonocular()関数(トラッキング機能を含有する)、ロックされ、トラッキング状態を更新します。
GrabImageMonocular()関数を行きます:
- 画像をグレースケールに変換される(ただし、チャネルの数およびRGBの順)
- ()最初のフレームのフレームを生成する第1の画像特性パラメータは同じではありません
- トラッキングトラック()
トラッキング()コンストラクタ:
- 内部基準負荷とカメラ、画像補正係数ベースラインを設定する* FX、特徴点の各フレーム、画像ピラミッドのスケール変更、層の数、閾値FAST特徴点(特徴点抽出が使用されます)
- ORBextractor()オブジェクトと右目を作成すると、特徴抽出の詳細です。単眼初期特徴点×2とき
- そして3Dポイントの両眼に配置さRGBD決意閾値距離:MBF * 35 / FX???
- 深度カメラに、パラメータを求めるDepthMapFactor
トラック()関数:
- 初期化されたか否か)(そうでない場合、カメラは、初期化MonocularInitialization()、StereoInitializationの種類に応じて、決定します
- 決意モード(トレースのみ)
- 移転の必要性
- パワー度姿勢キューは、参照フレームの軌跡空であります
- 動的6-6スチュワートは、キューが空でない一定速度モデルによれば、現在のフレームの最初の位置及び向きに設定されています
- 位置追跡モード、及び十分なマッチング点以上
- 移転の必要性
- 追跡参照フレーム:TrackReferenceKeyFrame()
- あまりにもフレーム整合点
- 動的6-6スチュワートは、キューが空でない一定速度モデルによれば、現在のフレームの最初の位置及び向きに設定されています
- 移転
- 全体の再配置プロセスの成功は、通常、追跡する限り
- 参照フレームとして、最新のキーフレーム
- TrackLocalMapを()、および現在の姿勢を最適化:初期姿勢が相互マッチングを得た後、ローカルマップの追跡はもっとを取得します
- プロッタを更新
- アップデートは、一定の速度モデルポーズ
- 現在のカメラを設定するためのマッピングオブジェクトポーズ
- MapPointsの増加を追跡するためにUpdateLastFrame機能を除外する
- 唯一の間のトラッキング効果をRGBD双眼鏡やカメラを改善するために、ここで生成された世代でUpdateLastFrame()関数(目だけとRGBD)のクリア一時的MapPoints、TrackWithMotionModelにおけるこれらMapPoints()は、後で投げるために使用しました
- キーフレームを追加するかどうかを決定する:NeedNewKeyFrame()は、必要とされる:CreateNewKeyFrameを();
- ポイントの3Dマップの外れ値のためのバンドル調整で検出されたものを削除します。
- トラッキングと移転失敗し、リセット()
- 追跡が失敗した場合、トラックを再生するための情報を記録ポーズ、そして時間値の相対ポーズ使用
MonocularInitialization()函数:
- 特徴点の単眼最初のフレームは、100よりも大きくなければなりません
- )(点SearchForInitialization備わり初期と現在のフレームとの間の一致を探し
- 2つの初期の少しの間にマッチング点(100未満)、再初期化する場合
- 単一のメッシュモデルは、初期MapPointsは、それらの対応点が三角形分割することができない削除し、フレーム間の相対運動を得るために、HまたはFモデルにより初期化されます
- 世界である第1フレームの初期座標系を、最初のフレームの変換行列は、単位行列であり、RCW TCW TCW構成、及びmTcwに割り当てられ、mTcw世界は、フレームにシステム座標変換行列
- 得MapPointsマップ、BAに三角点と更新パッケージ3Dおよび最適化:CreateInitialMapMonocular()
初期化します
ローカルマップLocalMapping ::実行():
- 限りキューはもはや受信しているようLocalMapingは(偽)キーフレームSetAcceptKeyFramesを入力し、巡回実行キュー知られているフレームが処理されています。
- キューで処理されるキーフレームが空でないローカルマップ構築物である:CheckNewKeyFrames()
- ProcessNewKeyFrame():弓マッピング、マップキーフレーム挿入計算キーフレームの特徴点
- )(MapPointCulling:MapPointsは、欠陥のある機能の導入ProcessNewKeyFrameを削除します
- 三角測量の新しいポイント:CreateNewMapPoints()
- すべてのキーフレームは、キュー内で処理され、現在のキーフレームと隣接するフレーム繰り返しmapPoints、および局所最適化BAの統合をチェックされている場合は、次の冗長キーフレームを除いた後LocalBundleAdjustmentを()
- 現在のフレームがキュー検出ループに追加されます
- キーフレームのSetAcceptKeyFrames(true)を追加し続けます。
ループ検出LoopClosing ::実行します():
- ループ処理
- キーフレーム検出ループmlpLoopKeyFrameQueueキューが空ではない:(LocalMapと同じではない)CheckNewKeyFrames()
- クローズド・ループ検出:DetectLoop()
- 現在のフレームと閉ループフレームSIM3変換を計算する:ComputeSim3()
- 姿勢修正、更新マップ:CorrectLoop()
DetectLoop():
- 距離が10回の未満の最後のループである場合、現在のキーフレームとしてキューから削除、閉ループが検出されません
- すべての一般的なビューのキーフレームを取得し、最低のスコアMINSCORE現在のキーフレームの同時ビューフレームの弓の類似度を計算します
- フレームの設定されたすべてのキーフレームでループ候補を見つける:DetectLoopCandidates()
- 閉ループ検出候補フレーム連続候補フレームで(これを行う具体的方法?)サブグループの候補、連続するサブグループ、現在の候補群
ComputeSim3():