simple robotino
DESCRIPTION
About basic robotinoTRANSCRIPT
-
LAPORAN
ROBOTIK
Robotino
Disusun Oleh :
Benua Eka Saputra (1221022)
Dosen Pembimbing :
Wahyu Setyo Pambudi, ST., MT
PROGRAM STUDI TEKNIK ELEKTRO
FAKULTAS TEKNOLOGI INDUSTRI
UNIVERSITAS INTERNASIONAL BATAM
2014
-
BAB I
LANDASAN TEORI
Robotino
Robotino merupakan salah satu robot yang menggunakan metode jalan dengan
omnidirectional. Berbeda dengan robot lain seperti line follower, robotino ini memiliki
spesifikasi tinggi sebagai robot. Sebagai contoh dia dilengkapi dengan ban omni yang
memungkinkan dia untuk bergerak ke berbagai macam arah, 9 sensor jarak infrared yang
memungkinkan robot untuk bergerak dengan lebih sensitive, dan sensor optik yang dapat
mendeteksi alumunium strip maupun garis berwarna. Robotino juga dilengkapi dengan
webcam yang memungkinkan kita melihat dari sudut pandang robot menggunakan PC
Omnidirectional Wheel
Merupakan sistem yang berarti bebas bergerak bebas kearah manapun. Pada robotino
menggunakan omni wheel dengan 3 ban.
(1)
Gambar 1. Omni Wheel
-
Gerakan Linear
Dengan menjumlahkan 3 vektor yaitu
(2)
Gambar 2. Gambar kontribusi motor gerakan linear
Pertama perlu kita definisikan. Pada gambar 2.a) merupakan diagram dari robot
dengan 3 roda. Kita anggap tengah robot sebagai 0 derajat dan ban kita pasang pada derajat
+60, -60, +180. Pada gambar 2.b) merupakan pergerakan tiap ban dengan tanda panah
sebagai arah positif. Pergerakan platform merupakan jumlah dari 3 vektor dan ditunjukkan
sebagai vektor pada tengah platform seperti pada gambar 2.c). Pada gambar 2.d)
memperlihatkan proyeksi yang menunjukkan 3 komponen vector yang didistribusikan.
(3)
Sebagai contoh kita berikan data sebagai berikut
-
Dimana :
- F = Kontribusi motor
- A, B, C = Motor
- Velocity = Kecepatan linear robot
- DesiredDirection = Sudut dari gerakan yang diinginkan
Akan memberikan kontribusi seperti berikut
Gambar 3. Kontribusi Motor
Gerakan Angular
Kecepatan angular dapat dihitung dengan memberikan setiap roda dengan arah dan kecepatan
yang sama. Dengan menghitung kecepatan keliling linear dari roda kemudian dibagi dengan
radius dari robot. Pada gambar 4 merupakan gerakan angular dengan nilai positif membuat
bergerak ke kiri dan negatif ke kanan.
-
Gambar 4. Gerakan Angular
Gerakan Linear dan Angular
Terkadang robot membutuhkan gerakan dengan memutar badannya namun tetap bergerak
lurus, oleh sebab itu dibutukan gerakan linear dan angular secara bersamaan.
Gambar 5. Gerakan Linear dan Angular
Fuzzy Logic Control
Fuzzy Logic merupakan alternatif sistem kendali modern yang mudah karena tidak
perlu dicari model matematis dari suatu sistem, tetapi tetap efisien karena memiliki respon
sistem yang stabil (Resmana, Ferdinando, Thiang, Widagdo., 1999). Logika Fuzzy Logic
pertama kali diperkenalkan oleh Zadeh dari Universitas California di Barkeley (1965).
Logika Fuzzy Logic memiliki derajat keanggotaan dalam rentang 0 (nol) hingga 1 (satu)
-
derajat, berbeda dengan logika digital yang hanya memiliki 2 nilai yaitu 0 (nol) dan 1 (satu)
serta tiga operasi dasar yaitu NOT, AND, dan OR. Logika semacam ini bisa disebut juga
dengan crisp logic. Dapat dicontohkan pada sistem kontrol motor dengan menggunakan
sensor jarak (S1), ketika S1 dekat (1) maka motor (M) akan aktif dengan kecepatan putaran
100, ketika S1 jauh (0) maka motor (M) akan non-aktif.
Akan tetapi pada sistem logika fuzzy tidak hanya mengenal 2 (dua) nilai seperti logika
Boolean, dalam logika fuzzy terdapat penambahan nilai diantara logika Boolean yang mana
nilai yang ditambahkan tersebut akan membentuk suatu interval berkelanjutan (continous)
dengan cara bertransisi sedikit demi sedikit dari 0 (nol) menuju 100 (seratus).
Gambar 6. Perbedaan logika boolean dengan logika fuzzy
Gambar 6. Beda Boolean dan fuzzy
Logika fuzzy digunakan untuk menerjemahkan suatu besaran yang diekspresikan
menggunakan bahasa (linguistic), misalkan besaran kecepatan laju kendaraan yang
diekspresikan dengan pelan, agak cepat, cepat, dan sangat cepat. Secara umum, dalam sistem
logika fuzzy terdapat 4 (empat) buah elemen dasar, yaitu : 1) basis kaidah (rule base) yang
berisi aturan-aturan secara linguistic yang bersumber dari peneliti; 2) suatu mekanisme
pengambilan keputusan (inference engine) yang memperagakan bagaimana para peneliti
mengambil suatu keputusan dengan menerapkan pengetahuan (knowledge); 3) proses
fuzzifikasi (fuzzification) yang merubah besaran tegas (crisp) ke besaran fuzzy; 4) proses
defuzzifikasi (defuzzification) yang mengubah besaran fuzzy hasil inference engine menjadi
besaran tegas (crisp).
Gambar 7. Arsitektur FLC
-
Fungsi keanggotaan dari fuzzy dapat ditentukan dengan tiga fungsi, yaitu segitiga
(triangle), trapesium (trapezoidal), dan fungsi gauss (gaussian). Berikut adalah bentuk-
bentuk persamaan dari fungsi-fungsi tersebut:
{ } (4)
1. Segitiga (triangle)
Persamaan tersebut jika digambarkan dalam grafik ditunjukan seperti gambar 8 :
Gambar 8. Triangle membership
2. Trapesium (trapezoidal)
Persamaan tersebut jika digambarkan dalam grafik ditunjukan seperti gambar 9 :
-
Gambar 9. Trapezoidal membership
3. Gauss (gaussian)
( )
Persamaan tersebut jika digambarkan dalam grafik ditunjukan seperti gambar 10 :
Gambar 10. Gaussian membership
Fuzzifikasi
Fuzzifikasi adalah suatu proses pengubahan nilai tegas / real yang ada ke dalam
fungsi keanggotaan. Sebagai contoh dapat dilihat pada gambar berikut,
Gambar 11. Fuzzifikasi
Pada gambar di atas, contoh perhitungan fuzzifikasi dapat ditunjukkan sebagai
berikut:
-
Aturan Dasar Kontrol Logika Fuzzy
Aturan dasar (rule based) pada control fuzzy merupakan suatu bentuk aturan relasi /
implikasi jika maka atau if then sebagai contoh adalah jika S=1 maka M=0.
Contoh dari aturan jika maka ini pada pengendalian kecepatan motor DC dengan
berdasarkan kondisi sensor jarak adalah sebagai berikut :
1. JIKA sensor kiri jauh DAN
2. JIKA sensor kanan jauh
3. MAKA kecepatan motor DC dinaikkan menjadi sanggat cepat.
Mesin Penalaran Kontrol Logika Fuzzy
Mesin penalaran (inference engine) adalah proses implikasi dalam menalar nilai
masukan guna penentuan nilai keluaran sebagai bentuk pengambilan keputusan. Salah satu
model penalaran yang banyak dipakai adalah penalaran Max-Min. Dalam penalaran Max-Min
proses pertama yang dilakukan adalah melakukan operasi Min sinyal keeluaran lapisan
fuzzifikasi, yang diteruskan dengan operasi Max untuk mencari nilai keluaran selanjutnya
akan difuzzifikasikan sebagai bentuk keluaran pengontrol. Operasional Max-Min tersebut
dapat dinyatakan sebagai berikut :
1. Operasi Min / Irisan
a b = min (a,b) = a if a b
= b if a > b
2. Operassi Max / Union
a b = max (a,b) = a if a b
= b if a < b
-
Gambar 12. Operasi max-min
Metode Mamdani
Metode Mamdani dan Sugeno adalah salah satu metode dalam mesin penalaran fuzzy
logic yang mana kedua metode ini untuk memperbaiki kelemahan yang dimiliki oleh sistem
fuzzy murni dengan menambah suatu perhitungan matematika sederhana.
Metode Mamdani diperkenalkan oleh Ebrahim Mamdani (1975). Metode ini sering
dikenal dengan metode Min-Max, metode ini bekerja berdasarkan kaidah-kaidah linguistik
dan memiliki algoritma fuzzy yang menyediakan sebuah aprosimasi untuk dimasuki analisa
matematik. Pada metode Mamdani, untuk mendapatkan output diperlukan 4 tahapan, yaitu :
1. Pembentukan himpunan fuzzy
Pada metode Mamdani baik variabel input maupun output dibagi menjadi satu atau
lebih himpunan fuzzy.
2. Aplikasi fungsi implikasi
Pada metode Mamdani, implikasi yang digunakan adalah Min.
3. Komposisi aturan
Metode yang digunakan dalam melakukan fuzzy inference system (FIS), yaitu operasi
Max.
4. Penegasan (defuzzy)
-
Defuzzifikasi pada komposisi aturan Mamdani dengan metode titik tengah (center of
area). Ada dua keuntungan menggunakan metode titik tengah, yaitu (Kusumadewi, 2002) :
a. Nilai defuzzifikasi akan bergerak secara halus sehingga perubahan dari suatu
himpunan fuzzy juga akan berjalan dengan halus.
b. Lebih mudah dalam perhitungan.
Metode Sugeno
Pada metode Sugeno, cara kerjanya tidak jauh berbeda dengan metode Mamdani
dalam banyak hal. Metode Sugeno diperkenalkan oleh Takagi-Sugeno Kang (1985). Fungsi
dari metode Sugeno sama dengan metode Mamdani dimana menambahkan suatu perhitungan
matematika sederhana dimana penambahan tersebut ditambahkan pada bagian THEN.
Perbedaan utama antara metode Mamdani dan Sugeno adalah pada output
membership function, dimana pada metode Sugeno berbentuk linear dan konstan (Rahmat,
Taufik, Supriyono, Sukarman, 2008).
Pada metode Sugeno, sistem fuzzy memiliki suatu nilai rata-rata tertimbang (weihted
average values) di dalam bagian aturan fuzzy IF-THEN. Metode juga memiliki kelemahan
pada bagian THEN, itu dikarenakan adanya penambahan perhitungan matematis sehingga
tidak dapat menyediakan kerangka alami untuk mempresentasikan pengetahuan manusia
dengan sebenarnya.permasalahan kedua adalah tidak adanya kebebasan untuk menggunakan
prinsip yang berbeda dalam logika fuzzy, sehingga ketidakpastian dari sistem fuzzy tidak
dapat dipresentasikan secara baik dalam kerangka ini (Kusumadewi, 2002). Defuzzifikasi
pada metode Sugeno adalah metode rata-rata (centre of average).
Keuntungan memakai metode Sugeno adalah sebagai berikut :
1. Komputasinya lebih efisien.
2. Bekerja paling baik untuk teknik linear (kontrol PID, dll)
3. Bekerja paling baik untuk teknik optimasi dan adaptif
4. Menjamin kontinuitas permukaan output
5. Lebih cocok untuk analisis secara sistematis.
Defuzzifikasi
Defuzzifikasi merupakan pemetaan himpunan fuzzy ke himpunan tegas (crisps).
Proses ini merupakan kebalikan dari proses fuzzifikasi.
-
BAB 2
ANALISA DAN PEMBAHASAN
Gambar 13. Tampilan Program Visual Studio
Gambar 14. Tampilan Robotino View
-
namespace WindowsFormsApplication1 { /// /// The class Robot demonstrates the usage of the most common robot component classes. /// Furthermore it shows how to handle events and receive incoming camera images. /// public class Robot { public delegate void ConnectedEventHandler(Robot sender); public delegate void DisconnectedEventHandler(Robot sender); public delegate void ErrorEventHandler(Robot sender, rec.robotino.com.Com.Error error); public delegate void ImageReceivedEventHandler(Robot sender, Image img); protected readonly Com com; protected readonly OmniDrive omniDrive; protected readonly Motor motor; protected readonly Bumper bumper; protected readonly DistanceSensor Distance; protected readonly Camera camera; private volatile bool isConnected; public Robot() { com = new MyCom(this); omniDrive = new OmniDrive(); bumper = new Bumper(); camera = new MyCamera(this); motor = new Motor(); Distance = new DistanceSensor(); omniDrive.setComId(com.id()); motor.setComId(com.id()); bumper.setComId(com.id()); camera.setComId(com.id()); Distance.setComId(com.id()); } public event ConnectedEventHandler Connected; public event DisconnectedEventHandler Disconnected; public event ErrorEventHandler Error; public event ImageReceivedEventHandler ImageReceived; public bool IsConnected { get { return isConnected; } } public bool CameraStreaming { get { return camera.isStreaming(); } set { camera.setStreaming(value);
-
} } public virtual void Connect(String hostname, bool blockUntilConnected) { com.setAddress(hostname); com.connect(blockUntilConnected); Console.WriteLine("Connecting..."); } public virtual void Disconnect() { com.disconnect(); Console.WriteLine("Disconnecting..."); } public virtual void SetVelocity(float vx, float vy, float omega) { omniDrive.setVelocity(vx, vy, omega); } public virtual void wheel(uint nummotor, float speed) { motor.setMotorNumber(nummotor); motor.setSpeedSetPoint(speed); } public float distance(uint numsensor) { Distance.setSensorNumber(numsensor); return Distance.voltage(); } private class MyCom : Com { Robot robot; public MyCom(Robot robot) { this.robot = robot; } public override void connectedEvent() { Console.WriteLine("Connected"); robot.isConnected = true; if (robot.Connected != null) robot.Connected.BeginInvoke(robot, null, null); } public override void connectionClosedEvent() { Console.WriteLine("Disconnected"); robot.isConnected = false; if (robot.Disconnected != null) robot.Disconnected.BeginInvoke(robot, null, null); } public override void errorEvent(Error error, String errorStr) {
-
Console.WriteLine("Error occured: " + error); if (robot.Error != null) robot.Error.BeginInvoke(robot, error, null, null); } } private class MyCamera : Camera { Robot robot; public MyCamera(Robot robot) { this.robot = robot; } public override void imageReceivedEvent(Image data, uint dataSize, uint width, uint height, uint numChannels, uint bitsPerChannel, uint step) { if (robot.ImageReceived != null) robot.ImageReceived.BeginInvoke(robot, data, null, null); } } } }
Pada koding diatas menunjukkan koding sebagai inisialisasi agar bisa terhubung dengan
robotino view.
-
Dengan menggunakan rumus 1 kita bisa mendapatkan gerak omni pada robotino
untuk mengatur roda 1-3. Kita ubah rumus tersebut kedalam visual studio.
Button 1 berfungsi sebagai perintah untuk menghubungkan robotino view dengan
visual studio atau sebagai start program.
void fuzzifikasi(double[] x,float s) { double z = 0, a = 0.75, b = 1.5, c = 2.25, d = 3; //proses fuzzifikasi saat kondisi sensor depan jauh if ((s = b)) { x[0] = 0; } else if ((s > z) && (s < a)) { x[0] = 1; } else if ((s >= a) && (s < b)) { x[0] = ((b - s) / (b - a)); } else { x[0] = 0; } //proses fuzzifikasi saat kondisi sensor depan normal if (s = c) { x[1] = 0; } else if (s > a && s b && s < c) {
-
x[1] = (c - s) / (c - b); } else { x[1] = 0; } //proses fuzzifikasi saat kondisi sensor depan dekat if (s = d) { x[2] = 0; } else if (s > b && s c && s < d) { x[2] = 1; } else { x[2] = 0; }
Merupakan koding untuk melakukan fuzzifikasi dengan menggunakan 3 kondisi,
yaitu jauh, normal, dekat. Dengan munggunakan kondisi segitiga.
void rule_evaluation() { double MAC,Z,MAL,MUC,MUL, KAC,KAL,KAS; MAC = 200; MAL=100; Z=0; MUC=-200; MUL=-100; KAC = 400; KAS = 200; KAL = 100; int i, j, k; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { for (k = 0; k < 3; k++) { x[i, j, k] = Math.Min(x1[i], Math.Min(x2[j], x3[k])); } } } ux[0,0,0]=MAC;uy[0,0,0]=Z; //rule1 ux[0,0,1]=MUC;uy[0,0,1]=Z;//rule2 ux[0,0,2]=MUC;uy[0,0,2]=Z;//rule3 ux[0,1,0]=MUL;uy[0,1,0]=Z;//rule4
-
ux[0,1,1]=MUL;uy[0,1,1]=Z;//rule5 ux[0,1,2]=MUL;uy[0,1,2]=Z;//rule6 ux[0,2,0]=Z;uy[0,2,0]=KAC;//rule7 ux[0,2,1]=Z;uy[0,2,1]=KAS;//rule8 ux[0,2,2]=Z;uy[0,2,2]=KAL;//rule9 ux[1,0,0]=Z;uy[1,0,0]=KAC; //rule10 ux[1,0,1]=Z;uy[1,0,1]=KAS;//rule11 ux[1,0,2]=Z;uy[1,0,2]=KAL;//rule12 ux[1,1,0]=Z;uy[1,1,0]=KAC;//rule13 ux[1,1,1]=Z;uy[1,1,1]=KAS;//rule14 ux[1,1,2]=Z;uy[1,1,2]=KAL;//rule15 ux[1,2,0]=Z;uy[1,2,0]=KAC;//rule16 ux[1,2,1]=Z;uy[1,2,1]=KAS;//rule17 ux[1,2,2]=Z;uy[1,2,2]=KAL;//rule18 ux[2,0,0]=MAC;uy[2,0,0]=Z;//rule19 ux[2,0,1]=MAC;uy[2,0,1]=Z;//rule20 ux[2,0,2]=Z;uy[2,0,2]=Z;//rule21 ux[2,1,0]=MAL;uy[2,1,0]=KAC;//rule22 ux[2,1,1]=MAL;uy[2,1,1]=KAS;//rule23 ux[2,1,2]=MAL;uy[2,1,2]=KAL;//rule24 ux[2,2,0]=Z;uy[2,2,0]=KAC;//rule25 ux[2,2,1]=Z;uy[2,2,1]=KAS;//rule26 ux[2,2,2]=Z;uy[2,2,2]=Z;//rule27
Setelah kita tentukan nilai fuzzifikasi lalu kita tentukan base rule, didapatkan 27 rule
karena menggunakan 3 roda dengan 3 sensor yang menjadi 3x3x3. Pada rule ini kita
menentukan nilai linguistic.
Gambar 15. Start Program
-
Gambar 16. Robotino melewati wall (ada objek)
Gambar 17. Robotino Error
-
BAB 3
KESIMPULAN
- Robotino merupakan robot yang menggunakan konsep omni wheels dan berjalan
seperti wall follower dengan menggunakan sensor infra merah.
- Robotino menggunakan konsep FLC (Fuzzy Logic Control)
- FLC dibagi 4 tahap dengan fuzzifikasi, rules, interferensi, defuzzifikasi
- Proses simulasi robotino bisa menggunakan robotino view dan dengan bantuan visual
studio sebagai controller robotnya
- Robotino yang melewati dinding lurus maupun miring akan terjadi fluktuasi, yaitu
peningkata kecepatan pada daerah Vx dan Vy
-
DAFTAR PUSAKA
Riberio, Fernando., Mountinho, Ivo, Controlling Omni-Directional Wheels of a MSL RoboCup
Autonnomous Mobile Robot, Universidade do Minho, Campus de Azurm, 4800
Guimares, Portugal.
www.eenets.com, Chapter 5. Fuzzy Logic Control System.
Satria, Jefri,Tugas Robotika. Universitas International Batam, Batam.
Syam, Rafiudin.,Irham, Erlangga, Widhi. (2012),Rancang Bangun Omni Wheels Robot Dengan
Roda Penggerak Independent,Fakultas Teknik Universitas Hasanuddin, Makasar.