Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Dr. Basuki Rahmat, S.Si, MT Budi Nugroho, S.Kom, M.Kom PEMROGRAMAN ROBOT CERDAS DENGAN ARDUINO Dilengkapi Kamera Kinect Xbox 360, Pemrograman Deep Learning dengan Python dan Koneksi Internet of Things (IoT) Pemrograman Robot.indd 1 28/01/20 11:58:07 PEMROGRAMAN ROBOT CERDAS DENGAN ARDUINO Dr. Basuki Rahmat, S.Si, MT Budi Nugroho, S.Kom, M.Kom Edisi Asli Hak Cipta © 2020 pada penulis Griya Kebonagung 2, Blok I2, No.14 Kebonagung, Sukodono, Sidoarjo Telp.: 0812-3250-3457 Website: www.indomediapustaka.com E-mail: indomediapustaka.sby@gmail.com Hak cipta dilindungi undang-undang. Dilarang memperbanyak sebagian atau seluruh isi buku ini dalam bentuk apa pun, baik secara elektronik maupun mekanik, termasuk memfotokopi, merekam, atau dengan menggunakan sistem penyimpanan lainnya, tanpa izin tertulis dari Penerbit. UNDANG-UNDANG NOMOR 19 TAHUN 2002 TENTANG HAK CIPTA 1. 2. Barang siapa dengan sengaja dan tanpa hak mengumumkan atau memperbanyak suatu ciptaan atau memberi izin untuk itu, dipidana dengan pidana penjara paling lama 7 (tujuh) tahun dan/ atau denda paling banyak Rp 5.000.000.000,00 (lima miliar rupiah). Barang siapa dengan sengaja menyiarkan, memamerkan, mengedarkan, atau menjual kepada umum suatu ciptaan atau barang hasil pelanggaran Hak Cipta atau Hak Terkait sebagaimana dimaksud pada ayat (1), dipidana dengan pidana penjara paling lama 5 (lima) tahun dan/atau denda paling banyak Rp 500.000.000,00 (lima ratus juta rupiah). Rahmat, Basuki Nugroho, Budi Pemrograman Robot Cerdas dengan Arduino/Basuki Rahmat, Budi Nugroho Edisi Pertama —Sidoarjo: Indomedia Pustaka, 2020 Anggota IKAPI No. 195/JTI/2018 1 jil., 17 × 24 cm, 128 hal. ISBN: 978-623-7137-88-7 1. Pemrograman I. Judul Pemrograman Robot.indd 2 2. Pemrograman Robot Cerdas dengan Arduino II. Basuki Rahmat, Budi Nugroho 28/01/20 11:58:07 Prakata Segala puji bagi Allah S.W.T yang telah melimpahkan rahmat, hidayah dan pertolonganNya sehingga kami dapat menyelesaikan buku yang berjudul “Pemrograman Robot Cerdas dengan Arduino”. Semoga buku ini bisa menjadi salah satu rujukan Buku Teks untuk para mahasiswa Informatika, Ilmu Komputer, Sistem Komputer, Teknik Elektro, Mekatronika, dan para mahasiswa teknik lainnya yang mencari literatur Mikrokontroller, Robotika, dan Pemrograman Sistem Cerdas. Dengan selesainya buku ini, kami mengucapkan banyak terimakasih kepada: 1. Teman-teman di Jurusan Informatika dan Jurusan Sistem Informasi UPN “Veteran” Jawa Timur. 2. LPPM dan UPN “Veteran” Jawa Timur yang telah mengusahakan dan membiayai penerbitan buku ini, dalam Program Penelitian Mandiri Skim Peningkatan Mutu Pembelajaran (PMP) UPN "Veteran" Jawa Timur Tahun Anggaran 2019. 3. Dan semua pihak yang telah membantu hingga terselesaikannya buku ini. Kami menyadari bahwa buku ini masih banyak kekurangan. Kritik, saran dan diskusi lebih lanjut, serta peluang kerjasama riset, dan lain-lain, bisa disampaikan melalui alamat email: basukirahmat.if@upnjatim.ac.id. Terimakasih. Surabaya, Januari 2020 Tim Penulis Pemrograman Robot.indd 3 28/01/20 11:58:07 iv Pemrograman Robot.indd 4 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:07 Daftar Isi Prakata .............................................................................. Daftar Isi.............................................................................. iii v Bab 1 Pendahuluan ............................................................. 1 1.1. 1.2. 1.3. Perkembangan Robot Cerdas .................................................. Tantangan Robot Pengawasan ................................................ Gambaran Isi Buku ................................................................ 1 3 5 Perancangan dan Pembuatan Robot Cerdas ................. 7 2.1. 2.2. 2.3. 2.4. 7 8 9 11 Bab 2 Bab 3 Internet of Things (IoT) ............................................. 13 3.1. 3.2. 3.3. Pemrograman Robot.indd 5 Desain Robot ......................................................................... Diagram Blok dan Rangkaian Elektronik Sistem ..................... Cara Kerja Sistem .................................................................. Gambaran Robot Cerdas ........................................................ Apa itu IoT ............................................................................ Aplikasi IoT........................................................................... Sistem IoT ............................................................................. 13 15 16 28/01/20 11:58:07 3.4. 3.5. Bab 4 Tentang Kamera Kinect Xbox 360 .......................................... Instalasi Kamera Kinect Xbox 360.......................................... Pemrograman Kamera Kinect Xbox 360 ................................. 5.3.1 Pemrograman Python Melalui Lingkungan Anaconda ................................................. 5.3.2 Pemrograman Kamera Kinect Xbox 360 dengan Python ............................................................. 49 52 55 55 65 Machine Learning.................................................................. Deep Learning dan Deep Network ......................................... Pemrograman Deep Learning ................................................ 6.3.1. Framework Deep Learning ........................................... 6.3.2. Pemrograman Deep Neural Network (DNN) dengan OpenCV ........................................................... 6.3.3. Pengenalan Objek Waktu Nyata dengan DNN .............. 71 73 78 78 86 88 Pemrograman Robot Cerdas ....................................... 95 7.1. 7.2. Bab 8 29 31 33 39 Machine Learning dan Deep Learning .......................... 71 6.1. 6.2. 6.3. Bab 7 Mikrokontroller NodeMCU V3 .............................................. Instalasi Driver NodeMCU V3 ............................................... Instalasi Arduino IDE ............................................................ Pemrograman NodeMCU V3 ................................................. Kamera Kinect Xbox 360 ........................................... 49 5.1. 5.2. 5.3. Bab 6 16 21 Pemrograman Mikrokontroller ................................... 29 4.1. 4.2. 4.3. 4.4. Bab 5 IoT dengan Cloud MQTT ...................................................... IoT Mobile dengan IoT MQTT Panel ..................................... Kendali Robot via Web dan Mobile ........................................ 95 Pengenalan Objek dengan Deep Learning Menggunakan Kamera Kinect Xbox 360 ....................................................... 108 Penutup ................................................................... 119 8.1. 8.2. Kesimpulan ........................................................................... 119 Ucapan Terimakasih .............................................................. 119 Daftar Pustaka ..................................................................... 121 vi Pemrograman Robot.indd 6 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:07 BAB 1 Pendahuluan 1.1. Perkembangan Robot Cerdas Robot Cerdas atau Intelligent Robot adalah robot yang dirancang dan dibuat untuk menyelesaikan permasalahan tertentu secara cerdas menggunakan algoritma kecerdasan buatan (Artificial Intelligence). Pemanfaatan robot cerdas untuk berbagai keperluan terus berkembang dan semakin canggih, seperti robot industri dan robot pelayanan. Robot industri sering digunakan untuk membantu menyelesaikan proses produksi di pabrikpabrik atau industri. Sedangkan robot pelayanan banyak dimanfaatkan untuk membantu layanan medis, pekerjaan rumah tangga, restoran, pendidikan, permainan, hiburan, dan lain sebagainya. Di sisi lain, revolusi industri saat ini telah memasuki tahap Revolusi Industri Keempat atau industri 4.0. Revolusi industri pada dasarnya merupakan perubahan besar dan radikal terhadap cara manusia memproduksi barang atau produk. Revolusi Industri Pertama (1.0) di tahun 1784-an ditandai dengan penggunaan teknologi mesin uap dan mekanismenya. Revolusi Industri Kedua (2.0) di tahun 1913-an ditandai dengan pemanfaatan tenaga listrik dan produksi massal. Kemudian dunia mengalami Industri Ketiga (3.0) mulai tahun 1969-an ditandai dengan penggunaan Teknologi Informasi, internet, robot dalam proses produksinya. Perkembangan ilmu dan teknologi tidak bisa dihambat, dan manusia selalu mencari inovasi dalam berbagai kehidupan, sehingga Pemrograman Robot.indd 1 28/01/20 11:58:07 lahirlah Industri Keempat (4.0) saat ini. Secara umum, tahap perkembangan revolusi industri diperlihatkan pada Gambar 1.1 (Day, 2018). Revolusi Industri Pertama 1784 Revolusi Industri Kedua 1913 Revolusi Industri Keempat Revolusi Industri Ketiga 1969 2014 Time Gambar 1.1. Tahap perkembangan revolusi industri (Day, 2018) Seperti terlihat pada Gambar 1.1, saat ini kita telah memasuki era Revolusi Industri Keempat atau industri 4.0, yang salah satunya ditandai dengan banyaknya penggunaan teknologi robotik serta bermunculannya jenis pekerjaan baru. Di era revolusi indutri 4.0 peranan robot cerdas semakin penting. Autonomous robots merupakan salah satu dari sembilan pilar teknologi industri 4.0, seperti diperlihatkan pada Gambar 1.2 (Nayyar and Kumar, 2019). Selain kedelapan pilar teknologi yang lain yaitu: Simulation, System Integration, Internet of Things (IoT), Cyber Security, Cloud Computing, Additive Manufacturing, Augmented Reality, dan Big Data. Gambar 1.2. Sembilan pilar teknologi industri 4.0 (Nayyar and Kumar, 2019) 2 Pemrograman Robot.indd 2 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:08 Cepatnya perkembangan teknologi di era industri 4.0 saat ini, maka perlu diimbangi dengan peningkatan kualitas Sumber Daya Manusia yang kelak akan terus mengembangkan dan mungkin bersaing dengan teknologi robotik yang sudah mulai diperkenalkan ke masyarakat. Karena itu sangat penting bagi masyarakat untuk mempelajari setiap hal-hal baru yang berkaitan dengan perkembangan itu sendiri. Oleh karena itu, barangkali buku ini menjadi salah satu jawabannya. 1.2. Tantangan Robot Pengawasan Dari sekian banyak robot cerdas, salah satu yang langsung terlihat kecerdasannya, adalah robot pengawasan (surveillance robot). Robot yang memanfaatkan kamera sebagai sensor andalannya dan tentunya dilengkapi dengan algoritma pengenalan objek. Robot pengawasan ini selanjutnya digunakan sebagai contoh pemrograman robot cerdas dari buku ini. Beberapa contoh penerapan robot pengawasan yang sudah dilakukan oleh para peneliti sebelumnya dan sekilas teknologinya diuraikan di sini. Wifi module Android smartphone Arduino microcontroller Remote user Gambar 1.3. Contoh robot pengawasan (Azeta et al., 2019) Salah satu contoh robot mobile berbasis android untuk pemantauan dan pengawasan seperti diperlihatkan pada Gambar 1.3 (Azeta et al., 2019). Robot pengawasan ini dirancang dan dibuat secara hemat biaya dengan menggunakan mikrokontroler Arduino bersama dengan pelindung motor (motor shield) dan smartphone android yang menjalankan Sistem Operasi. Robot dilengkapi dengan kamera video dan tautan robot Wifi. Sistem memanfaatkan API (Application Programming Interfaces) yang disediakan untuk sistem operasi. Robot dapat dikendalikan dari jarak jauh menggunakan modul Wifi dan mikrokontroler, dan antarmuka ponsel pintar yang tertanam pada robot. Kamera pada robot digunakan untuk menangkap dan merekam video secara real-time dari robot. Robot dapat dikontrol berdasarkan umpan balik visual Bab 1. Pendahuluan Pemrograman Robot.indd 3 3 28/01/20 11:58:08 dari smartphone yang sama. Motor DC roda empat membantu menavigasi robot dan sensor ultrasonik untuk menghindari rintangan. Kamera terpasang ke tautan robot Wifi yang memungkinkannya menangkap lingkungan atau objek yang menjadi perhatian. Hasil percobaan dengan berbagai posisi rintangan menunjukkan fleksibilitas robot untuk menghindarinya dan telah menunjukkan kinerja yang layak dan mendapatkan jangkauan komunikasi hampir 50 meter, yang cukup baik untuk banyak aplikasi pengawasan. Contoh lain robot pengawasan yang sangat menantang saat ini berupa kendaraan tanpa awak atau tanpa pengemudi otomatis (autonomously driving car) seperti diperlihatkan pada Gambar 1.4 (Jóźwiak, 2017). Kendaraan ini dapat diwujudkan seiring kemajuan teknologi mikroelektronika, informasi, komunikasi, material, sensor, cyber-physical systems (CPS) dan Internet of Things (IoT). CPS dan IoT mengalami pertumbuhan eksplosif terkait dengan sistem seluler yang canggih seperti sistem otomotif dan avionik cerdas, robot seluler, dan perangkat yang dapat dipakai (wearable devices). Secara khusus, kendaraan atau mobil pintar melibatkan data instan besar dari berbagai sensor kompleks atau sistem lain, serta diharuskan menyediakan layanan otonom berkelanjutan dalam waktu yang lama. Untuk memenuhi tuntutan ini secara memadai, maka dibutuhkan komputasi tertanam (embedded computing) yang canggih dan teknologi desain tertanam (embedded design technologies) yang handal. Gambar 1.4. Contoh sistem kendaraan tanpa awak (Jóźwiak, 2017) 4 Pemrograman Robot.indd 4 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:08 1.3. Gambaran Isi Buku Buku Pemrograman Robot Cerdas dengan Arduino ini, selanjutnya mengambil studi kasus pemrograman robot pengawasan. Gambaran isi buku secara keseluruhan, dibahas secara sistematis dengan urutan pembahasan seperti terlihat pada Gambar 1.5. BAB 1 PENDAHULUAN BAB 2 PERANCANGAN DAN PEMBUATAN ROBOT CERDAS BAB 3 INTERNET OF THINGS (IoT) BAB 4 PEMROGRAMAN MIKROKONTROLLER BAB 5 KAMERA KINECT XBOX 360 BAB 6 MACHINE LEARNING DAN DEEP LEARNING BAB 7 PEMROGRAMAN ROBOT CERDAS BAB 8 PENUTUP Gambar 1.5. Gambaran isi buku Bab 1. Pendahuluan Pemrograman Robot.indd 5 5 28/01/20 11:58:09 Bab 1 Pendahuluan, berisi tentang perkembangan robot cerdas, tantangan robot pengawasan, dan gambaran isi buku. Bab 2 Perancangan dan Pembuatan Robot Cerdas, dibahas tentang desain robot, diagram blok dan rangkaian elektronik sistem, cara kerja sistem, dan gambaran robot cerdas. Bab 3 Internet of Things (IoT), dibahas tentang apa itu IoT, aplikasi IoT, sistem IoT, IoT dengan cloud MQTT, dan IoT mobile dengan IoT MQTT Panel. Bab 4 Pemrograman Mikrokontroller, dibahas tentang mikrokontroller NodeMCU V3, instalasi driver NodeMCU V3, instalasi Arduino IDE, dan pemrograman NodeMCU V3. Bab 5 Kamera Kinect Xbox 360, dibahas tentang kamera Kinect Xbox 360, instalasi kamera Kinect Xbox 360, dan pemrograman kamera Kinect Xbox 360. Bab 6 Machine Learning dan Deep Learning, dibahas tentang Machine Learning, Deep Learning dan Deep Network, serta pemrograman Deep Learning. Dimana pada pemrograman Deep Learning, dibahas tentang framework Deep Learning, pemrograman Deep Neural Network (DNN) dengan OpenCV, dan pengenalan objek waktu nyata dengan DNN. Bab 7 Pemrograman Robot Cerdas, dibahas tentang kendali robot via web dan mobile, dan pengenalan objek dengan Deep Learning. Dan terakhir, Bab 8 Penutup, berisi tentang kesimpulan, dan ucapan terimakasih. 6 Pemrograman Robot.indd 6 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:09 BAB 2 Perancangan dan Pembuatan Robot Cerdas 2.1. Desain Robot Robot Cerdas ini selanjutnya diberi nama BNU 4.0. BNU kependekan dari Bela Negara University, dedikasi untuk Kampus Bela Negara. Badan robot adalah Remote Control car (RC car) yang dimodifikasi. Otak kendali robot ini berupa mikrokontroller NodeMCU V3. Board elektronik yang berbasis chip ESP8266. Dengan chip ini, NodeMCU V3 memiliki kemampuan koneksi ke cloud Internet of Things (IoT). Agar robot dapat bergerak maju, mundur, belok kanan, dan belok kiri, digunakan driver motor L298N. Robot ini juga dilengkapi dengan kamera Kinect Xbox 360. Rancangan robot ini seperti diperlihatkan pada Gambar 2.1. Pemrograman Robot.indd 7 28/01/20 11:58:09 Gambar 2.1. Rancangan robot cerdas 2.2. Diagram Blok dan Rangkaian Elektronik Sistem Diagram blok sistem Robot Cerdas BNU 4.0 seperti diperlihatkan pada Gambar 2.2. M2 M1 M2 M1 Gambar 2.2. Diagram blok sistem robot cerdas Sedangkan rangkaian elektronik sistem Robot Cerdas BNU 4.0 seperti diperlihatkan pada Gambar 2.3. Dimana IN 1 dan IN 2 dari driver motor L298N, dihubungkan ke pin 8 Pemrograman Robot.indd 8 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:10 D3 dan D4 dari mikrokontroller NodeMCU V3. Hal ini digunakan untuk mengendalikan motor belakang (M2), untuk gerak maju dan mundur. Sedangkan IN 3 dan IN 4 dari driver motor L298N, dihubungkan ke pin D7 dan D8 dari mikrokontroller NodeMCU V3. Hal ini digunakan untuk mengendalikan motor depan (M1), untuk belok kanan dan belok kiri. 5V 12V Gambar 2.3. Rangkaian elektronik sistem robot cerdas 2.3. Cara Kerja Sistem Cara kerja sistem atau bagaimana Robot Cerdas BNU 4.0 dijalankan dan digunakan untuk mengenali objek di depannya, diperlihatkan pada Gambar 2.4. Bab 2. Perancangan dan Pembuatan Robot Cerdas Pemrograman Robot.indd 9 9 28/01/20 11:58:11 Mobile IoT MQTT Panel CloudMQtt internet Web-based control M2 L298N Kinect XBox 360 NodeMCU and embedded arduino programming M1 M1 front motor M2 rear motor Object recognition with Deep Learning using Python RC car equipped with Kinect Xbox 360 Gambar 2.4. Cara kerja robot cerdas Gambar 2.4. Cara kerja robot cerdas Dari Gambar 2.4 dapat dijelaskan sebagai berikut. Badan robot berupa mobil RC yang telah dimodifikasi. Mobil RC biasanya memiliki dua motor, yaitu motor depan (M1) dan motor belakang (M2). Motor depan digunakan untuk belok kanan dan belok kiri, sedangkan motor belakang digunakan untuk gerak maju dan mundur. Untuk menjalankan kedua motor ini, digunakan driver motor L298N. Driver motor terhubung ke mikrokontroller NodeMCU V3 dengan hubungan rangkaian seperti pada Gambar 2.3. NodeMCU V3 berbasis chip ESP8266. Dengan chip ini, NodeMCU V3 memiliki kemampuan koneksi ke cloud Internet of Things (IoT). Cloud IoT yang digunakan di buku ini yaitu cloud MQTT (https://www.cloudmqtt.com). Dengan program Arduino yang tertanam di mikrokontroller NodeMCU V3, selanjutnya dapat dijalankan program kendali robot berbasis web. Dengan program Arduino yang dirancang dan tertanam di mikrokontroller NodeMCU V3 ini juga, selanjutnya dapat dijalankan program kendali robot melalui Android Apps (IoT MQTT Panel). Robot ini juga dilengkapi dengan kamera Kinect Xbox 360. Kamera ini terhubung ke komputer (laptop). Dengan program Deep Learning yang ada di komputer selanjutnya sistem akan mengenali objek yang ada di depannya. 10 Pemrograman Robot.indd 10 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:11 2.4. Gambaran Robot Cerdas Dengan demikian gambaran Robot Cerdas BNU 4.0 yang dijalankan dengan misi pengenalan objek menggunakan algoritma Deep Learning, diperlihatkan pada Gambar 2.5 sampai dengan Gambar 2.8. Gambar 2.5. Robot tampak depan Gambar 2.6. Robot tampak samping Bab 2. Perancangan dan Pembuatan Robot Cerdas Pemrograman Robot.indd 11 11 28/01/20 11:58:11 Gambar 2.7. Robot tampak samping dengan objek di depannya Gambar 2.8. Robot tampak atas 12 Pemrograman Robot.indd 12 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:11 BAB 3 Internet of Things (IoT) 3.1. Apa itu IoT Internet of Things (IoT) adalah area yang muncul di mana milyaran objek pintar saling berhubungan satu sama lain menggunakan internet untuk berbagi data dan sumber daya (Chahal, Kumar and Batra, 2020). Teknologi IoT memungkinkan benda-benda di sekitar kita saling terhubung dengan jaringan internet. Dimana setiap benda yang terhubung dengan internet bisa diakses kapan saja dan dimana saja. Contohnya, dari jarak jauh kita bisa menghidup-matikan peralatan di rumah (lampu, televisi, kompor, pemanas, dan lain-lain) selama peralatan terhubung ke cloud IoT dan tersedia koneksi internet. Secara umum arsitektur IoT terdiri dari Application Layer, Middleware Layer, Network Layer, dan Physical Layer, seperti diperlihatkan pada Gambar 3.1 (Ravidas et al., 2019). Lapisan Aplikasi (Application Layer): bertujuan untuk menyediakan layanan kepada pengguna akhir. Lapisan ini terdiri dari simpul aplikasi yang menangani logika aplikasi serta semantik data dan presentasi. Simpul ini menerima data dari middleware dan memprosesnya tergantung pada persyaratan pengguna akhir dan jenis layanan yang disediakan. Selain itu, lapisan aplikasi mencakup Application Programming Interface (API) untuk memfasilitasi komunikasi dengan middleware dan antarmuka pengguna yang digunakan pengguna akhir untuk mengakses layanan. Pemrograman Robot.indd 13 28/01/20 11:58:11 Lapisan Middleware (Middleware Layer): untuk memastikan konektivitas dan interoperabilitas dalam ekosistem IoT. Ini terdiri dari simpul menengah yang memproses data yang diterima dari lapisan bawah dan meneruskannya ke lapisan aplikasi. Lapisan Jaringan (Network Layer): untuk mendukung jaringan dan transfer data antar simpul. Lapisan jaringan mengimplementasikan protokol komunikasi yang diperlukan untuk pertukaran data dalam ekosistem IoT. Lapisan Fisik (Physical Layer): untuk mengkarakterisasi kemampuan penginderaan dan kontrol dari sistem IoT. Lapisan ini terdiri dari simpul fisik seperti sensor dan aktuator yang merasakan lingkungan dan berinteraksi dengannya dalam menanggapi perubahan atau permintaan pengguna. Node ini menghasilkan sumber daya (merasakan data) yang dilewatkan ke simpul aplikasi melalui jaringan dan lapisan middleware. Gambar 3.1. Arsitektur IoT (Ravidas et al., 2019) 14 Pemrograman Robot.indd 14 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:11 3.2. Aplikasi IoT Banyak sekali contoh penerapan teknologi IoT, beberapa contohnya: • Smart Home (sistem keamanan rumah berbasis internet, dapat mengetahui keadaan rumah serta mengontrol peralatan rumah tangga melalui jaringan internet). • Smart Farming (sistem pertanian cerdas berbasis internet, untuk pemantauan dan pengendalian kualitas air dan tanah pertanian serta pertumbuhan tanaman melalui jaringan internet). • Internet industry (pemantauan dan pengendalian peralatan serta proses di industri). • Kesehatan (pemantauan kondisi kesehatan seseorang). • Transportasi (majemen dan informasi lalulintas). Gambaran contoh penerapan IoT untuk bidang kesehatan dan Smart City diperlihatkan pada Gambar 3.2 dan Gambar 3.3. Gambar 3.2. Contoh arsitektur berbasis IoT untuk bidang kesehatan (Zeadally and Bello, 2019) Gambar 3.3. Contoh penerapan IoT pada Smart City (Gheisari, Wang and Chen, 2020) Bab 3. Internet of Things (IoT) Pemrograman Robot.indd 15 15 28/01/20 11:58:11 3.3. Sistem IoT Sistem dasar dari IoT terdiri dari 3 hal, yaitu: • Hardware/fisik (Things). • Koneksi internet. • Cloud data center sebagai tempat untuk menyimpan atau menjalankan aplikasinya. Masing-masing seperti diperlihatkan pada Gambar 3.4 (anonymous, 2019). Gambar 3.4. Sistem IoT (anonymous, 2019) 3.4. IoT dengan Cloud MQTT Seperti telah disebutkan pada sistem IoT, untuk membuat projek berbasis IoT kita membutuhkan cloud data center atau cloud IoT. Salah satu cloud IoT yang bisa dimanfaatkan adalah cloud MQTT (https://www.cloudmqtt.com). Tampilan halaman website cloud MQTT seperti diperlihatkan pada Gambar 3.5. 16 Pemrograman Robot.indd 16 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:11 Gambar 3.5. Cloud MQTT Untuk memanfaatkan cloud MQTT harus memiliki akun di cloud ini. Jika belum punya, silahkan daftar terlebih dahulu. Seperti diperlihatkan pada Gambar 3.6. Gambar 3.6. Daftar akun cloud MQTT Bab 3. Internet of Things (IoT) Pemrograman Robot.indd 17 17 28/01/20 11:58:11 Setelah memiliki akun silahkan login ke sistem. Setelah berhasil masuk ke halaman login, silahkan buat projek baru dengan menekan tombol Create New Instance. Gambar 3.7. Create New Instance untuk membuat projek baru Silahkan isikan Name dan Tags sembarang, selanjutnya tekan tombol Select Region. Contoh misalkan nama projeknya bisa diketikkan: Robot BNU 4.0. Gambar 3.8. Nama projek 18 Pemrograman Robot.indd 18 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:11 Setelah menekan tombol Select Region, silahkan dipilih salah satu server yang ada di region tersebut. Setelah itu silahkan lanjut dengan menekan tombol Review. Gambar 3.9. Pilihan lokasi data center Setelah menekan tombol Review, muncul konfirmasi projek baru (confirm new instance). Untuk paket gratis, tampil gambar kucing lucu (Cute Cat). Setelah itu silahkan tekan tombol Create instance. Gambar 3.10. Konfirmasi projek baru Bab 3. Internet of Things (IoT) Pemrograman Robot.indd 19 19 28/01/20 11:58:12 Setelah menekan tombol Create instance, silahkan diperiksa, seharusnya projek baru berhasil ditambahkan. Server cloud IoT untuk projek kita, siap digunakan. Gambar 3.11. Projek baru berhasil ditambahkan Untuk melihat detail informasi server dan lain-lain, silahkan tekan projek kita (Robot BNU 4.0). Selanjutnya silahkan disimpan, nama server, user, password, port, dan lain-lain. Gambar 3.12. Informasi detail projek IoT di cloud MQTT 20 Pemrograman Robot.indd 20 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:12 Gambar 3.13. Informasi detail server dan lain-lain Nama server, user, password dan port yang kita peroleh, nantinya kita gunakan untuk pengaturan program IoT pada IoT MQTT Panel dan di mikrokontroller NodeMCU V3. 3.5. IoT Mobile dengan IoT MQTT Panel MQTT kependekan dari Message Queuing Telemetry Transport, yaitu protokol pesan berbasis penerbitan standar berlangganan International Organization for Standardization (ISO). MQTT adalah protokol yang digunakan dalam IoT untuk transmisi data. Lapisan Aplikasi dan protokol MQTT merupakan lapisan paling atas dari TCP/IP. MQTT merupakan protokol berbasis penerbit dan pelanggan yang memungkinkan beberapa perangkat berkomunikasi satu sama lain melalui jaringan nirkabel (Kashyap, Sharma and Gupta, 2018). Beberapa istilah penting terkait MQTT, antara lain: • Broker - Broker adalah server yang mendistribusikan informasi kepada klien yang terhubung ke server. • Client (Klien) - Perangkat yang terhubung ke broker untuk mengirim atau menerima informasi. • Topic (Topik) - Nama tentang pesan itu. Klien mempublikasikan, berlangganan, atau melakukan keduanya untuk suatu topik. Bab 3. Internet of Things (IoT) Pemrograman Robot.indd 21 21 28/01/20 11:58:12 • Publish (Terbitkan) - Klien yang mengirim informasi ke broker untuk dibagikan kepada klien yang tertarik berdasarkan nama topik. • Subscribe (Berlangganan) - Klien memberi tahu broker topik apa yang mereka minati. Ketika klien berlangganan suatu topik, pesan apa pun yang diterbitkan ke broker didistribusikan ke pelanggan topik itu. Klien juga dapat berhenti berlangganan untuk berhenti menerima pesan dari broker tentang topik itu. • QoS (Quality of Service) - Kualitas Layanan. Setiap koneksi dapat menentukan kualitas layanan ke broker dengan nilai integer mulai dari 0-2. QoS tidak mempengaruhi penanganan transmisi data TCP, hanya antara klien MQTT. ƒ 0 menentukan paling banyak sekali, atau sekali dan hanya sekali tanpa memerlukan pemberitahuan pengiriman. Ini sering disebut sebagai fire (api) dan forget (lupa). ƒ 1 menentukan setidaknya satu kali. Pesan itu dikirim beberapa kali sampai sebuah pengakuan diterima, dikenal sebaliknya sebagai pengiriman yang diakui. ƒ 2 menentukan tepat sekali. Klien pengirim dan penerima menggunakan jabat tangan dua tingkat untuk memastikan hanya satu salinan pesan yang diterima, yang dikenal sebagai pengiriman yang terjamin. Di MQTT, penerbit dan pelanggan (atau klien) tidak perlu saling mengenal identitas satu sama lain. MQTT mengirimkan informasi dari sumber ke tujuan dan diimplementasikan pada lapisan TCP. MQTT lebih cocok untuk simpul IoT yang memiliki kemampuan dan aset terbatas. Setiap koneksi MQTT mempertimbangkan dua jenis agen: yang pertama adalah klien MQTT dan yang lainnya adalah server broker MQTT. Informasi yang dikirimkan oleh protokol dikenal sebagai pesan aplikasi. Klien MQTT mengacu pada perangkat atau objek yang terhubung ke jaringan yang mengambil bagian dalam komunikasi atau pertukaran pesan melalui MQTT. Klien MQTT disebut sebagai penerbit dan pelanggan. Penerbit dapat mengirim pesan aplikasi dan pelanggan dapat meminta pesan aplikasi itu untuk mendapatkan informasi yang terkait dengan pesan itu. Pialang memungkinkan klien yang berbeda untuk terhubung satu sama lain. Ini mengakui dan mentransmisikan pesan aplikasi di antara berbagai klien yang terkait dengannya. Klien MQTT dapat berupa sensor, perangkat seluler, dll. Sederhananya adalah MQTT adalah protokol untuk menyampaikan pesan dari server ke klien maupun sebaliknya. Kelebihan dari MQTT antara lain: mengirim pesan secepat mungkin, menimalisir encoding dan decoding data, dan memanfaatkan storage (penyimpanan) sekecil mungkin. Selanjutnya untuk kebutuhan pengendalian robot cerdas secara mobile menggunakan ponsel, dibutuhkan Android Apps IoT MQTT Panel. Silahkan dicari IoT MQTT Panel di Play Store dengan tampilan seperti diperlihatkan pada Gambar 3.14. 22 Pemrograman Robot.indd 22 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:12 Gambar 3.14. IoT MQTT Panel Silahkan diinstal di ponsel, aplikasi IoT MQTT Panel, sampai aplikasi siap digunakan. Gambar 3.15. IoT MQTT Panel siap digunakan Jika baru pertamakali dijalankan, akan muncul seperti pada Gambar 3.16, silahkan tekan tombol Setup A Connection. Bab 3. Internet of Things (IoT) Pemrograman Robot.indd 23 23 28/01/20 11:58:12 Gambar 3.16. Tampilan IoT MQTT Panel pertama kali Setelah ditekan tombol Setup A Connection, silahkan tuliskan Connection name (nama koneksi) dan Client ID sembarang. Dalam contoh ini misalkan diisikan dengan nama koneksi Robot BNU 4.0. Selanjutnya, silahkan diisi secara lengkap web broker, port, protokol TCP, user, password, dan seterusnya, sesuai dengan informasi detail server cloud IoT seperti pada Gambar 3.13. Kemudian silahkan tekan tombol Create. 24 Pemrograman Robot.indd 24 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:12 Gambar 3.17. Seting koneksi ke server cloud IoT Setelah menekan tombol Create, seharusnya koneksi ke cloud IoT siap digunakan. Silahkan dicoba melakukan koneksi dengan menekan tanda gambar cloud seperti pada Gambar 3.18. Gambar 3.18. Koneksi ke cloud IoT siap digunakan Bab 3. Internet of Things (IoT) Pemrograman Robot.indd 25 25 28/01/20 11:58:12 Jika isian nama server (web broker), user, password, port, dan lain-lain sudah benar, seharusnya koneksi ke server cloud IoT akan sukses. Jika koneksi sukses dan belum ada panel yang pernah dibuat sebelumnya, maka akan muncul seperti pada Gambar 3.19. Gambar 3.19. Belum ada panel Silahkan tekan tombol Add Panel, maka akan muncul banyak pilihan panel sesuai kebutuhan. Lihat Gambar 3.20. Untuk pengendalian robot BNU 4.0 ini cukup gunakan panel Button sebanyak empat (yaitu tombol maju, mundur, belok kiri, dan belok kanan). Gambar 3.20. Pilihan panel 26 Pemrograman Robot.indd 26 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:12 Silahkan tekan Panel Button. Isikan Panel name (nama panel) misalkan MAJU, nantinya untuk tombol MAJU. Digunakan untuk gerak maju robot cerdas. Kemudian, topic (topik) adalah nama tentang pesan. Klien (mikrokontroller NodeMCU V3) mempublikasikan, berlangganan, atau melakukan keduanya untuk suatu topik. Misalkan isikan topik dengan Maju dan isikan payload dengan 1. Lihat Gambar 3.21. Gambar 3.21. Contoh isian panel Setelah diisikan nama panel, topik, payload, ukuran panel Medium, dan dicentang lebar panel (Fit to panel width), selanjutnya tekan tombol Create. Setelah jadi satu tombol, silahkan dilakukan cara yang sama, untuk ketiga tombol yang lain (Kiri, Kanan, dan Mundur). Masing-masing dengan payload 2,3, dan 4. Kemudian silahkan dilakukan penyesuaian letak dan ukuran panel. Sehingga setelah keempat tombol lengkap, bentuk panel pengendalian robot cerdas, menjadi seperti pada Gambar 3.22. Selanjutnya untuk pemrograman mikrokontroller NodeMCU V3 sebagai klien yang akan berlangganan dan mengirimkan pesan atau data ke cloud IoT dibahas pada Bab 7. Bab 3. Internet of Things (IoT) Pemrograman Robot.indd 27 27 28/01/20 11:58:12 Gambar 3.22. Panel kendali robot cerdas via ponsel 28 Pemrograman Robot.indd 28 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:12 BAB 4 Pemrograman Mikrokontroller 4.1. Mikrokontroller NodeMCU V3 NodeMCU V3 adalah board pengembangan yang mengintegrasikan system on chip (SoC) ESP8266, dirancang dan diproduksi oleh Espressif Systems (Anzola, Jiménez and Tarazona, 2019). Board ini termasuk mikrokontroler 32-bit, daya rendah (Tensilica L106), modul Wifi 2,4 GHz, memori RAM 50 kB, konverter analog-ke-digital (ADC) dan 17 pin tujuan umum input dan output atau general-purpose input/output (GPIO). NodeMCU V3 berukuran panjang 4.83cm, lebar 2.54cm, dan berat 7 gram. Karena biayanya yang rendah, NodeMCU V3 adalah salah satu platform terbaik bersifat opensource untuk pengembangan aplikasi IoT. NodeMCU V3 telah memaket ESP8266 ke dalam sebuah board yang kompak dengan berbagai fitur layaknya mikrokontroler + kapabilitas akses terhadap Wifi juga chip komunikasi USB to serial. Sehingga untuk memprogramnya hanya diperlukan ekstensi kabel data USB persis yang digunakan sebagai kabel data dan kabel charging smartphone Android. Spesifikasi yang dimiliki oleh NodeMCU V3 sebagai berikut: 1) Board ini berbasis ESP8266 serial Wifi SoC (Single on Chip) dengan onboard USB to TTL. Wireless yang digunakan adalah IEE 802.11b/g/n. 2) 2 tantalum capasitor 100 micro farad dan 10 micro farad. Pemrograman Robot.indd 29 28/01/20 11:58:12 3) 4) 5) 6) 7) 8) 9) 10) 11) 12) 13) 14) 3.3v LDO regulator. Blue led sebagai indikator. Cp2102 usb to UART bridge. Tombol reset, port usb, dan tombol flash. Terdapat 9 GPIO yang di dalamnya ada 3 pin PWM, 1 x ADC Channel, dan pin RX TX 3 pin ground. S3 dan S2 sebagai pin GPIO S1 MOSI (Master Output Slave Input) yaitu jalur data dari master dan masuk ke dalam slave, sc cmd/sc. S0 MISO (Master Input Slave Input) yaitu jalur data keluar dari slave dan masuk ke dalam master. SK yang merupakan SCLK dari master ke slave yang berfungsi sebagai clock. Pin Vin sebagai masukan tegangan. Built in 32-bit MCU. Gambar 4.1. GPIO NodeMCU ESP8266 V3 Keterangan: 1) RST: berfungsi mereset modul 2) ADC: Analog Digital Converter. Rentang tegangan masukan 0-1v, dengan skup nilai digital 0-1024 30 Pemrograman Robot.indd 30 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:12 3) 4) 5) 6) 7) 8) 9) 10) 11) 12) 13) 14) 15) 16) 17) 18) 19) 20) 21) 22) EN: Chip Enable, Active High IO16:GPIO16, dapat digunakan untuk membangunkan chipset dari mode deep sleep IO14: GPIO14; HSPI_CLK IO12: GPIO12: HSPI_MISO IO13: GPIO13; HSPI_MOSI; UART0_CTS VCC: Catu daya 3.3V (VDD) CS0: Chip selection MISO: Slave output, Main input IO9: GPIO9 IO10 GBIO10 MOSI: Main output slave input SCLK: Clock GND: Ground IO15: GPIO15; MTDO; HSPICS; UART0_RTS IO2: GPIO2;UART1_TXD IO0: GPIO0 IO4: GPIO4 IO5: GPIO5 RXD: UART0_RXD; GPIO3 TXD: UART0_TXD; GPIO1 4.2. Instalasi Driver NodeMCU V3 Selanjutnya agar board NodeMCU V3 dikenali oleh komputer atau laptop kita, maka terlebih dahulu harus diinstal driver-nya. Driver NodeMCU V3 dapat diperoleh melalui alamat berikut: https://github.com/nodemcu/nodemcu-devkit/tree/master/Drivers. Untuk yang versi Windows, silahkan pilih CH341SER_WINDOWS.zip. Setelah didownload, silahkan diekstrak. Setelah diekstrak, tampil seperti pada Gambar 4.2. Gambar 4.2. Driver NodeMCU V3 Setelah itu silahkan diinstal driver tersebut menggunakan level Administrator. Bab 4. Pemrograman Mikrokontroller Pemrograman Robot.indd 31 31 28/01/20 11:58:12 Gambar 4.3. Instalasi driver NodeMCU V3 sebagai Administrator Jika muncul pertanyaan Do you want to allow this app to make changes to your device? Silahkan jawab (tekan) Yes. Selanjutnya akan muncul seperti pada Gambar 4.4. Silahkan tekan Install, dan tunggu sampai proses instalasi driver selesai. Gambar 4.4. Instalasi driver NodeMCU Jika proses instalasi driver sukses, maka akan muncul seperti pada Gambar 4.5. Silahkan tekan OK. 32 Pemrograman Robot.indd 32 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:12 Gambar 4.5. Instalasi driver NodeMCU V3 sukses Selanjutnya periksa koneksi NodeMCU V3 ke komputer atau laptop. Posisi mikrokontroller NodeMCU V3 terhubung ke komputer melalui port USB. Perhatikan pada Device Manager, lihat pada bagian Ports (COM & LPT). Pada contoh buku ini, NodeMCU V3 terhubung ke COM12. Lihat Gambar 4.6. Gambar 4.6. Posisi NodeMCU V3 di port komputer 4.3. Instalasi Arduino IDE Selanjutnya, setelah instalasi driver, untuk keperluan pemrograman mikrokontroller NodeMCU V3 butuh aplikasi Arduino IDE (Integrated Development Environment). Aplikasi Bab 4. Pemrograman Mikrokontroller Pemrograman Robot.indd 33 33 28/01/20 11:58:12 Arduino IDE berfungsi untuk membuat, membuka, dan mengedit program yang akan ditanam (di-embed) ke dalam board Arduino. Aplikasi Arduino IDE dirancang agar memudahkan penggunanya dalam membuat berbagai aplikasi. Arduino IDE memiliki struktur bahasa pemrograman yang sederhana dan fungsi yang lengkap, sehingga mudah untuk dipelajari oleh pemula sekalipun. Untuk mendapatkan aplikasi Arduino IDE dapat diunduh melalui website resmi Arduino yaitu di alamat: https://www.Arduino. cc/en/Main/Software. Seperti terlihat pada Gambar 4.7, tersedia aplikasi Arduino IDE untuk berbagai sistem operasi komputer diantaranya Windows Installer/Non Installer, Mac OS, Linux 32 bit, Linux 54 bit, dan Linux ARM. Cukup dengan menekan link unduhnya (dalam hal ini kita pilih Windows Installer) maka akan muncul pilihan download and donate dan just download. Pilih just download maka secara otomatis file akan terunduh. Gambar 4.7. Website resmi Arduino.cc Selanjutnya akan dijelaskan cara instalasi aplikasi Arduino IDE pada sistem operasi Windows 10. Perlu diketahui, ada aplikasi Arduino IDE yang memerlukan instalasi dan ada yang tidak perlu instalasi. Untuk proses instalasi, silahkan buka file Arduino-1.8.10-windows.exe (1.8.10 adalah versi dari Arduino IDE), seperti pada Gambar 4.8. Klik kanan dan silahkan install sebagai Administrator, seperti pada Gambar 4.9. Jika muncul pertanyaan Do you want to allow this app to make changes to your device? Silahkan jawab (tekan) Yes. Maka selanjutnya akan muncul seperti pada Gambar 4.10. 34 Pemrograman Robot.indd 34 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:12 Gambar 4.8. File Arduino-1.8.10-windows.exe Gambar 4.9. Instalasi Arduino IDE sebagai Administrator Gambar 4.10. Persetujuan instalasi aplikasi IDE Arduino Bab 4. Pemrograman Mikrokontroller Pemrograman Robot.indd 35 35 28/01/20 11:58:12 Dilanjutkan dengan menekan tombol I Agree, maka akan muncul jendela Installation Option seperti Gambar 4.11. Pastikan semua komponen terpilih/tercentang. Gambar 4.11. Pilihan komponen instalasi Tekan tombol Next, kemudian pilih Folder untuk menyimpan Aplikasi Arduino IDE. Gambar 4.12. Menentukan Folder instalasi Tekan Install untuk melanjutkan ke proses instalasi. 36 Pemrograman Robot.indd 36 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:13 Gambar 4.13. Proses extract dan instalasi Silahkan tunggu sampai proses instalasi selesai. Gambar 4.14. Instalasi selesai Jika sudah selesai proses instalasi, silahkan tekan Close. Aplikasi Arduino IDE siap untuk digunakan. Untuk membuka aplikasi Arduino IDE, carilah file hasil instalasi Arduino.exe, atau silahkan cari shortcut program Arduino IDE di desktop. Kemudian silahkan double click file tersebut. Bab 4. Pemrograman Mikrokontroller Pemrograman Robot.indd 37 37 28/01/20 11:58:13 Gambar 4.15. Aplikasi Arduino IDE Untuk aplikasi Arduino IDE yang tidak memerlukan instalasi, dapat diunduh juga dari website resmi Arduino yaitu https://www.Arduino.cc/en/Main/Software dan silahkan pilih Windows ZIP file for non admin install. Ketika muncul pilihan download and donate dan just download, silahkan pilih just download maka secara otomatis file akan terunduh. Gambar 4.16. File Arduino-1.8.10-windows.zip Setelah file Arduino IDE terunduh, silahkan diekstrak file tersebut dengan cara klik kanan → Ekstrak disini/Extract here, maka hasilnya seperti pada Gambar 4.17. Gambar 4.17. File Arduino.zip setelah diekstrak 38 Pemrograman Robot.indd 38 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:13 Untuk membuka aplikasi Arduino IDE, silahkan jalankan file Arduino.exe seperti pada Gambar 4.18. Gambar 4.18. Aplikasi Arduino IDE Setelah dijalankan tampilan utama dari aplikasi Arduino IDE seperti terlihat pada Gambar 4.19. Gambar 4.19. Tampilan utama aplikasi Arduino IDE v1.8.10 4.4. Pemrograman NodeMCU V3 Setelah aplikasi Arduino IDE terinstal, selanjutnya perlu dilakukan pengaturan sesuai dengan jenis mikrokontroller NodeMCU V3 yang digunakan. Silahkan jalankan Bab 4. Pemrograman Mikrokontroller Pemrograman Robot.indd 39 39 28/01/20 11:58:13 aplikasi Arduino IDE, sehingga muncul tampilan seperti pada Gambar 4.19. Board mikrokontroller NodeMCU V3 dalam keadaan terhubung ke komputer atau laptop. Beberapa pengaturan Arduino IDE untuk NodeMCU V3, diuraikan sebagai berikut: 1). Jalankan aplikasi Arduino IDE, pada menu File silahkan klik pada bagian Preference: Gambar 4.20. File – Preference Gambar 4.21. Preferences 40 Pemrograman Robot.indd 40 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:13 2). Pada Additional Boards Manager URLs tambahkan http://Arduino.esp8266.com/stable/package_esp8266com_index.json. Gambar 4.22. Seting additional boards 3). Selanjutnya silahkan update board-nya. Dari menu Tool Board Board Manager. Gambar 4.23. Seting Board Manager Akan muncul jendela Boards Manager. Pada bagian bawah cari esp8266, kemudian silahkan klik install. Bab 4. Pemrograman Mikrokontroller Pemrograman Robot.indd 41 41 28/01/20 11:58:13 Gambar 4.24. Instal modul esp8266 4). Sekarang silahkan dicek, apakah NodeMCU sudah terinstal di Arduino IDE, ataukah belum. Lihat pada bagian menu Tolls - Board - NodeMCU seperti pada Gambar 4.25. Gambar 4.25. Board NodeMCU siap digunakan 5). Selanjutnya, sesuaikan port yang digunakan. Silahkan klik pada menu Tools – Port, pilih port yang sesuai. Pada contoh buku ini, NodeMCU V3 terhubung ke COM12 (sesuai yang muncul di Device Manager, Gambar 4.6). 42 Pemrograman Robot.indd 42 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:13 Gambar 4.26. Pengaturan port NodeMCU V3 Selanjutnya sudah bisa dicoba, pemrograman menggunakan NodeMCU V3. Berikut ini contoh program untuk tes koneksi Wifi. Silahkan tuliskan kode program berikut ini, dan sesuaikan nama dan kata sandi Wifi yang digunakan. Program Tes Koneksi WiFi NodeMCU V3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 /************************************************** * Program: Tes Koneksi WiFi NodeMCU V3 * Input: * Output: Serial Monitor * *************************************************/ #include <ESP8266WiFi.h> const char* ssid = “alamkubur”;//Ganti dengan nama Wifi anda const char* password = “password_wifi”;//Ganti dengan password wifi anda WiFiServer server(80); Bab 4. Pemrograman Mikrokontroller Pemrograman Robot.indd 43 43 28/01/20 11:58:13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 void setup() { Serial.begin(115200); delay(1000); //Connect to WiFi network Serial.println(); Serial.println(); Serial.print(“Connecting to “); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status()!= WL_CONNECTED) { delay(500); Serial.print(“.”); } Serial.println(“”); Serial.println(“WiFi connected”); server.begin(); Serial.println(“Server started”); Serial.print(“Use this URL to connect: “); Serial.print(“http://”); Serial.print(WiFi.localIP()); Serial.println(“/”); } void loop() { } Setelah itu, lakukan proses verifikasi atau kompilasi dan upload programnya jika sudah tidak ada kesalahan. Gambar 4.27. Tombol verifikasi program 44 Pemrograman Robot.indd 44 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:13 Tekan tombol proses verifikasi (Verify), tunggu proses verifikasi atau kompilasi program selesai dan sukses. Gambar 4.28. Proses verifikasi (kompilasi) Jika proses verifikasi atau kompilasi sudah selesai dan sukses (tidak ada kesalahan), maka terdapat tulisan Done compiling. Gambar 4.29. Proses verifikasi atau kompilasi sukses Selanjutnya untuk menanam (embed) program kedalam mikrokontroller NodeMCU V3, silahkan tekan tombol Upload. Bab 4. Pemrograman Mikrokontroller Pemrograman Robot.indd 45 45 28/01/20 11:58:13 Gambar 4.30. Tombol upload program Silahkan tekan tombol Upload, tunggu sampai proses upload program selesai. Gambar 4.31. Proses upload program Jika proses upload program sudah selesai dan sukses (tidak ada kesalahan), maka terdapat tulisan Done uploading. 46 Pemrograman Robot.indd 46 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:13 Gambar 4.32. Proses upload program sukses Untuk melihat hasil program, silahkan arahkan ke menu Tools – Serial Monitor. Gambar 4.33. Tools - serial monitor Maka akan tampil, hasilnya di serial monitor, seperti pada Gambar 4.34. Jika tidak muncul, silahkan cek posisi baud rate 11520. Jika masih tidak muncul juga, silahkan tekan tombol RST NodeMCU V3. Bab 4. Pemrograman Mikrokontroller Pemrograman Robot.indd 47 47 28/01/20 11:58:15 Gambar 4.34. Koneksi ke Wifi sukses 48 Pemrograman Robot.indd 48 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:15 BAB 5 Kamera Kinect Xbox 360 5.1. Tentang Kamera Kinect Xbox 360 Kinect adalah perangkat yang diperkenalkan pada November 2010 sebagai aksesori Xbox 360. Perangkat ini dikembangkan oleh perusahaan PrimeSense bekerja sama dengan Microsoft (Cruz, Lucio and Velho, 2012). Kinect Xbox 360 adalah Controller-Free Gaming dan Gaming Experience yang ditetapkan sebagai kontrol untuk Video game platform Xbox 360. Data yang diperoleh memiliki perbedaan dan sifat komplementer, menggabungkan geometri dengan visual atribut. Dengan kemampuan ini, Kinect secara fleksibel bisa digunakan dalam aplikasi di berbagai bidang seperti: komputer grafik, pemrosesan gambar, visi komputer, interaksi manusia-mesin, industri game, robotika, pemain teater, dan banyak penelitian lainnya. Ada tiga inovasi perangkat keras yang bekerja bersama-sama di dalam sensor Kinect yaitu: 1. Color VGA video camera (Kamera video VGA berwarna) Kamera video ini membantu dalam pengenalan wajah dan deteksi fitur lainnya dengan mendeteksi tiga komponen warna yaitu Red, Green, dan Blue (RGB). Microsoft menamakannya Kamera RGB dengan mengacu pada tiga komponen warna tersebut. Pemrograman Robot.indd 49 28/01/20 11:58:15 2. Depth sensor (sensor kedalaman) Depth sensor atau sensor kedalaman merupakan sebuah proyektor infrared dan sebuah sensor monochrome CMOS yang bekerja secara bersama-sama untuk “melihat” ruangan atau area dalam bentuk tiga dimensi (3D) dengan tanpa memperdulikan kondisi cahaya. 3. Multi-array michrophones (Mikrofon multi-array) Merupakan sebuah susunan yang terdiri dari empat kamera yang dapat mengisolasikan suara dari pemain dengan suara-suara lain (noise) yang ada di ruangan. Hal ini memungkinkan pemain game untuk berada agak jauh dari mikrofon dan masih dapat menggunakan kontrol suara atau voice control. Lebih jauh tentang spesifikasi Kinect diketahui bahwa baik video ataupun sensor kedalaman memiliki resolusi sebesar 640 x 480 pixel dan berjalan pada 30 Frame Per Second. Dari spesifikasi Kinect juga diketahui bahwa bisa berada pada jarak sekitar 1.8 meter antara objek dan kamera kinect. Gambaran kamera ini diperlihatkan pada Gambar 5.1. Infrared projector and sensor (Depth sensor) VGA camera (RGB camera) Microphone array Motorised tilt Gambar 5.1. Kamera Kinect Xbox 360 Penelitian tentang robot cerdas sebelumnya yang memanfaatkan Kinect sebagai sensor andalannya, antara lain robot berkaki empat StarlETH menggunakan sensor Kinect v2 untuk pemetaan medan kasar dan penggerak (Fankhauser et al., 2015). 50 Pemrograman Robot.indd 50 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:15 Gambar 5.2. Robot Kinect StarlETH (Fankhauser et al., 2015) Penelitian lain tentang robot cerdas yang memanfaatkan Kinect sebagai sensor utamanya, yaitu penelitian navigasi Autonomous Mobile Robot (Zainuddin et al., 2015). Penelitian ini menyajikan navigasi otonom dari robot seluler dengan menggunakan sensor Kinect. Dengan menggunakan Microsoft Kinect Xbox 360 sebagai sensor utama, robot dapat menavigasi dan menghindari rintangan dengan aman. Dengan menggunakan data kedalaman, awan titik 3D, proses penyaringan dan pengelompokan, sensor Kinect dapat membedakan hambatan dan jalur untuk menavigasi dengan aman. Send back Robot coordinate Send command Send feedback Control Robot motion Gambar 5.3. Autonomous Mobile Robot (Zainuddin et al., 2015) Bab 5. Kamera Kinect Xbox 360 Pemrograman Robot.indd 51 51 28/01/20 11:58:16 5.2. Instalasi Kamera Kinect Xbox 360 Instalasi kamera Kinect Xbox 360 membutuhkan software development kit (SDK). SDK yang dibutuhkan (yang perlu diinstal), agar kamera Kinect Xbox 360 dapat digunakan di komputer atau laptop dengan sistem operasi Windows 10, yaitu: Kinect for Windows SDK v1.8. Cara instalasinya, dijelaskan dalam uraian berikut ini. Cara instal Kinect for Windows SDK v1.8 Untuk mendapatkan SDK ini, silahkan unduh di alamat: https://www.microsoft.com/ en-us/download/details.aspx?id= 40278. Setelah SDK telah berhasil diunduh, silahkan klik kanan dan instal sebagai Administrator. Lihat Gambar 5.4. Jika muncul pertanyaan Do you want to allow this app to make changes to your device? Silahkan jawab (tekan) Yes. Selanjutnya akan muncul seperti pada Gambar 5.5. Persetujuan perjanjian lisensi SDK Kinect dan silahkan klik Install. Tunggu sampai proses instalasi selesai. Jika proses instalasi selesai, silahkan tekan tombol Close. Lihat Gambar 5.7 Gambar 5.4. Instal SDK Kinect sebagai Administrator 52 Pemrograman Robot.indd 52 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:16 Gambar 5.5. Lisensi SDK Kinect Gambar 5.6. Proses instalasi SDK Kinect Bab 5. Kamera Kinect Xbox 360 Pemrograman Robot.indd 53 53 28/01/20 11:58:16 Gambar 5.7. Proses instalasi SDK Kinect selesai Setelah instal SDK, selanjutnya kamera Kinect Xbox 360 dalam posisi terhubung ke komputer atau laptop, dan kabel power terhubung ke listrik, silahkan jalankan Device Manager. Periksalah apakah hardware Kinect telah berhasil dikenali. Jika proses instalasi sukses, seharusnya akan muncul seperti terlihat pada Gambar 5.8. Gambar 5.8. Kinect sudah muncul di Device Manager 54 Pemrograman Robot.indd 54 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:16 5.3. Pemrograman Kamera Kinect Xbox 360 Selanjutnya, kamera yang digunakan oleh Robot Cerdas BNU 4.0 adalah kamera Kinect. Oleh karena itu kamera webcam komputer atau laptop harus di-disable. Caranya, masuk ke Device manager, cari kamera default-nya, kemudian silahkan di-disable. Lihat Gambar 5.9. Gambar 5.9. Kamera webcam komputer di-disable Dengan demikian, untuk selanjutnya kamera Kinect Xbox 360 difungsikan seperti kamera webcam. 5.3.1 Pemrograman Python Melalui Lingkungan Anaconda Lihat kembali gambaran rancangan kerja sistem Robot Cerdas BNU 4.0 pada Gambar 2.4 di Bab 2. Dari gambaran tersebut dapat dilihat bahwa untuk keperluan pengenalan objek digunakan Bahasa Pemrograman Python. Termasuk bagaimana memfungsikan kamera Kinect Xbox 360 sebagai webcam menggunakan Python. Jika belum familier dengan pemrograman Python, berikut secara ringkas diuraikan bagaimana memprogram Python secara mudah melalui lingkungan Anaconda. Melalui Bab 5. Kamera Kinect Xbox 360 Pemrograman Robot.indd 55 55 28/01/20 11:58:16 Anaconda, Python dapat dijalankan dengan dua cara, yaitu berbasis web menggunakan Jupyter Notebook dan berbasis desktop menggunakan Spyder. Untuk mendapatkan software Anaconda, silahkan diunduh secara gratis di alamat https://www.anaconda. com/download, seperti terlihat pada Gambar 5.10. Gambar 5.10. Unduh Anaconda Selanjutnya, silahkan dilakukan instalasi Anaconda. Proses instalasi Anaconda di Windows 10, sesuai langkah-langkah berikut ini. 1. Setelah unduh Anaconda, silahkan dilakukan proses instalasi dengan run as administrator, seperti terlihat pada Gambar 5.11. Gambar 5.11. Instal Anaconda 56 Pemrograman Robot.indd 56 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:16 2. Silahkan klik Next. Gambar 5.12. Tekan Next 3. Kemudian baca lisensi dan klik I Agree. Gambar 5.13. Lisensi anaconda Bab 5. Kamera Kinect Xbox 360 Pemrograman Robot.indd 57 57 28/01/20 11:58:16 4. Pilih Intall for: All Users, lalu tekan Next. Gambar 5.14. Pilihan jenis instalasi 5. Silahkan pilih lokasi instalasi, lalu tekan Next. Gambar 5.15. Pilihan lokasi instalasi 58 Pemrograman Robot.indd 58 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:16 6. Selanjutnya pilihan integrasi anaconda dengan lingkungan windows, pilih Add Anaconda to the system PATH environment variable, lalu tekan Install. Gambar 5.16. Pilihan integrasi dengan windows 7. Setelah tekan Install, tinggal tunggu sampai proses instalasi selesai. Gambar 5.17. Proses instalasi Bab 5. Kamera Kinect Xbox 360 Pemrograman Robot.indd 59 59 28/01/20 11:58:16 8. Proses intalasi selesai, tekan Next. Gambar 5.18. Instalasi selesai 9. Selanjutnya, ada pilihan instal Microsoft Visual Studio Code (VSCode), dapat dilewati dengan menekan tombol Skip. Gambar 5.19. Pilihan instal VSCode 60 Pemrograman Robot.indd 60 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:16 10. Instalasi anacoda selesai, tinggal tekan Finish. Gambar 5.20. Instalasi anaconda selesai Python Menggunakan Jupyter Notebook Selanjutnya, untuk memulai pemrograman Python melalui lingkungan Anaconda, silahkan dijalankan Anaconda di windows. Jalankan Anaconda Navigator sebagai administrator, run as administrator. Gambar 5.21. Tampilan awal Anaconda Bab 5. Kamera Kinect Xbox 360 Pemrograman Robot.indd 61 61 28/01/20 11:58:16 Untuk memulai Python menggunakan Jupyter Notebook, silahkan tekan Jupyter Notebook. Gambar 5.22. Menjalankan Jupyter Notebook Setelah dijalankan, maka akan menuju ke default browser yang digunakan. Gambar 5.23. Tampilan Jupyter Notebook di browser Untuk mencoba menjalankan skrip Python, silahkan klik tombol New dan arahkan ke Python, seperti terlihat pada Gambar 5.24. 62 Pemrograman Robot.indd 62 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:16 Gambar 5.24. Menjalankan Python dari Jupyter Notebook Setelah siap, bisa langsung diketikkan skrip Python. Gambar 5.25. Python Jupyter Notebook siap digunakan Silahkan tuliskan skrip Python, print(‘Hello Indonesia’). Gambar 5.26. Contoh hasil keluaran skrip program Python Bab 5. Kamera Kinect Xbox 360 Pemrograman Robot.indd 63 63 28/01/20 11:58:17 Python Menggunakan Spyder Cara lain menjalankan Python melalui lingkungan Anaconda, dapat digunakan Spyder. Silahkan tekan Spyder. Gambar 5.27. Menjalankan Spyder melalui anaconda Tunggu sampai keluar tampilan Spyder, seperti terlihat pada Gambar 5.28. Gambar 5.28. Tampilan Spyder 64 Pemrograman Robot.indd 64 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:17 Untuk mencoba, silahkan tuliskan skrip Python, print(‘Hello Indonesia’). Gambar 5.29. Tampilan hasil menjalankan skrip Python 5.3.2 Pemrograman Kamera Kinect Xbox 360 dengan Python Pemrograman kamera Kinect Xbox 360 dengan Python untuk mendapatkan data visual objek dari Robot Cerdas BNU 4.0, setidaknya membutuhkan library-library berikut: • Pykinect • Numpy, dan • OpenCV. Pykinect adalah antarmuka sederhana untuk memungkinkan programmer mengembangkan aplikasi berbasis kamera Kinect yang diaktifkan menggunakan Python. NumPy singkatan dari “Numeric Python” atau “Numerical Python”, adalah library untuk mendukung operasi array multi-dimensi dan matriks, memiliki banyak koleksi fungsi matematika tingkat tinggi yang beroperasi pada array ini. OpenCV (Open Source Computer Vision Library) adalah software library open source untuk visi komputer dan pembelajaran mesin. OpenCV dibangun untuk menyediakan infrastruktur umum aplikasi berbasis visi komputer dan untuk mempercepat penggunaan persepsi mesin pada produk komersial. Untuk mendapatkan library pykinect, silahkan unduh dari alamat: https://github. com/ShrirangaKadam/pykinect-python3.6. Setelah diunduh, silahkan di-ekstrak. Diambil satu folder pykinect, untuk ditempatkan di library Anaconda. Gambar 5.30. Library pykinect Bab 5. Kamera Kinect Xbox 360 Pemrograman Robot.indd 65 65 28/01/20 11:58:17 Satu folder pykinect di-copy untuk ditempatkan (di-paste) di library Anaconda. Biasanya berada di folder C:\ProgramData\ Anaconda3\Lib\site-packages. Lihat Gambar 5.31. Gambar 5.31. Penempatan library pykinect di Anaconda Selanjutnya, untuk instal library numpy, silahkan jalankan Anaconda Prompt sebagai Administrator. Gambar 5.32. Menjalankan Anaconda Prompt sebagai Administrator Kemudian, silahkan ketikkan: >> conda install -c anaconda numpy 66 Pemrograman Robot.indd 66 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:17 Gambar 5.33. Instal library numpy Jika ada pertanyaan Proceed ([y]/n)? Silahkan jawab (tekan) y. Tunggu sampai proses instalasi selesai. Gambar 5.34. Pertanyaan instal library numpy Jika instalasi library numpy sukses, maka akan tampil seperti pada Gambar 5.36. Gambar 5.35. Proses instalasi library numpy Bab 5. Kamera Kinect Xbox 360 Pemrograman Robot.indd 67 67 28/01/20 11:58:17 Gambar 5.36. Instalasi library numpy sukses Selanjutnya, untuk instal library OpenCV, silahkan ketikkan di Anaconda Prompt: >> pip install opencv-python Gambar 5.37. Instal library OpenCV Silahkan tunggu, sampai proses instalasi library OpenCV selesai. Gambar 5.38. Proses instalasi library OpenCV 68 Pemrograman Robot.indd 68 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:17 Jika proses instalasi library OpenCV sukses, maka akan tampil seperti pada Gambar 5.39. Gambar 5.39. Instal library OpenCV sukses Setelah instalasi ketiga library: Pykinect, Numpy, dan OpenCV berhasil, selanjutnya tinggal dicoba buat program sederhana untuk mengambil data visual objek menggunakan kamera Kinect Xbox 360. Disini kamera Kinect Xbox 360 berfungsi seperti kamera webcam. Berikut ini contoh program sederhana untuk menguji kamera Kinect Xbox 360. Silahkan ketikkan kode program berikut: Program Pengujian kamera Kinect Xbox 360 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from pykinect import nui import numpy import cv2 def video_handler_function(frame): video = numpy.empty((480,640,4),numpy.uint8) frame.image.copy_bits(video.ctypes.data) cv2.imshow(‘KINECT Video Stream’, video) kinect = nui.Runtime() kinect.video_frame_ready += video_handler_function kinect.video_stream.open(nui.ImageStreamType.Video, 2,nui. ImageResolution.Resolution640x480,nui.ImageType.Color) cv2.namedWindow(‘KINECT Video Stream’, cv2.WINDOW_AUTOSIZE) while True: key = cv2.waitKey(1) if key == 27: break Bab 5. Kamera Kinect Xbox 360 Pemrograman Robot.indd 69 69 28/01/20 11:58:17 21 22 23 kinect.close() cv2.destroyAllWindows() Jika dijalankan dan sukses tidak ada kesalahan, maka kamera Kinect Xbox 360 akan berfungsi seperti webcam. Berikut ini contoh hasil tangkapan kamera ini. Gambar 5.40. Contoh hasil tangkapan kamera Kinect Xbox 360 70 Pemrograman Robot.indd 70 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:17 BAB 6 Machine Learning dan Deep Learning 6.1. Machine Learning Machine Learning merupakan bagian dari Kecerdasan Buatan atau Artificial Intelligence (AI). AI didefinisikan sebagai situasi di mana mesin dapat mensimulasikan pikiran manusia dalam pembelajaran dan analisis, yang dengan demikian dapat bekerja dalam pemecahan masalah (Rong et al., 2020). Dengan kata lain situasi dimana mesin seolah bisa menirukan bagaimana manusia berpikir, belajar, menganalisis dan mengambil keputusan untuk memecahkan masalah. AI juga didefinisikan sebagai studi tentang “agen cerdas” yaitu, agen atau perangkat apa pun yang dapat merasakan dan memahami lingkungannya sehingga dapat mengambil tindakan yang tepat agar bisa memaksimalkan peluangnya dalam mencapai tujuannya (Rong et al., 2020). AI mulai dikutip pada tahun 1940-an dalam studi tentang apakah mesin dapat membuat sebuah keputusan (de Sousa et al., 2019). Pada tahun 1970-an, pengembangan solusi AI terapan dimulai, dengan studi di berbagai bidang pengetahuan. Pada tahun 2010-an, studi dan aplikasi AI telah mencakup beberapa fungsi sektor publik, kesehatan masyarakat, transportasi, pendidikan, keamanan, komunikasi, dan bahkan angkatan bersenjata (de Sousa et al., 2019). Perkembangan lebih lanjut dari AI melahirkan Machine Learning. Perkembangan lebih lanjut dari Machine Learning melahirkan Deep Learning. Secara umum perkembangan Pemrograman Robot.indd 71 28/01/20 11:58:17 AI, Machine Learning dan Deep Learning dari tahun ke tahun diperlihatkan pada Gambar 6.1 (Oppermann, 2019). Dikaitkan dengan AI dan Machine Learning, Deep Learning merupakan bagian dari Machine Learning dan AI. Hubungan antara AI, Machine Learning dan Deep Learning diperlihatkan pada Gambar 6.2 (Oppermann, 2019). Machine Learning sendiri merupakan teknik yang memungkinkan komputer “belajar” dari data-data yang disediakan tanpa pemrograman yang menyeluruh dan eksplisit dari setiap masalah (Meng et al., 2020). Ini bertujuan memodelkan hubungan yang mendalam terhadap input data dan merekonstruksi skema pengetahuan. Hasil dari proses pembelajaran dapat digunakan untuk estimasi, prediksi, dan klasifikasi (Meng et al., 2020). Gambar 6.1. Perkembangan Artificial Intelligence, Machine Learning dan Deep Learning (Oppermann, 2019) Gambar 6.2. Deep Learning bagian dari Machine Learning, keduanya bagian dari Artificial Intelligence (Oppermann, 2019) 72 Pemrograman Robot.indd 72 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:17 6.2. Deep Learning dan Deep Network Deep Learning telah menjadi tantangan untuk didefinisikan oleh banyak orang dan para peneliti karena telah berubah bentuk secara perlahan selama dekade terakhir. Satu definisi yang berguna menetapkan bahwa Deep Learning berkaitan dengan “Jaringan Saraf dengan lebih dari dua lapisan.” Namun jika dari definisi ini, maka seolah-olah Deep Learning sudah ada sejak tahun 1980-an (lihat Gambar 6.1). Padahal Deep Learning dianggap baru muncul pada tahun 2006, setelah Geoffrey Hinton memperkenalkan salah satu varian Jaringan Saraf Tiruan yang disebut Deep Belief Nets (Hinton, Osindero and Teh, 2006). Ide untuk melatih model Jaringan Saraf ini adalah dengan melatih dua lapisan kemudian ditambahkan satu lapisan diatasnya, kemudian dilatih hanya lapisan teratas dan begitu seterusnya. Dengan strategi ini didapat pelatihan model Jaringan Saraf yang memiliki lapisan lebih banyak dari model-model sebelumnya. Tulisan Geoffrey Hinton ini merupakan awal populernya istilah Deep Learning untuk membedakan arsitektur Jaringan Saraf Tiruan dengan banyak lapisan. Setelah istilah Deep Learning populer, Deep Learning belum menjadi daya tarik yang besar bagi para peneliti karena Jaringan Saraf Tiruan dengan banyak lapisan memiliki kompleksitas algoritma yang besar, sehingga membutuhkan komputer dengan spesifikasi tinggi, dan tidak efisien secara komputasi saat itu. Hingga pada tahun 2009 Andrew Y. Ng dkk memperkenalkan penggunaan GPU untuk Deep Learning (Raina, Madhavan and Ng, 2009). Dengan penggunaan GPU Jaringan Saraf Tiruan dapat berjalan lebih cepat dibanding dengan menggunakan CPU. Dengan tersedianya hardware yang memadai perkembangan Deep Learning mulai pesat, dan menghasilkan produk-produk yang dapat kita nikmati saat ini seperti pengenalan wajah, self-driving car, pengenalan suara, dan lain lain. Perkembangan Jaringan Saraf sudah jauh melampaui arsitektur gaya jaringan sebelumnya (diiringi dengan lebih banyak kekuatan pemrosesan) sebelum menunjukkan hasil spektakuler yang terlihat dalam beberapa tahun terakhir. Berikut ini adalah beberapa aspek dalam evolusi Jaringan Saraf ini, yang menjadi ciri khas dari Deep Learning: • Lebih banyak neuron daripada jaringan sebelumnya. • Cara yang lebih kompleks untuk menghubungkan lapisan/neuron di Jaringan Saraf. • Ledakan dalam jumlah daya komputasi yang tersedia untuk pelatihan. • Ekstraksi fitur otomatis. Deep Learning mencoba memodelkan abstraksi data skala besar dengan menggunakan Deep Neural Networks (DNNs) multi lapisan, sehingga mereka dapat memahami gambar, suara, dan teks (Cao et al., 2018). Deep Learning umumnya memiliki dua sifat (Cao et al., 2018): Bab 6. Machine Learning dan Deep Learning Pemrograman Robot.indd 73 73 28/01/20 11:58:17 (1) terdiri dari beberapa lapisan unit pemrosesan nonlinear, dan (2) presentasi fitur pada setiap lapisan menggunakan proses pembelajaran yang diawasi atau tidak diawasi. Pembahasan tentang Deep Learning, tidak dapat dipisahkan dari Deep Network yang membahas tentang arsitektur jaringannya. Arsitektur utama Deep Network yang terkenal dan banyak digunakan di berbagai bidang penerapan, yaitu (Adam Gibson, 2017): a. Unsupervised Pretrained Networks (UPNs) b. Convolutional Neural Networks (CNNs) c. Recurrent Neural Networks, dan d. Recursive Neural Networks. Masing-masing secara ringkas diuraikan sebagai berikut. a. Unsupervised Pretrained Networks (UPNs) Dalam kelompok ini, setidaknya terdapat tiga arsitektur spesifik, yaitu (Adam Gibson, 2017): • Autoencoders • Deep Belief Networks (DBNs), dan • Generative Adversarial Networks (GANs). Autoencoders Autoencoder adalah varian dari Jaringan Saraf umpan-maju yang memiliki bias ekstra untuk menghitung kesalahan merekonstruksi input asli. Setelah pelatihan, autoencoder kemudian digunakan sebagai Jaringan Saraf umpan-maju normal untuk aktivasi. Ini adalah bentuk ekstraksi fitur yang tidak diawasi karena Jaringan Saraf hanya menggunakan input asli untuk pembelajaran bobot daripada backpropagation, yang memiliki label. Deep Network dapat menggunakan Restricted Boltzmann Machines (RBMs) atau autoencoder sebagai blok penyusun untuk jaringan yang lebih besar (namun jarang ada satu jaringan yang menggunakan keduanya). Deep Belief Networks (DBNs) DBN terdiri dari lapisan Restricted Boltzmann Machines (RBMs) untuk fase pra-terlatih dan kemudian jaringan umpan-maju untuk fase fine-tune. Gambar 6.3 menunjukkan arsitektur jaringan DBN (Adam Gibson, 2017). 74 Pemrograman Robot.indd 74 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:17 Gambar 6.3. Arsitektur jaringan DBN (Adam Gibson, 2017) Generative Adversarial Networks (GANs) GAN adalah contoh jaringan yang menggunakan pembelajaran tanpa pengawasan untuk melatih dua model secara paralel. Aspek kunci dari GAN (dan model generatif pada umumnya) adalah bagaimana mereka menggunakan jumlah parameter yang secara signifikan lebih kecil dari normal sehubungan dengan jumlah data yang dilatih dalam jaringan. Jaringan dipaksa untuk secara efisien mewakili data pelatihan, membuatnya lebih efektif dalam menghasilkan data yang mirip dengan data pelatihan. b. Convolutional Neural Networks (CNNs) Tujuan dari CNN adalah mempelajari fitur tingkat tinggi dalam data melalui konvolusi. CNN sangat cocok untuk pengenalan objek melalui gambar dan memegang kompetisi klasifikasi gambar teratas secara konsisten. CNN dapat mengidentifikasi wajah, individu, rambu jalan, platipus, dan banyak aspek lain dari data visual. Untuk analisis teks, CNN tumpang tindih dengan Optical Character Recognition (OCR), karena CNN juga mampu menganalisis kata-kata sebagai unit tekstual diskrit. CNN juga pandai menganalisis suara. Kemampuan CNN dalam pengenalan gambar adalah salah satu alasan utama mengapa dunia mengakui kehebatan Deep Learning. Seperti yang diilustrasikan pada Gambar 6.4, CNN sangat bagus dalam mendapatkan fitur-fitur dalam posisi tegak dan agak bagus dalam posisi invarian rotasi dari data gambar mentah (Adam Gibson, 2017). Bab 6. Machine Learning dan Deep Learning Pemrograman Robot.indd 75 75 28/01/20 11:58:17 Gambar 6.4. Contoh CNN dalam visi komputer (Adam Gibson, 2017) CNN mengubah data input dari lapisan input melalui semua lapisan yang terhubung ke satu set skor kelas yang diberikan oleh lapisan output. Ada banyak variasi arsitektur CNN, tetapi umumnya mereka didasarkan pada pola lapisan, seperti yang ditunjukkan pada Gambar 6.5 (Adam Gibson, 2017). Gambar 6.5. Arsitektur CNN (Adam Gibson, 2017) Gambar 6.5 menggambarkan tiga kelompok utama: • Lapisan input • Lapisan ekstraksi fitur, dan • Lapisan klasifikasi Lapisan input menerima input tiga dimensi umumnya dalam bentuk spasial dari ukuran gambar (lebar × tinggi) dan memiliki kedalaman yang mewakili saluran warna (umumnya tiga, untuk saluran warna Red Green Blue (RGB)). 76 Pemrograman Robot.indd 76 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:17 Lapisan ekstraksi fitur memiliki pola pengulangan urutan yang umum: • Lapisan konvolusi • Lapisan (fungsi aktivasi) Rectified Linear Unit (ReLU), dan • Lapisan pooling. Lapisan-lapisan ini menemukan sejumlah fitur dalam gambar dan secara progresif membangun fitur tingkat tinggi. Lapisan klasifikasi memiliki satu atau lebih lapisan yang terhubung sepenuhnya untuk mengambil fitur tingkat tinggi dan menghasilkan probabilitas atau skor kelas. Lapisan-lapisan ini sepenuhnya terhubung ke semua neuron di lapisan sebelumnya. Keluaran dari lapisan-lapisan ini biasanya menghasilkan keluaran dua dimensi dari dimensi [b × N], di mana b adalah jumlah contoh-contoh dalam mini-batch dan N adalah jumlah kelas dalam penyusunan skor. c. Recurrent Neural Networks Recurrent Neural Networks berada dalam keluarga Jaringan Saraf umpan-maju. Jaringan yang memungkinkan komputasi paralel dan berurutan. Jaringan ini serupa dengan otak manusia, yang memiliki jaringan umpan balik besar dari neuron yang terhubung. Otak adalah panutan yang luar biasa karena dapat memecahkan banyak masalah yang belum dapat diselesaikan oleh mesin saat ini. Jaringan ini mengambil setiap vektor dari urutan vektor input dan memodelkannya satu per satu. Ini memungkinkan jaringan untuk mempertahankan status, sementara ia memodelkan setiap vektor input melintasi jendela vektor input. Memodelkan dimensi waktu adalah ciri khas dari jaringan ini. d. Recursive Neural Networks Recursive Neural Networks, seperti halnya Recurrent Neural Networks, dapat menangani input variabel panjang. Bedanya Recurrent Neural Networks memiliki kemampuan untuk memodelkan struktur hierarki dalam dataset pelatihan. Lalu apa yang menarik dari jaringan ini? Secara umum, gambar memiliki pemandangan yang terdiri dari banyak objek. Adegan-adegan yang mendekonstruksi sering kali merupakan domain masalah yang menarik. Sifat rekursif dari dekonstruksi inilah yang menantang, karena bukan hanya permasalahan identifikasi objek dalam adegan saja, tetapi juga bagaimana agar objek-objek terkait dapat membentuk adegan. Arsitektur jaringan ini terdiri dari matriks berbobot bersama dan struktur pohon biner yang memungkinkan jaringan rekursif mempelajari berbagai urutan kata atau bagian gambar. Ini berguna sebagai parser kalimat dan adegan. Jaringan ini menggunakan variasi backpropagation yang disebut backpropagation through structure (BPTS). UmpanBab 6. Machine Learning dan Deep Learning Pemrograman Robot.indd 77 77 28/01/20 11:58:17 umpan maju terjadi dari bawah ke atas, dan backpropagation adalah dari atas ke bawah. Bisa dianggap, bahwa tujuan adalah seperti bagian atas pohon, sedangkan inputnya adalah bagian bawahnya. 6.3. Pemrograman Deep Learning 6.3.1. Framework Deep Learning Lihat kembali gambaran rancangan kerja sistem Robot Cerdas BNU 4.0 pada Gambar 2.4 di Bab 2. Dari gambaran tersebut dapat dilihat bahwa untuk keperluan pengenalan objek digunakan Bahasa Pemrograman Python. Dimana inti pengenalan objeknya menggunakan metode Deep Learning. Oleh karena itu, bagaimana mewujudkan pemrograman Deep Learning menggunakan Bahasa Pemrograman Python, inilah yang menjadi topik bahasan saat ini. Pemrograman Deep Learning menggunakan Bahasa Pemrograman Python, sesuai dengan arsitektur-arsitektur Deep Network yang telah dibahas sebelumnya, saat ini tersedia banyak pilihan framework, antara lain: a. TensorFlow b. PyTorch c. Caffe d. Sonnet e. Keras f. MXNet g. Gluon h. Swift i. Chainer j. DL4J k. ONNX l. Darknet m. Darkflow n. YOLO Masing-masing dijelaskan secara ringkas sebagai berikut. Sebagian besar diambil dari referensi (Kharkovyna, 2019). a. TensorFlow TensorFlow adalah framework yang dibuat dan dikembangkan oleh Google yang digunakan untuk merancang, membangun, dan melatih model Deep Learning. Framework ini bisa dibilang paling populer saat ini. Gmail, Uber, Airbnb, Nvidia, dan banyak merek terkenal lainnya menggunakannya. 78 Pemrograman Robot.indd 78 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:17 Gambar 6.6. Logo TensorFlow Python adalah bahasa klien yang paling nyaman untuk bekerja dengan TensorFlow. Namun, ada juga antarmuka eksperimental yang tersedia di JavaScript, C ++, Java dan Go, C # dan Julia. TensorFlow tidak hanya memperhitungkan klaster komputasi yang kuat tetapi juga kemampuan untuk menjalankan model pada platform seluler seperti iOS dan Android. TensorFlow membutuhkan banyak pengkodean. Itu tidak akan menghasilkan AI yang kuat dalam semalam, tetapi bisa jadi alat bantu penelitian Deep Learning agar sedikit kurang rumit. Perlu berpikir hati-hati tentang arsitektur Jaringan Saraf, penilaian dengan benar terhadap dimensi dan volume data input dan outputnya, agar dihasilkan karya AI yang hebat. TensorFlow beroperasi dengan grafik perhitungan statis. Yaitu, pertama-tama didefinisikan grafiknya, lalu dijalankan perhitungannya. Jika diperlukan, dibuat perubahan pada arsitekturnya, dan dilatih kembali modelnya. Pendekatan seperti itu dipilih demi efisiensi. Tentunya perhitungan perbaikan dalam proses pembelajaran tanpa harus kehilangan kecepatan belajarnya. Dalam hal ini, pesaing utama TensorFlow adalah PyTorch. TensorFlow berguna untuk membuat dan bereksperimen dengan arsitektur Deep Learning. Formulasinya nyaman untuk integrasi data seperti memasukkan grafik, tabel SQL, dan gambar secara bersamaan. Hal itu didukung oleh Google yang menjamin akan tetap ada untuk sementara waktu. Oleh karena itu masuk akal untuk menginvestasikan waktu dan sumber daya untuk mempelajarinya. b. PyTorch Alat perangkat lunak utama untuk Deep Learning setelah Tensorflow adalah PyTorch. Framework PyTorch dikembangkan untuk layanan Facebook tetapi sudah digunakan untuk menyelesaikan tugas-tugasnya sendiri oleh perusahaan seperti Twitter dan Salesforce. Gambar 6.7. Logo PyTorch Bab 6. Machine Learning dan Deep Learning Pemrograman Robot.indd 79 79 28/01/20 11:58:17 Tidak seperti TensorFlow, library PyTorch beroperasi dengan grafik yang diperbarui secara dinamis. Ini berarti dimungkinkan dibuat perubahan pada arsitektur ketika proses sedang berlangsung. Di PyTorch, bisa digunakan debugger standar, seperti pdb atau PyCharm. PyTorch memiliki proses pelatihan Jaringan Saraf yang sederhana dan jelas. Pada saat yang sama, PyTorch mendukung paralelisme data dan model pembelajaran terdistribusi, dan juga berisi banyak model pra-terlatih. PyTorch jauh lebih cocok untuk proyek kecil dan pembuatan prototipe. Namun ketika dibutuhkan solusi lintas platform, maka TensorFlow sepertinya pilihan yang lebih cocok. c. Caffe Caffe (Convolutional Architecture for Fast Feature Embedding) adalah framework Deep Learning yang mendukung banyak antarmuka seperti C, C ++, Python, MATLAB serta Antarmuka Baris Perintah. Gambar 6.8. Logo Caffe Caffe mendukung berbagai jenis arsitektur Deep Learning yang diarahkan pada segmentasi gambar dan klasifikasi gambar. Ini dikembangkan oleh Berkeley AI Research (BAIR) dan oleh kontributor komunitas. Namun, Caffe tidak mendukung lapisan jaringan granularitas yang baik seperti pada TensorFlow. Mengingat arsitekturnya, dukungan keseluruhan terhadap jaringan berulang dan pemodelan bahasanya cukup buruk, dan pembangunan tipe lapisan kompleks harus dilakukan dalam bahasa tingkat rendah. Caffe adalah jaringan Deep Learning yang populer untuk pengenalan gambar. Ini digunakan oleh para akademisi dan perusahaan pemula (startup) tetapi juga beberapa perusahaan besar seperti Yahoo. Caffe juga dapat melakukan komputasi pada Central Processing Unit (CPU) dan Graphics Processing Unit (GPU). d. Sonnet Sonnet adalah framework Deep Learning yang dibangun di atas TensorFlow. Ini dirancang untuk membuat Jaringan Saraf dengan arsitektur yang kompleks oleh perusahaan terkenal dunia DeepMind. Library Sonnet berorientasi objek tingkat tinggi yang menghasilkan abstraksi ketika mengembangkan Jaringan Saraf atau algoritma Machine Learning lainnya. 80 Pemrograman Robot.indd 80 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:18 Gambar 6.9. Logo Sonnet Ide Sonnet adalah untuk membangun objek Python primer yang sesuai dengan bagian tertentu dari Jaringan Saraf. Selanjutnya, objek-objek ini terhubung secara independen ke komputasi grafik TensorFlow. Pemisahan proses pembuatan objek dan menghubungkannya dengan grafik, dapat menyederhanakan desain arsitektur tingkat tinggi. Keuntungan utama dari Sonnet, adalah dapat digunakan untuk mereproduksi penelitian-penelitian seperti yang telah ditunjukkan oleh makalah-makalah DeepMind. Hal ini tentunya DeepMind akan lebih memilih menggunakan Sonnet sendiri, daripada menggunakan framework-framework Deep Learning lainnya. e. Keras Keras adalah framework Machine Learning yang mungkin bisa menjadi teman baru ketika bekerja dengan banyak data, terutama jika mengikuti state-of-the-art dari AI: Deep Learning. Keras dapat digunakan sebagai API tingkat tinggi di atas library tingkat bawah populer lainnya seperti Theano dan CNTK selain Tensorflow. Penciptaan model Deep Learning yang sangat besar di Keras direduksi menjadi fungsi garis tunggal. Tetapi strategi ini membuat Keras menjadi lingkungan yang kurang dapat dikonfigurasi dibandingkan dengan framework tingkat rendah. Gambar 6.10. Logo Keras Keras adalah framework Deep Learning yang terbaik bagi mereka yang baru memulai. Ini ideal untuk belajar dan membuat prototipe konsep-konsep sederhana, untuk memahami inti dari berbagai model dan proses pembelajaran mereka. Keras adalah API yang ditulis dengan indah. Sifat fungsional API membantu sepenuhnya dan sebagai jalan keluar menghasilkan aplikasi yang lebih eksotis. Keras tidak memblokir akses ke framework tingkat bawah. Keras menghasilkan kode yang jauh lebih mudah dibaca dan ringkas. Keras dengan model API serialisasi/deserialisasi, Bab 6. Machine Learning dan Deep Learning Pemrograman Robot.indd 81 81 28/01/20 11:58:18 panggilan balik, dan streaming data menggunakan generator Python, sangatlah matang. Namun, Keras tidak dapat dibandingkan dengan Tensorflow karena mereka berada pada level abstraksi yang berbeda. Tensorflow ada di Level Bawah. Di sinilah framework seperti MXNet, Theano, dan PyTorch. Ini adalah tingkat di mana operasi matematika seperti perkalian matriksmatriks umum, dan Jaringan Saraf primitif seperti operasi konvolusi diimplementasikan. Keras ada di level yang lebih tinggi. Pada level ini, level primitif bawah digunakan untuk mengimplementasikan abstraksi Jaringan Saraf seperti lapisan-lapisan dan model. Secara umum, pada level ini, API memiliki manfaat lainnya seperti penghematan model dan pelatihan model. f. MXNet MXNet adalah framework Deep Learning yang sangat skalabel yang dapat digunakan pada berbagai perangkat. Meskipun tampaknya tidak banyak digunakan dibandingkan dengan TensorFlow. Pertumbuhan MXNet kemungkinan banyak didorong oleh perkembangan proyek-proyek Apache. Gambar 6.11. Logo MXNet Framework ini awalnya mendukung sejumlah besar bahasa (C ++, Python, R, Julia, JavaScript, Scala, Go, dan bahkan Perl). Penekanan utamanya pada kenyataan bahwa framework ini paralel sangat efektif pada banyak GPU dan banyak mesin. Ini, khususnya, telah ditunjukkan oleh karyanya di Amazon Web Services. MXNet mendukung banyak GPU (dengan perhitungan yang dioptimalkan dan pengalihan konteks cepat). Kode bersih dan mudah dirawat (Python, R, Scala, dan API lainnya). Kemampuan pemecahan masalah yang cepat (penting, bagi pemula yang belajar Deep Learning). Meskipun tidak sepopuler TensorFlow, MXNet memiliki dokumentasi terperinci dan mudah digunakan. Dengan kemampuan untuk memilih antara gaya pemrograman imperatif dan simbolis, menjadikannya kandidat framework yang baik bagi para pemula dan programmer yang berpengalaman. g. Gluon Gluon adalah framework Deep Learning yang luar biasa yang dapat digunakan untuk membuat model sederhana maupun canggih. Kekhususan proyek Gluon adalah 82 Pemrograman Robot.indd 82 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:18 antarmuka yang fleksibel yang menyederhanakan prototipe, membangun dan melatih model Deep Learning tanpa mengorbankan kecepatan belajar. Gambar 6.12. Logo Gluon Gluon didasarkan pada MXNet dan menawarkan API sederhana yang menyederhanakan pembuatan model Deep Learning. Mirip dengan PyTorch, framework Gluon mendukung pekerjaan dengan grafik dinamis. Penggabungan Gluon dengan MXNet akan menghasilkan kinerja yang tinggi. Dari perspektif ini, Gluon terlihat seperti alternatif yang sangat menarik dari Keras untuk komputasi terdistribusi. Gluon dapat mendefinisikan Jaringan Saraf menggunakan kode sederhana, jelas, dan ringkas. Ini menyatukan algoritma pelatihan dan model Jaringan Saraf, sehingga memberikan fleksibilitas dalam proses pengembangan tanpa mengorbankan kinerja. Gluon memungkinkan untuk mendefinisikan model Jaringan Saraf yang dinamis, artinya mereka dapat dibangun dengan cepat, dengan struktur apa pun, dan menggunakan aliran kontrol asli Python. h. Swift Bagi sebagian programmer, ketika mendengar Swift, mungkin yang dipikirkan adalah pengembangan aplikasi berbasis iOS atau MacOS. Bagi yang tertarik dengan Deep Learning, maka seharusnya tidak asing dengan istilah Swift for Tensorflow (disingkat S4TF). Dengan integrasi langsung dengan bahasa pemrograman umum, S4TF memungkinkan menjadi algoritma yang lebih kuat untuk diekspresikan dalam penyelesaian masalah. Dengan menggunakan TensorFlow, API Swift memberi akses transparan ke semua operator TensorFlow tingkat rendah. Gambar 6.13. Logo Swift Bab 6. Machine Learning dan Deep Learning Pemrograman Robot.indd 83 83 28/01/20 11:58:18 i. Chainer Sampai munculnya DyNet di CMU, dan PyTorch di Facebook, Chainer adalah framework Jaringan Saraf terkemuka untuk grafik komputasi dinamis atau jaringan yang memungkinkan input dengan panjang berbeda-beda. Fitur yang populer untuk tugas-tugas Neuro-linguistic programming (NLP). Gambar 6.14. Logo Chainer Kode ini ditulis dalam Python murni di atas library Numpy dan CuPy. Chainer adalah framework pertama yang menggunakan model arsitektur dinamis (seperti pada PyTorch). Chainer beberapa kali memegang rekor mengalahkan framework yang lain (TensorFlow, MxNet dan CNTK) dalam hal efektivitas penskalaan ketika masalah pemodelan diselesaikan oleh Jaringan Saraf. Dengan tolok ukur kecepatan proses, Chainer lebih cepat daripada framework yang berorientasi Python lainnya. Terutama dengan kinerja pusat data berbasis GPU, Chainer memiliki kecepatan proses yang lebih baik daripada TensorFlow. TensorFlow sendiri dioptimalkan untuk arsitektur TPU. j. DL4J Bagi penggemar pemrograman Java, seharusnya atidak asing dengan DL4J (kependekan dari Deep Learning for Java). Pelatihan Jaringan Saraf dalam DL4J dilakukan secara paralel melalui iterasi menggunakan klaster. Proses ini didukung oleh arsitektur Hadoop dan Spark. Gambar 6.15. Logo DL4J 84 Pemrograman Robot.indd 84 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:18 k. ONNX Proyek ONNX lahir dari kolaborasi Microsoft dan Facebook dalam hal pencarian format terbuka untuk presentasi model Deep Learning. ONNX menyederhanakan proses transfer model antar algoritma yang bekerja dengan kecerdasan buatan. ONNX memungkinkan model untuk dilatih dalam satu framework dan ditransfer ke framework yang lain untuk menghasilkan kesimpulan. Model ONNX saat ini didukung oleh Caffe2, Microsoft Cognitive Toolkit, MXNet, PyTorch, konektor ke banyak framework dan library umum lainnya. Gambar 6.16. Logo ONNX l. Darknet Darknet adalah kerangka kerja Jaringan Saraf open source yang ditulis dalam bahasa pemrograman C dan CUDA. Cepat, mudah dipasang, dan mendukung komputasi CPU dan GPU. Gambar 6.17. Logo Darknet m. Darkflow Darkflow adalah library Deep Learning yang menerjemahkan library Darknet ke TensorFlow. Darkflow dapat digunakan dalam aplikasi lain yang mendukung bahasa pemrograman Python sebagai alternatif jika suatu perangkat tidak mendukung CUDA dan cuDNN. Melalui konfigurasi yang sederhana, adanya file cfg merupakan kode untuk model sedangkan weights merupakan bobot hasil pelatihan yang dapat digunakan untuk melakukan transfer learning. Bab 6. Machine Learning dan Deep Learning Pemrograman Robot.indd 85 85 28/01/20 11:58:18 n. YOLO You only look once (YOLO) adalah sistem deteksi objek real-time yang canggih. Pada Pascal Titan X dapat memproses gambar pada 30 FPS dan memiliki pemetaan sebesar 57,9% pada COCO test-dev. YOLOv3 menggunakan beberapa trik untuk meningkatkan pelatihan dan meningkatkan kinerja, termasuk: prediksi multi-skala, pengklasifikasi backbone yang lebih baik, dan banyak lagi. Gambar 6.18. Logo YOLO Jika mayoritas sistem deteksi menggunakan pengklasifikasian atau localizer untuk melakukan deteksi dengan menerapkan model ke gambar di beberapa lokasi dan skala dan memberi nilai pada gambar sebagai bahan untuk pendeteksian. YOLO menggunakan pendekatan yang berbeda, yakni menerapkan Jaringan Saraf tunggal pada keseluruhan gambar. Jaringan ini akan membagi gambar menjadi wilayah-wilayah kemudian memprediksi kotak pembatas dan probabilitas. Untuk setiap kotak wilayah pembatas ditimbang probabilitasnya untuk diklasifikasi sebagai objek atau bukan. YOLO memiliki arsitektur CNN. 6.3.2. Pemrograman Deep Neural Network (DNN) dengan OpenCV OpenCV menyediakan modul Deep Neural Network (DNN) untuk pemrograman Deep Learning. Sejak OpenCV 3.1 ada modul DNN di library-nya, yang mengimplementasikan forward pass (tahap maju) menggunakan Deep Network, dengan pra-terlatih menggunakan beberapa framework Deep Learning yang populer, seperti Caffe, dan lain-lain. Cara instalasi OpenCV sudah dijelaskan di Bab 5, saat dijelaskan pemrograman kamera Kinect Xbox 360 dengan Python. Dalam OpenCV 3.3 modul ini telah dipromosikan dari opencv_contrib ke repositori utama (https://github.com/opencv/opencv/tree/master/modules/dnn). Modul ini tidak memiliki dependensi tambahan, kecuali libprotobuf. Libprotobuf sekarang sudah dimasukkan ke dalam OpenCV. 86 Pemrograman Robot.indd 86 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:18 Framework yang didukung: • Caffe • TensorFlow • Torch • Darknet, dan • Model-model dalam format ONNX. Lapisan yang didukung: • AbsVal • AveragePooling • BatchNormalization • Concatenation • Convolution (termasuk dilated convolution) • Crop • Deconvolution, juga dikenal sebagai transposed convolution atau full convolution • DetectionOutput (SSD-specific layer) • Dropout • Eltwise (+, *, max) • Flatten • FullyConnected • LRN • LSTM • MaxPooling • MaxUnpooling • MVN • NormalizeBBox (SSD-specific layer) • Padding • Permute • Power • PReLU (termasuk ChannelPReLU with channel-specific slopes) • PriorBox (SSD-specific layer) • ReLU • RNN • Scale • Shift • Sigmoid Bab 6. Machine Learning dan Deep Learning Pemrograman Robot.indd 87 87 28/01/20 11:58:18 • • • • Slice Softmax Split, dan TanH. Beberapa fungsi dari modul dnn untuk keperluan pemrograman Deep Learning antara lain dijabarkan berikut ini. Untuk memuat gambar dari disk menggunakan fungsi-fungsi berikut: • cv2.dnn.blobFromImage • cv2.dnn.blobFromImages Untuk dapat langsung mengimpor model dari berbagai framework melalui metode “create”: • cv2.dnn.createCaffeImporter • cv2.dnn.createTensorFlowImporter • cv2.dnn.createTorchImporter Jika hanya ingin baca model serial dari disk secara langsung menggunakan metode “read”: • cv2.dnn.readNetFromCaffe • cv2.dnn.readNetFromTensorFlow • cv2.dnn.readNetFromTorch • cv2.dnn.readhTorchBlob Setelah diambil model dari disk, metode .forward digunakan untuk meneruskanpropagasi gambar hingga diperoleh klasifikasi aktual. 6.3.3. Pengenalan Objek Waktu Nyata dengan DNN Selanjutnya akan dicoba pemrograman Deep Learning untuk pengenalan objek secara waktu nyata menggunakan modul DNN dari OpenCV. Untuk keperluan ini, sementara di-enable terlebih dahulu webcam dari komputer atau laptop yang digunakan. Melalui Device Manager. Kemudian kamera Kinect Xbox 360 juga dilepas dulu untuk sementara waktu dari port USB. 88 Pemrograman Robot.indd 88 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:18 Gambar 6.19. Kamera webcam di-enable Berikut ini langkah demi langkah, pemrograman Deep Learning untuk pengenalan objek secara waktu nyata menggunakan modul DNN (dnn) dari OpenCV. 1. Buat program baru, simpan dengan nama deteksi_objek.py dan masukkan kode berikut: deteksi_objek.py 1 2 3 4 5 6 7 8 # import the necessary packages from imutils.video import VideoStream from imutils.video import FPS import numpy as np import argparse import imutils import time import cv2 Bab 6. Machine Learning dan Deep Learning Pemrograman Robot.indd 89 89 28/01/20 11:58:18 Dari kode di atas, dibutuhkan library imutils. Library yang menyediakan serangkaian fungsi kenyamanan untuk membuat fungsi pemrosesan gambar dasar seperti translasi, rotasi, mengubah ukuran, skeletonisasi, menyortir kontur, mendeteksi tepi, dan menampilkan gambar Matplotlib. Cara instal library imutils, seperti biasa ketikkan di Anacondra prompt dengan level Administrator: >> pip install imutils Selanjutnya, ketikkan lanjutan kode programnya. deteksi_objek.py 9 10 11 12 13 14 15 16 17 18 # construct the argument parse and parse the # arguments ap = argparse.ArgumentParser() ap.add_argument(“-p”, “--prototxt”, required=True, help=”path to Caffe ‘deploy’ prototxt file”) ap.add_argument(“-m”, “--model”, required=True, help=”path to Caffe pre-trained model”) ap.add_argument(“-c”, “--confidence”, type=float, default=0.2, help=”minimum probability to filter weak detections”) args = vars(ap.parse_args()) Keterangan: -- prototxt : path ke file prototxt Caffe. -- model : path ke model pra-terlatih. -- confidence : Batas probabilitas minimum untuk memfilter deteksi lemah. Standarnya adalah 20%. Selanjutnya, dilakukan inisialisasi daftar kelas dan set warna: deteksi_objek.py 19 20 21 22 23 90 Pemrograman Robot.indd 90 # initialize the list of class labels MobileNet SSD was # trained to detect, then generate a set of bounding # box colors for each class CLASSES = [“background”, “aeroplane”, “bicycle”, “bird”, “boat”, “bottle”, “bus”, “car”, “cat”, “chair”, “cow”, “diningtable”, “dog”, “horse”, “motorbike”, “person”, “pottedplant”, “sheep”, “sofa”, “train”, “tvmonitor”] COLORS = np.random.uniform(0, 255, size=(len(CLASSES), 3)) Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:18 Selanjutnya, dimuat model yang digunakan dan diatur aliran videonya. deteksi_objek.py 24 25 26 27 28 29 30 31 32 33 34 # load our serialized model from disk print(“[INFO] loading model...”) net = cv2.dnn.readNetFromCaffe(args[“prototxt”], args[“model”]) # initialize the video stream, allow the camera # sensor to warmup, and initialize the FPS counter print(“[INFO] starting video stream...”) vs = VideoStream(src=0).start() time.sleep(2.0) fps = FPS().start() Selanjutnya, bikin program lup untuk membaca frame-frame dari aliran video (webcam). deteksi_objek.py 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 # loop over the frames from the video stream while True: # grab the frame from the threaded video stream # and resize it to have a maximum width of 400 # pixels frame = vs.read() frame = imutils.resize(frame, width=400) # grab the frame dimensions and convert it to a # blob (h, w) = frame.shape[:2] blob = cv2.dnn.blobFromImage(cv2.resize(frame, (300, 300)), 0.007843, (300, 300), 127.5) # pass the blob through the network and obtain # the detections and predictions net.setInput(blob) detections = net.forward() Pada posisi ini, telah dideteksi objek dalam bingkai input. Sekarang saatnya untuk dilihat nilai-nilai keyakinan dan ditentukan apakah harus digambar kotak+label yang mengelilingi objek. Bab 6. Machine Learning dan Deep Learning Pemrograman Robot.indd 91 91 28/01/20 11:58:18 deteksi_objek.py 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 # loop over the detections for i in np.arange(0, detections.shape[2]): # extract the confidence (i.e., probability) # associated with the prediction confidence = detections[0, 0, i, 2] # filter out weak detections by ensuring the # `confidence` is greater than the minimum # confidence if confidence > args[“confidence”]: # extract the index of the class # label from the `detections`, then # compute the (x, y)-coordinates of # the bounding box for the object idx = int(detections[0, 0, i, 1]) box = detections[0, 0, i, 3:7] * np.array([w, h, w, h]) (startX, startY, endX, endY) = box.astype(“int”) 69 70 71 # draw the prediction on the frame label = “{}: {:.2f}%”.format(CLASSES[idx], confidence * 100) cv2.rectangle(frame, (startX, startY), (endX, endY), COLORS[idx], 2) y = startY - 15 if startY - 15 > 15 else startY + 15 cv2.putText(frame, label, (startX,y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, COLORS[idx], 2) 72 73 74 Selanjutnya, lup tangkapan frame melibatkan (1) tampilkan frame, (2) periksa penekanan tombol keluar, dan (3) perbarui frame perdetik. deteksi_objek.py 75 76 77 78 79 80 81 82 83 84 85 92 Pemrograman Robot.indd 92 # show the output frame cv2.imshow(“Frame”, frame) key = cv2.waitKey(1) & 0xFF # if the `q` key was pressed, break from the # loop if key == ord(“q”): break # update the FPS counter fps.update() Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:18 Akhirnya hentikan timer dan tampilkan informasi frame perdetik. deteksi_objek.py 86 87 88 89 90 91 92 93 94 # stop the timer and display FPS information fps.stop() print(“[INFO] elapsed time: {:.2f}”.format(fps.elapsed())) print(“[INFO] approx. FPS: {:.2f}”.format(fps.fps())) # do a bit of cleanup cv2.destroyAllWindows() vs.stop() 2. Langkah berikutnya, silahkan unduh file MobileNetSSD_ deploy.prototxt.txt, dan MobileNetSSD_deploy.caffemodel, kemudian taruh di folder yang sama dengan program deteksi_objek.py. Alamatnya: https://github.com/djmv/MobilNet_SSD_opencv Keterangan: Jika diinginkan menggunakan model hasil pelatihan dataset sendiri (own dataset), antara lain dapat dipelajari dari alamat: https://github.com/chuanqi305/MobileNet-SSD 3. Akhirnya, tinggal dijalankan program deteksi_objek.py. Kalo dijalankan melalui Jupyter Notebook, perintahnya sebagai berikut: >> run -i deteksi_objek.py --prototxt MobileNetSSD_deploy. prototxt.txt --model MobileNetSSD_deploy.caffemodel Contoh hasil deteksi objek setelah dijalankan, seperti terlihat pada Gambar 6.20. Bab 6. Machine Learning dan Deep Learning Pemrograman Robot.indd 93 93 28/01/20 11:58:19 Gambar 6.20. Contoh hasil deteksi objek 94 Pemrograman Robot.indd 94 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:19 BAB 7 Pemrograman Robot Cerdas 7.1. Kendali Robot via Web dan Mobile Perhatikan kembali gambaran rancangan kerja sistem Robot Cerdas BNU 4.0 pada Gambar 2.4 di Bab 2. Di Bab ini, akan dijelaskan inti pemrograman Arduino untuk menggerakkan robot. Pengendaliannya via web dan mobile. Serta pemrograman Python untuk pengenalan objek menggunakan kamera Kinect Xbox 360, dengan metode Deep Learning. Guna mempermudah penjelasan, Gambar 2.4 ditampilkan kembali dengan sedikit tampilan yang berbeda, seperti terlihat pada Gambar 7.1. Seperti yang sudah dijelaskan di Bab 2, badan Robot Cerdas BNU 4.0 ini berupa mobil RC yang telah dimodifikasi. Mobil RC ini memiliki dua motor, yaitu motor depan (M1) dan motor belakang (M2). Motor depan digunakan untuk belok kanan dan belok kiri, sedangkan motor belakang digunakan untuk gerak maju dan mundur. Untuk menjalankan kedua motor ini, digunakan driver motor L298N. Driver motor terhubung ke mikrokontroller NodeMCU V3 yang berbasis chip ESP8266. Dengan chip ini, NodeMCU V3 memiliki kemampuan koneksi ke cloud Internet of Things (IoT). Cloud IoT yang digunakan di buku ini juga sudah dijelaskan sebelumnya di Bab 3, yaitu cloud MQTT (https://www.cloudmqtt.com). Dengan demikian, program Arduino yang dibuat Pemrograman Robot.indd 95 28/01/20 11:58:19 akan digunakan untuk mengendalikan robot via web dan mobile melalui koneksi internet. Untuk pengendalian secara mobile, seperti yang telah dijelaskan sebelumnya di Bab 3, menggunakan Android Apps (IoT MQTT Panel). CloudMQtt Mobile IoT MQTT Panel internet NodeMCU and embedded arduino programming L298N Web-based control M1 front motor M2 M2 rear motor Kinect XBox 360 M1 RC car equipped with Kinect Xbox 360 Object recognition with Deep Learning using Python Gambar 7.1. Rancangan sistem Robot BNU 4.0 Program Arduino untuk pengendalian robot, disesuaikan dengan rangkaian elektronik robot, seperti yang telah dijelaskan di Bab 2. Dimana IN 1 dan IN 2 dari 96 Pemrograman Robot.indd 96 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:19 driver motor L298N, dihubungkan ke pin D3 dan D4 dari mikrokontroller NodeMCU V3. Hal ini digunakan untuk mengendalikan motor belakang (M2), untuk gerak maju dan mundur. Sedangkan IN 3 dan IN 4 dari driver motor L298N, dihubungkan ke pin D7 dan D8 dari mikrokontroller NodeMCU V3. Hal ini digunakan untuk mengendalikan motor depan (M1), untuk belok kanan dan belok kiri. Program Arduino ini, juga disesuaikan dengan pengendalian via IoT secara mobile, seperti yang telah dijelaskan di Bab 3. Penggunaan Server, Port, dan lain-lain disesuaikan dengan informasi dari server Cloud MQTT seperti yang telah dijelaskan di Bab 3. Lihat Gambar 3.13. Demikian juga mengenai panel-panel yang digunakan pada IoT MQTT Panel, yang terdiri dari panel MAJU, KIRI, KANAN, dan MUNDUR. Diisi dengan topik Maju, Kiri, Kanan, dan Mundur. Masing-masing dengan payload 1, 2, 3, dan 4. Seperti yang telah dijelaskan di Bab 3. Topik adalah nama tentang pesan, dimana klien dalam hal ini mikrokontroller NodeMCU V3 mempublikasikan, berlangganan, atau melakukan keduanya untuk suatu topik. Di Robot Cerdas BNU 4.0 ini, pengaturannya ada di program Arduino. Sehingga saat panel yang ada di ponsel melalui aplikasi IoT MQTT Panel, topik atau panel yang bersesuaian ditekan, maka klien yang sudah berlangganan topik tersebut dapat merespon. Dalam hal ini klien (Robot BNU 4.0 dengan mikrokontroller NodeMCU V3) akan bergerak maju, belok kiri, belok kanan atau mundur. Kemudian, untuk kebutuhan library, selain esp8266 seperti yang telah dijelaskan di Bab 4, perlu diinstal satu library lagi, yaitu PubSubClient. Lihat pada bagian menu Sketch - Include Library - Manage Libraries, cari PubSubClient. Lihat Gambar 7.2 dan Gambar 7.3. Silahkan tekan Install, tunggu sampai proses selesai. Gambar 7.2. Manage Libraries Bab 7. Pemrograman Robot Cerdas Pemrograman Robot.indd 97 97 28/01/20 11:58:19 Gambar 7.3. Instal library PubSubClient Setelah semua library yang dibutuhkan terinstal, silahkan buat program baru, dengan nama file sembarang. Misalkan BNU_Web_Mobile.ino. Kemudian tuliskan kode program berikut. Program Arduino lengkap untuk pengendalian Robot Cerdas BNU 4.0, via web dan mobile. BNU_Web_Mobile.ino 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 /************************************* * Program: ROBOT BNU 4.0 * ***********************************/ #include <ESP8266WiFi.h> #include <PubSubClient.h> String Topic; String Payload; const char* ssid = “wifi@yah”; const char* password = “password_wifi”; #define #define #define #define IN_1 IN_2 IN_3 IN_4 #define #define #define #define mqttServer “tailor.cloudmqtt.com” mqttPort 13718 mqttUser “iwfywzxr” mqttPassword “wpWz426nkZx6” 98 Pemrograman Robot.indd 98 D3//Maju D4//Mundur D7//Belok Kanan D8//Belok Kiri Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:19 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 WiFiServer server(80); WiFiClient espClient; PubSubClient client(espClient); void receivedCallback(char* topic, byte* payload, unsigned int length) { Serial.print(“Message received: “); Serial.println(topic); Serial.print(“payload: “); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); /* we got ‘1’ -> Maju */ if ((char)payload[0] == ‘1’) { digitalWrite(IN_1, HIGH); delay(100); digitalWrite(IN_1, LOW); } /* we got ‘2’ -> Kiri */ if ((char)payload[0] == ‘2’) { digitalWrite(IN_4, HIGH); delay(300); digitalWrite(IN_1, HIGH); delay(100); digitalWrite(IN_4, LOW); digitalWrite(IN_1, LOW); } /* we got ‘3’ -> Kanan */ if ((char)payload[0] == ‘3’) { digitalWrite(IN_3, HIGH); delay(300); digitalWrite(IN_1, HIGH); delay(100); digitalWrite(IN_3, LOW); digitalWrite(IN_1, LOW); } /* we got ‘4’ -> Mundur */ if ((char)payload[0] == ‘4’) { digitalWrite(IN_2, HIGH); delay(100); digitalWrite(IN_2, LOW); } } Bab 7. Pemrograman Robot Cerdas Pemrograman Robot.indd 99 99 28/01/20 11:58:19 72 73 void setup() { 74 Serial.begin(115200); 75 delay(10); 76 pinMode(IN_1, OUTPUT); 77 pinMode(IN_2, OUTPUT); 78 pinMode(IN_3, OUTPUT); 79 pinMode(IN_4, OUTPUT); 80 81 digitalWrite(IN_1, LOW); 82 digitalWrite(IN_2, LOW); 83 digitalWrite(IN_3, LOW); 84 digitalWrite(IN_4, LOW); 85 86 //Connect to WiFi network 87 Serial.println(); 88 Serial.println(); 89 Serial.print(“Connecting to “); 90 Serial.println(ssid); 91 WiFi.begin(ssid, password); 92 93 while (WiFi.status()!= WL_CONNECTED) { 94 delay(500); 95 Serial.print(“.”); 96 } 97 Serial.println(“”); 98 Serial.println(“WiFi connected”); 99 100 server.begin(); 101 Serial.println(“Server started”); 102 103 Serial.print(“Use this URL to connect: “); 104 Serial.print(“http://”); 105 Serial.print(WiFi.localIP()); 106 Serial.println(“/”); 107 108 //Connect to Server IoT (CloudMQTT) 109 110 client.setServer(mqttServer, mqttPort); 111 client.setCallback(receivedCallback); 112 113 while (!client.connected()) { 114 Serial.println(“Connecting to CLoudMQTT...”); 115 116 if (client.connect(“ESP32Client”, mqttUser, mqttPassword)) { 117 Serial.println(“connected”); 118 119 } else { 100 Pemrograman Robot.indd 100 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:19 120 Serial.print(“failed with state “); 121 Serial.print(client.state()); 122 delay(2000); 123 } 124 } 125 client.subscribe(“Maju”); 126 client.subscribe(“Kiri”); 127 client.subscribe(“Kanan”); 128 client.subscribe(“Mundur”); 129 } 130 131 void loop() { 132 133 client.loop(); 134 135 WiFiClient client = server.available(); 136 if (!client) { 137 return; 138 } 139 140 Serial.println(“new client”); 141 while(!client.available()){ 142 delay(1); 143 } 144 145 String request = client.readStringUntil(‘\r’); 146 Serial.println(request); 147 client.flush(); 148 149 if (request.indexOf(“/IN_1on”) > 0) { 150 digitalWrite(IN_1, HIGH); 151 delay(100); 152 digitalWrite(IN_1, LOW); 153 } 154 if (request.indexOf(“/IN_1off”) >0) { 155 digitalWrite(IN_1, LOW); 156 } 157 if (request.indexOf(“/IN_2on”) > 0) { 158 digitalWrite(IN_2, HIGH); 159 delay(100); 160 digitalWrite(IN_2, LOW); 161 } 162 if (request.indexOf(“/IN_2off”) >0) { 163 digitalWrite(IN_2, LOW); 164 } 165 if (request.indexOf(“/IN_3on”) > 0) { 166 digitalWrite(IN_3, HIGH); 167 delay(300); 168 digitalWrite(IN_1, HIGH); Bab 7. Pemrograman Robot Cerdas Pemrograman Robot.indd 101 101 28/01/20 11:58:19 169 delay(100); 170 digitalWrite(IN_3, LOW); 171 digitalWrite(IN_1, LOW); 172 } 173 if (request.indexOf(“/IN_3off”) >0) { 174 digitalWrite(IN_3, LOW); 175 } 176 if (request.indexOf(“/IN_4on”) > 0) { 177 digitalWrite(IN_4, HIGH); 178 delay(300); 179 digitalWrite(IN_1, HIGH); 180 delay(100); 181 digitalWrite(IN_4, LOW); 182 digitalWrite(IN_1, LOW); 183 } 184 if (request.indexOf(“/IN_4off”) >0) { 185 digitalWrite(IN_4, LOW); 186 } 187 188 //Return the response 189 client.println(“HTTP/1.1 200 OK”); 190 client.println(“Content-Type: text/html”); 191 client.println(“”); 192 client.println(“<!DOCTYPE HTML>”); 193 client.println(“<html>”); 194 client.println(“<head>”); 195 client.println(“<meta name=’apple-mobile-web-app-capable’ content=’yes’/>”); 196 client.println(“<meta name=’apple-mobile-web-app-status-bar-style’ content=’black-translucent’/>”); 197 client.println(“</head>”); 198 client.println(“<body bgcolor = \”#f7e6ec\”>”); 199 client.println(“<hr/><hr>”); 200 client.println(“<h4><center> Robot BNU 4.0 </center></h4>”); 201 client.println(“<hr/><hr>”); 202 client.println(“<br><br>”); 203 client.println(“<br><br>”); 204 client.println(“<center>”); 205 client.println(“ROBOT”); 206 client.println(“<a href=\”/IN_1on\”\”><button>Maju </button></a>”); 207 client.println(“<a href=\”/IN_2on\”\”><button>Mundur </button></ a><br/>”); 208 client.println(“</center>”); 209 client.println(“<br><br>”); 210 client.println(“<center>”); 211 client.println(“ROBOT”); 212 client.println(“<a href=\”/IN_3on\”\”><button>Belok Kanan </button></ a>”); 102 Pemrograman Robot.indd 102 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:19 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 client.println(“<a href=\”/IN_4on\”\”><button>Belok Kiri </button></ a><br/>”); client.println(“</center>”); client.println(“<br><br>”); client.println(“<center>”); client.println(“<table border=\”5\”>”); client.println(“<tr>”); //===================== if (digitalRead(IN_1)) { client.print(“<td>Maju = ON</td>”); } else { client.print(“<td>Maju = OFF</td>”); } client.println(“<br/>”); //====================== if (digitalRead(IN_2)) { client.print(“<td>Mundur = ON</td>”); } else { client.print(“<td>Mundur = OFF</td>”); } client.println(“</tr>”); //======================= if (digitalRead(IN_3)) { client.print(“<td>Belok Kanan = ON</td>”); } else { client.print(“<td>Belok Kanan = OFF</td>”); } client.println(“<br/>”); //======================= if (digitalRead(IN_4)) { client.print(“<td>Belok Kiri = ON</td>”); } else { client.print(“<td>Belok Kiri = OFF</td>”); } client.println(“</tr>”); //======================= Bab 7. Pemrograman Robot Cerdas Pemrograman Robot.indd 103 103 28/01/20 11:58:19 261 client.println(“<tr>”); 262 client.println(“</table>”); 263 client.println(“</center>”); 264 client.println(“</html>”); 265 delay(1); 266 Serial.println(“Client disonnected”); 267 Serial.println(“”); 268 } Setelah itu, lakukan proses verifikasi atau kompilasi dan silahkan upload programnya jika sudah tidak ada kesalahan. Lihat Gambar 7.4 dan Gambar 7.5. Kemudian, untuk melihat hasil program, silahkan arahkan ke menu Tools – Serial Monitor. Maka akan tampil, hasilnya di serial monitor, seperti pada Gambar 7.6. Jika tidak muncul, silahkan cek posisi baud rate 11520. Jika masih tidak muncul juga, silahkan tekan tombol RST NodeMCU V3. Cara lain, tinggal cabut kabel USB dan tancap kembali. Gambar 7.4. Kompilasi sukses 104 Pemrograman Robot.indd 104 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:19 Gambar 7.5. Upload sukses Gambar 7.6. Tampilan di serial monitor Bab 7. Pemrograman Robot Cerdas Pemrograman Robot.indd 105 105 28/01/20 11:58:19 Selanjutnya, untuk pengendalian Robot BNU 4.0 melalui web, tinggal jalankan browser, dan ketikkan alamat IP seperti yang terlihat pada serial monitor. Dalam contoh ini diperoleh alamat IP http://192.168.43.163. Setelah dijalankan di browser maka akan tampil tombol-tombol pengendalian untuk menggerakkan Robot BNU 4.0 berjalan maju, mundur, belok kanan dan belok kiri. Lihat Gambar 7.7. Silahkan dicoba, dan dilihat respon bagaimana robot bergerak. Jangan lupa baterai driver motor L298N dinyalakan. Gambar 7.7. Pengendalian Robot BNU 4.0 via web Kemudian, untuk pengendalian Robot BNU 4.0 secara mobile, silahkan jalankan IoT MQTT Panel di ponsel. Dan seperti yang telah dijelaskan di Bab 3, harus terhubung ke Cloud MQTT. Jika sudah berhasil terhubung ke Cloud MQTT, maka akan tampil tombol-tombol pengendalian untuk menggerakkan Robot BNU 4.0 berjalan maju, belok kiri, belok kanan dan mundur, melalui ponsel. Lihat Gambar 7.8. Silahkan dicoba, 106 Pemrograman Robot.indd 106 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:20 dan dilihat respon bagaimana robot bergerak. Jangan lupa baterai driver motor L298N dinyalakan. Gambar 7.8. Koneksi ke Cloud MQTT dan panel pengendalian Robot BNU 4.0 via ponsel Untuk melihat respon hasil penekanan tombol di ponsel, juga bisa dipantau melalui serial monitor. Gambar 7.9, menunjukkan contoh tampilan di serial monitor jika keempat tombol sudah ditekan. Dan Robot BNU 4.0 bergerak sesuai yang diprogram. Gambar 7.9. Contoh pantauan penekanan tombol ponsel melalui serial monitor Bab 7. Pemrograman Robot Cerdas Pemrograman Robot.indd 107 107 28/01/20 11:58:20 7.2. Pengenalan Objek dengan Deep Learning Menggunakan Kamera Kinect Xbox 360 Akhirnya, sampailah pada tahap akhir, yaitu pemrograman pengenalan objek dari Robot Cerdas BNU 4.0. Pemrograman Deep Learning untuk pengenalan objek secara waktu nyata memanfaatkan modul DNN dari OpenCV. Kamera yang digunakan, yaitu Kinect Xbox 360. Untuk keperluan ini, kamera webcam dari komputer atau laptop di-disable kembali. Selanjutnya digunakan kamera Kinect Xbox 360, yang menjadi andalan dari Robot Cerdas BNU 4.0. Program pengenalan objek secara waktu nyata berbasis Deep Learning di Bab 7 ini, adalah gabungan dari program yang telah dibuat sebelumnya di Bab 6 dan Bab 5. Program yang ada di Bab 6, silahkan di-copy dengan nama lain, misalnya deteksi_objek_ kinect.py. Kemudian silahkan disesuaikan dengan beberapa penambahan pemrograman kamera Kinect Xbox 360 yang sudah dijelaskan di Bab 5. Sehingga secara lengkap, programnya menjadi berikut ini. deteksi_objek_kinect.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 # import the necessary packages from imutils.video import VideoStream from imutils.video import FPS import numpy as np import argparse import imutils import time from pykinect import nui import cv2 from pykinect.nui import JointId from numpy import * import datetime import os import os.path from os.path import join as pjoin from pykinect.nui import SkeletonTrackingState from PIL import Image import shutil import copy save_image = True current_directory = os.getcwd() kinect = nui.Runtime() def video_handler_function(frame): video = np.empty((480,640,4),np.uint8) frame.image.copy_bits(video.ctypes.data) 108 Pemrograman Robot.indd 108 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:20 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 cv2.imshow(‘KINECT Video Stream’, video) # Update Gambar hasil tracking image_name = ‘belgedes.jpg’ if save_image: cv2.imwrite(image_name, video) # construct the argument parser and parse the # arguments ap = argparse.ArgumentParser() ap.add_argument(“-p”, “--prototxt”, required = True, help = “path to Caffe ‘deploy’ prototxt file”) ap.add_argument(“-m”, “--model”, required = True, help = “path to Caffe pre-trained model”) ap.add_argument(“-c”, “--probability”, type = float, default = 0.2, help = “minimum probability to filter weak detections”) args = vars(ap.parse_args()) # initialize the list of class labels MobileNet SSD was # trained to detect # and generate a set of bounding box colors for each # class CLASSES = [“background”, “aeroplane”, “bicycle”, “bird”, “boat”, “bottle”, “bus”, “car”, “cat”, “chair”, “cow”, “diningtable”, “dog”, “horse”, “motorbike”, “person”, “pottedplant”, “sheep”, “sofa”, “train”, “tvmonitor”] COLORS = np.random.uniform(0, 255, size = (len(CLASSES), 3)) # load our serialized model from disk print(“[INFO] loading model...”) net = cv2.dnn.readNetFromCaffe(args[“prototxt”], args[“model”]) # initialize the video stream, allow the camera sensor # to warmup, and initialize the FPS counter print(“[INFO] starting video stream...”) #vs = VideoStream(src=0).start() kinect = nui.Runtime() kinect.video_frame_ready += video_handler_function kinect.video_stream.open(nui.ImageStreamType.Video, 2,nui. ImageResolution.Resolution640x480,nui.ImageType.Color) cv2.namedWindow(‘KINECT Video Stream’, cv2.WINDOW_AUTOSIZE) time.sleep(2.0) fps = FPS().start() # loop over the frames from the video stream while True: # resize the video stream window at a maximum # width of 500 pixels Bab 7. Pemrograman Robot Cerdas Pemrograman Robot.indd 109 109 28/01/20 11:58:20 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 shutil.copy(“belgedes.jpg”,”belgedes2.jpg”) frame_gambar = cv2.imread(“belgedes2.jpg”) frame_gambar = imutils.resize(frame_gambar, width=500) # grab the frame dimensions and convert it to a # blob Binary Large Object = BLOB (h, w) = frame_gambar.shape[:2] blob = cv2.dnn.blobFromImage(cv2.resize(frame_gambar, (500, 500)), 0.007843, (500, 500), 127.5) # pass the blob through the network and get the # detections net.setInput(blob) detections = net.forward() # loop over the detections for i in np.arange(0, detections.shape[2]): # extract the probability of the prediction probability = detections[0, 0, i, 2] # filter out weak detections by ensuring that # probability is greater than the min # probability if probability > args[“probability”]: # extract the index of the class label # from the ‘detections’, then compute # the (x, y)-coordinates of # the bounding box for the object idx = int(detections[0, 0, i, 1]) box = detections[0, 0, i, 3:7] * np.array([w, h, w, h]) (startX, startY, endX, endY) = box.astype(“int”) # draw the prediction on the frame label = “{}: {:.2f}%”.format(CLASSES[idx], probability * 100) cv2.rectangle(frame_gambar, (startX, startY), (endX, endY), COLORS[idx], 2) y = startY - 15 if startY - 15 > 15 else startY + 15 cv2.putText(frame_gambar, label, (startX, y), cv2.FONT_ HERSHEY_SIMPLEX, 0.5, COLORS[idx], 2) # show the output frame cv2.imshow(“KINECT Video Stream”, frame_gambar) key = cv2.waitKey(1) & 0xFF 110 Pemrograman Robot.indd 110 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:20 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 # if the ‘q’ key was pressed, break from the loop if key == ord(“q”): break # update the FPS counter fps.update() # stop the timer and display FPS information fps.stop() print(“[INFO] elapsed time: {:.2f}”.format(fps.elapsed())) print(“[INFO] approx. FPS: {:.2f}”.format(fps.fps())) # cleanup kinect.close() cv2.destroyAllWindows() #vs.stop() Keterangan: Dari skrip program deteksi_objek_kinect.py ini, untuk menangkap hasil gambar frame sementara (temporary), digunakan file gambar belgedes.jpg dan belgedes2.jpg. Bisa disiapkan dari file JPG sembarang dengan nama dua file tersebut. Gambar 7.10 sampai dengan Gambar 7.24 berikut ini adalah gambaran saat Robot Cerdas BNU 4.0 diuji-coba maupun saat digunakan untuk pengambilan data. Termasuk hasil pengenalan objek yang telah dilakukan. Robot ini bisa dibilang Robot Cerdas BNU 4.0 Generasi Pertama, terbuka peluang untuk terus dikembangkan menjadi Generasi Kedua dan seterusnya dengan peningkatan kemampuan fisik (mechatronics system) dan algoritma kecerdasannya. Gambar 7.10. Pemrograman Arduino Robot Cerdas BNU 4.0 melalui koneksi USB Bab 7. Pemrograman Robot Cerdas Pemrograman Robot.indd 111 111 28/01/20 11:58:20 Gambar 7.11. Posisi pengujian Robot Cerdas BNU 4.0 dan pengambilan data Gambar 7.12. Posisi pengujian Robot Cerdas BNU 4.0 dan pengambilan data (lanjutan) 112 Pemrograman Robot.indd 112 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:20 Gambar 7.13. Posisi pengujian Robot Cerdas BNU 4.0 dan pengambilan data (lanjutan) Gambar 7.14. Pengujian Robot Cerdas BNU 4.0 dan pengambilan data Bab 7. Pemrograman Robot Cerdas Pemrograman Robot.indd 113 113 28/01/20 11:58:20 Gambar 7.15. Pengujian Robot Cerdas BNU 4.0 dan pengambilan data (lanjutan) Gambar 7.16. Pengujian Robot Cerdas BNU 4.0 dan pengambilan data (lanjutan) 114 Pemrograman Robot.indd 114 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:20 Gambar 7.17. Contoh hasil deteksi objek Robot BNU 4.0 menggunakan Deep Learning Gambar 7.18. Contoh hasil deteksi objek Robot BNU 4.0 menggunakan Deep Learning (lanjutan) Bab 7. Pemrograman Robot Cerdas Pemrograman Robot.indd 115 115 28/01/20 11:58:20 Gambar 7.19. Contoh hasil deteksi objek Robot BNU 4.0 menggunakan Deep Learning (lanjutan) Gambar 7.20. Contoh hasil deteksi objek Robot BNU 4.0 menggunakan Deep Learning (lanjutan) 116 Pemrograman Robot.indd 116 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:20 Gambar 7.21. Contoh hasil deteksi objek Robot BNU 4.0 menggunakan Deep Learning (lanjutan) Gambar 7.22. Contoh hasil deteksi objek Robot BNU 4.0 menggunakan Deep Learning (lanjutan) Bab 7. Pemrograman Robot Cerdas Pemrograman Robot.indd 117 117 28/01/20 11:58:20 Gambar 7.23. Contoh hasil deteksi objek Robot BNU 4.0 menggunakan Deep Learning (lanjutan) Gambar 7.24. Contoh hasil deteksi objek Robot BNU 4.0 menggunakan Deep Learning (lanjutan) 118 Pemrograman Robot.indd 118 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:21 BAB 8 Penutup 8.1. Kesimpulan Telah diuraikan dalam buku ini bagaimana merancang dan membuat Robot Cerdas BNU 4.0 berupa robot pengawasan. Otak kendali robot ini berupa mikrokontroller NodeMCU V3. Board elektronik yang berbasis chip ESP8266. Dengan chip ini, NodeMCU V3 memiliki kemampuan koneksi ke cloud Internet of Things (IoT). Cloud IoT yang digunakan di buku ini yaitu cloudmqtt (https://www.cloudmqtt.com). Dengan program Arduino yang tertanam di mikrokontroller NodeMCU V3, selanjutnya dapat dijalankan program kendali robot berbasis web dan mobile. Program kendali robot secara mobile memanfaatkan Android Apps IoT MQTT Panel. Robot ini juga dilengkapi dengan kamera Kinect Xbox 360. Kamera ini terhubung ke komputer. Dengan program Deep Learning menggunakan bahasa pemrograman Python yang ada di komputer, selanjutnya sistem akan mengenali objek yang ada di depannya. 8.2. Ucapan Terimakasih Terimakasih kepada Kementerian Riset, Teknologi dan Pendidikan Tinggi Universitas Pembangunan Nasional “Veteran” Jawa Timur yang telah memberikan dana penelitian sesuai dengan Surat Perjanjian Penugasan dalam Rangka Pelaksanaan Program Penelitian Mandiri Skim Peningkatan Mutu Pembelajaran (PMP) UPN “Veteran” Jawa Timur Tahun Anggaran 2019, Nomor: SPP/1/UN63.8/LT/IV/2019. Pemrograman Robot.indd 119 28/01/20 11:58:21 120 Pemrograman Robot.indd 120 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:21 Daftar Pustaka Adam Gibson, J. P. (2017) ‘Deep Learning’, Deep Learning. O’Reilly Media, Inc. Available at: https://learning.oreilly.com/library/view/deep-learning/9781491924570/. anonymous (2019) ‘mCLOUD IoT Platform Services’, mthinx.com. Anzola, J., Jiménez, A. and Tarazona, G. (2019) ‘Self-sustainable power-collecting node in IoT’, Internet of Things, 7, p. 100082. doi: https://doi.org/10.1016/j. iot.2019.100082. Azeta, J. et al. (2019) ‘An Android Based Mobile Robot for Monitoring and Surveillance’, Procedia Manufacturing, 35, pp. 1129–1134. doi: https://doi.org/10.1016/j. promfg.2019.06.066. Chahal, R. K., Kumar, N. and Batra, S. (2020) ‘Trust management in social Internet of Things: A taxonomy, open issues, and challenges’, Computer Communications, 150, pp. 13–46. doi: https://doi.org/10.1016/j.comcom.2019.10.034. Cruz, L., Lucio, D. and Velho, L. (2012) ‘Kinect and RGBD Images: Challenges and Applications’, in. doi: 10.1109/SIBGRAPI-T.2012.13. Day, C.-P. (2018) ‘Robotics in Industry—Their Role in Intelligent Manufacturing’, Engineering, 4(4), pp. 440–445. doi: https://doi.org/10.1016/j.eng.2018.07.012. Fankhauser, P. et al. (2015) ‘Kinect v2 for Mobile Robot Navigation: Evaluation and Modeling’, in. doi: 10.1109/ICAR.2015.7251485. Gheisari, M., Wang, G. and Chen, S. (2020) ‘An Edge Computing-enhanced Internet of Things Framework for Privacy-preserving in Smart City’, Computers Pemrograman Robot.indd 121 28/01/20 11:58:21 & Electrical Engineering, 81, p. 106504. doi: https://doi.org/10.1016/j. compeleceng.2019.106504. Hinton, G. E., Osindero, S. and Teh, Y.-W. (2006) ‘A Fast Learning Algorithm for Deep Belief Nets’, Neural Comput. Cambridge, MA, USA: MIT Press, 18(7), pp. 1527–1554. doi: 10.1162/neco.2006.18.7.1527. Jóźwiak, L. (2017) ‘Advanced mobile and wearable systems’, Microprocessors and Microsystems, 50, pp. 202–221. doi: https://doi.org/10.1016/j.micpro.2017.03.008. Kashyap, M., Sharma, V. and Gupta, N. (2018) ‘Taking MQTT and NodeMcu to IOT: Communication in Internet of Things’, Procedia Computer Science, 132, pp. 1611– 1618. doi: https://doi.org/10.1016/j.procs.2018.05.126. Kharkovyna, O. (2019) ‘Top 10 Best Deep Learning Frameworks in 2019’. Towards Data Science. Available at: https://towardsdatascience.com/top-10-best-deep-learningframeworks-in-2019-5ccb90ea6de. Meng, T. et al. (2020) ‘A survey on machine learning for data fusion’, Information Fusion, 57, pp. 115–129. doi: https://doi.org/10.1016/j.inffus.2019.12.001. Nayyar, A. and Kumar, A. (2019) A Roadmap to Industry 4.0: Smart Production, Sharp Business and Sustainable Development. Springer International Publishing (Advances in Science, Technology & Innovation). Available at: https://books.google.co.id/ books?id=fA_gwQEACAAJ. Oppermann, A. (2019) ‘Artificial Intelligence vs. Machine Learning vs. Deep Learning’, in. DeepLearning Academy. Available at: https://www.deeplearning-academy. com/p/ai-wiki-machine-learning-vs-deep-learning. Raina, R., Madhavan, A. and Ng, A. Y. (2009) ‘Large-Scale Deep Unsupervised Learning Using Graphics Processors’, in Proceedings of the 26th Annual International Conference on Machine Learning. New York, NY, USA: Association for Computing Machinery (ICML ’09), pp. 873–880. doi: 10.1145/1553374.1553486. Ravidas, S. et al. (2019) ‘Access control in Internet-of-Things: A survey’, Journal of Network and Computer Applications, 144, pp. 79–101. doi: https://doi.org/10.1016/j. jnca.2019.06.017. Rong, G. et al. (2020) ‘Artificial Intelligence in Healthcare: Review and Prediction Case Studies’, Engineering. doi: https://doi.org/10.1016/j.eng.2019.08.015. de Sousa, W. G. et al. (2019) ‘How and where is artificial intelligence in the public sector going? A literature review and research agenda’, Government Information Quarterly, 36(4), p. 101392. doi: https://doi.org/10.1016/j.giq.2019.07.004. Zainuddin, N. et al. (2015) ‘Autonomous Navigation of Mobile Robot Using Kinect Sensor’, pp. 28–31. doi: 10.1109/ICCCE.2014.21. Zeadally, S. and Bello, O. (2019) ‘Harnessing the power of Internet of Things based connectivity to improve healthcare’, Internet of Things, p. 100074. doi: https://doi. org/10.1016/j.iot.2019.100074. 122 Pemrograman Robot.indd 122 Pemrograman Robot Cerdas dengan Arduino 28/01/20 11:58:21