コンピュータービジョンを使用したPIDアルゴリズムの実装


10

私は自動迷路迷路ソルバーを構築し、迷路を制御するためにWebカメラを使用しています。

他のフォーラムでの提案に基づいて、私は迷路のボールの動きを少なくとも現時点では一方向に制御しようとしています。つまり、2つの座標466,288と466,152の間でボールの動きを制御しようとしています。ステッピングモーターコントローラーボードへの入力は時間であり、各軸、つまりxとyに対して回転するステップはありません。

私が使用しているステッピングモーターコントローラーボードは、エッグボットステッピングモーターコントローラーボードです。http//www.sparkfun.com/products/10025

したがって、2点間を移動するには、2点間にいくつかのウェイポイント、つまり288と152(たとえば260 240 230 ... 150)を作成し、ボールの動きを修正する必要がありますか?

私の画像処理アルゴリズムは、ボールが回転して穴に落ちるだけのボールを追跡するには十分な速度ではありません。

次のビデオに示すように、標準のテンプレートを使用して、パスのずれについてボールの動きを修正することを提案した人もいます。

http://www.youtube.com/watch?v=Prq78ctJ2Rk&feature=player_embedded

また、ボールの動きにウェイポイントを使用して同じ問題を解決する画像処理ツールにも出会いました。同じ問題に対する解決策が多すぎるため、問題の解決に完全に混乱しています。PIDコントローラーを実装する必要があることを認識しています。しかし、問題を段階的に解決するにはどうすればよいですか?私は行き詰まって、問題を解決するための有利なスタートを見つけるのにイライラしています。

私のセットアップは次のようになります:

セットアップの写真

...そしてこれが私のソフトウェアのスクリーンショットです:

スクリーンショット

リビジョン2:私はまた、新しい問題に直面しています。以前は、ArduinoシリアルポートJavaアプレットを介してステッピングモーターを制御していました。アプレットを使用してステッパーを駆動できます。

シリアルポート経由で通信しようとするたびにボードをリセットする必要があります。また、ステッピングモーターは、コマンドが送信されない場合、小さな間隔で自身にエネルギーを供給します。ステッピングモーターがこのモードに入ると、ボードをリセットしないとボードを制御できません。どんな援助もいただければ幸いです。

リビジョン3:

PIDアルゴリズムを実装したところ、いくつかの進歩がありました。以下のビデオを見つけてください:http : //www.youtube.com/watch?v=MEfp7RqPmqY

ここで、PIDアルゴリズムが実装される速度に問題があります。実際、私の画像処理は200 msでサイクルを終了し、ボールを識別して、コマンドをステッピングモーターコントローラーボードに送信します。シリアルポートに方向を切り替えるコマンドが送信されても​​、ステッパーは同じ方向に回転し続けます。上のビデオで奇妙な行動を見つけることができます。

私の考えでは、計算されたPID値が100より大きい場合は100を送信する必要がある上限でPID値を制限する必要があります。これについてのあなたの考えを聞くのを楽しみにしています。

PIDコントローラーを実装した方法は、テンプレートマッチングアルゴリズムを使用してテンプレートの開始点を識別し、別のテンプレートマッチングアルゴリズムを使用してボールを識別したことです。次に、ボールを開始点テンプレートの図心に移動させました。PIDアルゴリズムを使用して直線に合わせるにはどうすればよいですか?

リビジョン4:

分離されたブロブの軌跡

軌道を分離しましたが、開始点から正しいピクセル座標を印刷するための正しい関数を見つけることができません。何かご意見は?


1
PSに関して:次に、画像へのリンクを投稿するだけで、誰かがやって来て、画像自体に置き換えると確信しています...
Majenko

@マット-修正されました!ただし、ユーザーは画像へのリンクだけでなく、画像に添付するテキストを提供することをお勧めします。@Saiがどこを望んでいたかわからないので、下部に配置しました。
ケビンフェルメール

うわー....これらのステッパーには、ボードを任意の速度で動かすのに十分なトルクがありますか?どこかにギアリダクションがあるといいですね。
コナーウルフ

@Fake-ステッパーは問題ありません。ボードの重量はそれほど大きくなく、重量はバランスが取れています。私は針が40cmの長さの壁掛け時計を持っていて、それは他と同じ小さなメカニズムによって制御されています。それもステッパーです。(5cmx5cmのメカニズムは、時計の直径80cmに比べて途方もなく小さいように見えます)
stevenvh

@フェイク:スティーブは正しい。ステッパーは問題ありません。それはすべてPIDアルゴリズムに関するものです
Sai

回答:


2

まず、ステッパーはポジショニングに優れているため(位置フィードバックは必要ありません)、あなたが言ったように、ステッパーの動きを確実に制限する必要があります。現時点でモーターシャフトがどのように設計されているかはわかりませんが、モーターに固定されている場合、回転を続けると、機器に損傷を与える危険性があります。

