2016-05-17 14 views
1

私は単純なループクローズアルゴリズムを実装する方法を理解しています。ループの3D点群を閉じる

ここに私の状況です:私はx個のポイントクラウドを持っています。これらのポイントクラウドすべてのポーズを与えてくれた3dで登録アルゴリズムを使用しました。

最終的には、マップの同じ点で多かれ少なかれ、ドリフトしてしまいます。 登録アルゴリズムを使用して、実際の最終点群が私の最初の点群のどこに位置しているかを確認できます。

私が計算した「ドリフト」に基づいて、残りのポイントクラウドを私の最初のものまでグローバルに最適化したいと思います。

正確には翻訳に関して何かをすばやくコーディングすることができましたが、機能の精度/重複(壁など)が減少するため、回転が問題になります。

g2o、GTSAM、ISAMライブラリはすべて最適化したいと思っていますが、実装に膨大なオーバーヘッドがあるような気がします。パラメータは膨大な数に設定されています。

私はループを自動的に検出するつもりはありません(私は後で行います)。 これらの2点の雲は、ループを表し、訳と回転のドリフトを(正確に)伝播します私はそれらの間のすべてのポイントクラウドにそれらの間の計算を計算します)。事前に

おかげで、

+0

https://en.wikipedia.org/wiki/Procrustes_analysisを試しましたか? –

答えて

1

ループ全体は通常の手順で分解されるよう閉じ:あなたはない 3 - ループ補正

を閉じる

の1-ループ検出 2 - ループ今は自動ループ検出が必要ですが、私はそれをスキップします。

ループ閉鎖は、一方の端の右の姿勢を他方の端に適合させるために得られる問題である。ポーズはSE3変換(3D rototraslation)、スケールドリフト(単眼ビジュアルスラムのような)がある場合、ポーズはSim3変換(3D類似)です。

このポーズでは、ループ補正はすべてのポイントとキーフレームを修正してマップ全体に一貫性を持たせるという問題です。

スケールドリフトアウェア大スケール単眼SLAMは、Strasdatらの論文で、ループを修正する方法を説明しています(3番目のステップ)。

ORB-SLAM2はOptimizer :: OptimizeEssentialGraphで実装しており、オープンソースです。

関連する問題