画像からのおもちゃのヘリコプターの向きの決定


7

私は、WebカメラといくつかのIR LEDを備えたArduinoを使用して、おもちゃのIRリモコンヘリコプター(Syma s107など)の自律制御システムの開発に取り組んでいます。約2 GHzで実行されているラップトップでOpenCVを使用してC ++を使用しています。システムをできるだけリアルタイムに近づける必要があります。

2D画像でヘリコプターの回転を効果的に決定する方法がわかりません(より正確には、カメラの画像平面に対するヘリコプターのヨー)。この情報は、ヘリコプターを画面内で安定させるために重要です。

私は検討し、少なくとも部分的に胴体と尾の位置を決定し、ジオメトリとパースペクティブのいくつかのトリックを使用して形状の推定を得ましたが、十分に低いノイズで尾と胴体を正確に見つけることは困難であることが判明しました。ヘリコプターの特定の場所にある種のカラーマーカーを使用することも検討しましたが、ほぼ左とほぼ右よりも正確な見積もりを取得する方法がわかりません。


2
いくつかの(できれば大きくない)サンプル写真を投稿して、それらの問題を強調できますか?

@mtrwわからない。これは、画像認識の問題です。しかし、私が知っているのは少し画像認識ではありません。
dmckee ---元モデレーターの子猫2013

OK。持ち帰ります。最もアクティブなタグは[image-processing]です。これはdsp.seに適しているかもしれません。
dmckee ---元モデレーターの子猫2013

回答:


4

ヨーの場合、ローターの回転に平行な平面でヘリコプターに固定された3つの異なるデータポイント(たとえば、異なる色のLED)があれば十分です。着陸装置に固定された3本の細い放射状アームにそれらを置くことができます。色付きの反射素材も機能するかもしれませんが、環境光の変化を補正する必要があります。

その場合、ヨー角を取得するのは簡単です。ライトが120度離れた赤、緑、青で、上から見たときにccwであるとします。

ここに画像の説明を入力してください

次に、画像にこれらのライトがさまざまなx座標の順序で表示されます。ヘリコプターが図に示す位置から反時計回りに回転すると、次のようになります。

G R B   // green and blue in front; red in back
R G B   // green in front; red and blue in back
R B G   // red and gree in front; blue in back
B R G   // etc...
B G R
G B R

(もちろん、これらの領域の境界では、2つのライトが1つのポイントにマージされます。これらは特別なケースとして処理できます。)

したがって、3つのライトを使用すると、すべてのヨーを6 x 60度のセグメントに分割できます。

左右の「ギャップ」幅を比較するだけで、さらに30度の解像度まで下げることができます。カメラから直接外を向いている場合、方位角シータ0度であり、赤いライトが鼻の上にある場合(図のように)、アルゴリズムは次のようになります。

Xr = -sin(theta)
Xg = -sin(theta + 60)
Xb = -sin(theta + 120)
if (Xg < Xr && Xr <= Xb) {
  // Green and blue are in front of red
  dxLeft = Xr - Xg
  dxRight = Xb - Xr
  yaw = (dxLeft < dxRight) ? 15+-15 : -15+-15;
}
else if (Xr < Xg && Xg < Xb) {
  // Green is in front of red and blue
  dxLeft = Xg - Xr
  dxRight = Xb - Xg
  yaw = (dxLeft < dxRight) ? 30+-15 : 60+-15;
}
else ... four more cases

X+-15上記平均X度プラスまたはマイナス15:30度のセグメント。正確なオフセットを取得するには、比率を変換する前処理されたテーブルを作成できます

R = dxLeft < dxRight ? xLeft / xRight : xRight / xLeft

これは-15から15の間の正確な方位角オフセットに変換されます。これは非常に単純な三角法であり、ヘリコプターが逆さまにならない限り、ヘリコプターの距離に関係なく機能します。

もう1つの副次的な利点:外側の2つのライト間のイメージ距離により、カメラまでの距離が逆になります。


また、カメラに対するヘリコプターの位置(少なくともX方向)を考慮する必要がある場合があります。これは、LED間の距離に影響を与える可能性があるためです。しかし、私はいくつかの巧妙なトリガー作業があなたがそれを補うことを可能にするべきだと思います。

カメラの光学系と撮像面の焦点特性を確実に知る必要がありますが、ヘリコプターが極端に近くない限り、軸外効果は小さくなります。

1

マーカーのアイデアが機能する可能性があります。

 ___ ___                ___  ___ 
  m | m                  m /  m
    |                     /   
    +                    +   
    |                   /   
    |                  /   
 --- ---           --- --- 


   \ /                   \ /        
    c                     c   

マーカーをヘリコプターの向こう側に置き、それらを手前でブロックすることを想像してみてください。ヘリコプターが回転すると、接近側のマーカーがカメラに露出されます。


1

ヘリコプターの完全な位置と方向は、平面上の4つの既知の点+キャリブレーションされたカメラ、または6つの既知の点を使用して計算できます(特定の3D構成は機能しません。たとえば、点が同じ平面上にあってはなりません)。6ポイントアルゴリズムについてはこの質問を参照してください。4ポイントアルゴリズムについては、リリエクイストによる修士論文-平面、ホモグラフィ、拡張現実が非常に便利であることがわかりましたが、オンラインでは見つかりません。キャリブレーションに焦点を当てたより簡潔な論文は、Zhang-A Flexible New Technique for Camera Calibrationによって書かれました。

トピックについての良い本:Hartley、Zisserman-コンピュータビジョンにおける複数のビュージオメトリ。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.