Vous êtes sur la page 1sur 9

Desain dan Implementasi Robot penyelesai labirin menggunakan algoritma

Flood Fill
I.

PENDAHULUAN

Maze solving merupakan salah satu permasalahan untuk mencari jalan keluar dari suatu
labirin. Permasalahan seperti ini biasanya digunakan dalam kompetisi micromouse.
Micromouse sendiri adalah robot roda kecil yang terdiri dari sensor inframerah, motor dan
kontroler dan reaksi. Kompetisi micromouse sudah dimulai sejak tahun 1970 di berbagai
belahan dunia. Saat ini aturan dan labirin dari kompetisi micromouse dirumuskan oleh
komunitas IEEE, dan kompetisi robot ini disebut IEEE Standard Miromouse Competition.
Labirin standar IEEE memiliki 16 16 sel persegi, dengan panjang dan lebar masing-masing
sel adalah 18 sentimeter.
Micromouse bertujuan mencari jalan menuju suatu tempat tertentu dalam labirin dan
kembali ke tempat awal dengan rute seefisien mungkin. Umumnya, sel tujuan adalah pusat sel
dalam labirin 16 16. Sel startnya yaitu salah satu sel di sudut labirin. Pada keadaan awal,
robot hanya mengetahui ukuran labirin tanpa mengetahui pola dinding penghalang yang
terdapat dalam labirin. Karena dinding penghalang baru diketahui secara berangsur-angsur
selama robot menjelajahi labirin, maka dibutuhkan algoritma pencarian jalur terpendek yang
dinamik.
Labirin terbagi menjadi dua menurut susunan dinding penghalang yang terdapat dalam
labirin itu sendiri, yakni labirin sempurna (perfect maze) dan labirin tidak sempurna (imperfect
maze). Labirin sempurna tidak memiliki daerah terisolasi, tidak ada jalur sirkuler, dan tidak
ada daerah terbuka.

Gambar 1.1 (a) Contoh labirin sempurna dan (b) contoh labirin tidak sempurna

Permasalahan mencari jalan keluar dari suatu labirin menjadi menarik apabila labirin
yang dihadapi memiliki jalur sirkuler seperti pada kompetisi micromouse di Jepang tahun 1991
berikut:

Gambar 1.2 Labirin kompetisi di


Jepang tahun 1991.

Untuk menangani labirin dengan jalur sirkuler seperti ini dibutuhkan algoritma yang tepat.

II.

METODE

Pada dasarnya tujuan kompetisi micromouse adalah mencari jalan menuju sel yang berada
di pusat labirin yang berbentuk bujur sangkar, kemudian kembali ke tempat asal dengan rute
yang paling effisien. Hal ini dapat diibaratkan seperti seekor tikus yang mencuri keju yang ada
di pusat labirin. Micromouse memiliki sensor proximity yang dapat mendeteksi dinding dan
rintangan lainnya pada labirin. Sensor ini akan mengembalikan nilai yang sebanding dengan
jarak robot dengan dinding kiri, dinding kanan, atau dinding di depan robot. Untuk selanjutnya,
data dari sensor ini akan disimpan oleh robot untuk pemetaan bentuk labirin.

Algoritma pemecahan labirin telah sejak lama diteliti, tetapi kebanyakan algoritma yang
ditemukan tidak cocok untuk robot micromouse karena keterbatasan kecepatan pemrosesan
dan ruang penyimpanan data. Beberapa algoritma seperti Wall Folower, Depth-First Search,
dan Flood-Fill cukup sederhana sehingga dapat diimplementasikan pada robot micromouse.

2.1 Algoritma Wall Fallower


Algoritma Wall Follower adalah jenis yang paling sederhana dari teknik maze solving
lainnya. Prinsipnya adalah mengikuti dinding kanan atau kiri secara terus menerus selama
menjelajahi labirin. Ketika sensor pada robot mendeteksi dinding yang terbuka (terdapat jalan)
maka robot akan berhenti dan belok pada arah yang bersangkutan, kemudian berjalan lurus dan
mengikuti dinding kembali.
Algoritma ini cenderung berharap menemukan jalan keluar dibanding mencoba
menyelesaikan labirin tersebut. Algoritma sederhana seperti mengikuti dinding kanan atau kiri
terbukti tidak dapat digunakan pada pola labirin seperti pada Gambar 1.2 yang merupakan
sebuah imperfect maze.

