Pengontrol robot soccer beroda berbasis raspberry PI 3 sebagai prototype ERSBI 2017.

(1)

INTISARI

Semakin berkembangnya teknologi robot di Indonesia maka diadakanlah Kontes Robot Indonesia (KRI) yang bertujuan untuk meningkatkan kreativitas dan kemampuan mahasiswa perguruan tinggi dalam pengembangan bidang teknologi robotika, salah satu cabang yang diperlombakan dalam Kontes Robot Indonesia adalah cabang Ekshibisi Robot Soccer Beroda Indonesia (ERSBI). Pada penelitian ini dibuat sebuah prototipe pengontrol robot soccer yang dapat dimanfaatkan oleh Teknik Elektro Sanata Dharma untuk mengikuti Kontes Robot Indonesia dalam bidang Ekshibisi Robot Soccer Beroda Indonesia.

Pengontrol robot soccer akan menggunakan Raspberry Pi 3 sebagai komputer mini yang akan mengontrol robot secara otomatis berdasarkan masukan video dari Webcam. Analisa masukan video menggunakan pengolahan citra dengan bantuan library python yaitu OpenCV untuk menentukan masing-masing objek berdasarkan warnanya. Hasil dari analisa tersebut adalah posisi x dan y dari masing-masing objek. Posisi x dan y dari masing-masing objek akan digunakan untuk mengendalikan pergerakan robot berdasarkan mode yang diinginkan. Mode pengendalian pergerakan robot terbagi menjadi tiga yaitu bersiap, berhenti, dan bermain. Mode bersiap robot akan bergerak ke posisi tertentu, mode bermain robot akan bergerak mengejar bola, menghindari lawan dengan metode Virtual Force Field (VFF), menendang bola ke gawang dan bertahan dari serangan lawan. Perintah dari sistem untuk robot akan dikirimkan dengan socket python.

Sistem pengontrol robot soccer menggunakan Raspberry Pi 3 dengan pencahayaan ruangan yang cukup terang berhasil mendeteksi masing-masing objek berdasarkan warnanya dengan pengolah citra. Sistem berhasil mengendalikan pergerakan robot berdasarkan dengan mode yang diinginkan. Sistem berhasil mengontrol pergerakan robot pada mode bersiap dengan rata-rata error sebesar 1,16% untuk posisi x dan 2,73% untuk posisi y. Sistem berhasil mengontrol pergerakan robot pada mode bermain dengan rata-rata error sudut akhir sebesar 1,67%.


(2)

ABSTRACT

The robot technology develops in Indonesia, Kontes Robot Indonesia (KRI) is held to improve the creativity and ability of college students at robotics technology development. One of the divisions that contested in Kontes Robot Indonesia is Ekshibisi Robot Soccer Beroda Indonesia (ERSBI). This research will make a prototype of soccer robot controller that used by Sanata Dharma University to take part in Kontes Robot Indonesia at division of Ekshibisi Robot Soccer Beroda Indonesia.

The soccer robot controller will use Raspberry Pi 3 as a mini computer that automatically control the robot based on video input from a Webcam. Analyze video input using image processing with the help of python library, that is OpenCV, to determine each object based on its color. The result of the analysis is the position of x and y of each object. The x position and y position of each object will be used to control the robot based on the desired mode. Control mode of robot movement divided into three modes, there are bersiap, berhenti, and bermain. The bersiap mode will controling robot to a certain position, the bermain mode will controling after the ball, avoiding the opponent using Virtual Force Field (VFF) method, kicking the ball into the goal and defend from the opponent's attack. Commands from the system for robots will execute with a python socket.

The soccer robot control system using Raspberry Pi 3, with enough room lighting, successfully detects each object based on its color with the image processor. The system successfully controls the robot based on the desired mode. The system managed to control the robot in the bersiap mode with an average error of 1.16% for x position and 2.73% for the y position. The system managed to control robots in bermain mode with an average angle error of 1.67%.


(3)

i

TUGAS AKHIR

PENGONTROL ROBOT SOCCER BERODA

BERBASIS RASPBERRY PI 3 SEBAGAI

PROTOTYPE ERSBI 2017

Diajukan Untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Teknik

Program Studi Teknik Elektro

Oleh:

FENDISH CAKRAWALA STIEFANUS NIM: 135114053

JURUSAN TEKNIK ELEKTRO

FAKULTAS SAINS DAN TEKNOLOGI

UNIVERSITAS SANATA DHARMA

YOGYAKARTA


(4)

ii

SMALL SIZE SOCCER ROBOT CONTROLLER ON

RASPBERRY PI 3 AS ERSBI 2017 PROTOTYPE

Presented as Partial Fulfillment of the Requierments To Obtain the Sarjana Teknik Degree

In Electrical Engineering Study Program

FENDISH CAKRAWALA STIEFANUS NIM: 135114053

DEPARTMENT OF ELECTRICAL ENGINEERING

FACULTY OF SCIENCE AND TECHNOLOGY

SANATA DHARMA UNIVERSITY

YOGYAKARTA


(5)

(6)

(7)

(8)

vi

Motto Hidup:

Jangan Pernah Menyerah, Jika Sudah Menyerah Maka Habislah Sudah

“Jangan P

ernah Berkata Tidak Bisa, Mungkin Itu Hanyalah Alasan Untuk

Malas Mencoba”

“I Can Do All Things Through Christ”

Skripsi ini saya persembahkan untuk...

Tuhan Yesus Juru selamatku

Keluarga dan orang terkasih

Teman-teman dari Teknik Elektro dan UKM Basket USD


(9)

(10)

viii

Semakin berkembangnya teknologi robot di Indonesia maka diadakanlah Kontes Robot Indonesia (KRI) yang bertujuan untuk meningkatkan kreativitas dan kemampuan mahasiswa perguruan tinggi dalam pengembangan bidang teknologi robotika, salah satu cabang yang diperlombakan dalam Kontes Robot Indonesia adalah cabang Ekshibisi Robot Soccer Beroda Indonesia (ERSBI). Pada penelitian ini dibuat sebuah prototipe pengontrol robot soccer yang dapat dimanfaatkan oleh Teknik Elektro Sanata Dharma untuk mengikuti Kontes Robot Indonesia dalam bidang Ekshibisi Robot Soccer Beroda Indonesia.

Pengontrol robot soccer akan menggunakan Raspberry Pi 3 sebagai komputer mini yang akan mengontrol robot secara otomatis berdasarkan masukan video dari Webcam. Analisa masukan video menggunakan pengolahan citra dengan bantuan library python yaitu OpenCV untuk menentukan masing-masing objek berdasarkan warnanya. Hasil dari analisa tersebut adalah posisi x dan y dari masing-masing objek. Posisi x dan y dari masing-masing objek akan digunakan untuk mengendalikan pergerakan robot berdasarkan mode yang diinginkan. Mode pengendalian pergerakan robot terbagi menjadi tiga yaitu bersiap, berhenti, dan bermain. Mode bersiap robot akan bergerak ke posisi tertentu, mode bermain robot akan bergerak mengejar bola, menghindari lawan dengan metode Virtual Force Field (VFF), menendang bola ke gawang dan bertahan dari serangan lawan. Perintah dari sistem untuk robot akan dikirimkan dengan socket python.

Sistem pengontrol robot soccer menggunakan Raspberry Pi 3 dengan pencahayaan ruangan yang cukup terang berhasil mendeteksi masing-masing objek berdasarkan warnanya dengan pengolah citra. Sistem berhasil mengendalikan pergerakan robot berdasarkan dengan mode yang diinginkan. Sistem berhasil mengontrol pergerakan robot pada mode bersiap dengan rata-rata error sebesar 1,16% untuk posisi x dan 2,73% untuk posisi y. Sistem berhasil mengontrol pergerakan robot pada mode bermain dengan rata-rata error sudut akhir sebesar 1,67%.


(11)

ix

The robot technology develops in Indonesia, Kontes Robot Indonesia (KRI) is held to improve the creativity and ability of college students at robotics technology development. One of the divisions that contested in Kontes Robot Indonesia is Ekshibisi Robot Soccer Beroda Indonesia (ERSBI). This research will make a prototype of soccer robot controller that used by Sanata Dharma University to take part in Kontes Robot Indonesia at division of Ekshibisi Robot Soccer Beroda Indonesia.

The soccer robot controller will use Raspberry Pi 3 as a mini computer that automatically control the robot based on video input from a Webcam. Analyze video input using image processing with the help of python library, that is OpenCV, to determine each object based on its color. The result of the analysis is the position of x and y of each object. The x position and y position of each object will be used to control the robot based on the desired mode. Control mode of robot movement divided into three modes, there are bersiap, berhenti, and bermain. The bersiap mode will controling robot to a certain position, the bermain mode will controling after the ball, avoiding the opponent using Virtual Force Field (VFF) method, kicking the ball into the goal and defend from the opponent's attack. Commands from the system for robots will execute with a python socket.

The soccer robot control system using Raspberry Pi 3, with enough room lighting, successfully detects each object based on its color with the image processor. The system successfully controls the robot based on the desired mode. The system managed to control the robot in the bersiap mode with an average error of 1.16% for x position and 2.73% for the y position. The system managed to control robots in bermain mode with an average angle error of 1.67%.


(12)

x

Puji syukur penulis hantarkan kepada Tuhan Yang Maha Esa, atas berkat karunia-Nya sehingga penulis mampu menyelesaikan tugas akhir dengan judul “Pengontrol Robot Soccer Beroda Berbasis Raspberry pi 3 sebagai Prototipe ERSBI 2017 ” dengan baik.

Selama pembuatan tugas akhir ini, penulis menyadari adanya bantuan dan dukungan dari berbagai pihak. Oleh karena itu, penulis mengucapkan terima kasih kepada:

1. Ir. Tjendro M. Kom. selaku dosen pembimbing yang memberikan pemikiran, saran, serta kritik yang membangun dalam menyelesaikan tugas akhir ini.

2. Seluruh dosen dan laboran Teknik Elektro yang telah memberikan ilmu serta dukungan kepada penulis saat perkuliahan.

3. Orang tua dan keluarga yang telah mendukung penulis semasa kuliah hingga menyelesaikan tugas akhir ini.

4. Inge Wijayanti Budiawan, George Setiawan kusuma, Edyanto, Andrian yang selalu memberikan motivasi semasa kuliah hingga menyelesaikan tugas akhir ini.

5. Teman-teman di Teknik Elektro, UKF Basket FST, serta UKM Basket USD yang telah membantu penulis menjadi orang yang lebih baik.

Penulis menyadari bahwa tulisan ini masih memiliki kekurangan. Oleh karena itu, kritik dan saran dari semua pihak yang membangun sangat diharapkan. Semoga skripsi ini bisa berguna untuk semua pihak. Terima kasih.

Yogyakarta, 22 Mei 2017


(13)

xi

HALAMAN JUDUL... i

HALAMAN PERSETUJUAN ... ii

HALAMAN PENGESAHAN ... iii

PERNYATAAN KEASLIAN KARYA ... iv

HALAMAN PERSEMBAHAN DAN MOTTO HIDUP ...v

LEMBAR PERNYATAAN PERSETUJUAN ... vi

PUBLIKASI KARYA ILMIAH UNTUK KEPENTINGAN AKADEMIS ... vii

INTISARI ... viii

ABSTRACT ... ix

KATA PENGANTAR ...x

DAFTAR ISI ... xi

DAFTAR GAMBAR ... xiii

DAFTAR TABEL...xvi

BAB I PENDAHULUAN ...1

1.1. Latar Belakang ...1

1.2. Tujuan dan Manfaat Penelitian ...2

