隠居エンジニアのものづくり

自転車 電子工作 ラジコン ロボカップジュニア CAD レーザー加工機

PID制御のパラメータ設定方法(限界感度法 パルスボール編)

センサ特性の確認

ロボット教室で多い質問のひとつがPID制御です。

”パラメータの設定が上手くいかない”と言うのが多いのですが、パルスボール追跡のPID制御には先ずハードがP制御(比例制御)に適した作りになっている事が重要です

ボールが回転しないように固定する治具を用いて、下図の様にパルスボールを平行移動させながらセンサの値を記録します。

このロボットはパルスボールセンサ搭載数が4個なので前方左右2個のセンサの値を評価します。

f:id:Blackbox_crusher:20210920012923j:plain

センサの値を表計算ソフトにてグラフ化します。

f:id:Blackbox_crusher:20210920020327j:plain

グラフの赤線の部分の様に左右の差分値が直線状になっていれば比例制御に適した状態です。

少し波打っているのはパルスボールの発光パターンと配光の影響(配光については以下を御参照下さい)です。

https://blackbox-crusher.hatenablog.com/entry/2021/08/24/190611

比例制御

比例制御は目標値との差分に比例してモータパワーの制御を行います。

下図の様にパルスボールセンサの値と目標値の差に対して制御を行います。

f:id:Blackbox_crusher:20210918205802j:plain

制御は  ” 制御値 =  ( 目標値 - 現在値 )×比例ゲイン "  となります。

比例ゲイン = 1 として、横軸が時間軸で目盛りが何回目の制御かを示しています。

この制御間隔を制御周期とします。

1回目は”-80”の差分がありますのでモータは80%のパワーで目標値に近づきます。

2回目は60%、3回目は40%、4回目(現在)は20%のパワーで目標に近づきます。

しかし、モータは10%ではロボットを動かす事ができないことがあります。

モータとモータドライバの組み合わせによって異なりますが20%でも動くか動かないか位の場合もあります。

つまり目標値付近、例えば制御値 = -10 ~+10の範囲はロボットを制御する力が殆どありません。

4回目、5回目はそれ以前の旋回の勢いで制御値に近づき、6回目は行き過ぎていますが、まだ姿勢を戻す力がありません。 

この状態では姿勢を戻す力がモータに加わる所まで行き過ぎた後、目標値に戻る動作をし、また行き過ぎて、これを繰り返します。

この状態を振動状態と言います。

比例制御は振動状態にならない様に比例ゲインによって制御量を調整します。

結果として目標値と少しズレた所で安定します。

 

積分制御

積分制御は積分値に比例してモータパワーの制御を行います。

積分と言ってもプログラムでは台形の面積計算((上底+下底)×高さ÷2)を行うだけですので難しく考えないで下さい。

下図の様にパルスボールセンサが示す "台形面積" に対して制御を行います。

f:id:Blackbox_crusher:20211230020628p:plain

上底が前回値と目標値の差、下底が現在値と目標値の差、高さが制御周期です。

制御は " 制御値 +=((前回値と目標値の差+現在値と目標値の差)÷2 )× 制御周期  × 積分ゲイン " となります。

比例制御で行き過ぎた所で安定していても、ズレによって発生する面積が時間と共に大きくなり、目標値に近づくパワーになります。

 

微分制御

微分制御は微分値に比例してモータパワーの制御を行います。

微分と言ってもプログラムでは傾きを求めるだけですので難しく考えないで下さい。

f:id:Blackbox_crusher:20210918221606j:plain

制御は " 制御値 =( ( 現在値 - 目標値) - ( 前回値 - 目標値)) ÷  制御周期 × 微分ゲイン "となります。

要するに目標値に急速に近づいていると制御値は大きく、ゆっくり近づいていると制御値が小さくなります。

 

限界感度法

比例制御(P)、積分制御(I)、微分制御(D)のそれぞれのゲインを決める方法として限界感度法を紹介します。

先ず比例制御のプログラムを作って持続振動状態にゲイン調整を行います。

f:id:Blackbox_crusher:20210920033251g:plain

持続振動状態(オレンジボール)

動画はオレンジボールですが、パルスボールでも評価方法は同じです。

持続振動時の比例ゲインと振動周期を求めます。

この比例ゲインを限界感度と呼び、Kuとし、振動周期をPuとします。

Ti = Pu × 0.5

Td = Pu × 0.125

比例ゲイン = Ku × 0.6

積分ゲイン = 比例ゲイン ÷ Ti

微分ゲイン = 比例ゲイン × Td

一般的にはこれで概ねのパラメータ調整ができるのですが、パルスボールではLEDのパルス発光(変調パターンの影響含む)によってセンサの値がボールの位置に関係なく急激な変化を見せるので微分制御は正しく動作しません。

実際にどの様に見えているのかをシリアル出力して評価する事が必須です。

ボールを中央付近に置き、P制御の値が "10" 程度になる所に位置調整しています。

f:id:Blackbox_crusher:20210920023723j:plain

シリアル出力したデータを表計算ソフトにて評価した結果です。
青字はプログラムの出力データ、緑字はパルスボールセンサの値から表計算ソフトにて計算した結果です。

この様にグラフに重ねるとバグがないかを確認できます。

ボールの位置は固定しているので、D制御は”0”のはずですが大暴れしています。

f:id:Blackbox_crusher:20210920025847j:plain

この結果からPID制御を諦めてPI制御にするか、パルスボールセンサのA/D取り込み回数を増やして変調の影響が無くなるまで平均化するかの選択になります。
グラフをみる限り30サイクル程取り込む必要がありそうです。

既に30回取り込み(5ms)しているので、これ以上の制御間隔を長くするのは得策ではないと判断してPI制御としました。

ボール補足はPI制御で満足の行く結果が得られました。

まとめ

パルスボールの変調影響を軽減する為、複数回読みして平均処理を行う

センサの値、演算結果を出力して表計算ソフトでグラフ化して評価する