Daftar Isi:

Gesture Hawk: Robot Pengontrol Gerakan Tangan Menggunakan Antarmuka Berbasis Pemrosesan Gambar: 13 Langkah (dengan Gambar)
Gesture Hawk: Robot Pengontrol Gerakan Tangan Menggunakan Antarmuka Berbasis Pemrosesan Gambar: 13 Langkah (dengan Gambar)

Video: Gesture Hawk: Robot Pengontrol Gerakan Tangan Menggunakan Antarmuka Berbasis Pemrosesan Gambar: 13 Langkah (dengan Gambar)

Video: Gesture Hawk: Robot Pengontrol Gerakan Tangan Menggunakan Antarmuka Berbasis Pemrosesan Gambar: 13 Langkah (dengan Gambar)
Video: Membuat robot gerak tangan (gesture robot) 2024, Juli
Anonim
Gesture Hawk: Robot Pengontrol Gerakan Tangan Menggunakan Antarmuka Berbasis Pemrosesan Gambar
Gesture Hawk: Robot Pengontrol Gerakan Tangan Menggunakan Antarmuka Berbasis Pemrosesan Gambar

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:

HAL-HAL YANG DIPERLUKAN
HAL-HAL YANG DIPERLUKAN
HAL-HAL YANG DIPERLUKAN
HAL-HAL YANG DIPERLUKAN
HAL-HAL YANG DIPERLUKAN
HAL-HAL YANG DIPERLUKAN
HAL-HAL YANG DIPERLUKAN
HAL-HAL YANG DIPERLUKAN
  1. Pengemudi Motor L298N
  2. Motor DC
  3. Sasis mobil robot
  4. Arduino Uno
  5. Baterai LiPo
  6. Kabel USB Arduino (panjang)
  7. Perpustakaan OpenCV dengan Python

Langkah 2: PRINSIP KERJA:

PRINSIP BEKERJA
PRINSIP BEKERJA

Gesture Hawk adalah sistem pemrosesan tiga fase seperti yang Anda lihat pada diagram di atas.

Langkah 3: INPUT CAPTURE DAN PROCESSING:

INPUT TANGKAP DAN PENGOLAHAN
INPUT TANGKAP DAN PENGOLAHAN

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:

Gambar
Gambar

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:

BAGIAN PENGOLAHAN
BAGIAN PENGOLAHAN

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:

Gambar
Gambar

Langkah 8:

Gambar
Gambar

Selanjutnya kita perlu mencari kemiringan garis yang menghubungkan ujung ibu jari (atau titik ekstrem) ke titik cembung ini dengan horizontal.

Langkah 9:

Gambar
Gambar

Dalam kasus di atas, Sudut harus antara 0 hingga 90 derajat jika gerakannya untuk belok kiri. Artinya tan(α) harus positif.

Langkah 10:

Gambar
Gambar

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:

Gambar
Gambar

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:

KONTROL GERAK
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: