ラインフォロワー最適化


9

私はラインフォロワーロボットの構築に取り組んでおり、そのパフォーマンスを最適化したいと考えています。PIDアルゴリズムを使用するよう提案されました。私はPIDについてたくさん読みましたが、以下について少し混乱しています:

を使用してerror_valueを計算しました が、モーター速度の変化に関して、差(つまり、現在の位置-セットポイント)またはエラー値の比較中に何を使用するかについて混乱しています。それは私が使うべきですkpproportoal+

if (difference > 0)
{ //code for changing appropriate motor's speed using error_value }

または

if (error_value > 0)
{ //code for changing appropriate motor's speed using error_value }

また、定数の値のための任意の指定した範囲があり、と?私は、ラインフォロワーに差動車輪付きロボットを使用しています。kpkkd

また、ラインフォロアーロボットを改善するための高度な最適化アルゴリズムが他に提案されたら幸いです。


どの用語を使用しているかはわかりませんが、制御システムの用語では通常、「差」はエラー値であり、(私が知る限り)「error_value」は制御コマンドです。
TimWescott 2013

こんにちは。たとえば、変数は比例ゲインです。あなたは制御理論に精通していますか?Kp
leCrazyEngineer 2016

@leCrazyEngineer 3年前のようだったので、この質問の大部分を覚えていません。制御理論についても全くわかりません。たぶん、答えた人はいくつかの手がかりを持っているでしょう。
流星

回答:


8

PIDループを使用してラインフォローを操縦する場合、設定値は常に同じになります。たとえばセンサーの中心など、ロボットに対してラインが常に同じ位置になるようにする必要があります。

したがって、ラインセンサーが-1から1までの値を出力し、0がセンサーの中心である場合、設定点をゼロにする必要があります(センサーのリードバックと差は同じになります)。ラインセンサーが0〜10の値を出力する場合は、設定値を5にする必要があります(センサーのリードバックと差は異なります)。

ホイールを異なる速度で回転するように設定してステアリングしているため、一定の速度でスムーズにラインをたどるには、エラーに基づいて両方のホイールの速度を調整する必要があります。たとえば、ライン上に留まるために左折する必要がある場合は、左のホイールを減速し、右のホイールを加速します。回転する必要があるほど、内側のホイールを減速する必要があり、外側のホイールを加速する必要があります。

エラーを修正するためにラジアンを左に向ける必要があり、現在の速度がます。θeS0

ディファレンシャルステアリング

したがって、左の車輪はで移動し、右の車輪は移動する必要があります。SL=rθSR=r+bθ

同じ全体的な速度を維持するためには、あなたが必要と、左車輪がで旅にする必要がありますので、 右車輪が走行する必要がありますしながら、で。S0S0=r+b/2θSL=S0b/2θSR=S0+b/2θ

エラーがゼロに近づくにつれて、各モーターの速度も互いに近づく傾向があります。エラーが大きくなると、速度差も大きくなります。

センサーがラインがホイール間の距離よりもきつくカーブしていることを通知している場合、内側のホイールを後方に回転させる必要があるかもしれません。これらは複雑ですが、コントロールがより高度になるにつれて、段階的に作業することができます。

あなたのエラーは両方の正と負の値を持つことになりますので、また、(から連続体を表すために右規模オフ...あまりにも遠く右...スケールがライン上で...あまりにも遠く左...左に外れ、あなたがすべきif正の値と負の値はモーターに反対の対称的な影響を与えるため、エラーが正か負かを尋ねる必要はありません。エラー値に基づいて新しい値を計算するだけです。

ラインフォローの場合は、比例ゲイン項だけで済む(つまり、他の項をゼロのままにする)ことができる場合があることに注意してください。微分項を実装すると、比例ゲイン項を押し上げてシステムの応答性を高めることができる場合がありますが、積分項が役立つことはほとんどありません。ロボットが間違った方向に進むと、エラーが大きくなるという事実は、ロボットの物理的な動きがとにかく積分項のように機能することを意味します。

P、D、Iの具体的な値は、システムの応答性によって決まります。PIDパラメーターの調整に関する一般的なアドバイスについては、私の回答とその他のPIDループを調整するための適切な戦略は何ですか?


あなたによれば、「正の値と負の値はモーターに反対の対称的な影響を与えるはずなので、エラー値に基づいて新しい値を計算するだけです。」しかし、どのモーターがエラーの影響を受ける必要があるかをどのように判断しますか?
隕石

@AnkitShah彼らは両方を行います。うまくいけば、私のアップデートがそれを少し良く説明するでしょう。
マークブース

本当に説明してくれた@Mark Boothに感謝します。担当者が足りません。サイトであなたの答えを賛成投票しますが、本当にそれは説明されました。
流星2013

@AnkitShahを助けてくれてうれしい-質問を編集して曖昧さの一部を取り除くと(たとえば、差動ステアリングかackermannステアリングのどちらを使用しているかなど)、少なくとも私とおそらく他の人からも賛成票が得られます。人々の提案に耳を傾ければ、15人の担当者を得るのにそれほど時間がかからないはずです。
マークブース

@Markに感謝します。エラーを減らし、ボットをよりスムーズに動かしてラインをたどるようにする他のアルゴリズムはありますか?
流星2013

3

PIDの調整方法に関するこの質問を確認することをお勧めします。

errorこの計算におけるの役割を混乱させているようです。PID方程式は、エラー測定値(実際の位置-希望の位置)を取得し、コントローラーでコマンドする必要がある「応答」の量(力の量など)を決定します。

したがって、と言うのif (error_value > 0) { }ではなく、のようなものを言うべきresponse = get_PID_calculation(error_value)です。特定の車両の構造に応じて、その応答はスロットル量としてステアリングモーターに送信され、必要な角度のステアリング、またはその他の制御入力として送信されます。


これは私のarduinoコードへのリンクです。www1.datafilehost.com/d/5dcbdd4e
隕石

それは、ロボットが何を間違っているのでしょうか?
Ian
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.