次に、センサーの200msのトランスポート遅延はおそらく遅すぎるでしょう。そうでなければ、ボール自体を遅くするために物事を大幅に遅くする必要があります。Rocket Surgeonが言ったように、画像処理アルゴリズムを簡略化してパスを一度だけ計算する必要があります次に各フレームのボールの位置のみをすばやく計算する必要があります。このステップをすばやくスキップしたい場合は、このボールの代わりに赤いボールを見つけて、より良いアルゴリズムが見つかるまで、RGB画像の赤いコンポーネントのみをチェックしてください。

PID制御では、実際には2つの別々のPIDコントローラーが必要であるという事実から始めます。1つは東西モーター用、もう1つは南北モーター用です。2つの正確なモーターがある場合、それらのパラメーターは等しくなければなりません。

PIDコントローラーが機能するためには、エラーを知る必要があります。それは、望ましい位置とボールの実際の位置との差です。このオフセットの XおよびYコンポーネントは、2つのPIDコントローラー(各モーターに1つ)の入力になります。エラーを取得するには、最初にパス上の目的の位置、つまり軌道が必要です。

軌道を取得するには、画像を処理してパスと、その始点と終点を取得する必要があります。あなたのアルゴリズムが現在、ボードの残りの部分からパスを区別できるかどうかはわかりませんが、そうでない場合、これは続行する前に処理する独自のアルゴリズムであることに注意してください。この場合も、結果をすばやく確認したい場合は、接合点を手動で入力してこの部分をスキップできます。いずれの場合も、設定点速度を定義し、ソフトウェアで目的の座標位置をパス上で開始から終了まで移動させることができます。明らかに、低い目標速度から始めます。

したがって、制御を開始する前に、まず次のチェックリストを確認する必要があります。

  • 画像処理アルゴリズムを簡素化して応答を速くする
  • 事前定義された速度を使用して、パス上に軌道を作成するアルゴリズムを作成します
  • 各フレームで:
    • 弾道とボールの位置の差を計算する
    • delta-Xコンポーネントを東西PIDに渡し、delta-Yを南北PIDに渡します

一度に1つのセグメントで軌道を作成し、そのボールが前のセグメントを終了するときに次のセグメントを続行する方がよい場合があります。それ以外の場合は、ボールが目的の軌道をオーバーシュートしないように注意する必要があります(これは達成が難しい場合があります)。


1

カメラの固定位置と両方の軸のモメンタリー測定値がある場合は、フレームのペイントされたパス、穴、壁を認識する必要はありません。セットアップ時にワンショットで実行できます。実行時には、単一の光沢のある金属ボールの正確な位置を見つけるだけでよい場合があります。

ボールを見つけるには、1つの固定スポットIR LEDとカメラの狭帯域フィルターを使用できます。アルゴリズムは最も明るいピクセルを計算し、次のようなステップを考慮してX、Yを実際のX、Yに変換する必要があります。

  • 最も明るいピクセルを見つける
  • 両方の軸に角度を使用して(サーボから読み取り)、カメラからの距離を回復します
  • 軸の位置の読み取りにタイムスタンプを使用する
  • 必要に応じて、位置読み取りのために時間を介して補間を適用します
  • レンズの既知の歪みを使用
  • ピクセルの世界X、Yを完全な球からの反射角度に変換して、世界X、Yの真のボールの中心を見つける
  • フレームの真の時間を回復するためのデルタ時間
  • 必要に応じて、ボード平面X、Yの位置の時間内の補間
  • 結果X、Y(t)をPIDアルゴリズムに送信する
  • 軌道ジェネレータ/シーケンスから2番目のフィードゴールX、Y(t)を送信する
  • PIDに出力を決定させる
  • 出力を実行する(最後のステップは並行して実行できます)

それは計算集約的であってはならず、ほとんどの場合、いくつかの絶対値に依存します。

通常、小さなCPUはフレームレートのペースでそれを行うべきです。


私はあなたの解決策を理解しているのかわかりません。あなたの解決策は興味深いと思います。ボールが正しいパスをたどっていることを確認するにはどうすればよいですか?フォローする一連のウェイポイントがあることを確認する必要がありますか?
Sai

はい。モーションコントロールソフトウェアには、常に「軌道ジェネレータ」が必要です。これは、時間の任意のステップに対して理想的なX、Y(t)の有限シーケンスを生成するルーチンです。このシーケンスは制御ループの最初の入力に供給され、制御ループの2番目の入力は実際の位置のシーケンスです。制御ルーチンは、位置/速度/加速度エラーを計算し、PIDに応じてすべてのエラーを増幅/合計し、結果として生じる修正信号を生成する必要があります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.