古典制御理論 6

古典制御理論について考えます。
PD制御です。

PD制御

偏差を微分して、傾きを得て、次を予測します。

Let’s Python Simulator

超簡易シミュレーターを実装します。

pd_controller.py

import sys
import numpy as np
import matplotlib.pyplot as pyplot

x = np.arange( 1, 2000, 1 )
y = []

argv = sys.argv
kp = float( argv[1] )
kd = float( argv[2] )

TARGET = 10
COLD = 1

input = 0
prev_diff = 0
curr_diff = 0
## delta t
dt = 1

for i in np.arange( 1, 2000, 1 ):
    y.append(input)
    diff = TARGET - input
    curr_diff = diff
    ## with a heater
    output = (diff * kp) + (((curr_diff - prev_diff) / dt) * kd)
    prev_diff = curr_diff
    ## It's cold outside.
    input += output - COLD

pyplot.plot( x,y )

y = np.full( 1999, TARGET )
pyplot.plot( x,y, color='r' )

pyplot.xlabel("x")
pyplot.ylabel("y", rotation=0)

pyplot.xlim(0, 200)
pyplot.ylim(0, 20)

pyplot.savefig('pd.png')

ディジタル制御なので、((今の偏差)-(前回の偏差))/((今の時刻)-(前回の時刻))を微分の値とします。
簡便のため、(今の時刻)-(前回の時刻)を1と決めてしまいます。

使い方です。


> python3.9  pd_controller.py  0.3  0.4

Kp = 1.2 / Kd = 0
001

Kp = 1.2 / Kd = 0.1
002

まとめ

基本中の基本としては、今の時刻の偏差に対する微分に係数を掛けただけのものをD制御としましょう、でいいと思います。
I制御も同様で、最初から今までの総和に係数を掛けただけのものをI制御としています。

例を部屋と暖房としていますが、PD制御とは合いません。
倒立振子などでは合うと思います。

急に寒くなったり暑くなったりする環境の部屋には合うと思いますが、それをソースコードで再現させるくらいなら倒立振子をやります。

広告

IT開発関連書とビジネス書が豊富な翔泳社の通販『SEshop』
さくらのレンタルサーバ
ムームードメイン
Oisix(おいしっくす)
らでぃっしゅぼーや
Cheesecake HOLIC
海鮮・肉グルメの高級ギフト【築地わだつみ】

コメントを残すために、Twitter OAuthを必要としています。ご了承ねがいます。
コメントは、Twitterに影響しません。

Twitter OAuth