2.2 Algoritma Depth-First Search


Algoritma Depth-First Search biasa digunakan untuk proses traversal atau pencarian dalam
struktur pohon atau graf. Aplikasi algoritma ini pada pohon akan memberikan hasil seperti ini:

Gambar 2.2. Hasil traversal sebuah pohon dengan algoritma Depth-First Search.
Angka disini menunjukkan urutan simpul tersebut dikunjungi.

Algoritma ini juga dapat diadaptasi menjadi salah satu metode intuitif untuk pencarian
dalam labirin. Pertama-tama robot akan berjalan lurus, ketika menemukan percabangan jalan
maka robot akan memilih salah satu dari jalan yang tersedia secara acak. Apabila jalan yang
dipilih ternyata merupakan jalan buntu, maka robot akan melakukan backtracking ke
percabangan tadi kemudian memilih jalan yang lain. Proses seperti ini akan membuat robot
mencoba semua kemungkinan jalan yang ada. Dengan menjelajahi semua sel dalam labirin,
pada akhirnya robot akan dapat menemukan tempat yang dituju.
Algoritma ini akan selalu berhasil menyelesaikan labirin ketika pencarian jalur
terpendek tidak dibutuhkan, tetapi proses ini akan membutuhkan waktu yang cukup lama
tergantung kompleksitas dari labirin yang dihadapi.
2.3 Algoritma Flood Fill
Algoritma flood-fill merupakan salah satu algoritma pemecahan labirin terbaik. Pada
algoritma ini, labirin di bagi-bagi menjadi beberapa bagian kotak kecil (sel). Algoritma FloodFill dapat dianalogikan seperti membanjiri labirin dengan air yang banyak. Berikut ini
penjelasannya.

Gambar 2.3 Kondisi awal maze

Proses penumpahan air terpusat hanya pada satu titik (center, selanjutnya titik ini akan
dikenal sebagai destination atau tujuan)

Air akan membanjiri titik center ini, kemudian mulai mengalir ke area disekitarnya,
yang tidak terhalang oleh dinding (dapat diakses secara langsung)

Secara virtual, maze dibagi menjadi beberapa kotak kecil (array)

Kotak dimana titik center berada, diberi nilai 0

Gambar 2.4 Sebuah visualisasi labirin 5x5. Robot sedang berada pada sel
yang bernomor 3 dengan orientasi ke arah utara. Perhatikan bahwa
sebuah dinding di barat telah terdeteksi pada labirin.

Kotak yang terisi air setelah center, akan diberi nilai 1

Kotak yang terisi air setelah golongan 1, akan diberi nilai 2

Kotak yang terisi air setelah golongan 2, akan diberi nilai 3

Dan begitu pula untuk kotak yang terisi air selanjutnya


Arti dari nilai di dalam masing-masing kotak adalah jumlah kotak atau jarak yang harus

ditempuh dari kotak tersebut untuk mencapai center (tujuan).


Ketika robot akan berjalan, robot perlu memeriksa semua sel tetangga yang tidak
terhalang oleh dinding, kemudian mencari sel tetangga yang memiliki nomor terkecil. Pada
gambar 2.4 diatas, robot harus mengabaikan semua sel disebelah barat karena terhalang oleh
dinding dan robot harus melihat nomor sel yang berada di utara, timur, dan selatan karena selsel tersebut tidak terhalang oleh dinding. Sel di utara bernomor 2, sel di timur bernomor 2,
sedangkan sel di selatan bernomor 4. Robot perlu menyortir nomor-nomor tersebut sehingga
didapatkan sel yang memiliki nomor terkecil. Pada contoh kali ini sel di utara dan timur
memiliki nomor yang sama yakni 2. Hal ini berarti robot dapat dengan bebas memilih akan
berjalan ke arah utara atau timurkeduanya akan memiliki jarak yang sama menuju sel tujuan.
Karena berbelok akan memakan waktu, maka robot lebih baik memilih berjalan ke utara agar
dapat langsung bergerak ke sel selanjutnya.