1.3. Pembatasan Masalah ...2

1.4. Metodologi Penelitian ...3

BAB II DASAR TEORI ...5

2.1. Raspberry Pi ...5

2.2.1. Raspberry Pi 3 ...5

2.3. USB Webcam...6

2.4. Python 3 ...6

2.5. Tkinter ... 10

2.6. Pengolahan Citra (Image Processing) ... 12

2.7. OpenCV... 14

2.8. Vektor... 16

2.9. Virtual Force Field Method ... 17

2.10. Python Socket ... 19

BAB III RANCANGAN PENELITIAN ... 23

3.1. Proses Kerja Sistem ... 23

3.2. Perancangan Perangkat Keras ... 24

3.2.1. Desain Coach Computer Pengontrol Robot Soccer Beroda ... 24


(14)

xii

3.3.1. Diagram Alir Utama ... 27

3.3.2. Subprogram Bersiap ... 30

3.3.3. Subprogram Berhenti ... 33

3.3.4. Subprogram Bermain ... 34

3.3.5. Subprogram Menentukan Informasi Sudut Robot, serta Posisi Robot, Lawan dan Target ... 36

3.3.6. Subprogram Tindakan Pengontrolan Bertahan ... 39

3.3.7. Subprogram Tindakan Pengontrolan Menyerang ... 41

3.3.8. Subprogram Kirim Perintah ke Robot ... 44

BAB IV HASIL DAN PEMBAHASAN ... 46

4.1. Perubahan Perancangan ... 46

4.1.1. Perubahan Desain Tata Letak Kamera dan Lapangan ... 46

4.1.2. Perubahan Mode Bermain ... 47

4.1.3. Perubahan Subprogram Kirim Perintah ke Robot ... 48

4.2. Hasil Implementasi ... 50

4.3. Analisa Keberhasilan Sistem ... 53

4.4. Pembahasan Perangkat Keras ... 65

4.5. Pembahasan Perangkat Lunak ... 67

BAB V KESIMPULAN DAN SARAN ... 79

5.1. Kesimpulan ... 79

5.2. Saran ... 79

DAFTAR PUSTAKA ... 80 LAMPIRAN ... L1


(15)

xiii

Gambar 1.1 Diagram blok perancangan...3

Gambar 2.1 Wujud dari Raspberry pi [3] ...5

Gambar 2.2 USB Webcam yang digunakan [4] ...6

Gambar 2.3 Contoh Tkinter ... 11

Gambar 2.4 contoh penggunaan persamaan (2.1) ... 13

Gambar 2.5 Contoh dari vektor ... 17

Gambar 2.6 Konsep Virtual Force Field ... 18

Gambar 2.7 contoh penggunaan socket pada Python [16] ... 20

Gambar 3.1 Blok diagram cara kerja sistem ... 23

Gambar 3.2 Tampilan yang didapat kamera dari atas lapangan [17] ... 25

Gambar 3.3 Tampak samping kamera serta jangkauannya ... 26

Gambar 3.4 Kerangka interface program utama ... 27

Gambar 3.5.1 Diagram alir utama ... 28

Gambar 3.5.2 Representasi nilai piksel pada lapangan ... 29

Gambar 3.6.1 Diagram alir subprogram bersiap ... 30

Gambar 3.6.2 Gambaran pergerakan saat bola di tengah lapangan ... 31

Gambar 3.6.3 Gambaran pergerakan saat bola berada di sebelah kiri gawang ... 31

Gambar 3.6.4 Gambaran pergerakan saat bola berada di sebelah kanan gawang ... 32

Gambar 3.6.5 Gambaran pergerakan saat bola berada di pojok kiri gawang ... 32

Gambar 3.6.6 Gambaran pergerakan saat bola berada di pojok kanan gawang ... 33

Gambar 3.7 Diagram alir subprogram berhenti ... 33

Gambar 3.8 Diagram alir Bermain 1... 34

Gambar 3.9 Diagram alir Bermain 2... 35

Gambar 3.10.1 Diagram alir subprogram menentukan tujuan robot dan posisi lawan... 36

Gambar 3.10.2 Gambaran arah sudut robot ... 38

Gambar 3.11.1 Diagram alir subprogram tindakan pengontrolan bertahan ... 39

Gambar 3.11.2 Gambaran algoritma bertahan ... 40

Gambar 3.12.1 Diagram alir subprogram tindakan pengontrolan menyerang ... 41

Gambar 3.12.2 Gambaran algoritma menyerang ... 42

Gambar 3.12.3 Gambaran hasil akhir algoritma VFF... 43

Gambar 3.13 Diagram alir subprogram kirim perintah ke robot ... 45

Gambar 4.1 Perubahan desain tata letak kamera ... 46

Gambar 4.2 Perubahan desain lapangan ... 47


(16)

xiv

Gambar 4.5 Tampilan Geany ... 51

Gambar 4.6 Tampilan pada Lapangan Hasil Analisis OpenCV ... 52

Gambar 4.7 Tampilan Hasil Analisa dan Perintah yang Dikirim ... 53

Gambar 4.8 Hasil analisa pada mode bersiap percobaan pertama... 55

Gambar 4.9 Hasil analisa pada mode bersiap percobaan kedua ... 55

Gambar 4.10 Hasil analisa pada mode bersiap percobaan ketiga ... 55

Gambar 4.11 Hasil analisa pada mode bersiap percobaan keempat ... 56

Gambar 4.12 Hasil analisa pada mode bersiap percobaan kelima... 56

Gambar 4.13 Hasil analisa pada mode bermain percobaan pertama ... 59

Gambar 4.14 Hasil analisa pada mode bermain percobaan kedua ... 60

Gambar 4.15 Hasil analisa pada mode bermain percobaan ketiga ... 60

Gambar 4.16 Hasil analisa pada mode bermain percobaan keempat... 60

Gambar 4.17 Hasil analisa pada mode bermain percobaan kelima ... 61

Gambar 4.18 Hasil analisa pada mode bermain percobaan keenam ... 61

Gambar 4.19 Hasil analisa pada mode bermain percobaan ketujuh ... 61

Gambar 4.20 Hasil analisa video ketika pencahayaan ruangan terang ... 64

Gambar 4.21 Hasil analisa video ketika pencahayaan ruangan redup ... 64

Gambar 4.21 Hasil analisa video ketika pencahayaan ruangan gelap ... 65

Gambar 4.22 Sistem coach computer lengkap dengan alat pembantunya ... 66

Gambar 4.23 Lapangan dan tata letak kamera ... 66

Gambar 4.24 Listing program pemanggilan modul serta inisialisasi variabel ... 67

Gambar 4.25 Listing program pengaturan komunikasi dengan robot... 68

Gambar 4.26 Listing program tampilan antarmuka ... 68

Gambar 4.27 Listing program fungsi untuk tombol pada antarmuka ... 69

Gambar 4.28 Listing program tampilan antarmuka ... 70

Gambar 4.29 Listing program penentuan posisi dari objek ... 71

Gambar 4.30 Listing program perubahan format data posisi ... 72

Gambar 4.31 Listing program penentuan setpoint pada mode bersiap ... 72

Gambar 4.32 Listing program penentuan setpoint pada mode bermain_1 ... 73

Gambar 4.33 Listing program penentuan setpoint pada mode bermain_2 ... 73

Gambar 4.34 Listing program untuk koreksi sudut saat menghindari lawan ... 74

Gambar 4.35 Penentuan jarak antara robot dengan lawan atau target ... 75

Gambar 4.36 Listing program untuk pengontrolan gerak robot ... 75


(17)

xv

Gambar 4.39 Listing program untuk mengubah data menjadi string lalu dikirim ... 77 Gambar 4.40 Listing program untuk perpindahan mode bermain ... 78


(18)

xvi

Tabel 2.1 Penggunaan bilangan dalam Python ...7

Tabel 2.2 Macam-macam operator dalam Python ...8

Tabel 2.3 Daftar komponen pada Tkinter ... 11

Tabel 2.4 Konstanta Keluarga (Family) Protokol... 20

Tabel 2.5 Konstanta Type Socket ... 20

Tabel 3.1 Daftar kode untuk informasi dan perintah kepada robot ... 44

Tabel 3.2 Format pengiriman informasi dan perintah kepada robot... 44

Tabel 3.3 Format pengiriman koreksi sudut belokan robot ... 45

Tabel 4.1 Format pengiriman informasi kepada robot ... 49

Tabel 4.2 Format pengiriman perintah kepada robot ... 49

Tabel 4.3 Format pengiriman koreksi sudut belokan robot ... 50

Tabel 4.4 Format informasi yang diterima oleh sistem ... 53

Tabel 4.5 Data dari pengujian pertama pada mode bersiap ... 54

Tabel 4.6 Error posisi dari percobaan eksekusi mode bersiap ... 58

Tabel 4.7 Data dari pengujian pertama pada mode bermain ... 59

Tabel 4.8 Error sudut dari percobaan eksekusi mode bermain ... 63 Tabel 6.1 Data dari pengujian kedua pada mode bersiap percobaan pertama ... L2 Tabel 6.2 Data dari pengujian kedua pada mode bersiap percobaan kedua ... L3 Tabel 6.3 Data dari pengujian kedua pada mode bersiap percobaan ketiga ... L4 Tabel 6.4 Data pengujian kedua pada mode bermain percobaan pertama ... L5 Tabel 6.5 Data pengujian kedua pada mode bermain percobaan kedua ... L6


(19)

1

BAB I

PENDAHULUAN

1.1.

Latar Belakang

Semakin berkembangnya teknologi robot di Indonesia maka diadakanlah KRI yaitu Kontes Robot Indonesia yang bertujuan untuk menumbuh kembangkan, meningkatkan kreativitas, dan kepekaan mahasiswa perguruan tinggi dalam pengembangan bidang teknologi robotika, selain itu juga meningkatkan pengetahuan tentang sensor dan teknik kendali yang mutakhir pada mahasiswa perguruan tinggi, serta membudayakan iklim kompetitif yang positif di lingkungan perguruan tinggi [1].

Salah satu cabang yang diperlombakan dalam Kontes Robot Indonesia adalah cabang ERSBI yaitu Ekshibisi Robot Soccer Beroda Indonesia. Ekshibisi Robot Soccer Beroda Indonesia merupakan divisi terbaru pada Kontes Robot Indonesia yang mulai diperkenalkan pada ekshibisi di KRI 2016 Tingkat Nasional. Aturan kompetisi mengacu pada KRSBI (lapangan, permainan, game controller). Robot harus memiliki kamera untuk mendeteksi bola, dengan jumlah dan tipe yang tidak dibatasi. Robot dapat menggunakan komputer luar sebagai pengendali [2].

Dengan mengikuti Kontes Robot Indonesia dalam bidang Ekshibisi Robot Soccer Beroda Indonesia, maka nama Universitas Sanata Dharma khususnya program studi Teknik Elektro akan semakin baik di tingkat nasional. Selain itu dengan mengikuti Kontes Robot Indonesia dalam bidang Ekshibisi Robot Soccer Beroda Indonesia, maka kemampuan mahasiswa dari program studi Teknik Elektro dalam bidang sensor, teknik kendali, serta teknologi robot akan meningkat.

Berdasarkan permasalahan tersebut, pada penelitian ini dibuat sebuah prototipe pengontrol robot soccer yang dapat dimanfaatkan oleh Teknik Elektro Sanata Dharma untuk mengikuti Kontes Robot Indonesia dalam bidang Ekshibisi Robot Soccer Beroda Indonesia. Pengontrolannya menurut peraturan liga robot soccer beroda internasional dengan cara membuat komputer yang dapat mengontrol robot untuk mengejar, menggiring, dan menendang bola secara otomatis, serta dilengkapi sebuah kamera yang cakupannya dapat menangkap video dari keseluruhan lapangan permainan bola. Pengontrolan dapat


