Daftar Isi:
- Langkah 1: HAL-HAL YANG DIPERLUKAN:
- Langkah 2: PRINSIP KERJA:
- Langkah 3: INPUT CAPTURE DAN PROCESSING:
- Langkah 4:
- Langkah 5:
- Langkah 6: PENGOLAHAN BAGIAN:
- Langkah 7:
- Langkah 8:
- Langkah 9:
- Langkah 10:
- Langkah 11:
- Langkah 12: KONTROL GERAK:
- Langkah 13:
Video: Gesture Hawk: Robot Pengontrol Gerakan Tangan Menggunakan Antarmuka Berbasis Pemrosesan Gambar: 13 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
Gesture Hawk dipamerkan di TechEvince 4.0 sebagai antarmuka manusia-mesin berbasis pemrosesan gambar sederhana. Kegunaannya terletak pada kenyataan bahwa tidak ada sensor tambahan atau perangkat yang dapat dikenakan kecuali sarung tangan yang diperlukan untuk mengendalikan mobil robot yang berjalan dengan prinsip penggerak diferensial. Dalam instruksi ini, kami akan membawa Anda melalui prinsip kerja di balik pelacakan objek dan deteksi gerakan yang digunakan dalam sistem. Kode sumber proyek ini dapat diunduh dari Github melalui tautan:
Langkah 1: HAL-HAL YANG DIPERLUKAN:
- Pengemudi Motor L298N
- Motor DC
- Sasis mobil robot
- Arduino Uno
- Baterai LiPo
- Kabel USB Arduino (panjang)
- Perpustakaan OpenCV dengan Python
Langkah 2: PRINSIP KERJA:
Gesture Hawk adalah sistem pemrosesan tiga fase seperti yang Anda lihat pada diagram di atas.
Langkah 3: INPUT CAPTURE DAN PROCESSING:
Pengambilan input dapat dipahami dalam kategori yang lebih luas yang diberikan dalam diagram di atas.
Untuk mengekstrak bentuk tangan dari lingkungan, kita perlu menggunakan masking atau penyaringan warna tertentu (dalam hal ini – biru ungu’). Untuk melakukan itu Anda perlu mengonversi gambar dari format BGR ke HSV yang dapat dilakukan dengan menggunakan cuplikan kode berikut.
hsv = cv2.cvtColor(bingkai, cv2. COLOR_BGR2HSV)
Sekarang, langkah selanjutnya adalah menemukan kisaran parameter HSV yang diinginkan untuk mengekstrak tangan melalui masker atau filter. Untuk ini, cara terbaik adalah menggunakan track bar untuk menemukan rentang yang sesuai. Berikut adalah screenshot dari track bar yang digunakan untuk proyek ini.
Langkah 4:
Langkah 5:
Di sini, ada potongan kode yang diberikan di bawah ini untuk membuat trackbar seperti itu untuk konstruksi topeng:
impor cv2
impor numpy sebagai npdef apa-apa(x): lulus cv2.namedWindow('image') img = cv2. VideoCapture(0) cv2.createTrackbar('l_H', 'image', 110, 255, tidak ada) cv2.createTrackbar('l_S ', 'gambar', 50, 255, tidak ada) cv2.createTrackbar('l_V', 'gambar', 50, 255, tidak ada) cv2.createTrackbar('h_H', 'gambar', 130, 255, tidak ada) cv2. createTrackbar('h_S', 'image', 255, 255, tidak ada) cv2.createTrackbar('h_V', 'image', 255, 255, tidak ada) while(1): _, frame = img.read()
hsv = cv2.cvtColor(frame, cv2. COLOR_BGR2HSV)lH = cv2.getTrackbarPos('l_H', 'image') lS = cv2.getTrackbarPos('l_S', 'image') lV = cv2.getTrackbarPos',('l_VPos' 'gambar') hH = cv2.getTrackbarPos('h_H', 'gambar') hS = cv2.getTrackbarPos('h_S', 'gambar') hV = cv2.getTrackbarPos('h_V', 'gambar') lower_R = np. array([lH, lS, lV]) higher_R = np.array([hH, hS, hV]) mask = cv2.inRange(hsv, lower_R, higher_R) res = cv2.bitwise_and(frame, frame, mask= mask) cv2.imshow('image', res) k = cv2.waitKey(1) & 0xFF jika k == 27: break cv2.destroyAllWindows()
Langkah 6: PENGOLAHAN BAGIAN:
Nah, kita sudah mendapatkan bentuk geometris tangan, sekarang saatnya untuk memanfaatkannya dan menggunakannya untuk mengetahui gerakan tangan.
Lambung Cembung:
Melalui lambung cembung, kami mencoba menyesuaikan poligon perkiraan melalui titik-titik ekstrem yang ada dalam bentuk. Gambar yang ada di sebelah kiri menunjukkan perkiraan poligon yang telah ditetapkan ke bentuk dengan titik cembung yang ditandai dengan warna merah.
Titik cembung adalah titik-titik dalam bentuk yang terjauh dari sisi poligon yang didekati ini. Tapi, masalah dengan convex hull adalah bahwa selama perhitungannya, kita akan mendapatkan array dari semua titik cembung tetapi yang kita butuhkan adalah titik cembung runcing biru. Kami akan memberi tahu Anda mengapa itu diperlukan.
Untuk mencari titik cembung ini, kita perlu menerapkan rumus jarak tegak lurus untuk mencari jarak titik cembung dengan sisi terdekat. Kami mengamati bahwa titik runcing biru memiliki jarak maksimum dari samping sehingga kami mendapatkan titik ini.
Langkah 7:
Langkah 8:
Selanjutnya kita perlu mencari kemiringan garis yang menghubungkan ujung ibu jari (atau titik ekstrem) ke titik cembung ini dengan horizontal.
Langkah 9:
Dalam kasus di atas, Sudut harus antara 0 hingga 90 derajat jika gerakannya untuk belok kiri. Artinya tan(α) harus positif.
Langkah 10:
Dalam kasus di atas, Sudut harus antara 180 hingga 90 derajat jika gerakannya untuk belok kanan. Artinya tan(α) harus negatif.
Oleh karena itu, Jika Tan positif, maka belok kiri. Jika Tan negatif, maka belok kanan. Sekarang, saatnya untuk melihat bagaimana mendeteksi perintah stop yang paling penting.
Di sini, rasio tertentu (ditemukan dengan hit and trial) diperiksa dan dalam kasus maksimum rasio jarak ini tetap dalam kisaran khusus ini.
Langkah 11:
Terakhir, gerakan gerakan ke depan dianalisis oleh fungsi matchShape() di OpenCV. Fungsi ini membandingkan bentuk dua penghitung, dalam hal ini, antara contoh latihan pada thright pada gambar di atas dengan kontur di sisi kiri gambar di atas. Ini mengembalikan nilai mulai dari 0 hingga 2 atau 3, sesuai dengan variasi yang ada dalam bentuk dua kontur. Untuk kontur yang sama persis, ia mengembalikan 0.
ret = cv2.matchShapes(cnt1, cnt2, 1, 0.0)
Di sini, cn1 dan cnt2 adalah dua kontur yang akan dibandingkan.
Langkah 12: KONTROL GERAK:
PySerial:
Kami menggunakan pustaka python PySerial untuk mengubah data yang diproses menjadi data serial untuk dikomunikasikan ke Arduino Uno melalui Kabel USB Arduino. Setelah gerakan tertentu terdeteksi oleh opencv, kami membuat variabel sementara katakan 'x' dan menetapkannya beberapa nilai unik dan mengubahnya menjadi input serial menggunakan baris perintah berikut: -
impor serial #untuk mengimpor perpustakaan Pyserial
serial. Serial('', baudrate = '9600', timeout = '0') # set up serial output.. PORT NAME adalah nama port yang akan digunakan untuk transmisi data.
serial.write(b'x') # x adalah alfabet yang dikirim ke port …b adalah untuk mengubah string ini menjadi byte.
Pemrosesan Arduino:
Sekarang arduino dikodekan sedemikian rupa sehingga setiap serial x yang berbeda dipetakan secara linier ke tindakan tertentu yang bertanggung jawab atas gerakan robot yang mulus (misalnya deteksi gerakan kiri akan memicu motor di kanan untuk berbelok ke kiri). Kita dapat mengontrol gerakan setiap roda secara translasi maupun rotasi dengan mengubah kodenya dengan benar.
L298N Pengemudi motor:-
Driver Motor digunakan sebagai mediator antara motor dan sumber daya karena motor tidak dapat dialiri daya secara langsung karena peringkat tegangan rendah. Baterai Li-Po terhubung ke terminal input 12V dan kami menghubungkan soket 5V arduino ke soket input 5V driver motor yang akhirnya menghubungkan ground Li-Po serta arduino di soket arduino yang sama dari driver motor.
Sekarang terminal motor terhubung pada soket yang diberikan. Akhirnya kami menghubungkan terminal input untuk motor ke soket output PWM arduino sehingga kami bebas menentukan aspek rotasi dan translasi gerakan secara akurat.
Direkomendasikan:
Kontrol Gerakan Sederhana - Kontrol Mainan RC Anda Dengan Gerakan Lengan Anda: 4 Langkah (dengan Gambar)
Kontrol Gerakan Sederhana - Kontrol Mainan RC Anda Dengan Gerakan Lengan Anda: Selamat datang di 'ible' saya #45. Beberapa waktu yang lalu saya membuat BB8 versi RC yang berfungsi penuh menggunakan bagian Lego Star Wars … https://www.instructables.com/id/Whats-Inside-My-R…Ketika saya melihat betapa kerennya itu Force Band yang dibuat oleh Sphero, saya berpikir: "Ok, saya c
Memulai Dengan Antarmuka Sensor I2C?? - Antarmuka MMA8451 Anda Menggunakan ESP32: 8 Langkah
Memulai Dengan Antarmuka Sensor I2C?? - Antarmuka MMA8451 Anda Menggunakan ESP32: Dalam tutorial ini, Anda akan mempelajari semua tentang Cara memulai, menghubungkan, dan membuat perangkat I2C (Akselerometer) bekerja dengan pengontrol (Arduino, ESP32, ESP8266, ESP12 NodeMCU)
Sistem Pengenalan dan Pemadam Kebakaran Berbasis Pemrosesan Gambar: 3 Langkah
Sistem Pengenalan dan Pemadam Kebakaran Berbasis Pemrosesan Gambar: Halo teman-teman ini adalah sistem pendeteksi dan pemadam kebakaran berbasis pemrosesan gambar menggunakan Arduino
Antarmuka Manusia-Komputer: Fungsikan Gripper (dibuat oleh Kirigami) dengan Gerakan Pergelangan Tangan Menggunakan EMG.: 7 Langkah
Antarmuka Manusia-Komputer: Fungsikan Gripper (dibuat oleh Kirigami) oleh Gerakan Pergelangan Tangan Menggunakan EMG.: Jadi ini adalah percobaan pertama saya pada antarmuka manusia-komputer. Saya menangkap sinyal aktivasi otot dari gerakan pergelangan tangan saya menggunakan sensor EMG, memprosesnya melalui python dan arduino dan menggerakkan gripper berbasis origami
Pengontrol Game DIY Berbasis Arduino - Pengontrol Permainan Arduino PS2 - Bermain Tekken Dengan Gamepad Arduino DIY: 7 Langkah
Pengontrol Game DIY Berbasis Arduino | Pengontrol Permainan Arduino PS2 | Bermain Tekken Dengan Gamepad Arduino DIY: Halo teman-teman, bermain game selalu menyenangkan tetapi bermain dengan Kontroler game kustom DIY Anda sendiri lebih menyenangkan. Jadi kami akan membuat Pengontrol game menggunakan arduino pro micro dalam instruksi ini