T1 612010003 BAB III
10
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 smartphoneandroid 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.
(2)
11
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.
(3)
12 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/Rx0untuk 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.
(4)
13
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.
(5)
14 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.
(6)
15
Berikut adalah perbandingan flowchart algoritma yang baru dan yang lama.
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
Analisis Posisi Bola Terhadap
Robot
Nilai Pan dan Tilt ketika bola terkunci
Apakah jarak bola jauh
atau dekat?
Dekati Bola
Cek Orientasi Robot
Jauh Dekat
Apakah
memenuhi toleransi sudut < 60 dan > -60 ?
Cek Posisi Gawang
Memutari Bola sampai orientasi
sesuai
YES NO
Tendang Bola
Apakah
memenuhi toleransi sudut > -20 dan < 20 ?
Posisikan bola untuk ditendang
Memutari bola sampai orientasi
sesuai
(7)
16
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.
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
Analisis Posisi Bola Terhadap
Robot
Nilai Pan dan Tilt ketika bola terkunci
Apakah jarak bola jauh
atau dekat?
Dekati Bola
Cek Orientasi Robot
Jauh Dekat
Apakah
memenuhi toleransi sudut < 40 dan > -40 ?
Cek Posisi Gawang
Memutari Bola sampai orientasi
sesuai
YES NO
Tendang Bola
Apakah robot searah dengan
gawang?
Posisikan bola untuk ditendang
Memutari sampai robot searah dengan gawang
(8)
17
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.
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.
koordinat kartesian bola di layar (x,y)
Start
filter warna bola dan hitung COG
bola
apakah koordinat bola berada di daerah
toleransi?
YES hitung selisih
koordinat bola dengan daerah
toleransi
NO ubah sudut servo
pan dan tilt sesuai hasil perhitungan
nilai perubahan sudut servo
(9)
18
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 < batas toleransi – 100 piksel) {
sudut pan + 10 }
else if(pusat bola < batas toleransi - 50 piksel) {
sudut pan + 8 }
else if(pusat bola < batas toleransi - 20 piksel) {
sudut pan + 3 }
else if(pusat bola < batas toleransi - 10 piksel) {
sudut pan + 1 }
if(pusat bola > batas toleransi + 100 piksel) {
sudut pan - 10 }
else if(pusat bola > batas toleransi + 50 piksel) {
sudut pan - 8 }
else if(pusat bola > batas toleransi + 20 piksel) {
sudut pan - 3 }
(10)
19
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 dengan pusat // toleransi terhadap sudut pan saat ini
}
else if(pusat bola > batas toleransi) {
perhitungan
// fungsi perbedaan pixel pusat bola dengan pusat // toleransi terhadap sudut pan saat ini
} else
perubahan sudut = 0; }
else if(sudut tilt kecil) //jika bola jauh {
if(pusat bola < batas toleransi) {
perhitungan
// fungsi perbedaan pixel pusat bola dengan pusat // toleransi terhadap sudut pan saat ini
}
else if(pusat bola > batas toleransi) {
perhitungan
// fungsi perbedaan pixel pusat bola dengan pusat // toleransi terhadap sudut pan saat ini
} else
perubahan sudut = 0; }
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.
(11)
20
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.
(12)
21 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).
Gambar 3.9.a. Flowchart Algoritma Lama Mendekati Bola Nilai Pan dan Tilt ketika
bola terkunci
apakah nilai pan >25 atau <-25 derajat dari
arah robot ?
panggil motion putar panggil motion
maju apakah nilai tilt<65 (bola
masih jauh)?
YES NO
YES
start
end NO cek
kembali
cek kembali
Apakah robot sudah berhenti
bergerak?
NO
set counter YES Apakah
robot sudah berhenti bergerak? NO
set counter
(13)
22
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.
Nilai Pan dan Tilt ketika bola terkunci
apakah nilai pan >25 atau <-25 derajat dari
arah robot ?
panggil motion putar
panggil motion maju
apakah nilai tilt<65 (bola
masih jauh)?
YES NO
YES
start
end NO cek
kembali
cek kembali
(14)
23
Pada proses robot melakukan cek orientasi, sudut toleransi diperkecil menjadi ±400 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
(15)
24
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.
Gambar 3.11. Flowchart Algoritma Cek Orientasi
start
ambil nilai kompas (arah robot)
apakah arah robot sesuai dengan
tolerasi +-40 derajat?
NO
end
hitung batas robot untuk melakukan
motion geser putar YES
apakah memenuhi syarat untuk melakukan
motion geser putar? cek posisi bola
Panggil motion geser memutar
YES ambil nilai kompas
(arah robot) Panggil motion
geser
NO apakah
bola masih terlihat?
YES
end NO
(16)
25 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.
Gambar 3.12.a. Flowchart Algoritma Cek Gawang yang Lama
start track posisi gawang end Simpan sudut simpangan Update sudut kompas cari gawang sampai terlihat Apakah gawang dekat? jumlahkan sudut acuan ke gawang dengan sudut pan
YES NO
Apakah gawang terlihat di
sebelah kiri? Apakah
gawang terlihat di sebelah kanan?
lihat sebelah kiri lihat sebelah kanan NO NO YES YES apakah ada gawang? apakah ada gawang?
Beri penanda siap menendang YES YES A A Cek Orientasi
(17)
26
Sedangkan algoritma yang baru adalah seperti flowchart berikut.
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.
start
cek posisi gawang
Posisi gawang apakah di depan?
end
hitung batas robot untuk melakukan
motion putar
memenuhi syarat untuk melakukan motin
geser putar? cek posisi bola
Panggil motion putar pelan sampai robot mengarah ke gawang
YES
Panggil motion geser
NO YES
NO
Apakah gawang ada di samping?
YES NO
beri penanda siap menendang
gawang tidak terlihat
apakah bola masih ada?
YES
end NO
(18)
27
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.
(19)
28
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.
(20)
29
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.
0 20 40 60 80 100 120 140
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
Route
batas kiri batas kanan batas kanan2 batas kiri2 mid
Pan (derajat)
(21)
30
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 ; }
Batas Kanan Batas Kiri
Batas Kanan_2
(22)
31
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.
(23)
32
Gambar 3.18.a. Flowchart Algoritma Menendang Bola yang Lama
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.
start
end panggil motion tendang kanan
start
apakah sudah cek kompas?
end YES
NO
panggil motion tendang kanan
cek kompas
cek gawang apakah
acuan menendang kaki kanan?
YES panggil motion
tendang kiri NO
(24)
33 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.
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
Sudut tIlt kepala setelah mengunci bola
apakah > 70 derajat?
Instruksikan Robot Teman untuk
Berhenti
Instruksikan Robot Teman untuk
Bergerak
YES NO
Kirim Instruksi melalui bluetooth
END START
(25)
34
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. dat=0;
2. shift=0x01;
3. clk=1;
4. delay_us(400); 5. clk=0;
6. delay_us(100); 7. for(i=0;i<4;i++)
8. {
9. clk=1;
10. delay_us(50);
11. dat=(val&shift)>>i; 12. shift<<=1;
13. delay_us(100);
14. dat=0;
15. clk=0;
16. delay_us(50);
17. }
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.
(26)
35
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<<count; count++; } } void main() { ... move=4; stop=3; receive=0; dat=0; count=0;
(27)
36 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
(28)
37
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.
(29)
38
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.
(1)
33 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.
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
Sudut tIlt kepala setelah mengunci bola
apakah > 70 derajat?
Instruksikan Robot Teman untuk
Berhenti
Instruksikan Robot Teman untuk
Bergerak
YES NO
Kirim Instruksi melalui bluetooth
END START
(2)
34
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. dat=0; 2. shift=0x01; 3. clk=1;
4. delay_us(400); 5. clk=0;
6. delay_us(100); 7. for(i=0;i<4;i++) 8. {
9. clk=1;
10. delay_us(50);
11. dat=(val&shift)>>i; 12. shift<<=1;
13. delay_us(100); 14. dat=0;
15. clk=0;
16. delay_us(50); 17. }
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.
(3)
35
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<<count; count++;
} }
void main() {
... move=4; stop=3; receive=0; dat=0; count=0;
(4)
36 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
(5)
37
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.
(6)
38
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.