LQR (Linear Quadratic Regulator)


Bagi teman-teman yang menekuni bidang Sistem Kendali/Control Systems/Control Engineering, biasanya kalian akan menemui yang namanya LQR (Linear Quadratic Controller). Ini adalah salah satu metode perancangan sistem kendali modern. Berdasarkan pengalaman saya belajar sistem kendali, metode ini cukup sulit dimengerti. Seringkali literatur-literatur atau buku-buku yang menjelaskan LQR sangat fokus kepada penurunan rumus-rumus LQR dan pada akhirnya pembaca tidak mengerti cara memakai metode LQR ini.

Setelah mempelajari beberapa literatur, saya akan coba untuk merangkum LQR sehingga lebih mudah dimengerti terutama cara pemakaiannya dalam mengendalikan suatu proses.

Konsep Dasar LQR

Bayangkan sebuah proses/plant dengan model state space:

dx/dt = Ax + Bu

y = Cx + Du

y adalah output yang ingin dikendalikan. Tujuan LQR adalah meregulasi/membuat output y menjadi nol dengan input seminimal mungkin. Tujuan ini dicapai dengan mendesain sebuah gain feedback K yang bisa meminimisasi cost function

J = ∫ [y(t) Q y(t) + u’(t) R u(t)] dt

Q dan R adalah matrix weighing/pembobotan, dan kedua matrix ini harus berupa symmetric positive-definite. Cara memilih matrix-matrix ini akan dijelaskan nanti. Cost function ini berupa persamaan kuadrat dan inilah asal nama Linear Quadratic Regulator.

Perancangan LQR

LQR mengendalikan proses/plant dengan menggunakan kombinasi linear state plant tersebut. Maka, LQR membutuhkan semua state dalam plant tersedia untuk proses kontrol (dapat diukur atau diakses datanya). Jika tidak semua state ini bisa diperoleh, maka LQR dapat disertai dengan observer/estimator untuk mengestimasi state-state yang tidak dapat diukur berdasarkan model plant dan output yang dapat diukur.

Sistem kendali LQR adalah:

u = -Kx

K dapat diperoleh dari:

K = inv(D‘QD+R) (B’P+D’QC)

*kutip di sini berarti matrix transpose dan inv berarti matrix inverse.

dan P adalah solusi dari persamaan aljabar Ricatti:

0 = A’P + PA + C’QC – (PB+C’QD) inv(D’QD+R) (B’P+D’QC)

Persamaan Ricatti ini dapat dicari solusinya dengan menggunakan tools perhitungan numerik seperti Matlab.

Biasanya, output y yang ingin dibuat nol adalah sama dengan seluruh state x. Jadi, C = I (matrix identitas) dan D = 0. Dengan ini, sistem kendali menjadi:

K = inv(R) B’P

0 = A’PPAQPB inv(R) B’P

Desain LQR yang telah dijabarkan adalah desain untuk sistem kendali dengan rentang waktu yang tak terhingga (t dari nol hingga t -> ∞). Jika rentang waktunya berhingga, maka P harus dicari dari persamaan diferensial Ricatti:

dP/dt = A’P + PA + C’QC – (PB+C’QD) inv(D’QD+R) (B’P+D’QC)

Persamaan ini harus diselesaikan secara numerik dari t = tf ke t = 0, di mana tf adalah waktu final kendali. Pada sistem waktu yang berhingga ini, P berubah-ubah terhadap waktu sehingga feedback gain K juga berubah-berubah terhadap waktu. Lain halnya dengan sistem yang memiliki waktu yang panjang/tak berhingga, nilai P selalu sama sehingga K tidak berubah-ubah terhadap waktu/time invariant.

Menentukan Matrix Q dan R

Hal yang paling sering menjadi pertanyaan adalah bagaimana memperoleh/menentukan matrix Q dan R. Tidak ada solusi yang unik untuk matrix-matrix ini. Pemilihan matrix ini tergantung dari seberapa besar pengaruh y dan u yang diinginkan pada cost function dan dilakukan dengan trial and error (coba-coba). Yang perlu diperhatikan dalam proses trial dan error ini adalah matrix Q dan R harus simetris dan positive definite.

Adapun satu aturan yang bisa menjadi acuan awal dalam trial and error ini adalah Bryson’s Rule. Bryson’s Rule menunjukkan pemilihan matrix Q dan R dapat dimulai dengan:

Q = 1/nilai y² max yg diperbolehkan

R = 1/nilai u² max yg diperbolehkan

Cara pemilihan ini tidak dijamin akan memberikan hasil yang diinginkan, tetapi setidaknya dapat menjadi langkah awal dalam proses trial and error.