Karena labirin yang sebenarnya memiliki dinding, maka diperlukan suatu mekanisme
pemetaan dinding. Memori sebesar satu byte cukup untuk menyimpan informasi mengenai
dinding. Walaupun satu byte terdiri atas 8 bit, kita hanya membutuhkan 4 bit untuk dijadikan
flag dinding utara, timur, selatan, dan barat seperti berikut:

Perlu diingat bahwa setiap sisi dinding dipakai bersama oleh dua buah sel (yang saling
bertetangga tetapi terpisah oleh dinding), oleh karena itu proses update bit-flagdinding untuk
sebuah sel juga dapat dilakukan sekaligus untuk sel tetangga tersebut.
Hingga saat ini telah diperoleh cara untuk memetakan dinding pada labirin. Seiring
dengan perjalanan, robot akan menemukan dinding baru, dan diperlukan cara untuk mengupdate penomoran sel dalam labirin.

Gambar 2.5 Visualisasi masalah sel tetangga dengan


nomor terkecil yang terhalang dinding.

Kembali ke contoh, anggap robot sudah maju satu langkah dan kembali menemukan
dinding di sebelah timur seperti pada Gambar 2.5 Robot tidak dapat bergerak ke barat maupun
ke timur, tetapi bergerak ke utara atau selatan berarti bergerak ke sel yang berjarak lebih jauh
karena memiliki nomor yang lebih tinggi. Apabila kondisi seperti ini ditemukan, robot perlu
memberi nomor baru untuk setiap sel (re-flood) seperti ketika robot pertama kali dijalankan,
dengan tetap menyimpan informasi pemetaan dinding sejauh ini. Sebagai contoh cara memberi
nomor pada sel-sel labirin, anggap robot telah cukup lama menjelajahi labirin dan menemukan
banyak dinding baru. Prosedur yang dilakukan akan menginisialisasi array multidimensi yang
memuat informasi nomor setiap sel, kemudian mengassign nomor 0 pada sel tujuan. Dalam
kata lain, tujuan dari robot adalah mencapai sel yang memiliki nomor 0. Dengan cara ini selama
proses penyelesaian labirin nomor-nomor pada setiap sel dapat berubah kecuali sel tujuan, yang
selalu bernomor 0.

Gambar 2.6 Labirin dengan sel tetangga yang telah diberi


nomor satu lebih tinggi dari sel tujuan.

Prosedur update kemudian akan mencari semua sel tetangga yang terbuka (yakni sel
tetangga yang tidak terhalang oleh dinding) kemudian meng-assign sel-sel tersebut dengan
nomor yang satu lebih tinggi, yakni 1:

Gambar 2.7 Sel tetangga lain yang telah diberi nomor.

Prosedur kemudian menemukan kembali sel tetangga yang terbuka dan kembali mengassign sel-sel tersebut dengan nomor yang satu lebih tinggi, yakni 2:

Gambar 2.8 Sel tetangga lain yang telah diberi nomor.

Prosedur ini diulangi hingga semua sel mendapat nomor baru:

Gambar 2.9 Labirin yang telah selesai diberi nomor.

Kini dapat diperhatikan cara untuk mencapai sel tujuan dengan jalur terpendek. Dengan
algoritma ini, setiap kali robot mencapai sel baru maka robot perlu menjalankan aksi sebagai
berikut:

Update pemetaan dinding

Isi kembali setiap sel dalam labirin dengan nomor baru (flooding)

Tentukan sel tetangga yang memiliki nomor terkecil (penentuan tujuan)

Bergerak menuju sel tetangga yang memiliki nomor terkecil tersebut


(move)

III.

DESAIN HARDWARE MICROMOUSE

Dalam IEEE Standard Miromouse Competition, komunitas IEEE menetapkan aturan


dimana desain micromouse tidak boleh lebih dari 25cm baik lebar ataupun panjangnya. Namun
desain mikromouse yang baik adalah micromouse dengan ukuran sekecil mungkin. Dengan
micromouse ukuran kecil, micromouse akan lebih mudah di atur. Semakin kecil ukuran
micromouse maka semakin kecil pula beratnya, sehingga dapat berjalan lebih cepat. Ukuran
yang kecil menguntungkan micrmouse ketika berbelok ataupun ketika berakselerasi, hal ini
memperkecil terjadinya slip pada ban micromouse.
Pada umumnya desain hardware micromouse terdiri dari beberapa bagian utama seperti
unit kontrol, unit deteksi, unit motor, encoder roda dan pensuplai daya.

