-
Notifications
You must be signed in to change notification settings - Fork 3
22_P制御
tetsu00 edited this page Apr 9, 2020
·
19 revisions
フィードバック制御の入門としてON-OFF制御に引き続き比例制御、またの名をP制御を体験しましょう。
P制御は目標値と制御量との偏差に比例して操作量を決める制御法です。
| 用語 | 説明 |
|---|---|
| 出力 | 制御量とも。これを制御したい。 |
| 入力 | 操作量とも。 |
| 目標値 | 制御量に追従させたいもの。今回ならラインや壁との保ちたい距離などのこと。 |
| 偏差 | 目標値と現状の制御量との差。 |
| 制御器 | 偏差に基づき操作量を決めるもの。 これを考えて決める。 |
| 外乱 | システムに意図せぬ影響を与える外的な作用。 今回ならセンサの値の誤差など。 |
比例ゲイン(Kp) |
この値を決めることがP制御では制御器を決めることになる。 |
とりあえずP制御を体験してみましょう。
今回もライントレースをします。ロボットに光センサを5つ搭載したいので次のようにrobot.mの中身を変更しましょう。
list_light_sensor = [100 60; 100 30; 100 0; 100 -30; 100 -60];
controller.mの中身を変更を変更しましょう。順に説明していきます。
e = 0;
Ne = ones(1,5)*(value_light_sensor(:,1) < 50);
if Ne > 0
e = [-2 -1 0 1 2]*(value_light_sensor < 50) / Ne; % 偏差
end
Kp = 0.05; % Pゲイン
u = [0.3; 0.3] + [-1; 1]*Kp*e; % 入力
- 偏差
eロボットの中心にラインがくるようにしたいので、
(ラインと真ん中にあるセンサとの距離)=0
が目標値となります。
そして偏差eは目標値と制御量との差なので、
例えば[100 60]のセンサの位置にラインがあるとき偏差は-60になります。 ここではわかりやすくするために各光センサでの偏差を-2 ~ 2で表します。
value_light_sensor < 50は各センサの値が50以下かどうか、すなわちライン上にセンサがあるかを判定しており、50以下なら1それ以外は0が返ってきます。
Neはライン上にある光センサの個数です。Neで割ることにより複数の線をまたぐときはその中間にラインがあるような偏差が得られます。
よって図のようなときは
e =
= 2
-
Pゲイン
Kp偏差の一次関数としたときの比例定数がKpです。 -
入力
u
[0.3; 0.3]
は皆さまご存知の通りまっすぐ進めという命令です。
これに加えてロボットの中央にラインがくるように移動するという命令が
+ [-1; 1]*Kp*e
となります。
e=2のときKp=0.05とすると、[-0.1; 0.1]が加わり入力はu=[0.2; 0.4]となるので、ロボットの左側にラインがあるので右モータを速くして左モータを遅くしたいという制御が実現されました。
ロボットの初期位置をinit_state = [200; 550; 0];と少しずらして実行してみました。
Kp=0.01で他は上と同じ条件です。
- 東京工業大学ロボット技術研究会 ロ技研の公式ページです
- Twitter: @titech_ssr ロ技研のTwitterアカウントです
- Twitter: @ssr_welcome ロ技研の新歓Twiterアカウントです
- 東京工業大学 ロボット技術研究会公式ブログ ロ技研の活動を記録しているブログです