KENDALI QUADCOPTER MENGIKUTI POINTER MENGGUNAKAN PENGENALAN OBJEK DENGAN METODE PENGOLAHAN CITRA DIGITAL (Quadcopter Control Following Pointer Using Object Tracking Based on Digital Image Processing) TUGAS AKHIR Diajukan sebagai syarat untuk memperoleh gelar sarjana teknik pada program studi teknik elektro Universitas Telkom
disusun oleh : WAHYU NURDIANSYAH 1105120100
FAKULTAS TEKNIK ELEKTRO UNIVERSITAS TELKOM BANDUNG 2016
UNIVERSITAS TELKOM
No. Dokumen
Jl. Telekomunikasi No. 1 Ters. Buah Batu Bandung 40257 FORMULIR LEMBAR PENGESAHAN TUGAS AKHIR
No. Revisi Berlaku efektif
ITT-AK-FEKPTT-FM-004/001 00 02 Mei 2011
LEMBAR PENGESAHAN TUGAS AKHIR KENDALI QUADCOPTER MENGIKUTI POINTER MENGGUNAKAN PENGENALAN OBJEK DENGAN METODE PENGOLAHAN CITRA DIGITAL (Quadcopter Control following pointer using Object Tracking Based on Digital Image Processing)
Telah disetujui dan disahkan sebagai Tugas Akhir II Program S1 Teknik Elektro Fakultas TeknikElektro Universitas Telkom Disusun oleh :
WAHYU NURDIANSYAH 1105120100
Bandung, Oktober 2016 Menyetujui,
Pembimbing I
Mohamad Ramdhani ST., MT. NIP. 02730260-1
Pembimbing II
Ig. Prasetya Dwi Wibawa ST., MT. NIP.14871306-1
UNIVERSITAS TELKOM Jl. Telekomunikasi No. 1 Ters. Buah Batu Bandung 40257 FORMULIR PERNYATAAN ORISINALITAS
No. Dokumen
ITT-AK-FEK-PTT-FM-004/001
No. Revisi
00
Berlaku efektif
02 Mei 2011
LEMBAR PERNYATAAN ORISINALITAS NAMA
: Wahyu Nurdiansyah
NIM
: 1105120100
ALAMAT
: Gang desa no 60 bojong soang, bandung
No Tlp/HP : 085861866239 E-mail
:
[email protected]
Menyatakan bahwa Tugas Akhir ini merupakan karya orisinal saya sendiri, dengan judul : contoh
KENDALI QUADCOPTER MENGIKUTI POINTER MENGGUNAKAN PENGENALAN OBJEK DENGAN METODE PENGOLAHAN CITRA DIGITAL Quadcopter control following pointer using object tracking based on digital image processing Atas pernyataan ini, saya siap menanggung resiko / sanksi yang dijatuhkan kepada saya apabila kemudian ditemukan adanya pelanggaran terhadap kejujuran akademik atau etika keilmuan dalam karya ini, atau ditemukan bukti yang menunjukkan ketidak aslian karya ini. Bandung, Oktober 2016
Wahyu Nurdiansyah 1105120100
III
ABSTRAK Dalam berbagai aspek identifikasi, salah satu teknologi yang populer digunakan yaitu deteksi objek menggunakan kamera. Dengan teknologi ini, suatu sistem dapat divariasikan untuk dikendalikan dengan harapan lebih mempermudah dan meningkatkan presisi pengendalian. Sesuai tujuan tersebut, tugas akhir ini dibuat untuk mengembangkan teknik pengendalian pada quadcopter. sistem ini dirancang menggunakan metode pengolahan citra digital dengan pengenalan warna dan posisi. Kemudian sistem mendeteksi gerakan quadcopter menggunakan kamera. Informasi posisi quadcopter kemudian digabungkan dengan model dari sistem kendali untuk memprediksi perintah selanjutnya. Dengan menggabungkan antara kendali quadcopter dan pengenalan objek menggunakan kamera, tugas akhir ini mampu membuat sistem baru dengan cara kendali quadcopter tanpa menggunakan controller. Sistem telah mampu mengikuti setpoint yang ada maupun membuat lintasan pada sistem dengan tingkat akurasi pengenalan objek 95% dan tingkat error terendah sistem kendali PID sebesar 0.852 pixel. Perbedaan posisi setpoint dengan quadcopter saat quadcopter mengira sudah pada posisi setpoint sebesar 10 pixel pada pembacaan kamera atau sebesar 4 centimeter pada ukuran sebenarnya. Kata kunci : kendali Quadcopter, pengenalan objek, pengolahan citra digital
IV
ABSTRACT
In various aspects of identification, one of the popular technology used is object detection using a camera. With this technology, a system can be varied to control the hopes further simplify and improve the precision of control. The appropriate goal, this thesis made to develop control techniques on quadcopter. This system was designed using the method of digital image processing with the introduction of the shape and position. Then the motion detection system quadcopter using the camera. Quadcopter position information is then combined with a model of the control system to predict the next command. By combining the control quadcopter and object recognition using the camera, this project is able to create a new system by means of control quadcopter without using a controller. The system has been able to follow the existing setpoint or make the track on a system with object recognition accuracy rate of 95% and the lowest error rate of the control system on the 0.852 pixel. Differences quadcopter current position with setpoint position when quadcopter thought it was in a position setpoint about 10 pixels on the camera readout or equal to 4 centimeters at actual size. Keywords : Quadcopter control, object tracking, digital image processing
V
KATA PENGANTAR Puji syukur kami panjatkan kehadirat Allah SWT, karena berkat Rahmat-Nya saya dapat menyelesaikan tugas akhir dengan judul “Kendali Quadcopter Mengikuti Pointer Menggunakan Pengenalan Objek Dengan Metode Pengolahan Citra Digital”. Tugas Akhir ini merupakan syarat untuk meraih gelar sarjana pada program studi teknik elektro di Universitas Telkom. Saya mengucapkan terima kasih khususnya kepada para dosen tugas akhir, yang telah memberikan pengarahan kepada kami dalam pengerjaan tugas akhir ini. Saya juga turut mengucapkan terima kasih kepada seluruh pihak yang telah membantu, sehingga proposal ini selesai dibuat. Saya menyadari bahwa tugas akhir ini masih belum sempurna, oleh karena itu kami mengharapkan kritik dan saran dari anda untuk memperbaiki isi buku tugas akhir
ini. Semoga Tugas Akhir ini dapat bermanfaat bagi siapapun yang
membacanya.
Bandung, Oktober 2016
Penulis
VI
LEMBAR PERSEMBAHAN Segala puji dan syukur penulis panjatkan Allah Swt., tugas akhir ini telah
dapat terselesaikan. Penulis juga tidak lupa memberikan ucapan terima kasih kepada pihak-pihak yang turut membantu sehingga laporan tugas akhir ini dapat terselesaikan. Penulis mengucapkan terima kasih yang sebesar-besarnya kepada : 1. Kedua orang tua penulis, Bapak dan ibu yang selalu memberi dukungan baik secara materi dan moral.. 2. Bapak Mohammad Ramdhani ST., MT., sebagai pembimbing I. Terima kasih atas segala saran, bimbingan, dukungan, serta ilmu yang telah diberikan kepada penulis baik itu sebelum maupun sesudah pengerjaan tugas akhir ini. 3. Bapak Ig. Prasetya Dwi Wibawa ST., MT., sebagai pembimbing II. Terima kasih atas segala saran, bimbingan, canda, tawa, dukungan, serta ilmu yang telah diberikan kepada penulis baik itu sebelum maupun sesudah pengerjaan tugas akhir ini. 4. Seluruh teman-teman Laboratorium Electronics and Intelligence Robotic Research Group (EIRRG). 5. Seluruh teman-teman jurusan Teknik Elektro 2012, terima kasih atas kehangatan, bantuan, dan motivasi yang selalu diberikan kepada penulis selama menjalankan studi di Teknik Elektro Universitas Telkom. 6. Dan untuk semua pihak yang telah membantu serta teman-teman lainnya
yang tidak bisa penulis sebutkan satu per satu.
Saran dan kritik pada buku laporan tugas akhir ini dapat dikirimkan melalui email penulis
[email protected]. Semoga Tugas Akhir ini dapat digunakan dan dikembangkan ke arah tujuan yang lebih baik dan bermanfaat bagi pembaca serta dunia pendidikan. Bandung, Oktober 2016
VII
DAFTAR ISI LEMBAR PENGESAHAN ..................................................................................II LEMBAR PERNYATAAN ORISINALITAS .................................................. III ABSTRAK ........................................................................................................... IV ABSTRACT ........................................................................................................... V KATA PENGANTAR ......................................................................................... VI LEMBAR PERSEMBAHAN ............................................................................VII DAFTAR ISI ..................................................................................................... VIII DAFTAR TABEL ................................................................................................. X DAFTAR GAMBAR ........................................................................................... XI DAFTAR RUMUS ........................................................................................... XIII DAFTAR ISTILAH ......................................................................................... XIV DAFTAR SINGKATAN .................................................................................... XV BAB I PENDAHULUAN ......................................................................................1 1.1.
Latar Belakang ......................................................................................... 1
1.2.
Tujuan ....................................................................................................... 1
1.3.
Rumusan Masalah .................................................................................... 1
1.4.
Batasan Masalah ....................................................................................... 2
1.5.
Metodologi Penelitian .............................................................................. 2
1.6.
Sistematika Penulisan ............................................................................... 2
BAB II LANDASAN TEORI ................................................................................4 2.1
Citra .......................................................................................................... 4
2.2
Pengolahan Citra Digital .......................................................................... 5
2.3
Quadcopter Crazyflie ............................................................................... 7
2.4
Kamera Kinect Xbox360 .......................................................................... 8
2.5
Pergerakan Dasar Quadcopter.................................................................. 9 VIII
BAB III PERANCANGAN DAN REALISASI .................................................12 3.1
Perancangan sistem ................................................................................ 12
3.2
Perancangan perangkat lunak ................................................................. 13
3.2.1.
Perancangan pengolahan citra digital....................................................... 13
3.2.2.
Perancangan pengenalan quadcopter ...................................................... 14
3.2.3.
Komunikasi sistem .................................................................................... 17
3.3
Perancangan Algoritma dan kendali ....................................................... 17
BAB IV PENGUJIAN DAN ANALISA .............................................................22 4.1.
Pengujian Kestabilan Quadcopter .......................................................... 22
4.1.1.
Pengujian pusat massa quadcopter .......................................................... 22
4.1.2.
Pengujian kestabilan gerakan quadcopter ................................................ 23
4.2
Pengujian pengolahan citra digital ......................................................... 27
4.2.1
Pengujian akurasi pengolahan citra digital ............................................... 28
4.2.2
Pengujian akurasi jarak depth pada kamera kinect .................................. 30
4.3
Pengujian kendali quadcopter disertai pengolahan citra digital............. 31
4.3.1
Pengujian kendali PID................................................................................ 32
4.3.2
Pengujian pembacaan posisi ..................................................................... 33
4.3.3
Pengujian kendali quadcopter ke titik setpoint. ....................................... 34
4.3.4
Pengujian latar belakang berbeda ............................................................ 36
4.3.5
Pengujian dengan intensitas cahaya berbeda .......................................... 37
4.3.6
Pengujian kinerja sistem ........................................................................... 38
BAB V PENUTUP ................................................................................................40 5.1.
Kesimpulan ............................................................................................. 40
5.2.
Saran ....................................................................................................... 40
Daftar Pustaka .....................................................................................................41 LAMPIRAN ..........................................................................................................42
IX
DAFTAR TABEL Tabel 4.1 Hasil Pengukuran dimensi dan berat quadcopter
18
Tabel 4.2 hasil pengujian perbedaan nilai roll
18
Tabel 4.3 hasil pengujian perbedaan nilai pitch
21
Tabel 4.4 syarat kondisi ruangan
22
Tabel 4.5 Hasil pengujian respon pengolahan citra digital dengan intensitas cahaya yang berbeda
23
Tabel 4.6 hasil pengujian pembacaan jarak depth pada kamera kinect
26
Tabel 4.7 nilai PID untuk masing-masing gerakan pitch, yaw, dan thrust
28
Tabel 4.8 nilai error PID masing-masing gerakan untuk melihat perbedaan gerakan quadcopter
29
Tabel 4.9 hasil pengujian posisi quadcopter terhadap kamera dan jarak sebenarnya
29
Tabel 4.10 hasil pengujian keluaran kendali saat diberi titik sepoint berbeda 30 Tabel 4.11 hasil pengujian akurasi pengolahan citra digital untuk 50 frame 32 Tabel 4.12 hasil pengujian akurasi pengolahan citra digital dengan intensitas cahaya yang berbeda untuk setiap 50 frame untuk AP dan 100 untuk AR
33
Tabel 4.13 hasil pengujian kinerja sistem
34
X
DAFTAR GAMBAR
Gambar 2.1 Sebuah Citra 8-bit Greyscale
4
Gambar 2.2 Spektrum cahaya yang dapat dilihat mata manusia
4
Gambar 2.3 Model warna RGB
5
Gambar 2.4 Contoh Pengolahan Citra
5
Gambar 2.5 Quadcopter Crazyflie
6
Gambar 2.6 Kamera Kinect xbox360
7
Gambar 2.7 Pergerakan Dasar Quadcopter
8
Gambar 3.1 deteksi bentuk tangan
9
Gambar 3.2 bagan sistem
10
Gambar 3.3 Desain Quadcopter
10
Gambar 3.4 ilustrasi kamera mendeteksi quadcopter
11
Gambar 3.5 ilustrasi keadaan ruangan sistem
11
Gambar 4.1 penempatan bola agar berada pada pusat massa
11
Gambar 4.3 Pengujian kestabilan dengan nilai roll 0 dan pitch 0
19
Gambar 4.4 Pengujian kestabilan dengan nilai roll -0.5 dan pitch 0
19
Gambar 4.5 Pengujian kestabilan dengan nilai roll -1 dan pitch 0
19
Gambar 4.6 Pengujian kestabilan dengan nilai roll -1.5 dan pitch 0
20
Gambar 4.7 Pengujian kestabilan dengan nilai roll -2 dan pitch 0.
20
Gambar 4.8 Pengujian kestabilan dengan nilai roll -2 dan pitch 0.5
21
Gambar 4.9 Pengujian kestabilan dengan nilai roll -2 dan pitch 1
21
Gambar 4.10 Pengujian kestabilan dengan nilai roll -2 dan pitch 1.5
22
XI
Gambar 4.11 Objek pengujian pengenalan warna dengan berbagai warna berbeda
24
Gambar 4.12 Hasil Pengolahan Citra Digital mulai dari proses konversi ke HSV, thresholding, Eroding, dan dilating pada tabel nomor 1
24
Gambar 4.13 Hasil Pengolahan Citra Digital mulai dari proses konversi ke HSV, thresholding, Eroding, dan dilating pada tabel nomor 2
24
Gambar 4.14 Hasil Pengolahan Citra Digital mulai dari proses konversi ke HSV, thresholding, Eroding, dan dilating pada tabel nomor 3
25
Gambar 4.15 pengujian posisi quadcopter
27
Gambar 4.16 hasil segmentasi citra pada latar belakang berwarna coklat krim pada gambar kiri dan warna hitam pada gambar kanan
29
XII
DAFTAR RUMUS Rumus 2.1 Torsi quadcopter dengan motor listrik
9
Rumus 2.2 Tegangan resistive motor
10
Rumus 2.3 Daya yang dibutuhkan quadcopter
10
Rumus 2.4 Kecepatan bilah motor
10
Rumus 2.5 Gaya naik quadcopter
10
Rumus 2.6 Gaya inersia quadcopter
10
Rumus 2.6 Percepatan linier quadcopter
10
Rumus 2.6 Percepatan Anguler quadcopter
11
Rumus 3.1 Persamaan linier dan angular quadcopter
11
Rumus 3.2 Persamaan frame quadcopter
11
Rumus 3.3 Matrix rotasi dari persamaan 3.1 dan 3.2
11
Rumus 3.4 Persamaan sumbu x
11
Rumus 3.5 Persamaan sumbu y
11
Rumus 3.6 Persamaan sumbu z
11
Rumus 3.7 Persamaan PID gerakan roll
11
Rumus 3.8 Persamaan PID gerakan pitch
11
Rumus 3.9 Persamaan PID gerakan Thrust
11
XIII
DAFTAR ISTILAH Frame
: citra yang diambil dari video.
Debug Tool
: Perangkat yang digunakan untuk melihat dan memperbaiki kesalahan pada program.
Translasi
: pemindahan semua titik di dalam bidang tertentu pada jarak dan arah yang sama.
Segmentasi
: membagi kelompok-kelompok sesuai sifat.
Quadcopter
: helikopter yang menggunakan 4 buah baling-baling.
Threshold
: metode sederhana segmentasi gambar.
Roll
: kondisi wahana terbang terhadap sumbu –x.
Pitch
: kondisi wahana terbang terhadap sumbu-y (mengangguk).
Yaw
: kondisi wahana terbang terhadap sumbu-z (menggeleng).
Pixel
: bagian terkecil dari suatu citra yang menyimpang informasi warna.
XIV
DAFTAR SINGKATAN ESC
: Electronic Speed Controller.
FPS
: Frame per Second
SPI
: Serial Port Interface.
PID
: Proportional Integral Derivative
PWM
: Pulse Width Modulation
HSV
: Hue, Saturation, Value
PID
: Proporsional Integral Derivatif
EMF
: Electronic Magnetic Field
AP
: akurasi Pengolahan citra
AR
: Akurasi Respon
XV
BAB I PENDAHULUAN
1.1.
Latar Belakang Semakin pesatnya perkembangan teknologi dan harga komponen
elektronika maupun sensor yang semakin terjangkau masyarakat umum membuat peningkatan IPTEK secara global meningkat. Sejak awal awal peradaban, manusia selalu membuat penemuan untuk kemudahan hidupnya. Pada era hari ini, kondisi kehidupan dibantu dengan adanya bantuan komputer yang kian canggih. Manusia mencoba pemahaman penciptaan tuhannya dan mencoba mengerti alam salah satunya dengan ilmu sains. Lalu mencoba meniru alam untuk diimplementasikan di kehidupannya. Dengan pemahaman pada bidang teknologi informasi citra digital maka dapat dirancang sistem analisa pengolahan citra digital untuk mencari kemiripan. Dengan demikian, mengetahui sifat-sifat suatu gambar memungkinkan kita untuk mengembangkannya lebih jauh lagi. Salah satunya yaitu untuk mengendalikan suatu sistem. Dalam hal ini, quadcopter dapat dikendalikan melalui komputer oleh pengguna tanpa harus menggunakan controller. Tentunya, hal ini diharapkan akan mepermudah pengendalian dan menambah tingkat presisi kendali sistem tersebut. 1.2.
Tujuan Merancang suatu kendali serta mengintegrasikan quadcopter dan
pengolahan citra digital quadcopter sehingga mampu dikendalikan dengan komputer agar mampu bergerak dari satu titik ke titik lainnya melalui pengolahan citra digital dengan kamera. 1.3.
Rumusan Masalah Dengan merujuk pada latar belakang masalah, maka dirumuskan beberapa
rumusan masalah yang dibahas pada tugas akhir ini : 1.
Bagaimana mengintegrasikan kamera, pusat pemrosesan, dan quadcopter agar menjadi sistem yang berjalan normal.
1
2.
Bagaimana perancangan kendali agar quadcopter dapat dikendalikan melalui komputer.
1.4.
Batasan Masalah Masalah-masalah yang dibatasi pada tugas akhir ini sebagai berikut : 1.
Menggunakan quadcopter Crazyflie.
2.
Menggunakan pengolahan citra digital dengan pendeteksian objek.
3.
Menggunakan kamera dengan maksimum 30 fps dan dimensi ruang dengan panjang 150 cm, lebar 180 cm, dan tinggi 150 cm
4.
Membuat quadcopter dan pengolahan citra digital saling terintegrasi agar dapat dikendalikan.
5.
Sistem pendeteksi quadcopter berada pada 3 dimensi dan dalam ruangan namun pergerakan kedalaman quadcopter tetap.
1.5.
Metodologi Penelitian Metodologi penilitian yang digunakan pada tugas akhir ini adalah : 1.
Studi Literatur Digunakan untuk mengetahui teori-teori dasar dan sebagai sarana pendukung dalam menganalisis permasalahan yang ada. Adapun sumbernya antara lain buku, referensi, internet, dan diskusi.
2.
Analisis Masalah Menganalisis semua permasalahan berdasar pengamatan dan sumber.
3.
Perancangan dan Implementasi alat Membuat
perancangan
terhadap
alat
berdasarkan
parameter-
parameter. 4.
Simulasi Alat Melakukan simulasi alat untuk melihat performansi dari alat.
1.6.
Sistematika Penulisan Penulisan laporan tugas akhir ini dibagi lima bab dengan sistematika
sebagai berikut. BAB I : PENDAHULUAN
2
Pada bab ini dijelaskan gambaran secara umum tentang tugas akhir yang dikerjakan dari latar belakang masalah, maksud dan tujuan penelitian, rumusan Masalah, batasan masalah, metode penelitian, dan sistematika penulisan. BAB II : DASAR TEORI Pada bab ini menjelaskan teori yang mendukung dan mendasari penulisan tugas akhir ini. BAB III : PERANCANGAN DAN IMPLEMENTASI Pada bab ini dijelaskan perancangan-perancangan yang diperlukan dan implementasinya, seperti blok diagram dan desain sistem. BAB IV : PENGUJIAN DAN ANALISA Pada bab ini dijelaskan hasil pengujian yang telah dilakukan pada masingmasing komponen penyusun sistem dan performansi sistem secara keseluruhan. BAB V : PENUTUP Bab ini berisi kesimpulan penulis tentang teknik kendali quadcopter dengan pengolahan citra menggunakan kamera.
3
BAB II LANDASAN TEORI 2.1
Citra Citra atau sering disebut gambar adalah sebuah susunan, atau sebuah matrix
dari suatu bentuk pixels tersusun dari kolom dan baris. Sebuah gambar dalam 8-bit greyscale memiliki tiap intensitas tiap elemen dengan jarak 0 sampai 255. Gambar greyscale biasa disebut gambar hitam dan putih sebenarnya memiliki warna abuabu atau warna diantara hitam dan putih.
Gambar 2.1 sebuah citra 8-bit greyscale. Warna yaitu sebuah bentuk yang tercipta dari respon mata manusia dengan radiasi elektromagnetik yang dikenal dengan cahaya. Secara lebih spesifik, warna adalah hasil persepsi cahaya di daerah tampak dari spektrum elektromagnetik yang memiliki panjang gelombang di wilayah 400nm sampai 700nm yang dapat dilihat mata manusia.
Gambar 2.2 Spektrum cahaya yang dapat dilihat mata manusia Model warna yang sering digunakan yaitu model RGB yang terdiri atas 3 buah warna: merah (Red), hijau (Green), dan biru (Blue), yang ditambahkan dengan berbagai cara untuk menghasilkan bermacam-macam warna. Tujuan utama dari model warna RGB adalah untuk penginderaan, representasi, dan menampilkan
4
gambar dalam sistem elektronik, seperti televisi dan komputer. Untuk membentuk warna baru, masing-masing warna primer dapat dicampurkan dengan intensitas sesuai keinginan.
Gambar 2.3 Salah satu pemodelan warna RGB. 2.2
Pengolahan Citra Digital Pengolahan citra digital yaitu usaha untuk mengubah suatu citra atau
gambar menjadi citra lain dengan menggunakan teknik tertentu. Kebanyakan pengolahan citra mengubah citra menjadi sinyal dua dimensi dan menggunakan teknik standar pengolahan citra.
Gambar 2.4 Contoh pengolahan citra
sebuah citra digital dapat direpresentasikan sebagai a[m,n] yang menjelaskan ruang diskrit dua dimensi berasal dari citra analog dalam ruang dua dimensi kontinu melalui proses sampling dan sering disebut digitalisasi. Berikut definisi 5
dasar tentang citra digital. Citra dua dimensi kontinu a(x,y) terbagi dalam N baris dan M kolom. Gabungan baris dan kolom disebut pixel. Nilai yang diberikan kepada koordinat ini dalam bilangan bulat [m, n] dengan {m = 0,1,2, ..., M-1} dan {n = 0,1,2, ..., N-1} adalah a [m, n]. Bahkan, dalam banyak kasus (x, y) - yang kita mungkin mempertimbangkan untuk menjadi fisik.
Gambar 2.5. Digitalisasi dari citra kontinu. Pixel terletak pada koordinat [m=10, n=3] mempunyai nilai integer brightness 110. Gambar 2.5. terbagi dalam N = 16 baris dan M = 16 kolom. Nilai yang terdapat pada masing-masing pixel yaitu nilai brightness dalam integer. Proses dari representasi amplitudo sinyal dua dimensi pada koordinat tertentu dalam nilai integer dengan L adalah level warna abu-abu sering disebut kuantisasi amplitudo atau disingkat kuantisasi.
a
b
c
Gambar 2.5. contoh pendeteksi citra yang baik true edge dan (a) yaitu bad detection (b) bad localization, dan (c) multiple response. Terdapat kriteria agar suatu citra yang telah melalui proses pengolahan dapat dikatakan baik. Pertama yaitu good detection yang artinya citra dapat
6
terdeteksi dengan baik dan tidak ada false positive (mendeteksi citra yang salah) maupun false negative (tidak mendeteksi citra). Kedua good localization yaitu citra yang tampil harus semirip mungkin dengan citra yang terdeteksi. Terakhir yaitu single response yaitu tidak ada citra tambahan pada citra yang terdeteksi. Ketiga hal ini dapat diilustrasikan pada gambar berikut. 2.3
Quadcopter Crazyflie Crazyflie Nano Quadcopter adalah miniatur quadcopter yang ukurannya
sebesar tangan. Bobotnya hanya sekitar 19 gram dan panjang 9 cm motor ke motor. Selain untuk permainan menyenangkan untuk diterbangkan, tujuan utama Crazyflie adalah untuk menjadi platform yang dapat dikembangkan dan dapat digunakan untuk bereksperimen, diaplikasikan lebih jauh lagi dan dieksplorasi lebih banyak untuk berbagai macam teknologi..
Gambar 2.6 Quadcopter Crazyflie Berikut spesifikasi Crazyflie.
Berukuran kecil dan ringan, sekitar 19g dan 90mm panjang motor ke motor.
Waktu terbang 7 menit dengan baterai 170mAh Li-Po.
Koneksi dengan micro-USB standar untuk pengisian baterai dengan waktu 20 menit untuk 170mAh Li-Po.
Radio on-board hemat energi @1mW dengan chip nRF24L01+. Jarak sampai 80m (tergantung lingkungan) saat menggunakan USB
7
dongle Crazyradio. Radio bootloader which enabled wireless update of the firmware
32 bit MCU: STM32F103CB @ 72 MHz (128kb flash, 20kb RAM)
3-axis MEMs gyros dengan 3-axis accelerometer: Invensense MPU-6050.
Header tambahan 2×10 pins 1.27mm (0.05”) termasuk catu daya, I2C/UART, SPI/ADC. Header juga termasuk ARM Cortex 10-pin JTAG (header tidak termasuk)
4-layer low noise PCB dengan regulator tegangan yang terpisah untuk catu daya digital dan analog.
Gambar 2.7 Bagan elektronik quadcopter crazyflie secara umum 2.4
Kamera Kinect Xbox360 Untuk membaca pergerakan quadcopter melalui bola merah diatasnya,
digunakan kamera ini dengan spesifikasi sebagai berikut.
Memiliki 3D depth sensor yang berguna untuk mengetahui jarak kinect ke objek.
Memiliki RGB kamera yang digunakan untuk menangkap citra.
Memiliki microphone di sisi-sisinya untuk menangkap suara jernih dan menghilangkan derau.
Menggunakan koneksi USB 2.0 kecepatan tinggi.
8
Gambar 2.8 kamera Kinect Xbox360
2.5
Pergerakan Dasar Quadcopter Quadcopter memiliki keterbatasan untuk pergerakan. Hal ini dikarenakan
empat buah motor yang digunakannya. Secara umum, pergerakan quadcopter hanya memiliki 3 fungsi, yaitu yaw, pitch, dan roll. Nantinya, quadcopter akan menyesuaikan gerakan-gerakan tersebut sesuai pergerakan tangan. Berikut dasar pergerakan Quadcopter.
Gambar 2.9 Pergerakan Dasar Quadcopter
Motor Brushless adalah motor yang sering digunakan oleh kebanyakan quadcopter. Untuk motor listrik yang dipakai, torsi yang dihasilkan sesuai dengan persamaan. τ = Kt(I − I0)
(2.1)
9
dimana τ adalah torsi motor, I untuk masukan arus, I0 adalah arus saat tidak ada beban di motor dan Kt adalah konstanta proporsional torsi. Tegangan yang masuk ke motor adalah penjumlahan tegangan balik EMF dan beberapa tegangan resistive loss. V = IRm + Kvω
(2.2)
Dimana V adalah tegangan yang melalui motor, Rm adalah resistansi motor, ω adalah kecepatan angular motor, dan Kv adalah konstanta proporsional. Kita dapat menggunakan penjelasan ini untuk menghitung daya yang dipakai oleh motor. 𝑝 = 𝐼𝑉 =
(𝜏+𝐾𝑡 𝐼0 )(𝐾𝑡 𝐼0 𝑅𝑚+𝜏𝑅𝑚+𝐾𝑡 𝐾𝑉 𝜔) 𝐾𝑡 2
(2.3)
Semakin kecil robot, maka semakin lincah robot akan bergerak. Ini dapat dibuktikan dengan persamaan umum seperti dibawah ini.
Gambar 2.10. R untuk jari-jari robot
Kecepatan bilah motor 𝜈~√𝑅
Gaya naik robot 𝐹 = 𝐶𝐿 𝐴𝑣 2 ~𝑅 3
(2.5)
Gaya Inersia 𝑚~𝑅 3 , 𝐼~𝑅 5
(2.4)
(2.6)
Percepatan
10
Linear
𝑎~1
Angular
𝑎~ 𝑅
1
(2.7) (2.8)
Saat anda mengurangi dimensi suatu benda, benda tersebut akan bergerak semakin lincah. Banyak parameter di atas yang akan berubah bila nilai R dikurangi. Sesuai persamaan di atas, semakin kecil R, semakin tinggi gaya inertia berkurang. R juga berpengaruh pada percepatan angular yang dinotasikan 𝑎. Ini merupakan persamaan invers proporsional terhadap R. semakin kecil R yang bisa di buat, semakin cepat robot dapat berbelok.
11
BAB III PERANCANGAN DAN REALISASI 3.1
Perancangan sistem Pada kendali quadcopter menggunakan pengenalan objek dengan metode
pengolahan citra digital ini meliputi perancangan algoritma dan perancangan perangkat lunak. Quadcopter hanya memiliki sebuah sensor gerak accelerometer yang digunakan untuk menyeimbangkan gerakan quadcopter. Tidak ada sensor ketinggian dan kompas pada quadcopter ini. Sehingga pergerakaan quadcopter dan letak posisinya hanya diperoleh dari pembacaan kamera. Untuk membaca pergerakan dalam sumbu X, Y, dan Z digunakan sebuah kamera kinect yang memiliki kamera Infrared didalamnya sehingga bisa diketahui kedalaman atau dengan kata lain bisa diketahui jarak sumbu Z dalam satuan centimeter. Diagram blok arsitektur sistem secara keseluruhan ditunjukkan pada gambar 3.1. x(v) (Y(v)) z(v) x(o) (Y(o)) z(o)
Kendali Posisi
V(x) (V(y)) V(z)
∆x (∆y) ∆z Kendali Kecepatan
Konversi Ke PWM
Sistem Pengolahan Citra Digital
α(x) (α(y)) α(z)
Quadcopter
Feedback
Gambar 3.1 Diagram Blok Sistem Pengolahan citra digital berguna untuk mencari posisi x,y, dan z. Sistem kendali berisi posisi quadcopter dan posisi yang diinginkan kemudian mengirim nilai koreksi untuk membuat quadcopter mendekat ke posisi yang di tuju. Alur tertutup kendali ini akan membuat quadcopter selalu berada pada posisi tujuan.
12
Kendali alur tertutup ini memiliki tiga regulator agar dapat mengoreksi nilai gerakan roll, pitch, dan yaw yang dikirim ke quadcopter untuk mendekati nilai posisi setpoint x, y, dan z pada citra yang ditampilkan di layar program. Nilai setpoint x dan y dapat dipilih dengan menekan tombol kiri pada mouse di layar citra RGB atau dapat pula menahan tombol kiri mouse dan quadcopter akan mengikuti. 3.2
Perancangan perangkat lunak
3.2.1. Perancangan pengolahan citra digital Sistem ini menggunakan citra normal RGB dan citra depth dari kamera kinect untuk memprediksi posisi quadcopter. Memprediksi posisi quadcopter dilakukan dengan cara menaruh bola merah di atas quadcopter dan menggunakan latar belakang berwarna cerah sebagai syarat kondisi ruang yang digunakan sistem. Pengolahan citra berupa video realtime yang nantinya diproses menggunakan program OpenCV. OpenCV adalah library perangkat lunak untuk pembelajaran computer vision. Citra digital kemudian diolah dan posisi quadcopter memberi kendali alur tertutup. Setelah quadcopter diberi identifikasi berupa bentuk bola diatasnya. Lalu bola akan diwarnai merah untuk memberi identitas agar terbaca oleh kamera. Warna merah dalam model warna HSV lebih mudah dikenali daripada warna lainnya. Hal ini dikarenakan citra RGB yang nanti ditangkap oleh kamera akan diubah menjadi citra dengan model warna HSV. Model warna HSV Nantinya, pergerakan quadcopter akan terbaca oleh kamera.
Gambar 3.2. model warna HSV
13
Gambar 3.3. hasil segmentasi warna pada pembacaan bola warna merah yang akan mewakili pergerakan quadcopter. 3.2.2. Perancangan pengenalan quadcopter Quadcopter harus mampu dikenali oleh sistem agar dapat dikendalikan melalui pembacaan kamera. Bola merah akan diletakkan diatas quadcopter. Quadcopter atau disebut juga quadrotor memiliki 6 DOF. Diantaranya translasi posisi (x, y, dan z) diukur dalam sistem koordinat O pada gambar 3.2. kemudian ketinggian quadcopter V yang didefinisikan oleh tiga sudut euler. θ
𝜓
𝜙
Gambar 3.4. sistem koordinat O kamera dan sistem koordinat quadcopter V. Posisi linear quadcopter didefinisikan dengan sumbu x, y, dan z. ketiga sumbu ini dinotasikan sebagai ξ. Gerakan ditempat atau disebut juga posisi angular dinotasikan dengan tiga sudut η. Sudut pitch θ menyatakan rotasi quadcopter pada sumbu z. Sudut roll 𝜙 menyatakan rotasi pada sumbu x, dan sudut yaw ψ menyatakan rotasi pada sumbu y. vektor q menyatakan posisi linear dan angular quadcopter.
14
𝑥 ξ = [𝑦] , 𝑧
𝜙 η = [θ ] , 𝜓
ξ 𝑞=[ ] η
(3.1)
Pada pusat massa frame quadcopter, kecepatan linear dinotasikan dengan Vb dan kecepatan angular dinotasikan dengan v. 𝑉𝑥 𝑝 Vb = [𝑉𝑦] , ξ = [𝑞 ] 𝑟 𝑉𝑧
(3.2)
Matrix rotasi dari frame quadcopter ke inersia frame quadcopter dari kedua persamaan diatas adalah CψCθ SψCθ R = [ −Sθ
CψSθSφ − SψCφ CψSθCφ + SψSφ SψSθSφ + CψCφ SψSθCφ − CψSφ ] CθSφ CθCφ
(3.3)
Adapun sistem koordinat yang nantinya akan terbaca oleh kamera disamakan dengan koordinat quadcopter. Hal ini digunakan untuk mempermudah perancangan kendali. Posisi nilai 0 pada koordinat x dan y akan diletakkan di pojok kiri atas. Lalu posisi nilai 640 pada koordinat x dan 480 pada koordinat y akan diletakkan di pojok kanan bawah. Nilai ini merupakan nilai minimum dan maximum dimensi pixel yang akan terbaca oleh kamera. Setelah mengetahui koordinat O dan koordinat V, lalu dicari selisih jarak masing-masing sumbu dengan persamaan, ∆x = x(o) – x(v)
(3.4)
∆y = y(o) – y(v)
(3.5)
∆z = z(o) – z(v)
(3.6)
Dengan, ∆x = selisih sumbu x antara koodinat O dengan koordinat V. ∆y = selisih sumbu y antara koodinat O dengan koordinat V.
15
∆z = selisih sumbu z antara koodinat O dengan koordinat V. lalu posisi (x, z) dan ketinggian (y) quadcopter yang terbaca oleh kamera, akan digunakan untuk menggerakan quadcopter. Pergerakan quadcopter roll, pitch, dan thrust akan dinotasikan dengan 𝜙, θ, dan 𝜓.
XB(o)
XA(o)
X
𝜙A(o)
YA(o) A
𝜙XB(o)
𝜓YA(o)
YB(o)
B Y
𝜓B(o)
Gambar 3.5 pergerakan quadcopter dari titik A ke titik B.
Gambar 3.6 sistem koordinat pada ruang yang digunakan. Untuk mengurangi derau, latar belakang dinding diberi warna coklat krim untuk membedakan dengan objek yang nanti akan dideteksi. Pencahayaan pun harus mencukupi agar kamera dapat menangkap warna bola merah yang juga mewakili pergerakan quadcopter.
16
Gambar 3.7. Kondisi ruang yang dibuat sedemikian rupa untuk menjaga kinerja quadcopter
3.2.3. Komunikasi sistem Komunikasi sistem ke quadcopter akan menggunakan frekuensi radio. Pada sistem pengendalian ini, frekuensi radio akan digunakan agar quadcopter dan perintah komputer melalui kamera dapat saling terintegrasi. Saat kamera membaca bola merah yang mewakili quadcopter, berikutnya kamera harus mampu membaca ruang yang menjadi posisi yang dituju. Kemudian data-data tersebut di sesuaikan dengan pergerakan quadcopter agar mengikuti pembacaan kamera secara tepat.
Sistem Kendali
Estimator
nirkabel
Sistem Pengolahan Citra Digital
PC
Crazyradio
Gambar 3.8 bagan sistem komunikasi Kamera akan membaca pergerakan quadcopter dan mengolahnya untuk kemudian dikirim ke komputer melalui koneksi USB. Kemudian quadcopter akan bergerak sesuai arah perintah dari komputer. 3.3
Perancangan Algoritma dan kendali Hal awal agar quadcopter dapat dikendalikan melalui kamera yaitu dapat
mendeteksi posisi quadcopter yang akan digunakan untuk mengoreksi kesalahan
17
posisi dari titik setpoint. Sistem ini menggunakan kamera kinect dengan kamera IR depth
untuk mendeteksi posisi kedalaman quadcopter atau dengan kata lain
pergerakan quadcopter dalam sumbu z. Untuk itu perlu karakteristik unik dari quadcopter agar kamera mampu membaca quadcopter. Desain quadcopter terlihat seperti gambar 3.3.
Gambar 3.9 desain quadcopter Bola akan diberi warna merah karena warna merah merupakan karakteristik paling berbeda dalam model warna HSV. Kamera akan mendeteksi pergerakan bola berwarna. Kamera akan membaca pergerakan quadcopter melalui bola tersebut. Quadcopter akan melakukan hover apabila tidak ada perintah selanjutnya.
Gambar 3.10. kamera mendeteksi quadcopter melalui bola merah diatasnya. Untuk sistem ini, pergerakan quadcopter terbaca dalam tiga dimensi. Kendali ini dikhususkan untuk indoor karena sistem ini memerlukan beberapa karakteristik khusus seperti terlihat di gambar 3.5.
18
Gambar 3.11. ilustrasi keadaan ruangan. Kemudian untuk mendapatkan hasil yang stabil, pergerakan quadcopter untuk mendekati titik setpoint menggunakan kendali PID sederhana dengan 3 regulator untuk gerakan roll, pitch, dan yaw. Berikut diagram alir dari sistem kendali quadcopter mengikuti pointer menggunakan pengenalan objek dengan metode pengolahan citra digital pada gambar 3.6.
19
Mulai
Inisialisasi Sistem
Membaca Posisi Pointer
Kamera Membaca Posisi Quadcopter
Komputer mengolah pembacaan citra
Komputer menjalankan sistem kendali
Δx > 0 Y
N
Δy > 0
N
Y
Quadcopter bergerak ke depan Quadcopter bergerak ke kiri
N
Δz > 0 Y
Quadcopter bergerak ke atas
Quadcopter bergerak ke depan Quadcopter bergerak ke kiri
Quadcopter bergerak ke depan
loop
Gambar 3.12. diagram alir sistem pergerakan quadcopter
20
Kemudian untuk meningkatkan akurasi dan kestabilan pergerakan quadcopter, digunakan kendali PID pada pembacaan posisi quadcopter. Berikut diagram sederhana kendali PID pada pembacaan posisi quadcopter. P(∆x, ∆y, ∆z)
I(∆x, ∆y, ∆z)
D(∆x, ∆y, ∆z)
Umpan balik
Gambar 3.12. Diagram blok kendali PID pada pembacaan posisi quadcopter Dengan persamaan PID untuk ketiga gerakan sebagai berikut. persamaan PID untuk gerakan roll, 𝑡
𝑢(𝜙) = 𝐾𝑝 𝑒(∆𝑥) + 𝐾𝑖 ∫0 𝑒(∆𝑥)𝑑𝑡 + 𝐾𝑑
𝑑𝑒(∆𝑥) 𝑑𝑡
(3.7)
persamaan PID untuk gerakan pitch, 𝑡
𝑢(θ) = 𝐾𝑝 𝑒(∆𝑧) + 𝐾𝑖 ∫0 𝑒(∆𝑧)𝑑𝑡 + 𝐾𝑑
𝑑𝑒(∆𝑧) 𝑑𝑡
(3.8)
Dan persamaan PID untuk gerakan thrust, 𝑡
𝑢(𝜓) = 𝐾𝑝 𝑒(∆𝑦) + 𝐾𝑖 ∫0 𝑒(∆𝑦)𝑑𝑡 + 𝐾𝑑 Dimana,
𝑑𝑒(∆𝑦) 𝑑𝑡
(3.9)
e(∆x) = nilai error posisi x dalam satuan pixel, e(∆y) = nilai error posisi y dalam satuan pixel, e(∆z) = nilai error posisi z dalam satuan pixel.
21
BAB IV PENGUJIAN DAN ANALISA
Pada bab ini akan dibahas mengenai pengujian dan analisa dari sistem yang telah dibuat. Pengujian meliputi pengujian software secara keseluruhan. Pengujian bertujuan untuk mengetahui kinerja sistem yang telah dibuat. Kemudian pengujian secara keseluruhan dilakukan untuk mengetahui kinerja dalam menjaga kestabilan. 4.1.
Pengujian Kestabilan Quadcopter Pengujian ini berguna untuk mengetahui kinerja quadcopter dengan semua
gerakannya. Gerakan Quadcopter yang akan diuji meliputi gerak roll, pitch, yaw, dan thrust. Pengujian ini menggunakan client yang merupakan perangkat lunak dan telah disediakan quadcopter. Lalu pengujian dilakukan dengan hanya memberi perintah thrust atau naik dan melihat perbedaan nilai sensor accelerometer. Hal ini dapat dipertimbangkan untuk mengetahui tingkat kestabilan quadcopter. Ketidakstabilan dapat dilihat apabila quadcopter diberi perintah naik atau thrust gerakan quadcopter akan drift dengan kata lain gerakan thrust tidak tegak lurus naik namun ada gerakan roll, pitch, atau yaw yang menyertainya. Agar gerakan thrust tegak lurus perlu pengaturan tepat pada pitch trim dan roll trim pada client quadcopter guna meminimalisir gerakan yang tidak diinginkan. 4.1.1. Pengujian pusat massa quadcopter 4.1.1.1.Tujuan Pengujian Mendapatkan pusat massa di tengah quadcopter akan meningkatkan kinerja sehingga semua motor akan mengeluarkan tenaga yang sama saat melakukan hover di satu titik. Menempatkan bola merah pun berpengaruh besar pada pusat massa quadcopter. Bola merah perlu ditempatkan semaksimal mungkin berada di pusat massa quadcopter. Getaran dari masing-masing motor pun ikut mengganggu kestabilan quadcopter ini. Gangguan-gangguan tersebut dapat dikurangi dengan mengatur nilai awal dari gerakan roll, pitch, dan yaw. 4.1.1.2. Peralatan Pengujian
Quadcopter Crazyflie
Penggaris
22
4.1.1.3. Cara Pengujian Langkah awal yaitu menempatkan bola merah pada quadcopter dengan semaksimal mungkin berada di pusat massa quadcopter. 4.1.1.4. Hasil Pengujian dan Analisa Tabel 4.1 Hasil Pengukuran dimensi dan berat quadcopter Jarak motor ke motor
9 cm
Jari jari bola
4 cm
Berat
Berat
bola
quadcopter
2.7 gram
19 gram
Jarak motor ke pusat bola
4.5 cm
Dari pengukuran diatas, terdapat penambahan beban 2.7 gram pada quadcopter. Hal ini berdampak pada meningkatnya gaya yang harus dilakukan agar quadcopter dapat terbang. Agar mendapat pusat massa yang tepat, penempatan bola harus berada 4.5 cm dari masing-masing motor.
Gambar 4.1. penempatan bola agar berada pada pusat massa. 4.1.2. Pengujian kestabilan gerakan quadcopter Kemudian agar gerakan naik dan melakukan hover tegak lurus, perlu pengaturan tepat pada nilai awal roll dan pitch. Berikut pengujian kestabilan quadcopter dengan mengubah nilai awal gerakan roll dan pitch.
23
Tabel 4.2 hasil pengujian perbedaan nilai roll Nilai roll
Nilai perubahan stabilizer Pitch roll dari posisi awal
Hasil
0
0
±4
Quadcopter bergerak ke kanan
-0.5
0
± 10
Quadcopter bergerak ke kanan
-1
0
± 22
Quadcopter bergerak ke kanan belakang
-1.5
0
±8
Quadcopter bergerak ke kanan belakang
-2
0
±6
Quadcopter bergerak ke belakang
Gambar 4.2. Pengujian kestabilan dengan nilai roll 0 dan pitch 0.
Gambar 4.3. Pengujian kestabilan dengan nilai roll -0.5 dan pitch 0. pada dua gambar diatas perlu diketahui bahwa nilai positif roll menunjukkan gerakan quadcopter ke kanan dan sebaliknya. Nilai positif pitch pun 24
menunjukkan kondisi gerakan ke depan dan sebaliknya. Kemudian pada dua gambar diatas menunjukkan kedua nilai berosilasi. Namun secara visual gerakan quadcopter dapat disimpulkan quadcopter bergerak ke kanan.
Gambar 4.4. Pengujian kestabilan dengan nilai roll -1 dan pitch 0.
Gambar 4.5. Pengujian kestabilan dengan nilai roll -1.5 dan pitch 0.
Gambar 4.6. Pengujian kestabilan dengan nilai roll -2 dan pitch 0. 25
Dari pengujian di atas, gerakan naik quadcopter masih belum tegak lurus dari posisi awal namun ada perubahan dari gerakan ke kanan menjadi gerakan ke belakang. Lalu langkah berikutnya yaitu mengubah nilai pitch agar gerakan naik menjadi tegak lurus. Tabel 4.3. hasil pengujian perbedaan nilai pitch Nilai roll
Nilai Deviasi stabilizer Pitch pitch dari posisi awal
Hasil
-2
0.5
±4
Quadcopter bergerak ke belakang
-2
1
±2
Quadcopter naik tegak lurus
-2
1.5
±10
Quadcopter bergerak ke depan
Gambar 4.7. Pengujian kestabilan dengan nilai roll -2 dan pitch 0.5.
Gambar 4.8. Pengujian kestabilan dengan nilai roll -2 dan pitch 1.
26
Gambar 4.9. Pengujian kestabilan dengan nilai roll -2 dan pitch 1.5. Didapat dari pengujian diatas nilai yang tepat adalah -2 untuk nilai awal roll dan 1 untuk nilai awal pitch. Dengan demikian quadcopter dapat bergerak naik tegak lurus saat diperintahkan hanya untuk naik. Pengujian ini berguna untuk mempermudah saat sistem pengolahan citra digital digabungkan dengan kendali quadcopter. 4.2
Pengujian pengolahan citra digital Penangkapan
pergerakan
quadcopter
dilakukan dengan membaca
pergerakan bola merah diatasnya menggunakan kamera kinect. Kamera ini tidak hanya membaca pergerakan objek dalam sumbu x dan y saja, namun dapat pula membaca kedalaman objek atau sumbu z dari objek. Hal ini berguna untuk mengetahui posisi quadcopter dari sumbu x, sumbu y, dan sumbu z. Namun pembacaan kedalaman sumbu z terbatas hanya pada jarak 80 cm sampai 200 cm dari posisi kamera kinect. Hal ini juga berpengaruh pada kecilnya dimensi ruang yang akan digunakan quadcopter terbang. Untuk melakukan manuever khusus, diperlukan ruang yang lebih luas yang artinya kamera kinect tidak dapat menangkap kedalaman objek. Maka dari itu, berikut hal-hal yang dibatasi pada pengenalan objek menggunakan pengolahan citra digital.
27
Tabel 4.4. syarat kondisi ruangan Resolusi kamera
Batas fps Volume ruang yang ditangkap kamera
640 x 480 pixel
30 fps
PxLxT
Kondisi ruang yang ditangkap kamera ○ Tidak ada warna merah lain
150cm x 180cm x ○ intensitas cahaya lebih dari 160 cm 30 lux
4.2.1
Pengujian akurasi pengolahan citra digital Pengenalan objek dilakukan melalui pengenalan warna dari bola yang akan
mengikuti pergerakan quadcopter kemanapun. Sistem pengenalan objek ini menggunakan satu buah komputer sebagai pusat pemroses dan satu buah kamera yang terhubung. Untuk mempermudah pemrosesan, RGB kamera akan menangkap citra dalam model RGB. Kemudian model RGB dirubah dalam model HSV dan dilakukan segmentasi warna agar didapat hanya warna merah. Hal ini dilakukan karena model warna HSV memisahkan antara warna dan pencahayaan. Ini berguna saat membuat histogram atau thresholding hanya menggunakan nilai saturasi dan hue. Pengujian pendeteksi bola warna merah menggunakan perangkat lunak opencv, kamera kinect, dan dengan bahasa pemrograman python. Pengujian dilakukan dengan memisahkan warna merah dengan warna lain dan membuat jarak nilai hex HSV. Pengujian menggunakan intensitas cahaya tetap sebesar 50 lux. Tabel 4.5. Hasil pengujian respon pengolahan citra digital dengan intensitas cahaya yang berbeda. No.
Nilai H
Nilai S
Nilai V
hasil
1
140-180
150-255
30-255
Merah Tertangkap
2
0-80
150-255
30-255
Hijau Tertangkap
3
140-180
80-150
30-150
Merah tertangkap sangat sedikit
28
Gambar 4.10. objek pengujian pengenalan warna dengan berbagai warna berbeda
Gambar 4.11. Hasil Pengolahan Citra Digital mulai dari proses konversi ke HSV, thresholding, Eroding, dan dilating pada tabel nomor 1.
Gambar 4.12. Hasil Pengolahan Citra Digital mulai dari proses konversi ke HSV, thresholding, Eroding, dan dilating pada tabel nomor 2.
29
Gambar 4.13. Hasil Pengolahan Citra Digital mulai dari proses konversi ke HSV, thresholding, Eroding, dan dilating pada tabel nomor 3. Dari pengujian di atas dapat diketahui nilai yang tepat untuk menangkap bola berwarna merah. Namun untuk mengurangi derau pada pengolahan citra digital ini, warna merah dan warna yang dekat dengan warna merah tidak boleh berada di sekitar sistem dan menyebabkan tertangkap oleh kamera. Apabila hal ini terjadi, quadcopter dapat kehilangan orientasi dan dapat merusak quadcopter. 4.2.2
Pengujian akurasi jarak depth pada kamera kinect Pengujian ini dilakukan untuk mengetahui seberapa akurat kamera dapat
mengetahui jarak antara kamera dan objek berupa bola berwarna merah. Dibawah ini adalah jarak yang duiji dengan kondisi ruang yang akan dijelaskan berikutnya. Tabel 4.6. hasil pengujian pembacaan jarak depth pada kamera kinect
30
Gambar 4.14. pengujian jarak kedalaman kamera kinect Dari data diatas, terlihat perbedaan jauh dari hasil pembacaan jarak kamera dengan jarak aslinya. Hal ini dikarenakan kamera IR kinect yang digunakan untuk membaca kedalaman secara dasar mempunyai nilai awal jarak yang lebih tinggi. Namun perbedaan ini tidak terlalu berpengaruh karena rasio pembacaan antar nilai tidak berbeda jauh dengan jarak sebenarnya. Berikut adalah kondisi ruangan yang sudah diatur sedemikian rupa agar mengurangi derau dan menambah kinerja sistem. Dalam pengujian ini, latar belakang dinding berwarna coklat krim untuk membedakan dengan objek yang nanti akan dideteksi. Sesuai pengujian diatas, intensitas cahaya tertinggi sebesar 125 lux dan terendah 45 lux dengan kondisi ruang seperti ini. Intensitas cahaya akan semakin besar bila mendekati dengan sumber cahaya dan berlaku sebaliknya. 4.3
Pengujian kendali quadcopter disertai pengolahan citra digital Pengujian ini menggabungkan antara kendali quadcopter dengan
pengolahan citra digital secara realtime. Langkah awal yaitu kamera menangkap pergerakan quadcopter. Kemudian diproses di komputer sehingga menghasilkan data yang diperlukan. Lalu perintah dimasukkan melalui komputer dan dikirim melalui sinyal radio ke quadcopter. Sistem harus mampu membaca posisi bola merah yang mewakilkan posisi quadcopter, dan mampu menerima perintah posisi yang dituju. Posisi bola merah dapat dideteksi dengan sumbu x, y, dan z. Namun posisi pointer hanya dapat menerima perintah x dan y. Hal ini dikarenakan keterbatasan sensor kedalaman kamera yang hanya mampu membaca antara 80 cm – 200 cm. Ini juga untuk mengantisipasi osilasi yang terjadi saat quadcopter mencoba menjaga kestabilan sehingga nilai sumbu z atau jarak kedalaman yang 31
diperintah bernilai tetap. Berikut pengujian titik awal dengan titik yang diperintahkan. 4.3.1 Pengujian kendali PID 4.3.1.1 Tujuan penelitian Pengujian ini dilakukan untuk mengetahui komposisi tepat nilai PID dan menghasilkan gerakan quadcopter yang stabil. 4.3.1.2 Peralatan Penelitian a. Quadcopter crazyflie b. Kamera Kinect xbox360 c. Crazyradio 4.3.1.3 Cara Pengujian Pengujian dilakukan dengan mengubah-ubah nilai parameter PID lalu membiarkan quadcopter pada posisi hover dan melihat perbedaan kestabilan gerakan quadcopter. 4.3.1.4 Hasil dan analisa pengujian Tabel 4.7. nilai PID untuk masing-masing gerakan pitch, yaw, dan thrust. parameter
Nilai P
Nilai I
Nilai D
Hasil error terendah
R
0.05
0.00025
1.0
0.251 px
P
0.1
0.00025
1.0
0.618 px
T
30
40
500
0.852 px
Kamera kinect akan diletakkan menghadap kebelakang quadcopter. Dalam hal ini gerakan yaw tidak mungkin dilakukan karena identifikasi berupa bola merah tidak ada karakteristik khusus agar kamera dapat membaca saat quadcopter melakukan yaw. Gerakan pitch akan direpresentasikan pada posisi depth. Gerakan roll akan direpresentasikan dalam posisi x, dan thrust pada posisi y. pada tabel 4.5., hasil yang didapat adalah quadcopter mampu melakukan hover dalam waktu 0.8
32
detik dari posisi x 320 pixel dan posisi y 10 pixel ke posisi x 320 pixel dan posisi y 240 pixel. Tabel 4.8. nilai error PID masing-masing gerakan untuk melihat perbedaan gerakan quadcopter. Parameter
Nilai P
Nilai I
Nilai D
error
R
1.5
1.0
5.0
1.212 px
P
1.5
1.0
5.0
0.821 px
T
10
20
50
1.025 px
Dari pengujian diatas, hasil yang didapat yaitu pergerakan quadcopter menjadi sangat lambat untuk melakukan gerakan thrust, namun osilasi pergerakan terlihat sedikit. Dapat disimpulkan pengujian pada tabel 4.8. dapat mengurangi osilasi, namun respon yang didapat menjadi sangat lambat. Maka dari itu, dipilih tabel 4.7. nilai PID untuk sistem sesuai pertimbangan tersebut. 4.3.2 Pengujian pembacaan posisi 4.3.2.1 Tujuan penelitian Pengujian ini untuk mengetahui posisi quadcopter yang terbaca kamera dan posisi setpoint yang diinginkan. 4.3.2.2 Peralatan pengujian a. Quadcopter crazyflie b. Crazyradio c. Kamera Kinect Xbox360 4.3.2.3 Cara Pengujian Pengujian dilakukan dengan menempatkan quadcopter di depan kamera dan melihat hasil pembacaan melalui layar komputer.
33
4.3.2.4 Hasil dan analisa pengujian Tabel 4.9. hasil pengujian posisi quadcopter terhadap kamera dan jarak sebenarnya. No.
Posisi x, y kamera
Posisi x, y sebenarnya
1
100 x 100 pixel
20 cm x 60 cm
2
200 x 200 pixel
40 cm x 80 cm
3
300 x 300 pixel
60 cm x 100 cm
4
400 x 480 pixel
80 cm X 160 cm
5
640 x 480 pixel
150 cm x 160 cm
Dari hasil pengujian diatas, dapat diketahui setiap 100 pixel terdapat kenaikan jarak 20 cm. 4.3.3 Pengujian kendali quadcopter ke titik setpoint. 4.3.3.1 Tujuan pengujian Untuk mengetahui akurasi logika kendali yang terprogram pada sistem. 4.3.3.2 Peralatan pengujian a. Crazyflie Quadcopter b. Crazyradio c. Kinect Xbox 360 4.3.3.3 Cara pengujian Pengujian dilakukan dengan menempatkan quadcopter di depan kamera dan melihat hasil pembacaan perintah.
34
4.3.3.4 Hasil dan analisa pengujian Tabel 4.10. hasil pengujian keluaran kendali saat diberi titik sepoint berbeda No.
Posisi x dan y quadcopter
Posisi x, y yang diinginkan
Perintah
1
150 x 150
300 x 300
Bergerak ke kanan dan ke bawah
2
400 x 400
200 x 200
Bergerak ke kiri dan ke bawah
3
100 x 300
300 x 100
Bergerak ke kanan dan ke atas
4
200 x 300
100 x 200
Bergerak ke kiri dan ke atas
Dari pengujian diatas, didapat logika tepat untuk melakukan perintah yang diinginkan. Quadcopter akan melakukan perintah sesuai kondisi terjauhnya terlebih dahulu. Apabila perintah ke kiri lebih jauh dari perintah naik, maka perintah kiri akan pertama yang akan dikerjakan.
Gambar 4.14. pengujian posisi quadcopter
35
4.3.4
Pengujian latar belakang berbeda
4.3.4.1 Tujuan Pengujian ini dilakukan untuk mengetahui seberapa besar gangguan yang terjadi pada quadcopter apabila menggunakan warna latar belakang yang berbeda. 4.3.4.2 Peralatan Pengujian a. Quadcopter Crazyflie b. Crazyradio c. Kamera Kinect Xbox360 4.3.4.3 Cara pengujian Pengujian dilakukan dengan merubah warna latar belakang. Dengan menempelkan kain di dinding, masing-masing warna akan memberi perubahan pada kinerja sistem. Pengujian yaitu dengan menangkap masing-masing frame gambar kemudian melihat akurasi pengenalan objek sebanyak 50 frame. 4.3.4.4 Hasil dan analisa pengujian Tabel 4.11. hasil pengujian akurasi pengolahan citra digital untuk 50 frame.
Hasil pengujian menunjukkan respon yang buruk pada latar belakang hitam. Hal ini berdampak pada kendali quadcopter yang buruk dan keluar dari dimensi penangkapan kamera. Lebih lanjut, kondisi ini bisa merusak quadcopter
36
Gambar 4.15. hasil segmentasi citra pada latar belakang berwarna coklat krim pada gambar kiri dan warna hitam pada gambar kanan Terlihat dari hasil pengujian diatas, bola yang tertangkap kamera tidak sempurna bentuknya pada latar belakang hitam. 4.3.5
Pengujian dengan intensitas cahaya berbeda
4.3.5.1 Tujian pengujian Pengujian ini bertujuan untuk mengetahui perubahan yang terjadi apabila diberi intensitas cahaya yang berbeda. 4.3.5.2 Peralatan Pengujian a. Lux Meter/Light Meter b. Crazyflie Nano Quadcopter c. Kamera kinect Xbox 360 4.3.5.3 Cara Pengujian Pengujian dilakukan dengan menjalankan sistem kemudian menghitung tingkat akurasi pembacaan kamera. 4.3.5.4 Hasil dan analisa pengujian Tabel 4.12. hasil pengujian akurasi pengolahan citra digital dengan intensitas cahaya yang berbeda untuk setiap 50 frame untuk AP dan 100 untuk AR.
37
Dari Hasil Pengujian diatas, semakin tinggi intensitas cahaya semakin baik pembacaan objek menggunakan kamera. Maka dari itu, sistem akan bekerja pada 50 lux. 4.3.6
Pengujian kinerja sistem
4.3.6.1 Tujuan pengujian Pengujian ini dilakukan untuk melihat respon quadcopter saat hover, melakukan manuver, dan menuju ke titik yang di tuju. 4.3.6.2 Peralatan pengujian a. Crazyflie nano quadcopter b. Kamera Xbox 360 Kinect c. Crazyradio 4.3.6.3 Cara pengujian Pengujian dilakukan dengan cara menjalankan sistem, kemudian membiarkan quadcopter untuk melakukan hover. Kemudian menentukan titik tujuan dan melihat performansi sistem. 4.3.6.4 Hasil dan analisa pengujian Tabel 4.13. hasil pengujian kinerja sistem. No.
Posisi x dan y quadcopter
Posisi x, y yang diinginkan
Perintah
1
150 x 150
300 x 300
Bergerak ke kanan dan ke bawah dan melakukan hover
2
300 x 300
200 x 200
Bergerak ke kiri dan ke bawah
3
100 x 300
300 x 100
Bergerak ke kanan dan ke atas
Pengujian menunjukkan hasil yang baik untuk masing-masing kondisi. Namun sistem ini masih terganggu dengan batasan-batasan yang ada. Dari hasil pengujian, didapat respon yang diinginkan namun ada sedikit osilasi saat quadcopter mendekati titik setpoint. Adapun hasil cirular trajectory control terlihat pada gambar 4.16. 38
Gambar 4.16. hasil circular trajectory control pada quadcopter Quadcopter diperintahkan untuk melakukan gerakan melingkar dengan menggunakan pointer yang ada. Ini dilakukan dengan memindahkan titik setpoint pada visualisasi di komputer. Terlihat quadcopter mencoba mendekati titik yang diinginkan namun masih terdapat perbedaan jarak posisi quadcopter dengan posisi yang diinginkan. Hal ini terjadi karena quadcopter akan langsung menjalankan perintah tanpa menstabilkan posisi terlebih dahulu. Sesuai dengan hasil pengujian sebelumnya, nilai-nilai parameter yang sudah tepat kemudian diimplementasikan untuk menjalankan sistem. Kamera dapat menangkap pergerakan quadcopter dalam resolusi 640x480 pixel dan pada 30 fps. Spesifikasi ini masih terlalu kecil agar quadcopter mampu terbang dan melakukan manuver dengan cepat. Hal ini berdampak pula pada kecilnya ruang yang dapat digunakan quadcopter. Saat quadcopter keluar dari zona tangkapan kamera, quadcopter akan kehilangan komunikasi dan mematikan semua motornya sehingga quadcopter segera jatuh. Hasil pengujian didapat tingkat akurasi pengenalan quadcopter terendah 95% pada intensitas cahaya 50 lux. Artinya quadcopter dapat selalu dikenali dan hanya sedikit ada kesalahan pembacaan posisi quadcopter. Adapun tingkat error pada kendali PID untuk gerakan thrust sebesar 0.852 pixel, error untuk gerakan roll sebesar 0.521 pixel, dan error untuk gerakan pitch sebesar 0.618 pixel untuk titik terendah saat quadcopter sudah mendekati posisi setpoint. Hal ini berpengaruh pada quadcopter yang tidak tepat melakukan hover pada titik yang telah ditentukan. Dari pengujian, terdapat selisih posisi dengan nilai tertinggi 10 pixel atau 2 – 4 centimeter pada jarak ukur sebenarnya.
39
BAB V PENUTUP 5.1.
Kesimpulan Berdasarkan hasil pengujian dan analisa yang telah dilakukan pada kendali
quadcopter mengikuti pointer menggunakan pengenalan objek dengan metode pengolahan citra digital, dapat diambil beberapa kesimpulan, antara lain : 1. Sistem dapat mendeteksi quadcopter dan pergerakannya dengan nilai error minimum gerakan thrust sebesar 0.852 pixel, error minimum gerakan roll 0.521 pixel dan error minimum gerakan pitch 0.521 pixel. 2. Pengolahan citra digital pendeteksi quadcopter berjalan dengan tingkat akurasi 90%. 3. sistem ini juga dapat mengontrol secara manual kemana arah quadcopter yang akan dituju. Dengan menentukan titik setpoint, quadcopter akan mendekati ke arah tersebut dengan selisih jarak tertinggi antara titik setpoint dengan quadcopter sebesar 10 pixel atau dalam jarak sebenarnya sebesar 4 cm. 4. pencahayaan yang tepat agar kamera dapat membaca sempurna pergerakan quadcopter sebesar 50 lux. 5.2.
Saran Pengembangan
selanjutnya
agar
sistem
dapat
lebih
stabil
dan
penyempurnaan secara keseluruhan, berikut saran yang ada : 1. Sistem dapat dikembangkan dengan teori kendali modern untuk lebih menstabilkan osilasi yang ada. 2. kendali quadcopter menggunakan pengolahan citra digital dapat digabungkan dengan kendali cerdas melakukan segmentasi, perkiraan pergerakan, dan untuk aplikasi lebih jauh. 3. quadcopter dapat dikembangkan untuk dimensi yang lebih besar lagi. 4. kamera dapat menggunakan kamera yang memiliki fps lebih tinggi dan spesifikasi lebih baik untuk meningkatkan kinerja sistem.
40
Daftar Pustaka Acharya, T., 2005. Image Processing Principles and Applications. Arizona: Wiley. Anon., n.d. s.l.:s.n. Luukkonen, T., 2011. Modelling and control of quadcopter. Espoo: Aalto University. Phillips, D., 2000. Image Processing in C. Kansas: R & D Publications. Plataniotis, K. & Venetsanopoulos, A., 2000. Color Image Processing and Applications. New York: Springer-Verlag. Pratt, W. K., 2001. DIGITAL IMAGE PROCESSING. Third ed. Los Altos, California: JOHN WILEY & SONS, INC.. Rafael C. Gonzalez, R. E. W., 2002. Digital Image Processing. New jersey: Prentice-Hall,Inc.. Young, I. T., 2007. Fundamental Of Image Processing. s.l.:Delf University of Technology.
41
LAMPIRAN Cfkinect.py import sys import os import logging import signal
import cflib.crtp from cflib.crazyflie import Crazyflie import cfclient.utils from kinect.kinect import Kinect from kinect.pid import PID, PID_RP
from cfclient.utils.config import Config
# Roll/pitch limit CAP = 15.0 # Thrust limit TH_CAP = 60000
class KinectPilot(): """Crazyflie Kinect Pilot"""
def __init__(self): """Initialize the headless client and libraries""" cflib.crtp.init_drivers()
self._cf = Crazyflie(ro_cache=sys.path[0]+"/cflib/cache", rw_cache=sys.path[1]+"/cache")
42
self.kinect = Kinect(self)
# Create PID controllers for piloting the Crazyflie # The Kinect camera is in the back of the Crazyflie so # pitch = depth, roll = x, thrust = y self.r_pid = PID_RP(P=0.05, D=1.0, I=0.00025, set_point=0.0) self.p_pid = PID_RP(P=0.1, D=1.0, I=0.00025, set_point=0.0) self.t_pid = PID(P=30.0, D=500.0, I=40.0, set_point=0.0)
self.sp_x = 320 self.sp_y = 240
signal.signal(signal.SIGINT, signal.SIG_DFL)
def connect_crazyflie(self, link_uri): """Connect to a Crazyflie on the given link uri""" self._cf.connectionFailed.add_callback(self._connection_failed) self._cf.open_link(link_uri)
def _connection_failed(self, link, message): """Callback for a failed Crazyflie connection""" print "Connection failed on {}: {}".format(link, message) sys.exit(-1)
def _p2t(self, percentage): """Convert a percentage to raw thrust""" return int(65000 * (percentage / 100.0))
def set_sp_callback(self, x, y):
43
self.sp_x = x self.sp_y = y
def control(self, dry=False): """Control loop for Kinect control""" safety = 10 while True: (x,y,depth) = self.kinect.find_position() if x and y and depth: safety = 10 roll = self.r_pid.update(self.sp_x-x) pitch = self.p_pid.update(180-depth) thrust = self.t_pid.update(self.sp_y-y) roll_sp = -roll pitch_sp = -pitch thrust_sp = thrust+38000 if (roll_sp > CAP): roll_sp = CAP print "kiriii" if (roll_sp < -CAP): roll_sp = -CAP print "kanan"
if (pitch_sp > CAP): pitch_sp = CAP print "maju" if (pitch_sp < -CAP): pitch_sp = -CAP print "mundur"
44
if (thrust_sp > TH_CAP): thrust_sp = TH_CAP print "naik" if (thrust_sp < 0): thrust_sp = 0 print "turun"
# print self.t_pid.error
#texts = ["R=%.2f,P=%.2f,T=%.2f" % (roll_sp, pitch_sp, thrust_sp), #
"TH: P=%.2f" % self.t_pid.P_value,
#
"TH: D=%.2f" % self.t_pid.D_value,
#
"TH: I=%.2f" % self.t_pid.I_value,
#
"TH: e=%.2f" % self.t_pid.error]
#texts = ["R=%.2f,P=%.2f,T=%.2f" % (roll_sp, pitch_sp, thrust_sp), #
"R: P=%.2f" % self.r_pid.P_value,
#
"R: I=%.2f" % self.r_pid.I_value,
#
"R: D=%.2f" % self.r_pid.D_value,
#
"P: P=%.2f" % self.p_pid.P_value,
#
"P: I=%.2f" % self.p_pid.I_value,
#
"P: D=%.2f" % self.p_pid.D_value]
texts = [] self.kinect.show(texts) self.kinect.show_xy_sp(self.sp_x, self.sp_y) if not dry: self._cf.commander.send_setpoint(roll_sp, pitch_sp-2.0, 0, thrust_sp) else: safety = safety - 1 if safety < 0 and not dry: self._cf.commander.send_setpoint(0, 0, 0, 0)
45
def main(): """Main Crazyflie Kinect application""" import argparse
parser = argparse.ArgumentParser(prog="cfkinect") parser.add_argument("-u", "--uri", action="store", dest="uri", type=str, default="radio://0/20/2M", help="URI to use for connection to the Crazyradio" " dongle, defaults to radio://0/20/2M") parser.add_argument("-y", "--dry", dest="dry", action="store_true", help="Do not send commands to Crazyflie") parser.add_argument("-d", "--debug", action="store_true", dest="debug", help="Enable debug output") (args, unused) = parser.parse_known_args()
if args.debug: logging.basicConfig(level=logging.DEBUG) else: logging.basicConfig(level=logging.INFO)
kinect_pilot = KinectPilot()
if not args.dry: kinect_pilot.connect_crazyflie(link_uri=args.uri)
kinect_pilot.control(args.dry)
46
LAMPIRAN B
Interface kinect & opencv from freenect import sync_get_depth as get_depth, sync_get_video as get_video from frame_convert import video_cv, pretty_depth_cv import cv import numpy as np import time
IMG_WIDTH = 640 IMG_HEIGHT = 480
class Kinect:
def __init__(self, controller): self.text = [] self.writer = cv.CreateVideoWriter("out.avi", cv.CV_FOURCC('M', 'J', 'P', 'G'), 25, (IMG_WIDTH, IMG_HEIGHT), True) self.lasttime = time.time() self.sp = (0,0) cv.NamedWindow('RGB', cv.CV_WINDOW_AUTOSIZE) cv.SetMouseCallback('RGB', self.mouse_ev) self.sp_callback = controller.set_sp_callback self.track = False
def mouse_ev(self, ev, x, y, flag, param): if (ev == cv.CV_EVENT_LBUTTONDOWN): self.track = True if (ev == cv.CV_EVENT_LBUTTONUP): self.track = False if (self.track):
47
print "%d,%d" % (x,y) self.sp_callback(x,y)
def _get_pos_spatial(self, th_img): moments = cv.Moments(cv.GetMat(th_img)) mom10 = cv.GetSpatialMoment(moments, 1, 0) mom01 = cv.GetSpatialMoment(moments, 0, 1) area = cv.GetCentralMoment(moments, 0, 0)
if area > 10: pos = [int(mom10/area), int(mom01/area)] else: pos = None
return pos
def _get_pos_countour(self, th_img): storage = cv.CreateMemStorage(0) contour = None ci = cv.CreateImage(cv.GetSize(th_img), 8, 1) ci = cv.CloneImage(th_img)
contour = cv.FindContours(th_img, cv.CV_CHAIN_APPROX_SIMPLE)
storage,
cv.CV_RETR_CCOMP,
points = []
while contour: bound_rect = cv.BoundingRect(list(contour)) contour = contour.h_next() pt1 = (bound_rect[0], bound_rect[1]) pt2 = (bound_rect[0] + bound_rect[2], bound_rect[1] + bound_rect[3])
48
points.append(pt1) points.append(pt2) cv.Rectangle(th_img, pt1, pt2, cv.CV_RGB(255,0,255), 1)
center_point = None
if len(points): center_point = reduce(lambda a, b: ((a[0] + b[0]) / 2, (a[1] + b[1]) / 2), points) #cv.Circle(depth, center_point, 10, cv.CV_RGB(255, 255, 255), 1)
return center_point
def _get_pos(self, img, debug=False): th_img = self._get_threashold_image_hsv(img, debug=debug) #sp = self._get_pos_spatial(th_img) cp = self._get_pos_countour(th_img)
#if sp: # cv.Circle(img, (sp[0], sp[1]) , 10, cv.CV_RGB(255, 255, 255), 1) if cp: cv.Circle(img, (cp[0], cp[1]) , 10, cv.CV_RGB(0, 0, 255), 1)
return cp
def _get_threashold_image_hsv(self, img, debug=False): """Get the binary threashold image using a HSV method""" imgHSV = cv.CreateImage(cv.GetSize(img), 8, 3); cv.CvtColor(img, imgHSV, cv.CV_BGR2HSV); cv.Smooth(imgHSV, imgHSV, cv.CV_GAUSSIAN, 3, 0) img_th = cv.CreateImage(cv.GetSize(img), 8, 1);
49
# Filter out red colors cv.InRangeS(imgHSV, cv.Scalar(140, 150, 30), cv.Scalar(180, 255, 255), img_th); # Fix the image a bit by eroding and dilating eroded = cv.CreateImage(cv.GetSize(img), 8, 1); cv.Erode( img_th, eroded, None, 1) dilated = cv.CreateImage(cv.GetSize(img), 8, 1); cv.Dilate( eroded, dilated, None, 4)
if debug: cv.ShowImage('HSV', imgHSV) cv.ShowImage('threas', img_th) #cv.SaveImage('threas-%d.png' % (time.time()), img_th) cv.ShowImage('eroded', eroded) cv.ShowImage('dialated', dilated)
return dilated
def _get_depth(self, depth_image, debug=False): """Get the depth reading from the Kinect""" depth = None
# Only use part of the span to avoid anything else than the Crazyflie img_th = cv.CreateImage(cv.GetSize(depth_image), 8, 1); cv.InRangeS(depth_image, 10, 210, img_th);
# Calculate the mean depth depth = cv.Avg(depth_image, img_th)[0]
font = cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 1, 1) s2 = "%d" % depth
50
cv.PutText(img_th, s2, (0,60),font, 200) cv.ShowImage('depth th', img_th)
return depth
def find_position(self): (kinect_depth,_), (rgb,_) = get_depth(), get_video() self.img = video_cv(rgb) depth_img = pretty_depth_cv(kinect_depth)
position = self._get_pos(self.img)
depth = self._get_depth(depth_img, debug=False)
font = cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 1, 1)
fps = 1/(time.time() - self.lasttime) s1 = "%.1f" % fps #s1 = "FPS:%.1f" % fps self.lasttime = time.time() cv.PutText(self.img,s1, (600,30),font, cv.CV_RGB(255, 0, 0))
dt = "kedalaman: %d" % depth
qt="RGB Visual" if position: pt = "posisi qc: X=%d Y=%d" % (position[0], position[1]) else: pt = "Posisi qc: N/A" cv.PutText(self.img, dt, (0,30),font, cv.CV_RGB(0, 0, 255))
51
cv.PutText(self.img, pt, (0,60),font, cv.CV_RGB(0, 0, 255)) cv.PutText(self.img, qt, (0,90),font, cv.CV_RGB(0, 255, 0))
offset = 120 for t in self.text: cv.PutText(self.img, t, (0,offset),font, cv.CV_RGB(255, 0, 0)) offset += 30
cv.Circle(self.img, (self.sp[0], self.sp[1]) , 10, cv.CV_RGB(0, 255, 0), 1)
cv.ShowImage('RGB', self.img) #cv.SaveImage('RGB-%d.png' % (time.time()*100), self.img) cv.ShowImage('DEPTH', depth_img) cv.WriteFrame(self.writer, self.img) cv.WaitKey(5)
#cv.ShowImage('depth_mask', depth_mask) try: return (position[0], position[1], depth) except: return (None, None, None)
def show_xy_sp(self, x, y): self.sp = (x,y)
def show(self, texts): self.text = texts
52