(20)

dilakukan dengan berbagai macam cara baik Fuzy maupun Analisis Vektor dan lain-lain. Penelitian ini akan menggunakan Raspberry Pi 3 sebagai komputer mini yang akan mengontrol robot secara otomatis serta Webcam sebagai pengambil video untuk menentukan posisi robot dengan musuh, bola, dan gawang yang dituju. Robot diharapkan mampu mengejar bola, menggiring bola melewati musuh, mencapai jarak tertentu dari gawang dan menendang bola.

1.2.

Tujuan dan Manfaat Penelitian

Tujuan dari penelitian ini adalah:

1. Menciptakan suatu pengontrol robot soccer beroda yang menjadi prototipe untuk mengikuti Kontes Robot Indonesia dalam bidang Ekshibisi Robot Soccer Beroda Indonesia.

Manfaat dari penelitian ini adalah: 1. Untuk masyarakat:

Menyediakan sebuah bahan acuan, pedoman, dan rujukan untuk pengembangan pembuatan prototipe pengontrol robot soccer beroda bagi masyarakat luas. 2. Untuk Universitas Sanata Dharma:

Menyediakan prototipe yang nantinya digunakan sebagai bahan acuan, pedoman, dan rujukan untuk program studi Teknik Elektro Universitas Sanata Dharma dalam mengikuti Kontes Robot Indonesia dalam bidang Ekshibisi Robot Soccer Beroda Indonesia.

1.3.

Pembatasan Masalah

Agar tugas akhir ini bisa mengarah pada tujuan dan untuk menghindari terlalu kompleksnya permasalahan yang muncul, maka perlu adanya batasan-batasan masalah yang sesuai dengan judul dari Tugas Akhir ini. Adapun batasan masalah yang dimaksud adalah:

1. Menggunakan Raspberry Pi 3 sebagai komputer mini yang mengolah video untuk mengontrol robot mengejar dan menggiring bola serta menghindari lawan.

2. Kamera yang digunakan adalah Raspberry Pi USB Camera.

3. Bahasa pemrograman yang digunakan adalah bahasa pemrograman Python. 4. Komunikasi Wireless dengan robot menggunakan Python Socket.


(21)

5. Luas lapangan keseluruhan adalah sekitar 6m x 4m.

6. Kamera digantungkan pada tiang setinggi 3m sampai dengan 4m dan diletakkan tepat di tengah lapangan.

7. Bola yang digunakan adalah bola tenis berwarna orange. 8. Warna dari gawang adalah kuning.

9. Ukuran dari robot adalah 40cm (lebar) dan 30cm (tinggi). Terdapat tanda tim di atasnya

1.4.

Metodologi Penelitian

Berdasarkan pada tujuan yang ingin dicapai, metode-metode yang digunakan dalam penyusunan tugas akhir ini adalah:

1. Studi literatur, yaitu dengan cara mendapatkan data dengan membaca buku-buku dan jurnal-jurnal yang berkaitan dengan permasalahan yang dibahas dalam tugas akhir ini.

2. Perancangan subsistem hardware dan software. Tahap ini bertujuan untuk mencari bentuk model yang optimal dari sistem yang akan dibuat dengan mempertimbangkan berbagai faktor-faktor permasalahan dan kebutuhan yang telah ditentukan. Bagian yang dibuat adalah bagian coach computer yang akan menjadi kontroler bagi robot, pada coach computer akan terdapat monitor, kamera, beserta keyboard dan mouse. Di dalam coach computer akan terdapat program penganalisis video yang akan diproses dengan pengolahan citra sehingga didapatkan posisi objek. Lalu hasil dari pengolahan citra tersebut akan dipakai untuk menghindari lawan saat mengejar atau menggiring bola menuju gawang. Untuk mengirimkan perintah ke robot menggunakan modem wireless.

Gambar 1.1 Diagram blok perancangan U U

Komunikasi wireless

Coach Computer Robot

Mouse dan

Keyboard

USB

Webcam

TX TX


(22)

3. Pembuatan subsistem hardware dan software. Tahap ini bertujuan untuk membuat model yang sesuai dengan yang telah dirancang pada tahap sebelumnya.

4. Proses pengambilan data. Data yang diambil adalah informasi atau perintah yang akan dikirim ke robot yaitu nilai posisi x dan y dari objek (gawang, robot, lawan, kiper lawan, tujuan tertentu dan bola), serta koreksi sudut untuk melakukan menghindari lawan. Nilai posisi x dan y didapatkan dari pengolahan citra video masukan dari USB Camera, sedangkan nilai koreksi sudut didapatkan dari analisis vektor berdasarkan nilai x dan y yang telah didapatkan. 5. Analisis dan penyimpulan hasil percobaan. Analisis data dilakukan dengan melihat kemampuan coach computer untuk mengolah masukan video dan dari hasil pengolahan tersebut sudah mampu mengontrol robot untuk mengejar dan menggiring bola serta untuk menghindari lawan sudah sesuai dengan dasar teori. Selain itu juga menganalisis data yang dikirimkan sudah bisa diterima oleh robot sesuai dengan dasar teori. Setelah itu menyimpulkan berdasarkan data yang didapat apakah coach computer sudah berhasil mengendalikan robot soccer beroda dengan baik.


(23)

5

BAB II

DASAR TEORI

2.1.

Raspberry Pi

Pada gambar 2.1 Raspberry Pi adalah komputer mini seukuran kartu kredit yang dapat terhubung dengan monitor komputer maupun TV, menggunakan mouse dan keyboard standard. Raspberry Pi adalah suatu perangkat mini yang memungkinkan orang dari berbagai usia untuk belajar lebih dalam tentang dunia komputer dan untuk belajar tentang bagaimana caranya membuat program menggunakan bahasa seperti Python dan Scratch [3].

Gambar 2.1 Wujud dari Raspberry pi [3]

Pada Raspberry pi terdapat beberapa bagian seperti CPU sebagai pemroses utama, GPU untuk memproses tampilan, RAM sebagai memori penyimpan proses yang sedang berjalan, serta port sebagai penerima masukan ataupun sebagai keluaran dari Raspberry pi.

2.2.1.

Raspberry Pi 3

Raspberry Pi memiliki beberapa seri. Seri yang akan digunakan dalam penelitian kali ini adalah Raspberry Pi 3 model B. Raspberry Pi 3 model B merupakan seri terbaru dari Raspberry Pi. Berikut ini adalah spesifikasi dari Raspberry Pi 3 model B:

a. CPU : 4x ARM Cortex-A53, 1.2GHz b. GPU : Broadcom VideoCore IV c. RAM : 1GB LPDDR2 (900 MHz)

d. Networking : 10/100 Ethernet, 2.4GHz 802.11n wireless e. Bluetooth : Bluetooth 4.1 Classic, Bluetooth Low Energy


(24)

2.3.

USB Webcam

Webcam merupakan singkatan dari web dan camera. Webcam adalah sebutan untuk kamera yang mengambil gambar pada saat itu juga (Real time) dan gambarnya dapat dilihat atau ditampilkan secara langsung melalui internet, melalui berbagai macam aplikasi pesan singkat seperti Yahoo Messenger, AOL Instant Messenger (AIM), Windows Live Messenger, dan Skype. Pada gambar 2.2 Webcam adalah sebuah kamera video digital kecil yang dihubungkan ke komputer biasanya melalui USB atau PORTCOM. Pengertian lain dari Webcam adalah sebuah perangkat berupa kamera yang digunakan sebagai penginput citra atau gambar yang dikendalikan oleh sebuah komputer atau jaringan komputer. Untuk kamera yang memiliki lebar lensa sebesar 6mm maka besar sudut view-nya adalah 650, sedangkan kamera dengan lebar lensa sebesar 4mm maka besar sudut view-nya adalah 800 [4].

Gambar 2.2 USB Webcam yang digunakan [4]

2.4.

Python 3

Bahasa pemrograman Python adalah salah satu contoh dari beberapa high-level language, contoh lainnya adalah C++, PHP, Pascal, dan Java. Selain high-level language ada juga low-level language yang sering kali disebut dengan bahasa mesin atau assembly languages.

Kebanyakan program dibuat dengan level language. Dengan menggunakan high-level language, program akan lebih mudah dibuat karena bahasa pemrograman tersebut lebih mudah dipahami jika dibandingkan dengan low-level language. Selain itu, high-level


(25)

language lebih portabel artinya bahasa pemrograman tersebut dapat berjalan pada komputer yang berbeda dengan sedikit atau dengan tanpa penyesuaian [5].

Berikut ini adalah beberapa elemen dalam bahasa pemrograman Python [6]: a. Input

Input berarti membaca sesuatu dari I/O unit, misalkan keyboard. Pada bahasa Python untuk menerima masukan dari pengguna (user) dapat menggunakan metode input().

Contoh: >>> a=input() 5

>>> b=input() 4

>>> z=a+b >>> z '54' b. Data

Data dapat berupa konstanta, variabel, dan struktur yang berisi bilangan, kalimat, ataupun alamat memori.

Tabel 2.1 Penggunaan bilangan dalam Python

Kategori Contoh

Integer normal (long pada C) 123, -123, 0 Integer panjang (panjang tanpa batas) 123456789L

Floating point(double pada C) 1.23 1.23e10 12E3 12e-3

Bilangan oktal 0123

Bilangan heksadesimal 0x123 0xA

Bilangan kompleks 1+2j

Untuk bilangan yang berjenis panjang maka ditambahkan “l” atau “L” di belakang bilangan tersebut. Untuk bilangan yang berjenis floating point maka digunakan “e” atau “E” sebagai tanda eksponensial. Untuk bilangan yang berjenis oktal dan heksadesimal masing-masing diawali dengan “0” dan “0x”, sehingga jika ingin menulis angka 1 desimal tidak boleh dengan cara 01, karena 01 artinya angka 1 oktal. Untuk bilangan kompleks dengan memecahnya menjadi bagian real dan imajiner dan diakhiri dengan “j” atau “J”.


(26)

c. Operator

Operator akan mengubah suatu nilai menjadi nilai lain, mengombinasikan nilai, dan membandingkan nilai. Yang termasuk operator diantaranya adalah operator Aritmetika dan Assignment.

Tabel 2.2 Macam-macam operator dalam Python

Operator Definisi Contoh

+ Penjumlahan a = b + c

- Pengurangan a = b - c

* Perkalian a = b * c

/ Pembagian a = b / c

% Sisa pembagian a = b % c

- Negasi a = - b

** Pemangkatan a = b ** c

>> Bitwise shiftright a = b + c

<< Bitwise shiftleft a = b + c

~ Bitwise komplemen a = ~ b

| Bitwise or a = b | c

& Bitwise and a = b && c

^ Bitwise xor a = b ^ c

>, >= Perbandingan lebih besar dan lebih besar sama dengan a > b , a >= b <, <= Perbandingan lebih kecil dan lebih kecil sama dengan a < b , a <= b

== Perbandingan sama dengan a == b

!=, <> Perbandingan tidak sama dengan a <> b , a != b

d. Output

Output berarti menuliskan informasi ke layar, disk, atau salah satu I/O unit. Untuk menuliskan output program, pada Python 3 menggunakan fungsi print() untuk kalimat yang ingin ditulis diberikan tanda kutip ganda(“) di awal dan di akhir kalimat.

Contoh:

>>> print("Hello World") Hello World


(27)

e. Kondisional

