Implementasi Metode Fuzzy Logic Controller Pada Kontrol Posisi Lengan Robot 1 DOF (bag.2/3)
Setelah perancangan perangkat keras (lengan robot) selesai, kemudian dilakukan perancangan fungsi keanggotaan yang nilai domainnya disesuaikan dengan keadaan lengan robotnya. Misalnya, pada robot yang dibuat hanya dapat bergerak ke kanan dan ke kiri hingga maksimal 150 derajat, maka pada perancangan fungsi keanggotaan (membership function disingkat MF) dapat ditentukan domainnya dari -150 derajat hingga +150 derajat.
2. Merancang Membership Function (MF)
1. MF masukan “error”
Fungsi keanggotaan (Membership Function/MF) masukan nilai error terdiri dari 5 himpunan, yaitu negatif besar (NB), negatif kecil (NK), zero (Z), positif kecil (PK) dan positif besar (PB).
Gambar 1 Membership functionnilai error
Secara matematis, fungsi keanggotaan input nilai error dapat dituliskan sebagai berikut:
Fungsi keanggotaan negatif besar (NB):
Pada program, potongan kodenya dapat dituliskan sebagai berikut:
1 2 3 4 |
a=-150; b=-75; if(x2<=a) { fuzzi_2[0] = 1; } if(x2>=a && x2<=b) { fuzzi_2[0] = (b-x2)/(b-a); } if(x2>=b) { fuzzi_2[0] = 0; } |
Fungsi keanggotaan negatif kecil (NK):
Pada program, potongan kodenya dapat dituliskan sebagai berikut:
1 2 3 4 5 6 |
a=-150; b=-75; c=0; if(x2<=a) {fuzzi_2[1] = 0; } if(x2>=a && x2<=b) {fuzzi_2[1] = (x2-a)/(b-a); } if(x2==b) {fuzzi_2[1] = 1; } if(x2>=b && x2<=c) {fuzzi_2[1] = (c-x2)/(c-b); } if(x2>=c) {fuzzi_2[1] = 0; } |
Untuk fungsi keanggotaan yang lain kode programnya dapat disesuaikan dengan jenisnya seperti yang dicontohkan diatas.
2. MF masukan “delta_error”
Fungsi keanggotaan input nilai delta error terdiri dari 5 himpunan, yaitu negatif besar (NB), negatif kecil (NK), zero (Z), positif kecil (PK) dan positif besar (PB).
Gambar 4 Membership function nilai delta_error
Potongan kode dapat ditulis sesuai contoh pada MF masukan error, hanya saja nilai batasan domainnya diubah menurut masing-masing MF sesuai gambar diatas.
3. MF keluaran “PWM”
Fungsi keanggotaan output nilai PWM terdiri dari 5 himpunan, yaitu kanan sangat cepat (Kanan_SC), kanan cepat (Kanan_C), diam (Diam), kiri cepat (Kiri_C) dan kiri sangat cepat (Kiri_SC). Jenis fungsi keanggotaan yang digunakan pada keluaran ini adalah singleton.
Gambar 3 Membership function nilai PWM
Pada kode program penentuan fungsi keanggotaan PWM dideklarasikan sebagai berikut:
1 2 3 4 5 |
#define C_CCW -200; #define S_CCW -100; #define D 0; #define S_CW 100; #define C_CW 200; |
3. Rule Base
Setelah menenutukan fungsi keanggotaan masing-masing masukan dan keluaran, selanjutnya ditentukan rules (aturan) yang akan diterapkan pada kontroler.
Potongan kode untuk mendeklarasikan rule base pada tabel diatas adalah sebagai berikut:
1 2 3 4 5 6 7 8 |
for(i=0;i<5;i++) { rule[0][i] = C_CCW; rule[1][i] = S_CCW; rule[2][i] = D; rule[3][i] = S_CW; rule[4][i] = C_CW; } |
Operasi logika fuzzy yang digunakan adalah operator OR. Dalam bentuk IF – THEN, dapat dicontohkan sebagai berikut:
IF Error is NB OR Delta_Error is NB THEN PWM is Kanan_SC
Contoh untuk kondisi error = -150 dan delta error = -50. Fungsi keanggotaan masukan error dapat digambarkan sebagai berikut:
Gambar 5 Membership functionnilai error = -150
Nilai derajat keanggotaan pada tiap-tiap membership:
µNB(-150) = 1; µNK(-150) = 0; µZero(-150) = 0;
µPK(-150) = 0; µPB(-150) = 0
Fungsi keanggotaan masukan delta error dapat digambarkan sebagai berikut:
Nilai derajat keanggotaan pada tiap-tiap membership:
µNB(-50) = -30-(-50)/-30-(-60)= 0.67
µNK(-50) = -50-(-60)/-30-(-60)= 0.33
µZero(-50) = 0; µPK(-50) = 0; µPB(-50) = 0
Karena operasi logika fuzzy yang digunakan adalah operator OR, maka nilai rule strength akan mengambil nilai tertinggi (MAX) dari 2 buah nilai derajat keanggotaan.
IF Error is NB = 1 OR Delta_Error is NB = 0.67 THEN PWM is Kanan_SC = 1
IF Error is NB = 1 OR Delta_Error is NK = 0.33 THEN PWM is Kanan_SC = 1
… dst.
Potongan program untuk mengevaluasi masukan berdasarkan rule base yang dirancang adalah sebagai berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
for(i=0;i<5;i++) //Error { for(j=0;j<5;j++) //Delta_error { if(fuzzi_2[i]>fuzzi_3[j]) // fungsi OR (Max) { out=fuzzi_2[i]; } else { out=fuzzi_3[j]; } alfa[i][j] = out; } } |
Setelah didapatkan semua nilai rule strenght (alfa), berikutnya akan dibahas proses defuzzifikasi. Akan dibahas pada artikel berikutnya.