Unit Deteksi

Unit Kontrol

Pensuplai daya

Unit Motor

Encoder

Gambar 3.1 Struktur Hardware Micrmouse

3.1 Unit Kontrol


Unit kontrol yang digunakan adalah mikrokontroler, yang mana digunakan untuk
memonitor sensor, menjalankan algoritma penjelajah untuk merubah arah dari micromouse dan
mengendalikan motor. Sebuah mikrokontroler adalah unit yang paling memadai untuk dapat
digunakan dibandingan unit pengelolahan lain seperti mikroporsesor dan DSP. Mikrokontroler
dibangun dengan RAM, Flash ROM, port I/O, kontrol interupt dan counter yang mana
membuatnya lengkap, murah dan sederhana.
Pada unit kontrol inilah nantinya program dan konfigurasi dari micromouse dimasukkan
hingga nantinya micromouse dapat menemukan lokasi tujuan dengan seefisien mungkin.

3.2 Unit Deteksi


Unit deteksi digunakan micromouse untuk mendeteksi jarak robot dari dinding labirin
selama proses penjelajahan sehingga proses pergerakan micromouse (maju, mundur, belok kiri
atau kanan) dapat berjalan dengan baik. Unit deteksi juga diperlukan micromouse agar tidak
menabrak dinding labirin. Karena kemungkinan jarak dari sisi-sisi micromouse berkisar antara
2cm sampai dengan 8cm dari dinding labirin, dinding labirin dapat memantulkan cahaya
infrared dengan baik. Keuntungannya, sensor infrared dapat dengan stabil mendeteksi jarak
kurang dari 10cm dan tidak sensitif dengan gangguan sinar matahari. Oleh karenanya, sensor
infrared dapat digunakan sebagai pendeteksi jarak pada micromouse. Pada perancangan
nantinya, terdapat 5 sensor infrared yang digunakan. Satu menghadap depan, dua menghadap
arah diagonal depan dengan sudut 45 derajat, serta satu untuk setiap sisi dari robot.

Gambar 3.2 Lokasi sensor infrared robot. 1,5 sensor kiri dan kanan robot.
3 sensor depan. 2,4 sensor diagonal kiri dan kanan dengan sudut 45 derajat.

Sensor yang menghadap sisi kiri dan kanan robot digunakan secara ekslusif untuk
pemetaan dinding di samping. Sensor diagonal digunakan untuk mengkalibrasi posisi
micromouse dalam labirin, baik secara lateral dan longitudinal, dan sensor depan digunakan
untuk pemetaan dinding di depan micromouse serta menjaga robot selaras dalam koridor
diagonal.

3.3 Unit Motor


Micromouse digerakkan menggunakan dua motor DC yang mana dikendalikan
menggunakan Hbridge driver chip L293D. Dengan chip L293D ini motor dapat di atur mati
atau hidupnya serta dapat diatur arah pergerakannya. Unit motor ini juga menggunakan kontrol
Pulse Width Modulation (PWM) yang digunakan untuk mengatur kecepatan rotasi motor.

3.4 Encoder
Pada micromouse sangatlah penting untuk mendeteksi dan mengontrol kecepatan roda
pada saat berbelok ke kiri dan kanan untuk mendapatkan sudut belokan yang baik. Untuk itu,
diperlukan encoder pada roda micromouse. Encoder memungkinkan kita untuk menentukan
seberapa banyak roda telah berputar.
Encoder pada micromouse terdiri atas sepasang transmitter dan receiver infrared. Yang mana
nantinya transmitter dan receiver infrared ini akan diletakkan di kedua sisi piringan berkode
(lobang) yang diletakkan di roda. Dengan menghitung banyaknya lobang yang ada di piringan
tadi dan mengetahui diameter roda, micromouse dapat menentukan seberapa jauh ia telah
berjalan. Perhitungan yang sama digunakan untuk menentukan sudut belokan dari micromouse.

Vous aimerez peut-être aussi