Kondisional berhubungan dengan sejumlah perintah yang akan dijalankan jika kondisi tertentu dipenuhi. Untuk melakukan hal tersebut dapat digunakan if, if else.

Contoh: if x==1:

print(“nilai x adalah 1”) if x==1:

print(“nilai x adalah 1”) else:

print(“nilai x tidak sama dengan satu”) f. Loop

Loop berhubungan dengan sejumlah perintah yang akan dikerjakan beberapa kali, selama beberapa kondisi dipenuhi atau sampai suatu kondisi terpenuhi. Python menggunakan pernyataan for dan while untuk melakukan loop(pengulangan).

Contoh:

for i in range (10): #mengulangi proses sebanyak 10 kali print(“saya adalah anak yang baik”)

x=int(input()) while 1: x= x-1 print (x) if x==3 : break g. Modul NumPy

NumPy adalah paket dasar untuk perhitungan scientific pada bahasa pemrograman Python, di dalam NumPy terdapat:

1. Perhitungan N-dimensional array

2. Kemampuan untuk mengintegrasi kode C/C++ dan Fortran 3. Operasi aljabar linier, transformasi fourier, dan angka acak 4. Contoh penggunaan NumPy

Contoh:

Import numpy as np


(28)

h. Subroutine

Subroutine adalah sekumpulan perintah yang bisa dijalankan dari setiap tempat dalam program dengan cara memanggil namanya. Python menyebutnya fungsi atau metode. Tata cara penulisan fungsi atau metode di Python yaitu dengan menggunakan pernyataan def nama_fungsi().

Contoh: def mode1(): x=int(input()) while 1: x= x-1 print (x)

2.5.

Tkinter

Tkinter adalah pustaka standard yang dimiliki oleh Python. Kombinasi Python dan Tkinter ini menghasilkan sebuah tampilan grafik yang mudah untuk dibuat sekaligus menarik. Tkinter menyediakan berbagai komponen grafis diantaranya tombol, label, kotak teks, yang mana komponen-komponen ini sangatlah sering digunakan dalam aplikasi GUI. Komponen Tkinter ini sering disebut widget [7]. Modul Tkinter berisi berbagai kelas dan komponen yang diperlukan untuk membangun sebuah aplikasi GUI. Untuk menggunakan komponen Tkinter maka harus memanggilnya terlebih dahulu. Cara untuk memanggil modul Tkinter adalah sebagai berikut:

import Tkinter

Bisa juga dengan memanggil semua metode, kelas, dan atribut dari modul Tkinter dengan menggunakan cara seperti berikut:

from Tkinter import *

Setiap aplikasi GUI seharusnya memiliki sebuah jendela utama (root window), yang dapat berisi berbagai komponen yang diperlukan dalam aplikasi yang akan dibuat. Untuk membuat jendela utama dari suatu aplikasi maka digunakan cara seperti berikut.

top = Tkinter.Tk()

Jika menggunakan pernyataan from-import untuk memanggil modul Tkinter, maka penulisannya adalah sebagai berikut.


(29)

Gambar 2.3 Contoh Tkinter

Dengan menggunakan Tkinter, dapat ditambahkan beberapa komponen pada aplikasi yang dibuat. Komponen ini bisa berdiri sendiri atau dapat diisi komponen lain (container). Komponen yang berdiri sendiri merupakan komponen yang tidak dapat diisi oleh komponen lain, misalkan tombol, checkbox, dan label. Komponen container merupakan komponen yang bisa berisi atau ditempeli oleh komponen lain seperti frame dan window. Gambar 2.3 adalah contoh dari penggunaan Tkinter.

Tabel 2.3 Daftar komponen pada Tkinter

Komponen Deskripsi

Frame Komponen Frame berfungsi sebagai kontainer bagi komponen lain.

Label Frame Komponen Label Frame sama seperti Frame namun terdapat keterangan di atasnya.

Canvas Komponen Canvas digunakan untuk menggambar bentuk seperti garis, lingkaran, poligon, dan kotak

Button Komponen Button berfungsi untuk menampilkan sebuah tombol. Radio Button Komponen Radio Button berfungsi menampilkan sejumlah

pilihan dalam bentuk tombol radio.

Scale Komponen Scale berfungsi sebagai menampilkan skala geser Text Komponen Text berfungsi sebagai penampil teks dalam multi


(30)

2.6.

Pengolahan Citra (Image Processing)

Saat ini istilah citra sangat populer. Banyak peralatan elektronik yang menghasilkan citra seperti camera, scanner, dan mikroskop digital. Bukan hanya perangkat keras namun banyak juga perangkat lunak untuk mengolah citra seperti Adobe Photoshop. Lalu menurut Jain (1989) pengertian pengolahan citra adalah pemrosesan gambar berdimensi dua melalui komputer digital [8].

Secara fisis atau visual, sebuah citra adalah representasi dari informasi yang terkandung di dalamnya sehingga mata manusia dapat menganalisis dan menginterpretasikan informasi tersebut sesuai dengan tujuan yang diharapkan [9]. Kandungan informasi citra dapat dibagi menjadi dua yaitu informasi dasar dan informasi yang bersifat abstrak. Informasi dasar adalah informasi yang dapat diolah secara langsung tanpa membutuhkan bantuan tambahan pengetahuan khusus. Informasi dasar ini berupa warna (color), bentuk (shape) dan tekstur (texture). Informasi abstrak adalah informasi yang tidak secara langsung dapat diolah kecuali dengan tambahan pengetahuan khusus. Contoh informasi yang bersifat abstrak adalah ekspresi wajah di dalam sebuah citra yang dapat menggambarkan situasi perasaan seseorang (keadaan senang, sedih, marah, dan lainnya).

Secara matematis, sebuah citra dapat didefinisikan dengan fungsi dua dimensi f(x,y) dimana x dan y adalah koordinat spasial (plane) dan f adalah nilai intensitas warna pada koordinat x dan y. Nilai f, x, dan y semuanya adalah nilai berhingga. Bila nilai-nilai ini bersifat kontinu maka citranya disebut citra analog. Bila nilai-nilai ini bersifat diskret maka citranya disebut citra digital. Citra digital umumnya dua dimensi (2D) yang dinyatakan dalam bentuk matriks dengan jumlah elemen berhingga. Setiap elemen matriks citra memiliki posisi koordinat x dan y tertentu dan juga memiliki nilai. Secara umum, citra digital merupakan representasi piksel-piksel dalam ruang 2D yang dinyatakan dalam matriks berukuran N baris dan M kolom seperti pada persamaan (2.1). Setiap elemen matriks disebut piksel (picture element, image element, atau pel). Nilai setiap piksel f pada posisi koordinat x dan y merepresentasikan intensitas warna dan dapat dikodekan dalam 24 bit untuk citra berwarna (dengan tiga komponen warna RGB: R = Red, G = Green, dan B = Blue), 8 bit untuk citra gray-level atau 1 bit untuk citra biner.

