BAB III PERANCANGAN Pada bab ini akan dijelaskan perancangan perangkat keras serta perangkat lunak algoritma pergerakan dan komunikasi robot.
3.1.Gambaran Sistem Sistem instruksi pergerakan pada robot dibagi menjadi 3 bagian utama, yaitu smartphone android sebagai main processor yang menentukan gerakan robot yang akan dilakukan, mikrokontroler ATmega324 sebagai kontrol utama yang mengatur kesinambungan antara prosesor utama dengan controller servo robot kondo KHR-3HV (RCB-4) dan pemroses data komunikasi yang menggunakan mikrokontroler ATmega8 dengan modul bluetooth sebagai media komunikasinya. Berikut adalah diagram blok dari sistem keseluruhan.
Gambar 3.1. Blok Diagram Sistem Keseluruhan.
10
Penjelasan blok diagram sistem pada gambar 3.1. adalah sebagai berikut : 1. Bagian Prosesor Utama Prosesor Utama yang digunakan dalam robot adalah sebuah smartphone android dengan kamera yang dilepas dan diletakan pada servo pan - tilt. Dalam smartphone ini algoritma pergerakan robot ditanamkan. Tugas utama dari perangkat ini memproses gambar kamera yang diletakan di kepala robot sebagai mata dan mengunci bola[8]. Kemudian menentukan pergerakan robot berdasarkan posisi bola terhadap robot dan mengirimkan perintah berupa paket data ke kontrol utama melalui koneksi bluetooth.
2. Bagian Kontrol Utama Kontrol utama robot menggunakan mikrokontroler ATmega324 yang bertugas mengolah perintah berupa paket data dari smartphone melalui komunikasi serial bluetooth. Ada 3 macam perintah yang dikirim dari smartphone yaitu perintah untuk menggerakan robot, perintah untuk menggerakan servo kepala, dan perintah untuk berkomunikasi pada robot teman. Ketika perintah yang diterima mikrokontroler ATmega324 berupa perintah motion, maka mikrokontroler akan mengirimkan paket data sesuai dengan motion yang diinginkan ke kontroler servo RCB-4. Jika mikrokontroler ATmega324 menerima perintah untuk menggerakan servo kepala, maka nilai OCR1A/B akan berubah sesuai dengan sudut yang diinginkan. Sedangkan jika perintah yang diterima mikrokontroler ATmega324 adalah perintah untuk berkomunikasi pada robot teman, maka mikrokontroler ATmega324 akan mengirimkan data ke mikrokontroler ATmega8 melalui pin I/O.
3. Bagian Komunikasi Robot Pemroses data komunikasi menggunakan mikrokontroler ATmega8 yang bertugas mengirimkan data ke robot teman dan menerima data dari robot teman melalui bluetooth yang kemudian dikembalikan ke mikrokontroler ATmega324 dengan menggunakan pin I/O.
11
3.2.Perancangan Perangkat Keras Bagian perangkat keras terdiri dari board mikrokontroler ATmega324 dan board mikrokontroler ATmega8.
3.2.1.Board Mikrokontroler ATmega324 Dalam mikrokontrol ini digunakan Tx0/Rx0 untuk berkomunikasi dengan modul bluetooth yang terkoneksi dengan smartphone android, sedangkan Tx/Rx1 digunakan untuk mengirim perintah pada servo kontroler RCB-4. Kemudian timer 16bit digunakan untuk menghasilkan Pulse Width Modulation (PWM) yang digunakan untuk mengontrol servo pan dan tilt kepala robot. Agar dapat bergerak dengan resolusi 10, nilai lebar pulsa harus dikonversi terlebih dahulu. Nilai lebar pulsa adalah nilai yang tersimpan dalam register OCR1, kemudian dicari nilai OCR1 dimana servo bergerak sampai batas maksimalnya yaitu 00 sampai 1800 untuk servo pan dan 00 sampai 900 untuk servo tilt. Jika dimisalkan sudut pan yang diinginkan adalah sudut_pan dan sudut tilt yang diinginkan adalah sudut_tilt, nilai OCR1 saat 00 adalah MIN dan nilai OCR1 saat sudut maksimal adalah MAX, maka untuk memperoleh resolusi pergerakan servo pan sebesar 10 digunakan perhitungan sebagai berikut:
ππΆπ
1π΄ = ππΌπ + ππ΄π β
π π’ππ’π‘_πππ 180
Sedangkan untuk memperoleh resolusi pergerakan servo pan sebesar 10 digunakan perhitungan sebagai berikut:
ππΆπ
1π΅ = ππΌπ + ππ΄π β
π π’ππ’π‘_π‘πππ‘ 90
Board ini juga digunakan untuk mengirimkan data komunikasi yang dikirimkan melalui pin interrupt dan pin I/O ke board komunikasi yang kemudian diteruskan dengan modul bluetooth ke robot lainya. Konfigurasi jalur data melalui I/O yang dibuat akan dijelaskan pada bagian algoritma komunikasi robot. Berikut adalah skema dari board mikrokontroler ATmega324.
12
Gambar 3.2. Skema Board ATmega324.
3.2.2.Board Mikrokontroler ATmega8 Board mikrokontroler ATmega8 ini digunakan untuk menangani tugas komunikasi data antar robot. Terdapat 2 macam komunikasi data yang terjadi pada mikrokontroler ini yaitu data dari smartphone yang dikirim melalui board mikrokontroler ATmega324 dan data yang akan dikirimkan ke robot lain menggunakan modul bluetooth. Sistem yang dibuat untuk menangani kedua komunikasi data tersebut akan dijelaskan pada bagian algoritma komunikasi robot. Berikut adalah skema dari board mikrokontroler ATmega8.
Gambar 3.3. Skema Board ATmega8.
13
3.3.Bagian Perangkat Lunak Bagian perangkat lunak berisi algoritma pergerakan robot ketika bermain bola dalam bentuk flowchart keseluruhan dan flowchart per-prosedur dan algoritma robot berkomunikasi. Pada bagian ini akan dibandingkan algoritma baru yang dibuat dengan algoritma robot saat R2C masih mengikuti KRSBI 2013.
3.3.1.Algoritma Keseluruhan Algoritma keseluruhan robot adalah algoritma yang berisi semua pergerakan robot ketika bermain dilapangan dan merespons segala kondisi bola, gawang, posisi robot di lapangan, dan lainya. Pada dasarnya urutan pergerakan robot ketika bermain di lapangan adalah sebagai berikut: 1. Tracking bola : melihat bola dan menggerakan servo pan dan tilt robot sampai bola terlihat di tengah-tengah pandangan kamera. 2. Analisis posisi bola terhadap robot : menganalisis posisi bola berdasarkan sudut servo pan dan tilt robot setelah melakukan tracking bola. 3. Mendekati bola : melakukan gerakan berjalan maju dan putar ditempat untuk mendekati bola berdasarkan posisi bola terhadap robot. 4. Cek orientasi : membandingkan arah orientasi robot dengan arah orientasi menyerang (arah gawang lawan) dan merubah arah orientasi jika tidak sesuai. 5. Cek gawang : mencari gawang lawan dan menyearahkan arah orientasi robot untuk mengarahkan tendangan ke gawang lawan. 6. Posisikan diri menendang bola : memposisikan diri hingga bola berada tepat di depan kaki kanan atau kiri, sehingga robot dapat menendang bola dengan baik. 7. Tendang bola : melakukan gerakan menendang bola.
14
Berikut adalah perbandingan flowchart algoritma yang baru dan yang lama. Nilai Pan dan Tilt ketika bola terkunci
Analisis Posisi Bola Terhadap Robot
Jauh
Apakah jarak bola jauh atau dekat?
Dekat
Cek Orientasi Robot
Dekati Bola YES
Apakah memenuhi toleransi sudut < 60 dan > -60 ?
Memutari Bola sampai orientasi sesuai
Cek Posisi Gawang
Tendang Bola
YES
NO
Apakah memenuhi toleransi sudut > -20 dan < 20 ?
NO
Memutari bola sampai orientasi sesuai
Posisikan bola untuk ditendang
Gambar 3.4. Flowchart Algoritma Keseluruhan yang Lama
Pada algoritma robot R2C yang lama bagian proses mendekati bola masih sering stuck pada posisi bola tertentu dan masih menggunakan metode counter. Pada bagian memposisikan diri untuk menendang bola, robot masih memerlukan waktu sangat lama karena melakukan pergerakan yang tidak menghasilkan perpindahahan (geser kanan 15
kemudian geser kiri berulang-ulang). Pada bagian mengarahkan diri ke gawang, robot sangat bergantung terhadap sudut servo dan kompas. Padahal sudut servo kepala kadang tidak pas dengan gawang, dan kompas sangat rentan terhadap gangguan. Nilai Pan dan Tilt ketika bola terkunci
Analisis Posisi Bola Terhadap Robot
Jauh
Apakah jarak bola jauh atau dekat?
Dekat
Cek Orientasi Robot
Dekati Bola YES
Apakah memenuhi toleransi sudut < 40 dan > -40 ?
Memutari Bola sampai orientasi sesuai
Cek Posisi Gawang
Tendang Bola
NO
YES
Apakah robot searah dengan gawang?
NO
Memutari sampai robot searah dengan gawang
Posisikan bola untuk ditendang
Gambar 3.5. Flowchart Algoritma Keseluruhan yang Baru
Pada dasarnya algoritma inti yang digunakan robot hampir sama. Namun pada algoritma yang baru, semua proses di setiap blok flowchart pada gambar 3.5 dilakukan 16
optimalisasi bahkan ada beberapa proses yang diganti seperti algoritma saat akan memposisikan bola untuk ditendang. Misalnya pada algoritma yang lama, robot akan memutari bola sampai orientasi (sudut kompas) sesuai. Sedangkan algoritma yang baru robot memutar sampai searah dengan gawang.
3.3.2.Algoritma Tracking dan Analisis Posisi Bola Bagian pencitraan robot masih sama dengan yang lama, namun pada bagian menentukan perubahan sudut servo kepala ketika robot melakukan tracking bola sudah dioptimalkan dengan memperbaiki kontrol overshoot servo. Berikut ini adalah flowchart dari bagaimana robot melakukan tracking bola. Start
ubah sudut servo pan dan tilt sesuai hasil perhitungan
filter warna bola dan hitung COG bola
koordinat kartesian bola di layar (x,y)
nilai perubahan sudut servo
hitung selisih koordinat bola dengan daerah toleransi
NO
apakah koordinat bola berada di daerah toleransi?
YES
Gambar 3.6. Flowchart Algoritma Tracking Bola.
Flowchart algoritma lama dengan yang baru adalah sama, karena algoritma dasar yang digunakan sama dan perbedaannya terletak pada coding yang diimplementasikan khususnya pada bagian menghitung selisih koordinat bola dengan daerah toleransi. Untuk lebih jelasnya berikut adalah gambar vision kamera robot dan daerah toleransi yang dimaksud. Resolusi gambar yang digunakan adalah 480x320 piksel. Sedangkan daerah toleransi adalah 30x20 piksel di tengah dan kotak bergaris tebal adalah batas daerah toleransi.
17
Gambar 3.7. Vision Robot dan Daerah Toleransi.
Bola dinyatakan terkunci atau sudah didapatkan ketika koordinat bola sudah berada di dalam daerah toleransi. Jika koordinat bola berada di luar batas toleransi, maka servo kepala robot akan bergerak sedemikian hingga koordinat bola dapat berada di dalam batas toleransi. Pergerakan servo tersebut dikendalikan dengan algoritma tracking bola yang akan dibandingkan menggunakan pseudo code. Berikut ini adalah pseudo code algoritma yang lama. if(pusat bola { sudut pan } else if(pusat { sudut pan } else if(pusat { sudut pan } else if(pusat { sudut pan } if(pusat bola { sudut pan } else if(pusat { sudut pan } else if(pusat { sudut pan }
< batas toleransi β 100 piksel) + 10 bola < batas toleransi - 50 piksel) + 8 bola < batas toleransi - 20 piksel) + 3 bola < batas toleransi - 10 piksel) + 1 > batas toleransi + 100 piksel) - 10 bola > batas toleransi + 50 piksel) - 8 bola > batas toleransi + 20 piksel) - 3
18
else if(pusat bola > batas toleransi + 10 piksel){ sudut pan - 1 }
Berikut ini adalah pseudo code algoritma yang baru. if(sudut tilt besar) //jika bola dekat { if(pusat bola < batas toleransi) { perhitungan // fungsi perbedaan pixel pusat bola // toleransi terhadap sudut pan saat } else if(pusat bola > batas toleransi) { perhitungan // fungsi perbedaan pixel pusat bola // toleransi terhadap sudut pan saat } else perubahan sudut = 0; } else if(sudut tilt kecil) //jika bola jauh { if(pusat bola < batas toleransi) { perhitungan // fungsi perbedaan pixel pusat bola // toleransi terhadap sudut pan saat } else if(pusat bola > batas toleransi) { perhitungan // fungsi perbedaan pixel pusat bola // toleransi terhadap sudut pan saat } else perubahan sudut = 0; }
dengan pusat ini
dengan pusat ini
dengan pusat ini
dengan pusat ini
Optimalisasi dilakukan pada proses menghasilkan nilai perubahan sudut servo. Pada algoritma yang lama, perubahan sudut servo hanya memiliki 4 buah nilai yang dihasilkan dari 4 buah perbandingan selisih koordinat pusat bola dengan daerah toleransi. Selisih terbesar yang dibandingkan adalah 100 piksel dengan nilai perubahan sudut servo Β±10 derajat. Sehingga meskipun selisih koordinat bola dengan daerah toleransi lebih besar dari 100 piksel, perubahan sudut servo yang bisa dihasilkan tetap Β±10 derajat.
19
Pada algoritma yang baru, nilai perubahan sudut servo dihasilkan dengan memasukan selisih koordinat bola dengan daerah toleransi ke dalam sebuah persamaan. Persamaan tersebut didapat dari melakukan sampling nilai-nilai perubahan sudut servo terhadap selisih koordinat bola dengan daerah toleransi yang kemudian dari data tersebut dibuat grafik. Persamaan garis dari grafik tersebut kemudian digunakan untuk menghitung perubahan sudut servo. Contoh grafik tersebut adalah sebagai berikut.
Gambar 3.8. Grafik Selisih Koordinat Bola dengan Batas Toleransi terhadap Perubahan Sudut Servo.
Pada gambar 3.8, sumbu Y (d_Servo) adalah nilai perubahan sudut servo dan sumbu X (d_K_Bola) adalah selisih koordinat bola dengan daerah toleransi. Sedangkan persamaan tersebut adalah persamaan dari trendline grafik yang secara otomatis dibuat dari program Microsoft Excel. Persamaan tersebut dapat berubah-ubah sesuai dengan hasil sampling yang dilakukan. Sesuai dengan grafik tersebut, nilai perubahan sudut servo kepala dapat berubah-ubah dengan nilai lebih banyak, hasilnya servo dapat bergerak lebih halus dan cepat ketika merespon perpindahan bola. Setelah proses tracking bola dilakukan, maka akan didapatkan nilai sudut pan dan tilt servo ketika robot sudah mendapatkan bola. Sudut pan dan tilt tersebut kemudian digunakan untuk memperkirakan posisi bola terhadap robot.
20
3.3.3.Algoritma Mendekati Bola Optimalisasi kecepatan robot mendekati bola dilakukan dengan mengganti metode pemanggilan motion yang sebelumnya menggunakan counter menjadi tanpa menggunakan counter. Counter yang dimaksud adalah jumlah robot melakukan motion. Misalnya dikirimkan perintah melakukan motion jalan maju dengan counter sebanyak 3, maka robot akan melakukan motion jalan maju sebanyak 3 langkah. Robot dapat bergerak dengan motion lain setelah counter tersebut selesai dilakukan. Berikut adalah perbandingan flowchart algoritma lama dengan counter dengan algoritma yang baru (tanpa counter). start
Nilai Pan dan Tilt ketika bola terkunci
NO
cek kembali
apakah nilai tilt<65 (bola masih jauh)?
cek kembali
apakah nilai pan >25 atau <-25 derajat dari arah robot ?
NO
YES
YES
Apakah robot sudah berhenti bergerak?
NO
end NO
Apakah robot sudah berhenti bergerak?
YES
YES
set counter
set counter
panggil motion putar panggil motion maju
Gambar 3.9.a. Flowchart Algoritma Lama Mendekati Bola
21
start
Nilai Pan dan Tilt ketika bola terkunci
NO
cek kembali
apakah nilai pan >25 atau <-25 derajat dari arah robot ?
YES
apakah nilai tilt<65 (bola masih jauh)? YES
cek kembali
panggil motion putar
NO
panggil motion maju end
Gambar 3.9.b. Flowchart Algoritma Baru Mendekati Bola
Pada algoritma yang lama, pergerakan robot menjadi kurang peka terhadap perpindahan bola. Misalnya ketika counter belum selesai dilakukan ternyata bola berpindah, maka robot akan tetap melakukan motion sampai selesai baru kemudian melakukan motion lain. Sedangkan pada algoritma yang baru, pemanggilan motion tidak menggunakan counter. Sehingga dapat langsung merespon apabila terjadi perpindahan bola yang membutuhkan pergantian motion.
3.3.4.Algoritma Cek Orientasi Robot Cek orientasi robot perlu dilakukan untuk mengetahui posisi robot apakah cenderung menghadap gawang sendiri atau cenderung menghadap gawang lawan. Karena warna gawang sendiri dan lawan sama, maka robot dapat melakukan tendangan ke gawang sendiri. Oleh karena itu sebelum melihat gawang, robot harus melakukan cek orientasi agar gawang yang terlihat adalah gawang lawan. 22
Pada proses robot melakukan cek orientasi, sudut toleransi diperkecil menjadi 0
Β±40 terhadap garis tegak lurus lapangan supaya kemungkinan robot dapat menangkap lokasi gawang di segala posisi menjadi lebih besar. Karena simpangan maksimal servo pan kepala robot adalah Β±800 maka diharapkan robot dapat melihat gawang pada posisi pinggir lapangan dengan toleransi sudut tersebut. Sehingga kemungkinan robot tidak mendapatkan gawang dan menendang ke arah yang tidak seharusnya dapat diperkecil. Pada bagian cek orentasi robot juga terdapat proses dimana robot bergerak memutari bola. Pada bagian ini dilakukan sampling nilai sudut pan dengan cara mencatat beberapa posisi bola dengan robot dimana ketika robot melakukan motion geser memutar, robot tidak menyampar bola. Data tersebut kemudian diolah menjadi grafik yang menghasilkan persamaan garis untuk menentukan batas kapan robot harus melakukan motion geser memutar dan kapan robot harus bergeser dahulu sebelum melakukan geser memutar. Berikut adalah grafik beserta persamaan garis yang dibuat berdasarkan sampling.
Gambar 3.10. Grafik Sudut Tilt Terhadap Batas Putar (Y)
Pada gambar 3.10, sumbu Y adalah nilai batas robot melakukan motion geser putar dan sumbu X adalah nilai sudut tilt. Jika sudut pan sudah β₯ batas, maka robot dapat melakukan motion geser putar tanpa menyampar bola. Nilai sudut tilt dimulai dari 70 karena prosedur cek orientasi ini hanya dipanggil oleh main function setelah jarak bola cukup dekat dengan robot atau sudut tilt sudah β₯ 700. Sedangkan persamaan tersebut adalah persamaan dari trendline grafik yang secara otomatis dibuat dari program Microsoft Excel. Persamaan tersebut dapat berubah-ubah sesuai dengan hasil 23
sampling yang dilakukan. Sesuai dengan grafik tersebut, batas melakukan motion geser putar dapat berubah-ubah sesuai dengan sudut tilt yang merepresentasikan jarak antara bola dengan robot. Sehingga robot dapat memutari bola dengan baik dalam segala posisi yang mungkin. Berikut adalah flowchart dari algoritma cek orientasi, pada dasarnya algoritma lama dan baru memiliki flowchart yang sama. Perbedaan hanya terletak pada toleransi sudut dan batas robot melakukan motion geser memutar.
start
ambil nilai kompas (arah robot) apakah bola masih terlihat? YES
apakah arah robot sesuai dengan tolerasi +-40 derajat?
NO
NO end
YES
cek posisi bola end
ambil nilai kompas (arah robot)
hitung batas robot untuk melakukan motion geser putar
YES Panggil motion geser memutar
apakah memenuhi syarat untuk melakukan motion geser putar?
Gambar 3.11. Flowchart Algoritma Cek Orientasi
24
Panggil motion geser
NO
3.3.5.Algoritma Cek Posisi Gawang Pada
bagian
ini,
dilakukan
perubahan
total
algoritma
robot
dalam
memperkirakan posisi gawang. Pada algoritma robot yang lama, robot membutuhkan sudut antara arah robot dengan titik pusat gawang yang diambil dari sudut pan kepala robot. Dan kemudian robot bergerak memutar dengan menggunakan motion geser memutar sampai arah robot sesuai dengan arah gawang, proses ini menggunakan kompas dari smartphone yang sangat rentan gangguan dan memiliki toleransi yang cukup besar. Berikut adalah flowchart algoritma yang lama. start
cari gawang sampai terlihat
track posisi gawang
Simpan sudut simpangan
Update sudut kompas
NO
A
jumlahkan sudut acuan ke gawang dengan sudut pan
YES
Apakah gawang dekat?
NO
Apakah gawang terlihat di sebelah kanan?
NO
Apakah gawang terlihat di sebelah kiri? YES
YES
Cek Orientasi
lihat sebelah kanan
lihat sebelah kiri
apakah ada gawang?
A
YES
apakah ada gawang? YES
Beri penanda siap menendang
end
Gambar 3.12.a. Flowchart Algoritma Cek Gawang yang Lama 25
Sedangkan algoritma yang baru adalah seperti flowchart berikut. start
cek posisi gawang
YES
Posisi gawang apakah di depan? NO apakah bola masih ada?
NO
Apakah gawang ada di samping?
YES
NO
end
YES
cek posisi bola
gawang tidak terlihat hitung batas robot untuk melakukan motion putar
beri penanda siap menendang
Panggil motion putar pelan sampai robot mengarah ke gawang
YES
memenuhi syarat untuk melakukan motin geser putar?
Panggil motion geser
NO
end
Gambar 3.12.b. Flowchart Algoritma Cek Gawang yang Baru Pada algoritma yang lama, robot membutuhkan proses tracking gawang. Proses ini seperti proses ketika melakukan tracking bola namun yang menjadi objek adalah gawang. Karena proses tracking membutuhkan titik berat gawang berada di tengah layar, maka dibutuhkan waktu yang cukup lama untuk menggerakan servo kepala hingga memperoleh titik tengah gawang. Sedangkan algoritma robot yang baru hanya membutuhkan posisi gawang apakah berada di depan, kanan, atau kiri robot. Untuk itu robot hanya perlu melihat ke depan, kanan atau kiri tanpa melakukan tracking gawang.
26
Berikut ini adalah ilustrasi ketika robot melihat ke depan dan memperkirakan posisi gawang.
Gambar 3.13. Robot Melihat Gawang Pada gambar 3.13, robot disimbolkan dengan lingkaran dan tanda panah adalah arah orientasi robot. Garis putus-putus pada gambar adalah jarak pandang kamera robot, sedangkan bagian gawang yang diberi warna gelap adalah bagian gawang yang terlihat oleh kamera. Kamera akan menangkap gambar seperti gambar berikut ini.
Gambar 3.14. Gawang di Kamera Robot Dari gambar 3.14 kemudian gawang diperkirakan berada di sebelah kiri robot dengan cara membandingkan piksel gawang yang terlihat dengan garis tengah gambar. Jika gawang yang tergeteksi cenderung berada di sebelah kiri garis tengah gambar, maka robot akan memutuskan bahwa gawang berada di sebelah kiri robot dan akan berputar ke kiri sampai penglihatan robot penuh dengan gawang atau gawang berada di tengah-tengah layar. Berikut adalah gambar robot yang sudah berputar ke arah gawang.
27
Gambar 3.15. Robot Mengarahkan Diri Menghadap Gawang Robot akan berputar sambil melihat gawang dan ketika sudah searah dengan gawang robot akan berhenti dan melanjutkan proses berikutnya dalam main program. Pada algoritma yang baru ini, pergerakan robot diubah menjadi tidak memutari bola namun hanya berputar ditempat sehingga waktu yang dibutuhkan lebih cepat. Selain itu algoritma yang baru tidak menggunakan kompas untuk acuan arah gawang, namun menggunakan kamera yang melihat gawang secara realtime sehingga lebih akurat dan dapat diandalkan.
3.3.6.Algoritma Memposisikan Diri Menendang Bola Dalam bagian ini, algoritma baru menggunakan bantuan rute pergerakan robot yang sesuai dengan kaki kanan dan kaki kiri robot. Rute ini di buat dengan melakukan sampling posisi robot terhadap bola yang di representasikan dalam besaran sudut servo pan dan tilt kepala robot. Dengan bantuan rute ini, diharapkan robot dapat bergerak memposisikan diri menendang bola dengan lebih akurat dan mampu melakukan tendangan menggunakan kaki kanan maupun kaki kiri. Robot R2C tahun 2013 hanya bisa menggunakan kaki kanan untuk menendang. Sehingga meskipun bola sudah pas di kaki kiri robot harus bergeser agar bola berada di kaki kanan. Berikut adalah grafik dari rute yang dibuat agar ketika robot sampai pada bola, bola sudah pas di kaki robot yang diinginkan.
28
Pan (derajat)
Route
140 120 100 batas kiri 80
batas kanan batas kanan2
60
batas kiri2 40
mid
20 0 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
Tilt (derajat)
Gambar 3.16. Rute Pergerakan Robot
Grafik tersebut adalah batas-batas robot melakukan pergerakan, sehingga kaki robot yang menjadi acuan menendang akan selalu berada di dalam batas-batas tersebut. Sumbu X adalah sudut tilt yang merepresentasikan jarak bola tegak lurus (vertikal) terhadap robot (semakin besar maka jarak bola dengan robot semakin dekat) dan sumbu Y adalah sudut pan yang merepresentasikan posisi horizontal bola terhadap robot (titik 0 adalah posisi robot menengok ke kanan 900). Grafik rute pada gambar 3.16 tidak simetris terhadap garis tengah pada nilai sumbu Y (sudut pan) 900 (sudut pan ketika kepala robot lurus ke depan) karena peletakan mekanik kepala robot dan kamera tidak persis ditengah robot, sehingga nilai yang didapatkan saat melakukan sampling juga tidak simetris. Persamaan garis pada grafik kemudian digunakan untuk menentukan pergerakan robot. Rute ini dilakukan setelah robot cukup dekat dengan bola (nilai tilt 700). Rute pergerakan, robot dan posisi bola dapat digambarkan sebagai berikut.
29
Batas Kanan Batas Kiri Batas Kanan_2
Batas Kiri_2
Gambar 3.17. Rute Pergerakan terhadap Robot dan Bola
Ketika bola cenderung berada di sebelah kiri robot, maka robot akan menggunakan batas kanan_2 dan batas kiri_2 sebagai rute pergerakan robot. Sebaliknya, jika bola cenderung berada di sebelah kanan robot, maka akan digunakan batas kanan dan batas kiri sebagai rute pergerakannya. Implementasi dari grafik rute tersebut untuk menghitung batas pergerakan dan penentuan acuan kaki menendang dapat dijelaskan pada pseudo code berikut ini. HitungBatasPergerakan() { if (bola dekat) { if (bola cenderung di sebelah kanan) { acuan pergerakan = kaki kanan; } else if (bola cenderung di sebelah kiri) { acuan pergerakan = kaki kiri; } if (acuan pergerakan = kaki kanan) { persamaan garis rute kaki kanan; } else if (acuan pergerakan = kaki kiri) { persamaan garis rute kaki kiri; } } else batas pergerakan = default ; } 30
Berikut adalah pseudo code dari implementasi perhitungan batas pergerakan robot dalam pengambilan keputusan melakukan motion. if (bola dekat) { HitungBatasPergerakan(); if (bola berada sangat dekat di sebelah kanan kaki robot) { robot melakukan motion geser kanan kecil; } else if (bola berada di sebelah kanan kaki robot) { robot melakukan motion geser kanan sedang; } if (bola berada sangat dekat di sebelah kiri kaki robot) { robot melakukan motion geser kiri kecil; } else if (bola berada di sebelah kiri kaki robot) { robot melakukan motion geser kiri sedang; } if (bola sangat dekat di depan robot) { robot melakukan motion maju kecil; } else if (bola dekat di depan robot) { robot melakukan motion maju sedang; } }
Dengan algoritma yang baru, robot dapat memposisikan diri untuk menendang bola dengan lebih akurat karena menggunakan batas β batas pergerakan yang dihitung dari hasil sampling di berbagai posisi bola dan efisien karena dapat menyesuaikan kaki yang digunakan untuk menendang terhadap posisi bola.
3.3.7.Algoritma Menendang Bola Pada algoritma yang baru, ditambahkan beberapa proteksi sebelum robot menendang bola. Sebelum robot melakukan shooting, dipastikan robot telah melakukan proses cek orientasi robot dan sudah melakukan cek posisi gawang. Sehingga kemungkinan robot menendang ke arah yang tidak seharusnya dapat dihilangkan. Berikut adalah flowchart algoritma menendang bola.
31
start
panggil motion tendang kanan
end
Gambar 3.18.a. Flowchart Algoritma Menendang Bola yang Lama start
apakah sudah cek kompas?
NO
cek kompas
YES
NO
apakah acuan menendang kaki kanan?
cek gawang
YES panggil motion tendang kiri
panggil motion tendang kanan
end
Gambar 3.18.b Flowchart Algoritma Menendang Bola yang Baru
Pada algoritma yang lama, robot hanya bisa menggunakan motion tendang kanan. Sedangkan pada algoritma yang baru, karena robot sudah mampu memposisikan diri untuk melakukan tendang kanan dan tendang kiri maka dapat digunakan kedua motion tendang tersebut.
32
3.3.8.Algoritma Komunikasi Robot Pada komunikasi antar robot, digunakan bluetooth sebagai media komunikasi data nirkabel. Bluetooth ini memiliki interface serial UART yang sudah berlevel tegangan TTL sehingga dapat langsung digunakan dengan mikrokontroler ATmega8. Algoritma dari komunikasi robot ini sederhana, ketika robot sudah dekat dengan bola maka robot akan menginstruksikan robot lain untuk berhenti sampai robot menginstruksikan untuk kembali bergerak. Berikut adalah flowchart algoritma komunikasi robot. START
Sudut tIlt kepala setelah mengunci bola
YES
apakah > 70 derajat?
NO
Instruksikan Robot Teman untuk Bergerak
Instruksikan Robot Teman untuk Berhenti
Kirim Instruksi melalui bluetooth
END
Gambar 3.19. Flowchart Algoritma Komunikasi Robot
Pada bagian pengiriman data, data dikirimkan melalui pin I/O karena kanal UART mikrokontroler ATmega324 sudah terpakai semua. Jalur data dibuat dengan 3 buah pin I/O dari ATmega324 sebagai clock, data, dan penanda (flag) robot berhenti dari mikrokontroler ATmega8. Data yang akan dikirimkan hanya ada 2 macam yaitu data untuk menginstruksikan robot lain berhenti dan data untuk menginstruksikan robot lain bergerak kembali. Oleh karena itu, jalur data hanya didesain untuk mengirimkan data berukuran 4 bit saja. Sehingga dapat memiliki 16 macam perintah yang berbeda meskipun hanya ada 33
2 macam perintah yang digunakan. Hal ini bertujuan untuk mempermudah jika suatu saat algoritma komunikasi ini akan ditambahkan perintah-perintah yang lain. Berikut adalah timing diagram dari jalur data Atmega324 (pengirim) dengan Atmega8 (penerima) ketika mengirimkan data berupa angka 13 (binernya 1101).
Gambar 3.20. Timing Diagram Jalur Data Atmega324 dengan Atmega8
Pada gambar 3.20, pin clock dihubungkan dengan pin eksternal interrupt ATmega8 sedangkan pin data dihubungkan dengan pin I/O ATmega8. Data dikirimkan dan diterima per-bit sesuai dengan clock yang diberikan, kemudian data diubah menjadi desimal kembali di mikrokontroler ATmega8 dan dikirimkan melalui bluetooth. Berikut adalah listing program pada ATmega324 yang digunakan untuk mengirim data ke Atmega8. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
dat=0; shift=0x01; clk=1; delay_us(400); clk=0; delay_us(100); for(i=0;i<4;i++) { clk=1; delay_us(50); dat=(val&shift)>>i; shift<<=1; delay_us(100); dat=0; clk=0; delay_us(50); }
Pada listing program diatas, dat adalah pin data, clk adalah pin clock, val adalah variabel berisi data berukuran 8bit yang akan dikirimkan, shift adalah variabel bantu untuk mengambil nilai per-bit dari variabel val. Cara kerja dari program tersebut, mula-mula pin clock dinyalakan selama 400us, kemudian di matikan selama 100us. 34
Proses ini bertujuan untuk memberikan penanda bahwa data akan dikirim (mengirim start bit). Kemudian proses pengiriman 4 bit data berlangsung pada baris ke 7. Operasi dat=(val&shift)>>i; shift<<=1; pada baris ke 11 dan 12 berfungsi untuk
mengambil nilai biner bit ke-i variabel val yang diulang sebanyak 4 kali dari nilai i=0 hingga i=3. Sehingga data yang dikirimkan adalah 4 bit data dari variabel val. Program pada ATmega8 yang digunakan untuk menerima data dari ATmega324 adalah sebagai berikut. // USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) { char status,data; status=UCSRA; data=UDR; if(data==stop) { if(flag==0)PORTD.4=1; } else if(data==move) { PORTD.4=0; } ... // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { if(receive==0) { delay_us(250); if(PIND.2==1)receive=1; // PIND.2 adalah pin yang tersambung pada // pin data Atmega324 } else if(receive==1) { delay_us(70); temp=data_in; dat+=temp<
temp=0; while(1) { ... if(count>=4) { if(dat==stop) { flag=1; putchar(stop); } else if(dat==move) { putchar(move); flag=0; } dat=0; count=0; temp=0; receive=0; } ... } }
Pada program diatas, setiap ada sebuah pulsa dari pin clock dari Atmega324, maka rutin eksternal interrupt dari Atmega8 akan terpanggil. Ketika start bit diterima, maka nilai variabel receive akan menjadi 1, variabel ini berfungsi untuk menandai apakah start bit sudah di terima atau belum. Setelah start bit diterima, ketika ada clock yang masuk akan diikuti dengan munculnya data. Oleh karena itu, isi dari rutin interrupt setelah menerima start bit adalah program untuk mengkonversi data biner menjadi desimal. Setelah ke 4 bit data diterima, maka nilai variabel dat sudah berisi data yang dikirimkan dari Atmega 324 dalam basis desimal. Jika nilai variabel dat adalah nilai stop (integer 3), maka Atmega8 akan mengirimkan data stop tersebut melalui serial
menuju modul bluetooth yang kemudian dikirimkan menuju robot lain. Sedangkan jika nilai variabel dat adalah nilai move (integer 4), maka Atmega8 akan mengirimkan data move. Nilai stop dan move adalah nilai penanda yang sudah ditentukan untuk menandai perintah apa yang akan dikirimkan ke robot lain. Setelah itu data variabel variabel yang digunakan direset untuk mempersiapkan data yang akan masuk berikutnya. Selain sebagai penerima, mikrokontrol ATmega8 juga digunakan sebagai penerima perintah dari robot lain. Ketika ada perintah yang masuk melalui serial modul 36
bluetooth, maka program akan masuk ke rutin serial interrupt. Jika data yang diterima adalah stop, maka PORTD.4 (pin penanda) akan dinyalakan (bernilai High) untuk menandai robot untuk berhenti. Sedangkan jika Sinyal penanda ini data yang diterima adalah move, maka PORTD.4 akan dimatikan (bernilai Low) untuk memberikan perintah kepada robot untuk bergerak kembali. Variabel flag berfungsi sebagai penanda bahwa robot sudah dekat dengan bola dan menjadi robot yang akan menendang bola. Jika nilai flag sudah 1 maka robot tidak akan memproses perintah dari robot lain untuk berhenti (PORTD.4 tidak bisa High). Pada mikrokontrol ATmega324, jika kondisi pin penanda dari ATmega8 tersebut Low maka robot akan diperintahkan untuk standby (berhenti bergerak). Kemudian menunggu sampai kondisi pin penanda dari ATmega8 tersebut High, baru kemudian robot dapat melakukan perintah untuk melakukan motion kembali. Sistem komunikasi ini sudah pernah diuji secara langsung dengan menggunakan 2 buah robot sekaligus saat R2C mengikuti KRSBI 2014. Namun saat itu sistem komunikasi robot tidak berjalan dengan lancar, bahkan malah menimbulkan error pada pemanggilan motion yang menyebabkan robot bergerak dengan tidak semestinya. Kemudian dilakukan debugging dan ditemukan kesalahan pada pembagian task yang menyebabkan terjadinya error tersebut. Berikut adalah task diagram dimana terdapat gangguan pada pemanggilan motion.
Gambar 3.21.a. Task Diagram Sistem yang Lama
Dalam task diagram tersebut terlihat bahwa interrupt komunikasi antar robot dapat mengganggu proses komunikasi ATmega324 dengan RCB4 jika interrupt untuk melaksanakan pengiriman data komunikasi terjadi di tengah-tengah proses tersebut. 37
Oleh karena itu interrupt tidak boleh menganggu program mikrokontroler sehingga dibuat prioritas yang lebih tinggi untuk proses komunikasi ATmega324 dengan RCB4. Sehingga ketika ATmega324 sedang berkomunikasi dengan RCB4, interrupt dapat tetap terjadi namun task komunikasi tidak dijalankan sesudah proses tersebut selesai. Setelah diperbaiki, task diagram menjadi seperti gambar berikut.
Gambar 3.21.b. Task Diagram Sistem yang Baru
Perbaikan dari sistem komunikasi tersebut dilakukan dengan memberikan prioritas tertinggi pada task komunikasi data ATmega324 dengan RCB4, sehingga tidak dapat terganggu oleh task pada interrupt komunikasi. Prioritas diberikan dengan menggunakan 2 buah variabel penanda (sebut saja flag_RCB4 dan flag_com). Jika komunikasi ATmega324 dengan RCB4 akan dimulai maka flag_ RCB4 akan diberi nilai 1. Kemudian pada awal program rutin interrupt komunikasi, flag_com diberi nilai 1 untuk menandai bahwa ada interrupt komunikasi terjadi. Namun task komunikasi tidak akan dijalankan jika flag_ RCB4 sudah bernilai 1. Setelah komunikasi ATmega324 dengan RCB4 selesai, jika nilai flag_com adalah 1 maka akan dijalankan task komunikasi yang pada interrupt komunikasi tidak dijalankan. Dengan cara pemberian prioritas pada setiap tasi, task pada interrupt komunikasi antar robot dapat berjalan dengan baik tanpa mengganggu komunikasi antara mikrokontroler ATmega324 dengan RCB-4.
38