1

私はロボットに地上の線を識別させ、それを追跡させようとしています。
インターネットを検索して、ライン追跡ロボットの例をたくさん見つけましたが、それらはすべて、専用センサーを使用してラインを検出しています。
そのためにロボットのカメラを使いたいです。

私はコンピュータビジョンの分野に慣れていないので、問題への取り組み方についてアドバイスをお願いします。具体的には、ロボットに対する線とその角度/方向をどのように検出できますか?ターンを検出するにはどうすればよいですか?

次のnikiesコメントを更新
してください:線がどのように見えるかは私次第です。明るい色のテープを地面に置くことを考えていましたが、最も簡単なものを使用できます...
カメラはカラーと白黒の両方の画像を撮影できます。
照明と場所は異なる場合がありますが、後で心配します。開始するために何を探すべきかを知りたいだけです。それを行うための「一般的な」方法はありますか?

4

4 に答える 4

6

改良に適した 1 つのアプローチを次に示します。

ズーム、ピクセル化フィルター、およびしきい値処理を組み合わせて、カメラ入力を白または黒の正方形の 3 x 3 グリッドに減らします。適切な調整を行うことで、縮小されたピクセルのうち正確に 3 つを占めるように、縮小によって線が拡大されるはずです。次に、ロボットのロジックは、8 つの方向のいずれかに移動して、中央のピクセルを黒に保つことで構成されます。

縮小後の画像:

☐ ■ ☐
☐ ■ ☐ ↑ move forward one unit
☐ ■ ☐

左折は次のようになります。

☐ ☐ ☐
■ ■ ☐ ← turn 90 degrees left
☐ ■ ☐

これは非常に単純なスキームであり、ビデオ入力をクリーンな 3 x 3 グリッドに変換するのは簡単な作業ではありませんが、正しい方向に進むには十分なはずです。

于 2011-12-13T20:29:56.213 に答える
1

1 つのオプションは、OpenCV または同様の画像処理 / ビジョン ライブラリを前方および下向きのカメラと一緒に使用して、次のことを行うことです。

  1. 黄色やオレンジ色など、既知の珍しい明るい色のテープを貼ります。ロボットに光源を取り付けたい場合は、再帰反射テープを使用することもできます。
  2. OpenCV を使用して、カラー ビデオ イメージを 3 つの HSV プレーン (色相 (色)、彩度、値 (強度)) に分割します。
  3. ストローク幅変換を使用して線を識別します。次の StackOverflow 投稿には、SWT に関するビデオへのリンクがあります: Stroke Width Transform (SWT) implementation (Java, C#...)
  4. 細線化アルゴリズム (Stentiford または Zhang-Suen) を適用して、セグメント化されたテープ ラインを 1 ピクセル幅に縮小します。
  5. 単一のピクセルをカーブ フィットの入力ポイントとして扱います。または、より単純に、ライン内の N 個の連続するポイントのグループごとに、終点から終点までの角度を計算します。
  6. 少しの 3D ジオメトリと、ロボットの現在の方向と速度に関する情報を適用して、線をたどるために、ロボットが曲がる必要がある時間と、どれだけ鋭く曲がるかを計算します。

ロボットの動きが遅い場合は、下向きのカメラが適している可能性があります。計算は簡単ですが、ロボットは遠くを見ることができません。

于 2011-12-30T16:50:59.303 に答える
0

あなたのロボットはどのくらいの速さで動く必要がありますか? AI(人工知能)オプションがあります(他の回答で説明されているように、簡単な決定を下すよりも遅くなります。

AI分野では、次のことを調査できます。

自己組織化マップ (SOM) を使用して、黒い線で推論を試みます。形を識別するように教えることができます (以前に文字を識別するために使用しました)。これは最新のコンピューターでかなり迅速に計算できると思いますが、ロボットのハードウェアに依存します (完全には思い出せません)。

AI の技術は、トレーニングと習得にかなりの時間がかかります。固定コードの方法が必要な場合は、他の答えも良いオプションです。

于 2011-12-18T21:43:22.977 に答える
0

さて、できることはたくさんあります。あなたがそれらを知らないのであれば、ユニオン検索アルゴリズムについて読むことから始めます。環境によっては、1) 画像に対してコントラスト正規化またはヒストグラム均等化を実行し、次に 2) 線の色にほぼ一致するすべてのピクセルをユニオン検索データ構造に追加することで回避できる場合があります。堅牢性 (カラー カメラを使用している場合) のために、色相情報を含まず、どこでも検出される黒ではなく、明るいオレンジなど、非常に強く現れるものを選びます。

そこから、処理されたデータに基づいて意思決定を行う何らかの方法が必要になります。どの画像セグメントが線であるかを推測し、その方向を計算し、コントローラーの回転方向を計算する単純な (確かに不完全ですが) アルゴリズムを作成することを想像できます。おそらく、画像内のいくつかの水平線をスキャンし、フィルターからの最大応答に線を当てはめます。これにより、必要なもののほとんどが得られる可能性があります。ハードウェアに基づいてより賢い方法を考え出すか、たとえば、線が常に画像の下部からある高さまで伸びるようにすることができます。

あなたが本当に野心的で数学に熟練している場合は、(カメラ)レンズのキャリブレーションを読む必要があります. 基本的に、カメラのレンズに数学的モデルを当てはめ、画像内のすべてがロボットの下の地面にあると仮定することで、ロボットに対して 3D でラインがどこに走っているかを実際に把握できます。ただし、この最後のステップにはかなりの量の知識が必要になるため、簡単であるとは思わないでください。

于 2011-12-19T06:18:23.317 に答える