= [ , ] = [ :, …… :,


(31)

Gambar 2.4 contoh penggunaan persamaan (2.1)

Video adalah sekumpulan citra yang direkam atau diakuisisi selama satu satuan waktu tertentu. Citra di dalam video lebih dikenal dengan istilah frame atau frame citra. Kecepatan standard perekaman dan visualisasi video disesuaikan dengan kecepatan mata manusia dalam memahami dan menganalisis informasi yang terkandung di dalam setiap frame.

Mengingat bahwa citra adalah bagian dari video, maka setiap teori pengolahan citra digital juga merupakan teori pengolahan video digital. Secara visual, video adalah sederetan frame citra yang terekam oleh sensor dalam satu satuan waktu tertentu. Normalnya, kecepatan perekaman sebuah video adalah antara 25 sampai 30 citra per detik. Kecepatan ini disesuaikan dengan kecepatan normal visual mata manusia dalam menganalisis dan memahami pergerakan informasi yang terkandung dalam sederetan citra tersebut.

Ditinjau dari sudut pandang elektronika analog, video adalah sinyal-sinyal analog dengan amplitudo (yang merepresentasikan intensitas warna cahaya) yang dapat bervariasi dan berubah secara kontinu menurut fungsi spasio-temporal (spasial dan waktu).

Secara matematis, sinyal video analog merupakan fungsi 1-D f(t), dan setelah melalui proses sampling dan kuantisasi maka fungsi ini menjadi fungsi diskret f (n, m, t), di mana n = {1, 2, ..., N} menyatakan baris ke-n citra dan m = {1, 2, ..., M} menyatakan titik sampel ke-m (atau yang lebih dikenal sebagai piksel ke-m dalam baris ke-n citra), t menyatakan frame citra pada waktu t sedangkan f menyatakan nilai intensitas warna piksel pada posisi (n, m) dari frame citra pada waktu t.

y1

X1


(32)

Menurut Gonzalez dan Woods (2002) ruang warna adalah suatu spesifikasi sistem koordinat dan suatu sub ruang dalam sistem tersebut dengan setiap warna dinyatakan dengan satu titik di dalamnya. Tujuan dibentuknya ruang warna adalah untuk memfasilitasi spesifikasi warna dalam bentuk standar. Ada berbagai macam ruang warna contohnya adalah RGB dan HSV [8].

Ruang warna HSV mengacu pada hue, saturation, and value (value identik dengan luminance), dengan ide merepresentasikan nuansa warna dalam koordinat silindris 3-D. Model HSV disebut hexcone model [9]. Persamaan yang digunakan untuk konversi dari ruang RGB ke HSV adalah seperti berikut:

� = � (2.2)

= {

� � � = ( � −− ) � � = ( � −− + ) � � = ( � −− + ) � � =

(2.3)

= { � � =� − � � (2.4) Dengan R = Red, G = Green, B = Blue, Maks = max[R, G, B] dan Min = min[R, G, B] dan A = 60o jika dalam derajat dan A = � bila dalam radian.

2.7.

OpenCV

OpenCV (Open Computer Vision) adalah sebuah library yang sudah sangat familier pada operasi Pengolahan Citra Computer Vision. Computer Vision itu sendiri adalah cabang dari Bidang Ilmu Pengolahan Citra (Image Processing) yang memungkinkan komputer dapat melihat seperti manusia. Dengan vision tersebut komputer dapat mengambil keputusan, melakukan aksi, dan mengenali terhadap suatu objek. Beberapa pengimplementasian dari Computer Vision adalah Face Recognition, Face Detection, Face or Object Tracking, dan Road Tracking [10]. Berikut ini adalah beberapa contoh function yang terdapat pada library OpenCV [11]:


(33)

a. Mengambil video sebagai input

Untuk mengambil video, function yang dibutuhkan adalah VideoCapture(). Parameter yang diisi dalam function tersebut adalah device index atau nama file video tersebut. Device index sebagai nomor untuk memilih kamera mana yang digunakan, jika hanya menggunakan satu kamera maka cukup mengisi parameter tersebut dengan angka 0.

Contoh: Import cv2

vid = cv2.VideoCapture(0)

while(True):

# Mengambil video per frame ret, frame = vid.read()

# Mengambil video dalam mode hitam-putih

abu = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Menampilkan frame yang dihasilkan

cv2.imshow(‘frame’, abu)

if cv2.waitKey(1) & 0Xff == ord(‘q’):break

# menampilkan hasil akhir ketika semua proses telah selesai vid.release()

cv2.destroyAllWindows()

b. Mendeteksi objek berdasarkan warna

Untuk mendeteksi suatu objek, manusia dapat melakukan hal tersebut dengan cara mengenali bentuk objek ataupun warna objek tersebut. Begitu juga komputer, dengan computer vision maka komputer bisa mendeteksi suatu objek berdasarkan bentuknya (Edge Detection) atau warnanya (Color Detection). Jika mendeteksi suatu objek berdasarkan warna, openCV dapat menggunakan functioncv2.cvtColor() untuk mengonversi pemilihan warna berdasarkan metode HSV (Hue Saturation Value) dari BGR (Blue Green Red), pendeteksian warna dengan metode HSV lebih mudah dibandingkan dengan BGR [12]. Selain itu digunakan juga cv2.inRange() untuk menentukan warna apa yang ingin dideteksi. Pendeteksian warna dengan HSV menggunakan perhitungan array sehingga dibutuhkan modul NumPy sebagai bantuan.


(34)

Contoh:

import numpy as np import cv2

vid = cv2.VideoCapture(0) while(1):

ret, frame = vid.read() #konversi BGR ke HSV

hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) #mendefinisikan warna yang dipilih

batas_bawah = np.array([110,50,50]) batas_atas = np.array([130,255,255]) #mendeteksi warna yang diinginkan

mask = cv2.inrange(hsv, batas_bawah, batas_atas)

c. Mendeteksi pergerakan objek dengan camshift

Untuk melakukan tracker (mendeteksi pergerakan) suatu objek, OpenCV menyediakan suatu function yaitu camshift. Metode ini mendeteksi objek berdasarkan warna dan juga memperhitungkan perubahan warna yang terjadi ketika objek bergerak. Hal tersebut akan mengakibatkan active windows yang mendeteksi objek tersebut berubah besarnya sesuai dengan pergerakan objek tersebut.

Contoh pemanggilan fungsi CamShift():

ret, track_window = cv2.CamShift(objek yang ingin dideteksi, batas active window, keadaan tracker berhenti)

2.8.

Vektor

Sebuah besaran yang memiliki magnitudo dan arah, disebut besaran vektor. Besaran lain yang merupakan vektor adalah perpindahan, gaya, dan momentum. Akan tetapi, banyak juga besaran yang tidak memiliki arah, seperti massa, waktu, dan suhu. Besaran semacam ini dapat dinyatakan secara lengkap dengan angka dan satuan, dan disebut dengan besaran skalar [13]. Pada gambar 2.5 menunjukkan contoh dari sebuah vektor.


(35)

Gambar 2.5 Contoh dari vektor

a. Untuk menentukan besar vektor dari suatu objek berdasarkan posisi (x,y):

= √ + (2.5)

b. Untuk menentukan besar sudut dari objek tersebut dengan sumbu x:

� = � tan (2.6)

c. Untuk menentukan selisih sudut kedua objek:

� = � − � ; � > � (2.7)

d. Untuk menghitung besar resultan kedua gaya:

= √ + + cos∠ , (2.8)

e. Untuk menghitung arah dari resultan kedua gaya:

� = � sin sin − � (2.9)

f. Untuk menghitung besar vektor perpindahan:

= √ + + + (2.10)

2.9.

Virtual Force Field Method

Metode Virtual Force Field dikembangkan oleh Koren dan Borenstein pada tahun 1989. Metode ini dapat diartikan sebagai perpaduan dari metode Certain grids dan Potential Fields Method. Sesuai dengan gambar 2.6 metode ini didesain untuk menghindari rintangan secara Real-Time. Sebuah window virtual melingkupi sebuah region yang bergerak bersamaan dengan robot secara tidak terlihat, window virtual tersebut disebut dengan active window dan melingkupi sebuah area dari batas tertentu. Pusat dari window tersebut berada pada titik tengah dari robot [14].


(36)

Gambar 2.6 Konsep Virtual Force Field

Jika lawan berada dalam area active window maka program nantinya akan menghitung besar resultan antara dinding dan lawan terhadap robot [15]. Berikut ini adalah langkah-langkahnya:

a. Perhitungan besar vektor antara robot dengan lawan atau target menggunakan persamaan 2.10, dimana:

= Besar vektor antara robot dengan lawan atau target = Nilai X dari robot

= Nilai Y dari robot

= Nilai X dari lawan atau target = Nilai Y dari lawan atau target

b. Menghitung besar sudut antara robot dengan lawan dan robot dengan target menggunakan persamaan 2.2

� = � tan ( −− ) (2.11)

Keterangan:

� = Besar sudut antara robot dengan lawan atau target = Nilai X dari robot

= Nilai Y dari robot

= Nilai X dari lawan atau target = Nilai Y dari lawan atau target


(37)

c. Menghitung selisih antar sudut robot dengan lawan dan sudut robot dengan target menggunakan persamaan 2.7. dimana:

� = Besar jumlah sudut antara robot dengan lawan dan sudut robot dengan target

� = Besar sudut antara robot dengan lawan � = Beasr sudut antara robot dengan target

d. Menghitung besar resultan dari robot dengan lawan dan robot dengan target menggunakan persamaan 2.8. dimana:

= Besar resultan dari robot dengan lawan dan robot dengan bola = Besar vektor antara robot dengan lawan

= Beasr vektor antara robot dengan target

e. Menghitung besar sudut resultan dari robot dengan lawan dan robot dengan target menggunakan persamaan 2.9. dimana:

� = Besar sudut resultan dari robot dengan lawan dan robot dengan bola

= Besar vektor antara robot dengan lawan

= Besar resultan dari robot dengan lawan dan robot dengan bola � = Besar selisih sudut antara robot dengan lawan dan sudut robot dengan target

2.10.

Python Socket

Python hanya menggunakan dua domain komunikasi, yaitu UNIX (AF_UNIX) dan Internet (AF_INET) domain. Pengalamatan pada UNIX domain direpresentasikan sebagai string, dinamakan dalam lokal path: contoh /tmp/sock. Sedangkan pengalamatan Internet domain direpresentasikan sebagai tuple(host,port), dimana host merupakan string yang merepresentasikan nama host internet yang sah (hostname), misalnya: darkstar.drslump.net atau berupa IP address dalam notasi dotted decimal, misalnya: 192.168.1.1. Dan port


(38)

merupakan nomor port yang sah antara 1 sampai 65535. Tetapi dalam keluarga UNIX penggunaan port di bawah 1024 memerlukan akses root privileges. Sebelum menggunakan modul socket dalam Python, modul socket harus terlebih dahulu diimport [16]. Pada gambar 2.7 menunjukkan contohnya:

Gambar 2.7 contoh penggunaan socket pada Python [16]

Socket dibuat melalui pemanggilan socket(family, type[Protokol]). Untuk lebih jelasnya dapat dilihat pada tabel 1 dan tabel 2 berikut ini:

Tabel 2.4 Konstanta Keluarga (Family) Protokol

Family Penjelasan

AF_UNIX Unix Domain Protocol

AF_INET IPv4 Protocol

AF_INET6 Ipv6 Protocol

Tabel 2.5 Konstanta Type Socket

Type Penjelasan

SOCK_STREAM Stream Socket (TCP)

SOCK_DGRAM Datagram Socket (UDP)

SOCK_RAW Raw Socket

Untuk proto bersifat opsional dan biasanya bernilai 0. Untuk membuat socket stream (TCP) internet domain digunakan statement berikut:


(39)

Jika SOCK_STREAM diganti dengan SOCK_DGRAM berarti membuat socket datagram (UDP). Kemudian untuk membuat socket stream dalam UNIX domain:

sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)

Sebuah server adalah sebuah proses yang mendengarkan (listen) pada port tertentu. Ketika proses lain ingin berhubungan dengan server atau menggunakan layanan server, maka proses harus terhubung dengan alamat dan nomor port tertentu yang dispesifikasikan oleh server. Hal ini dilakukan dengan memanggil metode socket connect(address), dimana address adalah sebuah tuple (host, port) untuk internet domain dan pathname untuk UNIX domain. Berikut ini adalah contohnya:

sock.connect (('localhost',12345)) atau sock.connect (('192.168.1.1',12345)) Sedangkan untuk UNIX domain,

sock.connect ('/tmp/sock') #Koneksi ke file socket

Setelah socket berhasil dibuat, maka Python akan mengembalikan sebuah socket descriptor. Sebelum digunakan, maka socket harus diikatkan (binding) ke alamat dan nomor port yang sesuai agar proses lain dapat ditujukan ke socket. Berikut ini contoh untuk binding socket pada internet domain:

sock.bind(('localhost',12345)) atau sock.bind(('192.168.1.1',12345))

Sedangkan untuk mengikatkan (binding) socket pada UNIX domain digunakan : sock.bind('/tmp/sock') #/tmp/sock merupakan file socket

Perintah di atas akan membuat file pipe /tmp/sock yang dapat digunakan untuk berkomunikasi antara server dan client.

Setelah socket diikatkan (bind), langkah selanjutnya adalah memanggil metode listen (queue). Perintah ini menginstruksikan socket untuk listen pada port-port yang telah diikatkan (bind), dan queue merupakan sebuah integer yang merepresentasikan maksimum antrian koneksi. Berikut ini adalah contoh penggunaannya:

sock.listen(5) #Mendengarkan koneksi dengan maksimum antrian sebanyak 5

Untuk menerima koneksi dari permintaan (request) client pada koneksi yang menggunakan socket stream (TCP), metode yang digunakan adalah accept(). Berikut contoh penggunaannya:


(40)

statement di atas akan mengembalikan sebuah tuple (conn, address) dimana conn adalah objek socket baru yang berguna untuk mengirim dan menerima data dari koneksi, dan address merupakan alamat dari client.

Menerima koneksi tidak akan berarti tanpa digunakan untuk mengirim dan menerima data. Oleh karena itu, digunakan metode send(string) untuk socket stream (TCP) dan sendto(string,address) untuk socket datagram (UDP). Berikut ini penggunaan untuk socket stream.

sock.send('ini pesan dari server')

Sedangkan untuk socket datagram digunakan:

sock.sendto('pesan dari server' , ('192.168.1.1' , 12345))

Untuk menerima data yang dikirim dari server digunakan metode recv(bufsize) untuk socket stream dan recvfrom(bufsize). Berikut ini penggunaan untuk socket stream.

sock.recv(1024) #Menerima data sebesar 1024 byte

Statement di atas akan mengembalikan data yang dikirimkan oleh client. sedangkan untuk socket datagram :

sock.recvfrom(1024) #Menerima data sebesar 1024 byte

statement di atas akan mengembalikan dua buah field yaitu data dan address.

Untuk menutup koneksi yang telah dibuat digunakan metode close(s). Berikut ini adalah penggunaanya :


(41)

23

BAB III

RANCANGAN PENELITIAN

3.1.

Proses Kerja Sistem

Perancangan alat ini terdiri dari beberapa bagian utama, yaitu Raspberry Pi 3, Kamera, Monitor, Keyboard, Mouse, Adapter, serta modem wireless. Raspberry Pi 3 bersama Monitor, Keyboard, Mouse, dan Adapter digunakan sebagai komputer mini yang nantinya akan dibuat program utama di dalamnya dengan menggunakan bahasa pemrograman Python untuk mengontrol robot soccer beroda. Kamera yang digunakan adalah USB Webcam. Keyboard, monitor, dan Mouse diperlukan untuk membantu membuat program utama untuk mengontrol robot soccer beroda dalam Raspberry Pi 3. Lalu modem wireless untuk mengirimkan perintah ke robot.

Gambar 3.1 Blok diagram cara kerja sistem

Cara kerja sistem secara keseluruhan, di dalam Raspberry Pi 3 yang dilengkapi dengan monitor, keyboard, mouse, dan adapter akan dibuat program utama yang digunakan untuk mengontrol robot soccer beroda. Program tersebut akan memproses input berupa video yang ditangkap oleh USB Webcam sehingga didapatkan nilai posisi x dan y dari robot, lawan, bola, kiper lawan serta gawang yang dituju.

U U

Komunikasi wireless

Robot

Mouse dan

Keyboard

USB

Webcam

TX RX

Monitor

GUI & Socket

Python VFF

Pengolahan Citra Raspberry pi 3


(42)

Pemrosesan inputan video menggunakan metode pengolahan citra yang dilakukan dengan bantuan library OpenCV. Dengan pengolahan citra maka setiap objek dapat dibedakan melalui warnanya masing-masing. Setelah warna dari masing-masing objek diidentifikasi maka dengan bantuan OpenCV ditentukan nilai dari x dan y dari masing-masing objek berdasarkan fungsi warnanya menurut dasar teori persamaan 2.1.

Nilai x dan y yang sudah didapat akan digunakan mengontrol robot untuk mengejar, menggiring bola menuju gawang yang dituju serta menghindari lawan. Proses tersebut juga akan terus berulang hingga robot berada pada jarak tertentu dari gawang yang dituju lalu robot akan menendang bola. Untuk melakukan tindakan menghindari lawan digunakan metode VFF (Virtual Force Field) yang mengolah nilai x dan y dari masing-masing objek menjadi besaran sudut untuk melakukan pembelokan.

Perintah yang dikirimkan oleh program utama di dalam Raspberry Pi 3 akan dikirim melalui modem wireless dengan menggunakan protokol Python Socket agar tidak mendapat gangguan dari luar. Perintah yang dikirim adalah posisi x dan y dari robot, lawan, bola, kiper lawan, serta gawang. Setiap perintah nantinya akan diberikan kode-kode unik yang hanya bisa dibaca oleh robot.

3.2.

Perancangan Perangkat Keras

Perancangan perangkat keras sistem berupa desain Coach computer sebagai pengontrol robot soccer beroda serta tata letak dari USB camera sesuai dengan ketentuan lomba.

3.2.1.

Desain Coach Computer Pengontrol Robot Soccer Beroda

Pada gambar 3.1, perancangan coach computer pengontrol robot soccer beroda, Raspberry pi 3 akan dilengkapi dengan acrylic case khusus untuk Raspberry Pi 3 beserta Heatsink sehingga coach computer tersebut awet digunakan dalam durasi yang lama. Untuk catuan daya akan disediakan oleh PSU Adapter 5V 3A. Adapter tersebut digunakan sebagai power supply Raspberry Pi 3, dengan keluarannya 5V 3A maka Raspberry Pi 3 tidak akan kekurangan daya ketika ditambah dengan USB Webcam. Untuk mempermudah pembuatan program utama maka ditambahkan monitor, keyboard, dan mouse. Coach computer juga akan dilengkapi dengan USB Webcam sebagai penangkap video saat pertandingan sedang berlangsung yang akan dianalisis oleh program utama sebagai inputannya. Lalu akan


(43)

dilengkapi modem wireless sebagai penyedia jaringan internet agar dapat mengirimkan perintah untuk robot saat pertandingan sedang berlangsung.

3.2.2.

Desain Tata Letak Kamera dan Lapangan

Pada perancangan tata letak kamera sebagai pendeteksi robot, lawan, bola, serta gawang yang dituju, USB Webcam akan digantungkan pada tiang dengan tinggi 3 – 4 m sesuai dengan keadaan pada saat lomba. Kamera akan diletakkan tepat di tengah lapangan dengan ketinggian yang telah disesuaikan, dengan posisi tersebut maka kamera dapat mengambil video dari seluruh lapangan.

Untuk perancangan lapangan disesuaikan dengan ketentuan yang berlaku pada Ekshibisi Robot Soccer Beroda 2016 yaitu [17]:

1. Luas lapangan keseluruhan adalah sekitar 6m x 4m. 2. Radius lingkaran tengah adalah 60cm.

3. Kotak penalti berukuran 300cm x 60cm.

4. Gawang berukuran lebar 80cm tinggi 40cm diukur dari sisi dalam tiang. 5. Warna dari gawang adalah warna kuning.


(44)

Untuk menentukan spesifikasi kamera yang akan digunakan maka seperti gambar 3.3 dimisalkan nilai ketinggian penggantungan kamera adalah maksimal sesuai aturan lomba yaitu 4m, lalu menghitung besar sudut yang diperlukan untuk mencakup seluruh lapangan menggunakan aturan segitiga.

Gambar 3.3 Tampak samping kamera serta jangkauannya Berdasarkan gambar 3.3 maka ditentukan:

Panjang alas = 3m Tinggi = 4m

Maka berdasarkan aturan segitiga siku-siku besar x adalah: tan = �� � � �

= tan− �� � � �

= tan− �

� = 36,87

o

Maka besar sudut view yang diperlukan sebesar: × , � = 73,74o. Berdasarkan hal tersebut maka kamera yang digunakan menurut dasar teori adalah kamera yang memiliki lebar lensa sebesar 4mm dengan besar sudut view-nya 80o.

Agar area yang ditangkap oleh kamera efisien maka dihitung kembali ketinggian penggantungan kamera dengan menggunakan aturan segitiga siku-siku.


(45)

X = 40o

Sudut sisanya = (180 - 40 - 90)o = 50o Maka menurut aturan sin:

sin = sin = × sinsin = ,

Berdasarkan hasil perhitungan maka kamera akan digantungkan setinggi 3,57m.

3.3.

Perancangan Perangkat Lunak

Pada perancangan perangkat lunak akan dibuat program utama yang berisi program untuk menampilkan interface untuk menentukan mode permainan, program pengolah citra yang diberikan oleh USB Webcam agar didapatkan koordinat dari setiap objek, serta program VFF untuk mengontrol robot mengejar atau menggiring bola untuk menghindari lawan.

3.3.1.

Diagram Alir Utama

Diagram alir utama ditunjukkan pada gambar 3.5 program utama menunjukkan proses komputer mini mengontrol robot secara keseluruhan. Pada tahap awal program utama pada monitor akan muncul tampilan interface yang berisi 3 tombol yang merupakan keadaan saat lomba.


(46)

Gambar 3.5.1 Diagram alir utama

Mode bersiap adalah mode yang mengatur robot bergerak ke tengah lapangan untuk bersiap dalam permainan seperti keadaan kick off pada permainan sepak bola ataupun bergerak ke posisi tertentu seperti pada saat bertahan untuk tendangan bebas dari lawan maupun bersiap untuk menendang bola saat robot mendapat tendangan bebas.

Mode berhenti adalah mode yang mengatur agar robot menghentikan proses yang sedang berlangsung. Caranya adalah dengan mengganti nilai setpoint dari robot agar robot berhenti yaitu dengan membuat posisi serta sudut robot sekarang menjadi setpoint dan berhenti mengirimkan informasi dan perintah pada robot sehingga robot akan menjadi diam. Mode bermain adalah mode yang mengatur robot untuk mengejar dan menggiring bola menuju gawang lalu menembak bola tersebut ke dalam gawang. Pada saat dalam mode bermain, pertama robot akan mendeteksi apakah bola dalam penguasaan lawan atau tidak. Jika bola dalam penguasaan lawan maka robot akan melakukan tindakan pengontrolan

Ya

Ya

Tidak Tidak

Mulai

Menampilkan GUI ke monitor

Pilih mode

Mode Berhenti ?

Bersiap

Bermain

Berhenti

Selesai Mode


(47)

bertahan agar dapat merebut bola. Jika bola dalam keadaan bebas maka robot akan melakukan tindakan pengontrolan menyerang. Tindakan pengontrolan bertahan adalah perintah untuk membuat robot berada di depan lawan dan bersiap untuk merebut bola, jika bola sudah direbut maka robot akan melakukan tindakan pengontrolan menyerang yaitu membawa bola menuju gawang dan berusaha membuat goal (mencetak angka).

Di dalam masing-masing mode terdapat berbagai macam pengontrolan pergerakan robot. Untuk mengontrol robot digunakan koordinat x dan y dari masing-masing objek yang diolah dengan analisis vektor. Nilai x dan y didapatkan dari pengolahan citra, berdasarkan dasar teori pada subbab 2.5 persamaan 2.1 maka nilai dari setiap piksel di lapangan akan dibuat seperti pada gambar 3.5.2. dimana nilai x maksimal adalah 600 dan nilai y maksimal adalah 400.

Nilai x dan y dari masing-masing objek yang didapatkan akan dijadikan perintah yaitu berupa setpoint yang diinginkan dan informasi yaitu berupa letak posisi robot serta sudut robot sekarang, posisi lawan, kiper lawan yang akan dikirim tergantung dari mode yang sedang berlangsung pada robot.


(48)

3.3.2.

Subprogram Bersiap

Pada gambar 3.6.1 menunjukkan bagaimana kerja dari mode bersiap. Saat dalam mode bersiap maka kamera akan mengambil video yang akan dianalisis oleh program utama untuk mengontrol robot bergerak mendekati bola dan bersiap untuk mengejar bola. Pada proses ini robot akan dikontrol untuk bergerak ke tengah lapangan untuk bersiap seperti dalam kick off dalam sepak bola yang sebenarnya, serta robot akan dikontrol ke posisi tertentu untuk bersiap menghadapi tendangan bebas dari lawan maupun saat tendangan bebas oleh robot.

Nilai x dan y dari robot dan target yang didapat dari proses menentukan pergerakan robot akan dijadikan setpoint serta informasi keberadaan robot sekarang, nilai tersebut akan diolah oleh robot untuk menentukan PWM yang diberikan ke motor. Selain itu nilai x dan y akan diolah berdasarkan dasar teori pada subbab 2.7 agar didapatkan sudut untuk menentukan seberapa besar dan arah robot harus membelok.

Gambar 3.6.1 Diagram alir subprogram bersiap Ya

Proses menentukan informasi sudut robot, serta posisi robot, dan

target

Tidak Sudah di

tujuan? Kirim perintah

ke robot Mulai

Selesai Tindakan pengontrolan


(49)

Tindakan pengontrolan bersiap adalah tindakan untuk menentukan posisi setpoint dari robot. Berdasarkan gambar 3.5.2 maka ditentukan:

a. Jika posisi bola di tengah lapangan seperti pada saat kick off atau tendangan bebas untuk robot, maka nilai setpoint untuk robot adalah x = posisi ‘x’ bola – 60 dan y = posisi ‘y’ bola.

Gambar 3.6.2 Gambaran pergerakan saat bola di tengah lapangan

b. Jika bola dalam penguasaan lawan artinya tendangan bebas untuk lawan, 60 < posisi ‘x’ bola < 300 dan posisi y bola < 100, maka nilai setpoint untuk robot adalah x = posisi ‘x’ bola –60 dan y = posisi ‘y’ bola + 60.


(50)

c. Jika bola dalam penguasaan lawan artinya tendangan bebas untuk lawan, 60 < posisi ‘x’ bola < 300 dan posisi y bola > 300, maka nilai setpoint untuk robot adalah x = posisi ‘x’ bola –60 dan y = posisi ‘y’ bola – 60.

Gambar 3.6.4 Gambaran pergerakan saat bola berada di sebelah kanan gawang d. Jika bola dalam penguasaan lawan artinya tendangan bebas untuk lawan, posisi ‘x’

bola < 60 dan posisi y bola < 200, maka nilai setpoint untuk robot adalah x = posisi ‘x’ bola dan y = 160. Nilai tersebut menunjukkan agar robot diam di depan gawang.


(51)

e. Jika bola dalam penguasaan lawan artinya tendangan bebas untuk lawan, posisi ‘x’ bola < 60 dan posisi y bola > 200, maka nilai setpoint untuk robot adalah x = posisi ‘x’ bola dan y = 240. Nilai tersebut menunjukkan agar robot diam di depan gawang.

Gambar 3.6.6 Gambaran pergerakan saat bo la berada di po jok kanan gawang

3.3.3.

Subprogram Berhenti

Pada gambar 3.7 menunjukkan robot dalam mode berhenti maka semua proses yang berjalan akan dihentikan, mode ini dipakai ketika waktu permainan telah selesai. Caranya adalah dengan mengganti nilai setpoint dari robot agar robot berhenti yaitu dengan membuat posisi serta sudut robot sekarang menjadi setpoint sehingga dan coach computer akan berhenti mengirimkan informasi dan perintah pada robot sehingga robot akan menjadi diam. Berdasarkan hal tersebut maka nilai posisi x setpoint = posisi x robot dan posisi y setpoint = posisi y robot.

Gambar 3.7 Diagram alir subprogram berhent i Selesai

Mulai


(52)

3.3.4.

Subprogram Bermain

Pada gambar 3.8 menunjukkan robot dalam mode bermain, maka kamera akan mengambil video yang akan dianalisis oleh program utama untuk menentukan informasi sudut robot, posisi robot, lawan dan target, serta menentukan robot untuk bertahan atau menyerang. Jika bola berada dalam penguasaan lawan maka robot akan dikontrol untuk bertahan. Jika bola dalam keadaan bebas maka robot akan dikontrol untuk mengejar bola. Proses tersebut akan terus berulang hingga robot menguasai bola.

Gambar 3.8 Diagram alir Bermain 1 Ya Proses menentukan

informasi sudut robot, serta posisi robot,

lawan dan target

Tindakan Pengontrolan

Menyerang

Tidak Sudah di

dekat bola? Kirim perintah ke robot Mulai Ya Bola ada pada lawan? Tidak Tindakan Pengontrolan Bertahan Sudah merebut bola? Kirim perintah ke robot 1 Tidak Ya


(53)

Pada gambar 3.9 kamera akan mengambil video yang akan dianalisis oleh program utama untuk mengontrol robot menggiring bola menuju gawang yang dituju. Proses tersebut juga akan terus berulang hingga robot berada pada jarak tertentu dari gawang yang dituju lalu program utama akan mengirimkan perintah untuk menendang bola. Jika bola masih belum masuk maka akan mengulang proses dari mengejar bola kembali sampai menendang bola hingga masuk ke dalam gawang yang dituju. Perintah yang dikirimkan oleh program utama di dalam Raspberry Pi 3 akan dikirim melalui Python Socket.

Gambar 3.9 Diagram alir Bermain 2 Tidak

Ya

TindakanPengontrolan

Menyerang

Sudah di dekat gawang? Kirim perintah ke robot

Proses menentukan informasi sudut robot, serta posisi robot, lawan

dan target

Selesai 1


(54)

3.3.5.

Subprogram Menentukan Informasi Sudut Robot, serta Posisi

Robot, Lawan dan Target

Untuk menentukan tujuan dari robot, serta posisi lawan maka coach computer akan melakukan analisis terhadap masukan dari USB Webcam berupa video dengan menggunakan metode image processing yang dibantu dengan menggunakan library bantuan yaitu OpenCV yang dapat langsung diintegrasikan dengan Python. OpenCV digunakan untuk memberikan nilai x dan y dari robot, lawan, dan target (bola atau gawang) berdasarkan warna. Untuk pendeteksian warna dilakukan dengan metode HSV, metode tersebut dipilih karena lebih peka terhadap perubahan cahaya. Nilai x dan y dari masing-masing objek yang didapatkan akan dijadikan perintah yaitu berupa setpoint yang diinginkan dan informasi yaitu berupa letak posisi robot, serta sudut robot sekarang, posisi lawan, dan kiper lawan yang akan dikirim tergantung dari mode yang sedang berlangsung pada robot. Berdasarkan titik posisi objek akan dibuat sebuah active window berbentuk lingkaran.

Gambar 3.10.1 Diagra m alir subprogram menentukan tujuan robot dan posisi lawan

Mulai

Input video Inisialisasi variabel

Konversi warna input dari RGB ke HSV

Menentukan warna masing-masing objek

Menentukan nilai x dan y masing-masing objek dan arah sudut robot

Selesai


(55)

Gambar 3.10.1 menunjukkan bagaimana proses menganalisis input video dari USB Webcam menggunakan metode pengolahan citra yang dibantu dengan pustaka pada Python yaitu OpenCV.

Berdasarkan dasar teori pada subbab 2.6, pertama dilakukan inisialisasi kamera yang akan digunakan lalu menerima masukan input video. Lalu warna dari input video akan dikonversikan menjadi HSV dan setelah itu menentukan warna dari masing-masing objek dengan persamaan 2.2, 2.3, dan 2.4. maka untuk warna dari tanda tim robot adalah cyan dan biru, warna bola adalah orange, dan warna gawang adalah kuning:

a. Kuning

Red = 255, Green = 250, Blue = 10, min = min[R,G, B] = 10, maks = maks[R,G, B]=255

Karena maks = R, maka: H = −

− × = , ≈

Karena maks ≠ min, maka: S = 255-10 = 245

Nilai V akan dibuat dari kisaran batas bawah 20 dan batas atas 255 agar dapat menyesuaikan dengan berbagai macam kondisi pencahayaan.

b. Biru

Red = 10, Green = 50, Blue = 255, min = min[R,G, B] = 10, maks = maks[R,G, B]=255 Karena maks = B, maka: H = −

− + × = , ≈

Karena maks ≠ min, maka: S = 255-10 = 245

Nilai V akan dibuat dari kisaran batas bawah 20 dan batas atas 255 agar dapat menyesuaikan dengan berbagai macam kondisi pencahayaan.

c. Orange

Red = 255, Green = 110, Blue = 10, min = min[R,G, B] = 10, maks = maks[R,G, B]=255

Karena maks = R, maka: H = −

− × = , ≈

Karena maks ≠ min, maka: S = 255-10 = 245

Nilai V akan dibuat dari kisaran batas bawah 20 dan batas atas 255 agar dapat menyesuaikan dengan berbagai macam kondisi pencahayaan.

d. Cyan

Red = 10, Green = 250, Blue = 255, min = min[R,G, B] = 10, maks = maks[R,G, B]=255


(56)

Karena maks = B, maka: H = −

− + × = , ≈

Karena maks ≠ min, maka: S = 255-10 = 245

Nilai V akan dibuat dari kisaran batas bawah 20 dan batas atas 255 agar dapat menyesuaikan dengan berbagai macam kondisi pencahayaan.

Setelah warna masing-masing objek telah didapatkan lalu dapat ditentukan nilai x dan y berdasarkan fungsi warna yang dinginkan dari persamaan 2.1 pada dasar teori subbab 2.5. selain itu ditentukan juga besar arah sudut robot saat ini sebagai patokan seberapa besar nantinya robot harus melakukan belokan. Caranya adalah berdasarkan gambar 3.10.2 ditentukan besar sudut yang terbentuk dari dua tanda tim tersebut terhadap sumbu x berdasarkan dasar teori subbab 2.8 persamaan 2.11.

Gambar 3.10.2 Gambaran arah sudut robot

Misal tanda 1 berada pada posisi x = 210 dan y = 110, dan tanda 2 berada pada posisi x = 200 dan y = 100 maka arah dari sudut robot adalah:

tan− (

− ) = �

Nilai posisi x dan y dari masing-masing objek serta besar arah sudut robot akan dikirimkan sebagai informasi oleh robot. Setelah nilai x dan y didapatkan maka dibuat sebuah active window pada robot dan lawan yang dipakai oleh metode VFF untuk menghindari terjadinya tabrakan, serta mengetahui apakah bola dalam penguasaan robot atau dalam penguasaan lawan.


(1)

lower = lower_robot_depan upper = upper_robot_depan track_objects()

format_data()

cv2.circle(frame, (int(cx),int(cy)), 125, (0, 0, 255)) cx_robot_depan, cy_robot_depan = cx, cy

lower = lower_robot_belakang upper = upper_robot_belakang track_objects()

format_data()

cx_robot_belakang, cy_robot_belakang = cx, cy

lower = lower_lawan upper = upper_lawan track_objects() format_data()

cv2.circle(frame, (int(cx),int(cy)), 100, (245, 114, 255)) cx_lawan, cy_lawan = cx, cy

##menentukan bola dalam penguasaan musuh atau tidak k1 = (int(cx_lawan)-int(cx_bola))**2

k2 = (int(cy_lawan)-int(cy_bola))**2 radius1 = math.sqrt(k1+k2)

if int(radius1) < 100 : ##Mode bertahan diaktifkan

set_posisi_x_robot = int(cx_lawan) - 60 set_posisi_y_robot = cy_lawan

elif int(radius1) > 100 : ##Mode Menyerang diaktifkan set_posisi_x_robot = cx_bola set_posisi_y_robot = cy_bola

##menentukan sudut robot terhadap setpoint n1 = int(set_posisi_y_robot)-int(cy_robot_depan) n2 = int(set_posisi_x_robot)-int(cx_robot_depan) n = math.degrees(math.atan2(n1, n2))

set_sudut = int(round(n))

##menentukan jarak robot terhadap setpoint nr = int(round(math.sqrt(n1**2+n2**2))) #if nr < 40:

#nr = 0

if nr<10:

nr ='0'+'0'+str(nr) elif nr<100:

nr ='0'+str(nr)

##menentukan bola dalam penguasaan robot atau tidak h1 = (int(cx_robot_depan)-int(cx_bola))**2

h2 = (int(cy_robot_depan)-int(cy_bola))**2 radius2 = math.sqrt(h1+h2)

##metode penghindaraan lawan

j1 = (int(cx_robot_depan)-int(cx_lawan))**2 j2 = (int(cy_robot_depan)-int(cy_lawan))**2 radius3 = math.sqrt(j1+j2)

if int(radius3) <= 125 : ##aktifkan metode VFH try:

F2=math.sqrt( (int(cx_robot_depan)+int(set_posisi_x_robot))**2 + (int(cy_robot_depan)+int(set_posisi_y_robot))**2 )

F2=float(F2)

F1=math.sqrt( (int(cx_robot_depan)+int(cx_lawan))**2 + (int(cy_robot_depan)+int(cy_lawan))**2 )

F1=float(F1)

a1=math.degrees(math.atan2( (float(cy_lawan) - float(cy_robot_depan)) , (float(cx_lawan)-float(cx_robot_depan))) )

a2=math.degrees(math.atan2( (float(set_posisi_y_robot) -

float(cy_robot_depan)) , (float(set_posisi_x_robot)-float(cx_robot_depan))) ) if a1>0:

if a1<a2 : t = a1 - a2 elif a2<a1:


(2)

t = a2 - a1 elif a1<0:

if a1>a2: t = a1 - a2 elif a2>a1: t = a1 - a2 tt = float(t)

r = math.sqrt((F1)**2 + (F2)**2 + (2*F1*F2*(math.cos(math.radians(tt))))) r=float(r)

selisih=math.sin(math.radians(180)-math.radians(t))

set_sudut = int(round(math.degrees(math.asin(F1*selisih/r)))) except ValueError:

print 'value error' pass

if int(set_sudut)>=100:

set_sudut = '+'+str(set_sudut) elif 100>int(set_sudut)>=10:

set_sudut = '+'+'0'+str(set_sudut) elif int(set_sudut)==0:

set_sudut = '+000' elif 10>int(set_sudut)>0:

set_sudut = '+'+'00'+ str(set_sudut) elif 0>int(set_sudut)>-10:

set_sudut2 = int(round(math.fabs(int(set_sudut)))) set_sudut = '-'+'00'+str(set_sudut2)

elif -10>=int(set_sudut)>-100:

set_sudut21 = int(round(math.fabs(int(set_sudut)))) set_sudut = '-'+'0'+str(set_sudut21)

##menentukan sudut robot sekarang

s1 = int(cy_robot_depan)-int(cy_robot_belakang) s2 = int(cx_robot_depan)-int(cx_robot_belakang) s = math.degrees(math.atan2(s1, s2))

sudut=int(round(s))

if int(sudut)>=100: sudut = '+'+str(sudut) elif 100>int(sudut)>=10: sudut = '+'+'0'+str(sudut) elif int(sudut)==0:

sudut = '+000' elif 10>int(sudut)>0:

sudut = '+'+'00'+ str(sudut) elif 0>int(sudut)>-10:

sudut1 = int(round(math.fabs(int(sudut)))) sudut = '-'+'00'+str(sudut1)

elif -10>=int(sudut)>-100:

sudut11 = int(round(math.fabs(int(sudut)))) sudut = '-'+'0'+str(sudut11)

l1=str(cx_robot_depan)+str(cy_robot_depan) data1 = '1'+l1

l2=str(cx_bola)+str(cy_bola) data2 = '2'+l2

l3=str(cx_lawan)+str(cy_lawan) data3 = '3'+l3

cx, cy = set_posisi_x_robot, set_posisi_y_robot format_data()

set_posisi_x_robot, set_posisi_y_robot = cx, cy l6=str(set_posisi_x_robot)+str(set_posisi_y_robot) data6 = '6'+l6

data7 = '7' + str(sudut) + str(set_sudut)

l8=str(nr) data8 = '8'+l8

print str(data1),", ",str(data2),", ",str(data3),", ",str(data6),", ",str(data7),", ",str(data8)


(3)

#mystring1 = str(value1)

#f1 = open("bermain_mode_fix_1_2.txt", 'a') #f1.write(mystring1)

#f1.close()

UDPSock.sendto(data7, addr) UDPSock.sendto(data8, addr) UDPSock.sendto('51', addr)

################################################# Fungsi Saat Menuju Gawang ################################################

def detect_2():

global hsv, frame, lower, upper, cx_gawang, cx_robot_belakang, cy_gawang, cy_robot_belakang, cx_robot_depan,cx_lawan, cy_robot_depan, cy_lawan, cx, cy

lower = lower_robot_depan upper = upper_robot_depan track_objects()

format_data()

cv2.circle(frame, (int(cx),int(cy)), 125, (0, 0, 255)) cx_robot_depan, cy_robot_depan = cx, cy

lower = lower_robot_belakang upper = upper_robot_belakang track_objects()

format_data()

cx_robot_belakang, cy_robot_belakang = cx, cy

lower = lower_lawan upper = upper_lawan track_objects() format_data()

cv2.circle(frame, (int(cx),int(cy)), 100, (245, 114, 255)) cx_lawan, cy_lawan = cx, cy

lower = lower_kiper_lawan upper = upper_kiper_lawan track_objects()

format_data()

cx_kiper_lawan, cy_kiper_lawan = cx, cy

##Ganti Setpoint ke Gawang

set_posisi_x_robot = cx_kiper_lawan if int(cy_kiper_lawan)<=240:

set_posisi_y_robot = int(cy_kiper_lawan)+60 elif int(cy_kiper_lawan)>240:

set_posisi_y_robot = int(cy_kiper_lawan)-60

cv2.circle(frame, (int(set_posisi_x_robot),int(set_posisi_y_robot)), 10, (0, 0, 255),-1)

##menentukan sudut robot terhadap setpoint n1 = int(set_posisi_y_robot)-int(cy_robot_depan) n2 = int(set_posisi_x_robot)-int(cx_robot_depan) n = math.degrees(math.atan2(n1, n2))

set_sudut = int(round(n))

##menentukan jarak robot terhadap setpoint nr = int(round(math.sqrt(n1**2+n2**2))) #if nr<40:

#nr=0

if nr<10:

nr ='0'+'0'+str(nr) elif nr<100:

nr ='0'+str(nr)

##metode penghindaraan lawan

j1 = (int(cx_robot_depan)-int(cx_lawan))**2 j2 = (int(cy_robot_depan)-int(cy_lawan))**2 radius3 = math.sqrt(j1+j2)

if int(radius3) < 125 : ##aktifkan metode VFH try:

F2=math.sqrt( (int(cx_robot_depan)+int(set_posisi_x_robot))**2 + (int(cy_robot_depan)+int(set_posisi_y_robot))**2 )


(4)

F2=float(F2)

F1=math.sqrt( (int(cx_robot_depan)+int(cx_lawan))**2 + (int(cy_robot_depan)+int(cy_lawan))**2 )

F1=float(F1)

a1=math.degrees(math.atan2( (int(cy_lawan) - int(cy_robot_depan)) , (int(cx_lawan)-int(cx_robot_depan))) )

a2=math.degrees(math.atan2( (int(set_posisi_y_robot) - int(cy_robot_depan)) , (int(set_posisi_x_robot)-int(cx_robot_depan))) )

if a1>0: if a1<a2 : t = a1 - a2 elif a2<a1: t = a2 - a1 elif a1<0:

if a1>a2: t = a1 - a2 elif a2>a1: t = a1 - a2 tt=float(t)

r = math.sqrt((F1)**2 + (F2)**2 + (2*F1*F2*(math.cos(math.radians(tt))))) r=float(r)

selisih = math.sin(math.radians(180)-math.radians(t))

set_sudut = int(round(math.degrees(math.asin(F1*selisih/r)))) except ValueError:

pass

if int(set_sudut)>=100:

set_sudut = '+'+str(set_sudut) elif 100>int(set_sudut)>=10:

set_sudut = '+'+'0'+str(set_sudut) elif int(set_sudut)==0:

set_sudut = '+000' elif 10>int(set_sudut)>0:

set_sudut = '+'+'00'+ str(set_sudut) elif 0>int(set_sudut)>-10:

set_sudut2 = int(round(math.fabs(int(set_sudut)))) set_sudut = '-'+'00'+str(set_sudut2)

elif -10>=int(set_sudut)>-100:

set_sudut21 = int(round(math.fabs(int(set_sudut)))) set_sudut = '-'+'0'+str(set_sudut21)

##menentukan sudut robot sekarang

s1 = int(cy_robot_depan)-int(cy_robot_belakang) s2 = int(cx_robot_depan)-int(cx_robot_belakang) s = math.degrees(math.atan2(s1, s2))

sudut=int(round(s))

selisih = int(sudut) - int(set_sudut)

if int(cx_robot_depan) > int(450) and 10 > math.fabs(selisih) : UDPSock.sendto('8000', addr)

UDPSock.sendto('61', addr) UDPSock.sendto('60', addr) print 'Tendang'

elif int(cx_robot_depan) > 500: UDPSock.sendto('8000', addr) UDPSock.sendto('61', addr) UDPSock.sendto('60', addr) print 'Tendang'

if int(sudut)>=100: sudut = '+'+str(sudut) elif 100>int(sudut)>=10: sudut = '+'+'0'+str(sudut) elif int(sudut)==0:

sudut = '+000' elif 10>int(sudut)>0:

sudut = '+'+'00'+ str(sudut) elif 0>int(sudut)>-10:

sudut1 = int(round(math.fabs(int(sudut)))) sudut = '-'+'00'+str(sudut1)

elif -10>=int(sudut)>-100:

sudut11 = int(round(math.fabs(int(sudut)))) sudut = '-'+'0'+str(sudut11)


(5)

l1=str(cx_robot_depan)+str(cy_robot_depan) data1 = '1'+l1

l3=str(cx_lawan)+str(cy_lawan) data3 = '3'+l3

l5=str(cx_kiper_lawan)+str(cy_kiper_lawan) data5 = '5'+l5

cx, cy = set_posisi_x_robot, set_posisi_y_robot format_data()

set_posisi_x_robot, set_posisi_y_robot = cx, cy l6=str(set_posisi_x_robot)+str(set_posisi_y_robot) data6 = '6'+l6

data7 = '7' + str(sudut) + str(set_sudut)

l8=str(nr) data8 = '8'+l8

print str(data1),", ",str(data3),", ",str(data5),", ",str(data6),", ",str(data7),", ",str(data8)

#value2 = (data1, data3, data5, data6, data7, data8) #mystring2 = str(value2)

#f2 = open("bermain_mode_fix_2_2.txt", 'a') #f2.write(mystring2)

#f2.close()

UDPSock.sendto(data7, addr) UDPSock.sendto(data8, addr) UDPSock.sendto('51', addr)

################################### Fungsi Untuk Deteksi Objek dan Pemilihan Mode Bermain ##################################

def mulai():

global hsv, frame, lower, upper, cx_bola, cx_robot_belakang, cy_bola, cy_robot_belakang, cx_robot_depan,cx_lawan, cy_robot_depan, cy_lawan, cy_gawang, cy_gawang, cx, cy, modeb

ret, frame = vid.read()

if q==0:

frame = cv2.flip(frame,2) frame = cv2.flip(frame,2) UDPSock.sendto('9A', addr) if q==1:

frame = cv2.flip(frame,2) UDPSock.sendto('9B', addr)

#blur = cv2.GaussianBlur(frame, (5,5), 0) hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

print modeb if modeb=='1': detect_1() elif modeb=='2': detect_2()

cv2.imshow('Tampilan pada Lapangan', frame) key = cv2.waitKey(1) & 0xFF

############################################### Fungsi Terima Data dari Robot ##############################################

def terima():

(data,addr1) = UDPSock.recvfrom(buf) if data[0]=='1':

txt.delete(0, END) txt.insert(0, 1) elif data[0]=='2': txt.delete(0, END) txt.insert(0, 2)


(6)

#################################################### Fungsi Utama Bermain ##################################################

def Bermain():

global modeb, a, q a = 2

q = 2

UDPSock.sendto('51', addr) while (a==2):

UDPSock.sendto('50', addr) terima()

modeb = txt.get() mulai()

root.update()

######################################################################################### ###################################

################################################ Fungsi untuk Mode Berhenti ################################################

######################################################################################### ###################################

def Berhenti(): global a, modeb a = 3

modeb = '0'

UDPSock.sendto('exit', addr)

################################################ Setting GUI dengan TKinter ################################################

root = Tk()

root.title("Pengontrol Robot Soccer Beroda")

frm1 = LabelFrame(root, text="Mode yang Dipilih") frm1.pack()

frm2 = Frame(frm1, background="White") frm2.pack()

frm3 = Frame(frm1) frm3.pack(side = BOTTOM)

mode = IntVar()

btn1 = Button(frm2, text="Bersiap", command=Bersiap, padx=50, pady=50) btn1.pack(side=LEFT)

btn2 = Button(frm2, text="Bermain", command=Bermain, padx=50, pady=50) btn2.pack(side=LEFT)

btn3 = Button(frm2, text="Berhenti", command=Berhenti, padx=50, pady=50) btn3.pack(side=LEFT)

btn4 = Radiobutton(frm3, text="Serang ke Kanan", variable=mode, value=1, command=m1) btn4.pack(side=BOTTOM)

btn5 = Radiobutton(frm3, text="Serang ke Kiri", variable=mode, value=2, command=m2) btn5.pack(side=BOTTOM)

#btn6 = Radiobutton(frm3, text="Serang ke ujung kanan", variable=mode, value=3, command=m3)

#btn6.pack(side=BOTTOM)

#btn7 = Radiobutton(frm3, text="Serang ke ujung kiri", variable=mode, value=4, command=m4)

#btn7.pack(side=BOTTOM) txt = Entry(frm3)