これが適切な場所であるかどうかは完全にはわかりません。さて、それはは私が推測するプログラミングの問題です。なぜ低デルタが私のPIDコントローラの精度を低く調整しますか?
Javaで簡単なPIDコントローラシミュレーションを作成しようとしています。
要するに、目標値と現在の値があります。現在の値は数値で変更されます。 PIDコントローラに現在の値を指定し、現在の値が目標値に近づくように数値を返そうとします。残業時間が長いほど、PIDコントローラーを使用するほど、積分と微分を使用して「学習」され、最終的にはより正確な値が返されます。これは、例えば、車輪の動きを制御することによってボートの平衡を維持するために有用である。
PIDコントローラで使用される公式はかなり一般的で非常に簡単です。以下の例では、PIDコントローラから返される値は現在の値に単純に加算されます。私はそれがより複雑なアプリケーション(乗算や除算などを含む)で動作すると仮定します。これは私のプログラムです:
public class PID {
private static double Kp = 0.1;
private static double Kd = 0.01;
private static double Ki = 0.005;
private static double targetValue = 100.0;
private static double currentValue = 1.0;
private static double integral = 0.0;
private static double previousError = 0.0;
private static double dt = 0.5;
private static double max = 5;
private static double min = -5;
public static void main(String[] args) throws Exception {
while (true) {
Thread.sleep((long) (1000.0 * dt));
double error = targetValue - currentValue;
double derivative = 0.0;
double output = 0.0;
integral = integral + error * dt;
derivative = (error - previousError)/dt;
output = Kp * error + Ki * integral + Kd * derivative;
previousError = error;
if (output > max) output = max;
if (output < min) output = min;
// Apply the output to the current value:
System.out.println(currentValue + " + " + output + " = " + (currentValue + output));
currentValue += output;
}
}
}
これを実行すると、あなたはPIDコントローラは、最終的に現在値が目標値に非常に非常に近いことが原因と管理していることがわかります。
これはかなりクールです。さて、私は結果を少し速くしたいと思っていました。私は何らかのインタラクティブなグラフを作ろうとしていますから、デルタdt
を0.1
に変更することにしました。
悲しいことに、結果の値はもはや100に近くなりません!今は105に達しているように見えますが、非常にがゆっくりとに減少して100になります。
ここで、dt
を0.01
に設定したとします。今は102に達するのが非常に遅いですが、今は100に戻っていません。今では増加し続けています!
私の質問は次のとおりです。これはなぜデルタが低いのですか?
私のコードはthis PDF documentに基づいており、それは0.01
を使用してください。
あなたの質問はこの[サイト](http://math.stackexchange.com/search?q= [control-theory] + PID +コントローラ)に適していると思います。 – user3707125