- ベストアンサー
ライントレースロボットのPID制御を用いての姿勢制御について
ライントレースロボットの姿勢制御をプログラミングで行っているのですが、その時にPIDのゲインを変えてどんな動きをするか試してみました。Pの動作はわかるのですが、IとDの動作がよくわかりません。 Iのゲインを少し上げるとロボットは直線でも車体が横にぶれながら走行します。また、Dは少し上げた程度では変わらないのですが、大きく上げるとIと同じように直線でも横にぶれてしまいます。 具体的には、P、I、Dを200、0、200ならスムーズに走行できたコースでも200、2、200ならぶれてしまいます。また、200、0、3000でもぶれてしまいます。このような結果なのですがこのときのIとDは何に影響しているのでしょうか? まだ、未熟者ですのでヘタクソな質問かもしれませんが真剣に悩んでます。 宜しくお願い致します。
- kam6
- お礼率66% (6/9)
- その他(学問・教育)
- 回答数3
- ありがとう数5
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
お礼をありがとうございます。補足に回答します。 >「D動作は、微分ですから、偏差の起こり始めに効きますから…」 言葉がはしょってあってわかりにくかったでしょうか。 P動作が偏差量に比例して制御しようとするのに対して、D動作は、偏差があっても一定で変化が無ければ働きません。偏差に変化があったときだけ制御しようとします。 たぶん、曲がり角では、偏差量が増加して微分値がでるので、ここで効くことが期待できそうと思いました。 因みにI動作は、偏差が少しでもあれば、それを蓄積する感じで、あくまで働きます。
その他の回答 (2)
- ikkyu3
- ベストアンサー率43% (535/1229)
自動制御は、理論的には整然としていて、とても気持ちが良いものですが、実現しようとすると、掴みきれない制御要素が、たくさん有って結局試行錯誤になり難しいですね。 もう長年ご無沙汰して記憶も薄れているので、ご質問を読んでも勘が働きませんので参考程度に読んでください。 機械系にバックラッシュや撓み、慣性があると思いますので、なかなか応答特性は、つかみにくいと思います。 P動作だけでは、ラインに対してのオフセットが大き過ぎるときに、I動作を使うと偏差を積分するので、オフセットが無くせるわけですが、無駄時間があると応答が遅くなるのでオーバーシュートして不安定になると思います。 オフセットが問題なければ、使わなくても良いと思います。 D動作は、微分ですから、偏差の起こり始めに効きますから、曲がり角などでは、有効でしょう。これは、進み要素なので効かせすぎるとやはり不安定になります。 いずれにしても、効かせ過ぎないように少しずつ試行錯誤する必要があります。 実用にするのでしたら、良い制御を期待するには、機械系の剛性を上げガタを無くし、慣性を小さくするのが一番だった記憶があります。
お礼
やはりそうですね、掴みきれない制御要素が重なりあってか、思った通り動いてくれません。これからがんばって、動作実験を繰り返してみます。 どうも有難うございました。
補足
「D動作は、微分ですから、偏差の起こり始めに効きますから…」の部分がよくわからないのですが、どういうことでしょうか? 教えていただけると助かります。
- anisol
- ベストアンサー率48% (146/301)
こんにちは。私もライントレーサ作ったことがあります。(ステッピングモータ駆動、赤外線センサ確か16個。kam6さんのロボットはどんなものですか?)P制御しか使いませんでしたが、それでも難しかったです。工業高校の人などがすごく速いのを作っていると尊敬します。 センサーはロボットの前面についていますよね?すると方向転換するだけでラインの検出位置がずれてしまうことになって、単純なPID制御の理論が適用できなくなるということも一因かもしれないですね。現実的には試行錯誤しかないと思いますが、私も理論を知りたいです。アドバイスにもなっていませんが、参考までに。
お礼
ロボット本体の全面に8個の光センサをがあり、サーボモータを2台搭載して前輪は無く、左右のモータの回転数の差でコーナを曲がります。あとCPUはH8マイコンです。こんなロボットです。 どうも有難うございました。
関連するQ&A
- PID制御について。
制御においてPID制御というのがあるのですが、それらの調整法を教えていただきたいです。 ちなみにPID制御のPは比例動作、Iは積分動作、Dは微分動作です。 ブロック線図で入力と出力の計算をして、実際にコンピュータをつかってDCモータに出力を与えていました。
- 締切済み
- 科学
- トレースロボットの動きとPID動作の伝達関数式との関係について
ライントレースロボットの前面に8個の光センサが搭載されていてラインを感知します。そのラインに沿って動くように2台のサーボモータの回転数を変えて追従走行するロボットです。このようなロボットで、プログラミング上でPID制御を用いているのですが、 PID制御の伝達関数の式 Gc(s) = C(s)/E(s) = Kp ( 1 + 1/Ti s + Td s ) と、関係あるとは思うのですがよくわかりません。 制御工学の初心者で参考書を読んでもわからないことが多くて困っています。 また、数学も未熟者です。こんな私ですが教えていただけると助かります。 よろしくお願いします。
- ベストアンサー
- その他(学問・教育)
- サーボ機構 PID制御について
先日大学でPID制御を用いて、ガイドスライダの動きを制御するという実験を行いました。実験の内容は、PID制御で制御されるガイドスライダ(サーボ機構?)に上向きに振子を取り付け、プログラミングでPゲインとDゲインの値を変え、それぞれのパターンに対して振子は安定するか、横軸を時間、縦軸を電圧とした波形はどのようなものになるかというものです。 今そのレポートで考察をまとめているのですが、PゲインとDゲインの値が変化したときの波形の特徴などが、全くといって言いほど考察できません。何しろ専攻は電気ではないので、そもそもPゲインやDゲインという定数は何の意味を持つのかというところから理解ができていません。一般的にこれらの定数は大きければ大きいほどいいのでしょうか?とにかく自動制御についての知識がほとんどないまま実験を行ってしまったため、詳しい方がいましたら、なるべく簡単な言葉で説明をお願いします...。
- ベストアンサー
- 科学
- PID制御についての説明
PID制御についての説明 P:5% 指示値が設定値より±5%以下の場合に設定値まで上昇させる数値? I:300秒 1回の信号を受けて比例制御で設定値まで上昇させる最大時間? D:10 設定値に近づいた時に、負荷を動作させ制御させる時間? 上記の内容は例(間違っていると思う)ですが、素人でも判る説明はどの様に記述すればよいかを教えて下さい。
- ベストアンサー
- 科学
- PID制御のプログラミング
実際にPID制御のプログラミングを使用とした場合、サンプリングした離散データを元に制御を行うことになりますが、以下のページの説明ではやり方が異なるようです。どちらが正しいのでしょうか。 1.http://www.picfun.com/motor05.html ΔMVn = Kp(en-en-1) + Ki en + Kd((en-en-1) - (en-1-en-2)) MVn、MVn-1:今回、前回操作量 ΔMVn:今回操作量差分 en,en-1,en-2:今回、前回、前々回の偏差 2.http://www.mech.utsunomiya-u.ac.jp/ozaki/education/kikaijyoho-2000/sec1.html p=e i=i+e d=e-e1 y=Kp(p+Ki×i+Kd×d)
- ベストアンサー
- 科学
- PID制御の学習内容と制御プログラムの関係
PID制御の本を見ると、ボード線図、ベクトル軌跡、1次遅れ、2次遅れ、等々、色んな事が書いてありますが、これらと、実際の制御プログラムを作る際の関係がいまいち分かりません。 1次遅れだろうと2次遅れだろうと、P/I/Dのパラメータを調整するだけなのでは?と考えてしまいます。 PID制御のプログラムと、上記の諸々の関係はどうなっているのか、プログラム作成上役に立つのでしょうか? どうぞよろしくお願いします。
- ベストアンサー
- その他(学問・教育)
- PID制御
PID制御に関して学習しようと思っていると下記のような説明がでてきました。 >>積分時間TI は、ステップ偏差を与えたとき、P制御による操作信号>>変化に相当する操作信号変化をI制御のみで発生させるために必要>>な時間ということになります。したがって、積分時間TI を小さく>>すればするほど積分制御の影響が強くなります。 この意味が良く分かりません。なぜ積分時間を短くすればするほど、制御の影響が強くなるのでしょうか?? 比例制御と微分制御は理解できたのですが、積分制御に関しては上手く理解できていません。どなたかご教示願います。
- ベストアンサー
- 自然環境・エネルギー
- PID制御について
色々なHP等を見て分かりやすくPID制御プログラムを組み モータを駆動しているのですが友人も違った式でPID制御を実現して おり実現したプログラムのkp,ki,kdをこちらのkp,ki,kdに入れて見た所 どうも違った動きをしており不安になったので質問させていただきました。 よろしければご教授ください。 //// 各成分の計算 //// // Pパラメータ // iP = Kp * def; /* 定数 * 偏差値 */ // Iパラメータ // iI = Ki * def_inte; /* 定数 * 偏差累積値 */ // Dパラメータ // iD = Kd * (def - def_before); /* 定数 * 今回の偏差-前回の偏差 */ iRet = iP + iI + iD; /*iRet = 出力duty*/
- ベストアンサー
- C・C++・C#
お礼
大変勉強になりました。本当に有難うございます。 後は、動作実験を繰り返し試行錯誤してみます。