移動ロボットの向き、特定の画像ポイントを登録する方法の選択

これは、記事の背景と続きです。



夕方に... Habréのすべての記事が読まれ 、RaspberryPi 3のロボットの自律方向に関する「小さな」プロジェクトが開始されました。鉄との問題はありません。キャリブレーションの安定性のため)、カメラに接続されたカメラの上下、コンパス、ジャイロスコープなど:







既存のSLAMシステムは、価格や品質/速度のいずれにも適合しません。 Visual SLAMには多くの詳細があるため、パブリックドメインでアルゴリズムとコードを段階的に記述し、広めることにしました。1つまたは別のアルゴリズムを選択する理由を正当化します。



一般的に、計画は次のようになります(最後を除くC ++のすべて)。



  1. カメラからのビデオのキャプチャ(ほとんどの場合)
  2. 画像の1/1/1/8フレームごとに特別なポイントを強調(書き込み)
  3. 特異点の登録(書面)
  4. 特異点の追跡(書きやすい)
  5. 点群とその中のカメラ座標の3D再構成(書かれているが、それほど難しくない)
  6. モーター、コンパスなどのドライバー(大部分はコピーペースト
  7. 前のコードをデバッグするために、少なくともプリミティブなトップレベルロジックを記述します(Pythonで移動する場所と理由は保留中です)


特別なポイントの割り当てとその登録は、パフォーマンスと精度の両方において重要なステップであり、既存の(私に知られている)アルゴリズムは(このプラットフォームに)適していないか、速度または精度(精度)に適していません。



ポイントマッチングアルゴリズムには3つの特性があります。



  1. リコール(検出されたすべてのポイントのうち、何パーセントのポイントが正しく接続されているか)
  2. 精度(接続されているすべてのポイントから何パーセントのポイントが正しく接続されているか)
  3. 速度(検出および結合時間)


接続点は後でRANSACメソッドを使用して変換行列を見つけるために使用されるため、その複雑さは〜O((1 / precision)^ N)です。ここで、Nはこの行列の計算に必要な接続点のペアの最小数です。 3D(2Dに投影)の平面(ホモグラフィマトリックス)を探している場合、N = 4、3Dポイントの剛性変換(基本マトリックス)がある場合、N = 5-8。 つまり、たとえば精度= 0.1(10%)の場合、ホモグラフィを検索するには、数万個の高価なサンプルが必要になり、数百万個のサンプルが必要になります。 したがって、高精度のアルゴリズムが開発およびテストされました。



検出およびバインディングアルゴリズムを確認するために、Mikolajczyk et al。(opencv opencv_extraの配布に含まれています)によって提案された画像の標準セットがあります。

この8セットの画像セットでは、各セットは6枚の写真で構成されています。



最初の写真は参考です。 残りの5つはゆがんでおり、ゆがみが増加しています。 各セットは、その歪みのタイプ(回転、シフト、スケール、シャッタースピード、視差、ぼかし、焦点ぼけ、圧縮アーチファクト)に対応しています))、垂直スケール-パーセンテージ(多いほど良い)およびセット内の水平な画像番号(多いほど難しい)。 アルゴリズム名の右側には、実行時間の設定(検出+記述+マッチング)があります。



樹皮(スケール+回転)の精度を設定します。







リコール:







バイクの設定(シフト+スムーズ)精度:







リコール:







壁(遠近歪み)の精度を設定します。







壁のリコール:







壁の例を使用した表示可能な登録結果(赤-偽陽性、緑の真陽性)







残りの写真とソースコードは testサブディレクトリにあります。



おわりに



このアルゴリズムはテストで非常に価値があることが証明されており、トピックプロジェクトで使用されます。



All Articles