Wednesday, May 9, 2012

Desain Kontrol dengan Kalman Filter Part II


Tutorial berikut adalah lanjutan dari part I. Disini penulis akan memberikan contoh bagaimana mendesain kontrol dengan kalman filter.

Penulis akan memberikan contoh pada DC motor seperti pada tutorial sebelumnya, yaitu




Pada MATLAB,

>> A=[-10 14330; -2.7558 -407.6923];
>> B=[0; 19.2308];
>> C=[1 0];
>> D=0;
>> ssplant = ss(A,B,C,D);

Check apakah sistem mempunyai "controllability" dan "observability" dengan perintah MATLAB berikut.

>> P = ctrb(A, B)
>> rank(P) % check controllability

>> P = ctrb(A', B')
>> rank (P) % check observability

Jika kedua program diatas masing - masing bernilai sama dengan order sistem, maka plant sistem mempunyai controllability dan observability.

Untuk menghitung regulator gain K lihat pada tutorial "Desain Kontrol dengan Optimal Control Part I" dan "Part II", penulis tidak akan mengulang penjelasannya. K dapat dihitung seperti pada MATLAB berikut.

>> Q=diag([0.1 1]);
>> R=1;

>> K=lqr(A,B,Q,R)

Kadang kala kita tidak tahu secara real bagaimana matrik F dan G memberikan efek noise pada sistem. Secara default kita akan set F=B dan G=D, hal ini berarti noise masuk ke setiap elemen input vektor u dan matrik Qn mempunyai variance pada elemen diagonalnya, biasanya kita mentunning Qn agar dihasilkan observer yang diinginkan.

>> F = ssplant.b;
>> G = ssplant.d;

Misal noise yang dihasilkan pada sistem ini adalah noise pada tegangan input yang bisa dikatakan random. Noise pada tegangan ini mempunyai standard deviasi = 0.1. Kita assumsikan vektor w dan v adalah uncorrelated. Maka variance Qn = 0.1^2.

Misal pembacaan sensor kecepatan pada DC motor ini menggunakan ADC (analog to digital converter) dengan LSB (Least Significant Bit) pembacaan = 0.1 unit. Maka variance dari Rn sesuai dengan persamaan berikut,



Rn adalah 0.1^2/12.

>> Qn = 0.1^2;
>> Rn = 0.1^2/12;
>> observer_p = ss(A, [B F], C, [D G]);
>> [k_observer, L]=kalman(observer_p, Qn, Rn)

k_observer adalah kalman observer state - space model, dan L adalah observer gain.

Sekarang anda sudah mendapatkan gain L beserta observer state - space model.

Sebelum itu hitung Nbar seperti pada tutorial sebelumnya yaitu dengan perintah,

>> Nbar = rscale(A,B,C,D,K)

Kemudian kita akan mensimulasikan initial respon seperti berikut,

>> At = [A-B*K B*K; zeros(size(A)) A-L*C];
>> Bt = [B*Nbar; zeros(size(B))];
>> Ct = [C zeros(size(C))];

>> x0 = [0 1] % initial current 1A
>> t = 0:0.0001:0.1; % from 0 to 0.1 sec
>> lsim(At, Bt, Ct, 0, zeros(size(t)), t, [x0 x0])

Dan hasilnya adalah sebagai berikut,


Sekian dari tutorial ini, semoga bermanfaat ^^. Jangan lupa disebarkan ke teman - teman anda jika bermanfaat.

1 comment:

  1. Pak saya masih bingung dalam menentukan noise convariance. Berdasarkan yang diatas. Sesuai standart. Apakah beda disetiap sistem? Terimakasih pak. Mohon bantuanya

    ReplyDelete