Senin, 21 November 2011

Simulasi LQR pada Matlab

Jika ingin memahami LQR lebih lanjut, sebaiknya melakukan sebuah simulasi LQR baik dalam Matlab ataupun tools-tools engineering lainnya (jangan lupa baca dulu konsep dasarnya disini). Berikut contoh simulasi LQR pada Matlab dengan sebuah model plant yang sederhana.

Gambar diatas adalah model plant “Inverted Pendulum”. Inverted pendulum adalah sebuah pendulum yang terdiri dari sebuah batang dan diletakan terbalik (engselnya berada di bawah dan ujung batang di atas). 



Persamaan inverted pendulum yang sudah dilinearisasi adalah:
M l d²θ/dt² = (M+m)gθ – u
M d²x/dt²= u – mgθ

Dan state space-nya menjadi:
Output yang ingin dibuat menjadi nol adalah sudut pendulum θ dan posisi pendulum x. Kriteria ini relevan dengan peluncuran roket, yakni kita menginginkan roket kita tetap mengarah tegak ke atas dan posisinya tetap pada trajektori awal. Jadi, persamaan output state space-nya :
Dalam simulasi ini, parameter-parameter M, m, g, dan l diberi nilai:
M = 1 kg
m = 100 g = 0.1 kg
l = 1 m;
g = 9.8 m/s²
Kemudian, persamaan state space dibangun di matlab dan disimulasikan dengan simulink. Simulasi dilakukan dengan memberi kondisi awal θ = 10°= π/18 rad. Kondisi ini bisa merepresentasikan keadaan ketika roket agak miring sedikit karena gangguan dari luar seperti angin, atau tekanan udara, atau turbulensi. LQR kemudian akan bekerja untuk mengembalikan arah roket kembali ke atas (θ = 0).
 Gain feedback LQR harus dibuat juga. Diawali dengan menentukan matrix R dan Q, dan menggunakan aturan Bryson. Karena model matematis ini dibuat berdasarkan linearisasi pada θ = 0, maka sudut pendulum tidak boleh melewati kira-kira 10°. Jadi nilai max θ yang diperbolehkan adalah 10° = π/18 rad. Kemudian posisi pendulum misalkan kita batasi hingga 0.1 m dan input u (gaya yang diberikan pada kereta M) dibatasi pada 10 N. Jadi R dan Q menjadi:
gain feedback dapat dihitung dengan menyelesaikan persamaan Ricatti melalui fungsi are atau care dalam matlab. Kode m-file untuk simulasi :
=============================================================

% parameter
m = 0.1;
M = 1;
l = 1;
g = 9.8;

% state space
A = [0 1 0 0; (M+m)*g/M/l 0 0 0; 0 0 0 1; -m/M*g 0 0 0];
B = [0; -1/M/l; 0; 1/M];
C = [1 0 0 0; 0 0 1 0];
D = [0;0];

% constraints
thetamax = 10/180*pi;
posmax = 0.1;
umax=10;

% Q & R matrices
Q = [1/thetamax^2 0; 0 1/posmax^2];
R = 1/umax^2;

% control gain
P = are(A,B*inv(R)*B',C'*Q*C);
K = inv(R)*B'*P;
=============================================================
>> running program diatas di matlab editor !!!!!!
Setelah itu, simulasi bisa dilakukan dengan simulink dan berikut hasilnya:



Cermati bahwa sudut θ diawali pada nilai π/18 ≈ 0.1745 dan posisi x = 0. Kemudian LQR mengembalikan posisi θ = 0. Nilai θ dan posisi x sudah sesuai dengan batasannya θmax = 10° dan xmax = 1 m, tetapi nilai u jauh melewati batasan umax = 10 N. Nilai u terlihat mencapai 60 N pada awal kinerja sistem. Hal ini berarti desain harus diulang dengan mengubah matrix R dan Q lagi, dan pengubahannya dilakukan secara trial and error.
Secara umum LQR dikatakan berhasil mengendalikan inverted pendulum. Pendulum bisa dikendalikan ke posisi seimbangnya/menghadap ke atas. Bila diperhatikan, sistem ini tidak memiliki input reference, jadi kita tidak dapat memberikan input ke sistem. Sistem hanya bekerja untuk meregulasi dirinya sendiri dari kondisi tertentu. LQR sebenarnya bisa diaplikasikan dengan adanya input reference.

Tidak ada komentar:

Posting Komentar