Pada perancangan sistem kendali, seringkali kita harus melakukan trial and error. Contohnya pada desain PID, kita harus melakukan trial and error kepada 3 variable yang berbeda (P, I, dan D). Di sini lah LQR menjadi pilihan yang lebih baik daripada PID. Pada LQR, trial and error hanya dilakukan pada dua variable yakni Q dan R. Maka, proses trial and error pada LQR lebih sederhana tetapi tetap dapat menghasilkan performa yang sama dengan PID.

Referensi:

Burl, Jeffrey B. 1999. Linear Optimal Control: H2 and H∞ Methods. Menlo Park CA: Addison Wesley Longman.

Hespanha, João P. 2007. Undergraduate Lecture Notes on LQG/LQR Controller Design. Santa Barbara CA: University of California. http://www.ece.ucsb.edu/~hespanha/ece147c/web/lqrlqgnotes.pdf. diakses 26 Juli 2010.

About Junot D. Ojong

Author is a control systems engineer at a private company in Jakarta.
This entry was posted in Ah, teori! and tagged , , , , , , , . Bookmark the permalink.

37 Responses to LQR (Linear Quadratic Regulator)

  1. Pingback: Contoh Simulasi LQR pada Matlab « Akirajunto’s Blog

  2. Pingback: Setpoint Tracking dengan LQR « Akirajunto’s Blog

  3. unis says:

    terimaksih infonya pak..
    menjadi referensi saya dalam proposal proyek akhir saya.
    disini saya mencoba merealisasikan metode ini kedalam bentuk hardware. semoga bermanfaat bagi perkembangan elektronika di negeri ini.

  4. Pingback: 2D Crane Sway Control dengan LQR | Akirajunto’s Blog

  5. Leo Arifwibawa says:

    wah…akhirnya dapet referensi LQR yg lumayan buat UTS SKM besok…dan ternyata authornya ko junot, hahaha…thx ko
    (adenya luki nih)

  6. Pingback: Kalman Filter + LQR = Linear Quadratic Gaussian (LQG) | Akirajunto's Blog

  7. lin says:

    hi..boleh sy minta bantuan dr kamu untuk check matlab program lqr bagi dc motor control?
    sebab sy dah try simulate dan adjust Q matrix byk kali tapi masih tak dapat response yg dikehendaki..apabila apply step input, response produced akan ada besar steady state error..
    Harap kamu dapat bantu sy..thank you very much

    Matlab program :
    % motor parameters for speed control
    Ra=2;
    La=0.5;
    Ka=0.1;
    Kb=0.1;
    Bm=0.2;
    Jm=0.02;
    %state space
    A=[-Bm/Jm Ka/Jm;-Kb/La -Ra/La];
    B=[0;1/La];
    D=0;
    C=[1 0];
    rank(ctrb(A,B));
    Q = diag([50000 0]);
    R = 1;
    K = lqr(A,B,Q,R)
    Ac = [(A-B*K)];
    Bc = [B];
    Cc = [C];
    Dc = [D];
    step(Ac,Bc,Cc,Dc)

    • Ok, akan saya coba sebisa saya.

    • Maaf, Lin saya baru bisa balas sekarang. Saya baru saja install ulang matlab saya.

      Dari pengamatan saya, tidak ada kesalahan di simulasi atau sistem kamu.

      Step response-nya bagus, steady state error juga kecil.

      Mungkin kamu membandingkan steady state value nya dengan nilai 1, sedangkan sistem closed loop ini steady state pada nilai 4.5 10e-3, jadinya steady state error terlihat besar.

      Kamu tidak bisa bisa bandingkan steady state value sistem dengan input step karena sistem ini belum bisa tracking input (input = output). Kamu butuh gain/filter tambahan di input reference agar sistem bisa tracking.
      Setelah itu, baru bisa membandingkan step response dengan unity step input yang besarnya 1.

  8. falux says:

    Salam,
    terima kasih sdh posting ttg control theory. tulisannya menarik, bagus.
    mau tanya, kalau mau design LQR control untuk mimo system (multi input/output)
    bagaimana ya…?? sy ada case study mimo system, ada 4 input dan 4 output (underwater robotic vehicle). terima kasih atas responnya.
    wassalam

  9. Terima kasih atas komentarnya, falux.

    Kalau sistem MIMO, setahu saya, kita menganalisanya per-output. Jadi kamu akan memiliki 4 sistem yang masing-masing memiliki 4 input, 1 output. Lalu kamu jadi membuat 4 controller LQR untuk tiap sistem tersebut. Mohon dikoreksi jika saya salah.

  10. indonk says:

    hy… mau nanya….
    apakah bisa kecepatan Motor induksi 3 phasa dikontrol menggunakan LQR….????
    soalnya saya lagi melakukan penelitian persoalan tersebut…..

    • Bisa saja saya kira. Controllernya berarti menggunakan inverter/Variable Speed Drive & industrial controller ya (PLC/PAC/PC-based controller).

      LQR nya dimasukkan ke dalam industrial controllernya. Yang perlu diperhatikan jadi:
      1. SIstem controller LQR nya akan berupa sistem digital
      2. Harus juga menambahkan sistem anti wind-up karena batas output controller (4…20mA)
      3. Harus mencari tahu fungsi transfer digital dari VSD – motor – sensor, supaya bisa mensintesis LQR.

  11. badri says:

    salam kenal pak. saya tertarik dengan metode LQR.
    saya mau tanya apakah blok simulink LQR itu apa hanya seperti yang bapak tunjukkan?
    apa ada referensi laen tentang blok simulink LQR?
    terimakasih infonya😀

    • Salam kenal, Badri.

      Blok simulinknya memang hanya seperti itu. Variable yang diassign di tiap blok sesuai dengan huruf yang ada di situ (mengacu ke matrix state space).
      Namun, di blok integralnya, diberikan initial condition = [pi/18; 0; 0; 0]. Initial condition ini maksudnya posisi awal si pendulum. Angkanya tidak mesti seperti yang saya tuliskan itu, kamu bisa coba-coba sendiri dengan angka yang lain, tetapi harus tetap berupa matrix 4×1.

  12. via says:

    salam kenal.
    perkenalkan nama saya via..
    saya mahasiswa elektro,,
    saya mau tanya..
    apakah bapak mengerti tentang perancangan sistem kendali AVR dengan metode LQR?
    terimakasih.

  13. eko says:

    terima kasih atas infonya pak…
    kalau boleh dan kalau ada boleh saya minta info tentang metoda loop transfer recovery (LTR) pak..??
    terimakasih sebelumnya..

  14. via says:

    AVR= Automatic Voltage Regulator
    nah dsini perancangan sistem kendali AVR nya itu saya mencoba memakai metode LQR..

    • Hmm, mungkin bisa menggunakan tegangan rms 220 volt sebagai setpoint. Jadi LQR nya didesain untuk menjaga agar tegangan yang masuk tidak melenceng jauh dari setpoint 220 volt tersebut. Saya belum pernah mendesain sebuah avr sih, maaf kalau keliru. Kalau ada solusi yang lebih baik, silahkan dibagi di sini. Terima kasih.

  15. via says:

    Penjelasan mengenai LQR nya benar2 sangat membantu..
    kalau boleh tau, ada nggak bahan yang lengakap mengenai LQR ini?
    misalnya yg disertai contoh implementasi pemakaian LQR..
    saya masih bngung dengan apa sebenarnya kelebihan jika memakai metode LQR ini..

  16. via says:

    Maaf, Pak.
    satu lagi saya ingin menanyakan aa beda LQR dengan LQRy..

    • halo via, sori saya lama balasnya. kalau mau referensi yang lengkap bisa mencoba buku “modern control engineering” karangan katsuhiko ogata. kalau mau penjelasan yang lebih ringkas bisa mencoba link referensi dari post saya di atas.

      mengenai perbedaan lqr dan lqry, maksud kamu fungsi lqr dan lqry di matlab ya? kalau benar itu maksudnya, perbedaannya adalaha lqry memasukkan faktor output pada fungsi objekif J nya. jadi lqry juga mengusahakan agar output yang dikeluarkan sistem tidak terlalu besar.

  17. via says:

    waaah,,terima kasih byk..
    saya mau minta tolong satu lagi..tlg donk di cek program MATLAB saya. menurut bapak berapa nilai bobot Q dan R yang bagus di program saya, karena saya cuma asal coba2 masukin angka aja.

    ada di artikel bapak ttg metode Bryson..
    tapi saya gag paham cara kerjanya. bisa tolong dijelaskan pemilihan matrik bobot Q dan R itu ,Pak?
    Ini script matlab saya sampai pembentukan fungsi alih dengan LQR
    clc
    clear all
    close all
    % Data – Data Parameter Sistem Eksitasi Tanpa Stabilizer
    Ka = 10.0000;
    Ta = 0.1000;
    Ke = 1.0000;
    Te = 0.4000;
    Kg = 1.0000;
    Tg = 1.0000;
    Kr = 1.0000;
    Tr = 0.0500;
    %
    % Sistem Lingkar Terbuka Tanpa Metoda Linear Quadratic Regulator (LQR)
    disp(‘Sistem Lingkar Terbuka Tanpa Metoda Linear Quadratic Regulator (LQR)’)
    num_A = [ 0 Ka];
    den_A = [ Ta 1];
    num_E = [ 0 Ke];
    den_E = [ Te 1];
    [num_1,den_1] = series(num_A,den_A,num_E,den_E);
    num_2 = [ 0 Kg];
    den_2 = [ Tg 1];
    [num_ol,den_ol] = series(num_1,den_1,num_2,den_2);
    sys_ol = tf(num_ol,den_ol)
    %
    % Persamaan Keadaan Sistem Lingkar Terbuka Tanpa Metoda Linear Quadratic Regulator (LQR)
    disp(‘Persamaan Keadaan Sistem Lingkar Terbuka Tanpa Metoda Linear Quadratic Regulator (LQR)’)
    G = ss(sys_ol);
    A = G.a
    B = G.b
    C = G.c
    D = G.d
    %
    % Sistem Lingkar Tertutup Tanpa Metoda Linear Quadratic Regulator (LQR)
    disp(‘Sistem Lingkar Tertutup Tanpa Metoda Linear Quadratic Regulator (LQR)’)
    num_H = [ 0 Kr];
    den_H = [ Tr 1];
    [num_cl,den_cl] = feedback(num_ol,den_ol,num_H,den_H,-1);
    sys_cl = tf(num_cl,den_cl)
    %
    % Pemeriksaan Keterkendalian dan Keteramatan
    Co_1 = ctrb(G.A,G.B);
    Ob_1 = obsv(G.A,G.C);
    if ((rank(Co_1) == size(A,1)) & (rank(Ob_1) == size(A,1)))
    disp(‘Sistem Bersifat Keterkendalian dan Keteramatan’)
    %
    % Proses Pembetukkan Matriks Q
    disp(‘ Matriks Q’)
    Q = diag ([[0.1 0.01 100]])
    % Proses Pembetukkan Matriks R
    disp(‘ Matriks R’)
    R = 1
    % Proses Perhitungan Matriks K
    [K P E ] = lqr(A,B,Q,R);
    disp(‘Matrik Gain Umpan Balik’)
    K
    disp(‘Solusi Persamaan Riccati’)
    P
    disp(‘Nilai Eigen Sistem Lingkar Tertutup’)
    E
    %
    % Persamaan Keadaan Dengan Metoda Linear Quadratic Regulator (LQR)
    At = A – B*K;
    Bt = B;
    Ct = C;
    Dt = D;
    disp(‘Persamaan Keadaan Sistem Dengan Metoda Linear Quadratic Regulator (LQR)’)
    T = ss(At,Bt,Ct,Dt)
    %
    % Fungsi Alih Sistem Dengan Metoda Linear Quadratic Regulator (LQR)
    [num_t,den_t] = ss2tf(At,Bt,Ct,Dt);
    sys_t = tf(num_t,den_t)
    disp(‘Fungsi alih Sistem Dengan Metoda Linear Quadratic Regulator (LQR)’)

    • source code nya ga bisa jalan ya. Ga ketemu juga salahnya di mana, mungkin perbedaan character encoding nya ya?

      Cara Bryson itu cuma untuk buat Q dan R awal saja. Untuk berikutnya kamu coba-coba menaikkan atau menurunkan nilai Q dan R tersebut. Jadi pertama coba buat matrix Q dan R nya:
      Q = 1/nilai y² max yg diperbolehkan

      R = 1/nilai u² max yg diperbolehkan

      Sehabis itu kalau responnya kurang bagus, dicoba dibesarkan atau dikecilkan nilai Q dan R nya.

      • via says:

        nah..nilai y2 dan u2 itu kita lihat darimana ?
        juga satu lagi yang saya gag ngerti adalah, apa sebenarnya beda lqr dengan bobot masukan (lqr) dengan lqr dengan bobot keluaran (lqry)
        knp gag salah satu aja ?

      • Nilai u2 dan y2 itu dari spesifikasi desain, jika ada. Kalau tidak ada bisa kita tentukan sendiri kira-kira.
        LQRY dan LQR bedanya di pembobotan fungsi objektif J, seperti yang saya bilang sebelumnya. Kedua tipe lqr ini ga bisa dipakai bersama, hanya bisa memilih salah satu saja.

      • via says:

        oh oke deh Pak..
        terima kasih atas bantuan nya..
        blog ini benar2 sangat membantu saya..
        saya sudah mendapatkan gelar sarjana satu minggu yang lalu Pak.
        and this blog is very useful for me at that time..
        so thank you so much for the explanation..🙂

  18. rina says:

    pak bisa ditampilkan source code contoh diatas

  19. maaf pak. mau nanya nih. mungkin dari segi teori saya bisa sedikit paham. yg mau saya tanyakan disini. dari segi implementasi atau realisasinya. jika di implementasikan ke bentuk hardware contohnya itu seperti apa? sistemnya bgaimana?
    smoga bapak mengerti pertanyaan dri saya ini.
    terimaksih😀

  20. Heri Purnawan says:

    Pak, mau tanya. Jika diberi inisial kondisi mengapa respon sistemnya steady statenya semua di nol? Bagaimana analisis respon transien jika seperti itu?
    Mohon penjelasannya..
    Terima kasih.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s