Съдържание:
- Стъпка 1: ИЗИСКВАНИ НЕЩА:
- Стъпка 2: РАБОТЕН ПРИНЦИП:
- Стъпка 3: ВЪВЕЖДАНЕ НА ЗАЛАГАНЕ И ОБРАБОТКА:
- Стъпка 4:
- Стъпка 5:
- Стъпка 6: ЧАСТ НА ОБРАБОТКА:
- Стъпка 7:
- Стъпка 8:
- Стъпка 9:
- Стъпка 10:
- Стъпка 11:
- Стъпка 12: КОНТРОЛ НА ДВИЖЕНИЕТО:
- Стъпка 13:
Видео: Gesture Hawk: Робот с ръчен контрол с жестове, използващ интерфейс за обработка на изображения: 13 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Gesture Hawk беше представен в TechEvince 4.0 като прост интерфейс човек-машина, базиран на обработка на изображения. Полезността му се състои във факта, че не са необходими допълнителни сензори или носене, освен ръкавица за управление на роботизираната кола, която работи на принципа на диференциално задвижване. В тази инструкция ще ви преведем през принципа на работа зад проследяването на обекти и откриването на жестове, използвани в системата. Изходният код на този проект може да бъде изтеглен от Github чрез връзка:
Стъпка 1: ИЗИСКВАНИ НЕЩА:
- L298N шофьор на мотор
- DC двигатели
- Роботно шаси на автомобил
- Arduino Uno
- LiPo батерии
- Arduino USB кабел (дълъг)
- Библиотека на OpenCV с Python
Стъпка 2: РАБОТЕН ПРИНЦИП:
Gesture Hawk е трифазна система за обработка, както можете да видите на горната диаграма.
Стъпка 3: ВЪВЕЖДАНЕ НА ЗАЛАГАНЕ И ОБРАБОТКА:
Захващането на входа може да се разбира в по -широките категории, дадени в горната диаграма.
За да извлечем формата на ръката от околната среда, трябва да използваме маскиране или филтриране на определен цвят (в случая - виолетово синьо’). За да направите това, трябва да конвертирате изображението от BGR във формат HSV, което може да стане с помощта на следния кодов фрагмент.
hsv = cv2.cvtColor (рамка, cv2. COLOR_BGR2HSV)
Следващата стъпка е да намерите желания диапазон от параметри на HSV, за да извадите ръката чрез маска или филтър. За това най -добрият начин е да използвате щанги за намиране на подходящ обхват. Ето екранна снимка на лента за песни, използвана за този проект.
Стъпка 4:
Стъпка 5:
Тук има кодов фрагмент, даден по -долу, за да направите такава лента за изграждане на маска:
импортиране на cv2
импортиране на numpy като npdef нищо (x): pass cv2. namedWindow ('image') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, nothing) cv2.createTrackbar ('l_S ',' image ', 50, 255, nothing) cv2.createTrackbar (' l_V ',' image ', 50, 255, nothing) cv2.createTrackbar (' h_H ',' image ', 130, 255, nothing) cv2. createTrackbar ('h_S', 'image', 255, 255, nothing) cv2.createTrackbar ('h_V', 'image', 255, 255, nothing) while (1): _, frame = img.read ()
hsv = cv2.cvtColor (рамка, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos ('l_H', 'изображение') lS = cv2.getTrackbarPos ('l_S', 'изображение') lV = cv2.getTrackbarPos ('l_V', 'image') hH = cv2.getTrackbarPos ('h_H', 'image') hS = cv2.getTrackbarPos ('h_S', 'image') hV = cv2.getTrackbarPos ('h_V', 'image') lower_R = np. масив ([lH, lS, lV]) по -висок_R = np.масив ([hH, hS, hV]) маска = cv2.inRange (hsv, lower_R, по -висок_R) res = cv2. bitwise_and (рамка, рамка, маска = маска) cv2.imshow ('image', res) k = cv2.waitKey (1) & 0xFF if k == 27: break cv2.destroyAllWindows ()
Стъпка 6: ЧАСТ НА ОБРАБОТКА:
Е, имаме геометрична форма на ръка, сега е време да я използваме и да я използваме, за да разберем жеста на ръката.
Изпъкнал корпус:
Чрез изпъкнал корпус се опитваме да поставим приблизителен многоъгълник през крайни точки, присъстващи във формата. Наличното изображение вляво показва приблизителния полигон, който е бил присвоен на формата с изпъкналите точки, маркирани с червено.
Изпъкналите точки са тези точки във формата, които са най -отдалечени от страна на този приближен многоъгълник. Но проблемът с изпъкналата обвивка е, че по време на нейното изчисление ще получим масив от всички изпъкнали точки, но това, от което се нуждаем, е синята заострена изпъкнала точка. Ще ви кажем защо е необходимо.
За да намерим тази изпъкнала точка, трябва да приложим формулата за перпендикулярно разстояние за намиране на разстоянието на изпъкналата точка с най -близката страна. Забелязахме, че синята заострена точка притежава максимално разстояние от страната и така получаваме тази точка.
Стъпка 7:
Стъпка 8:
След това трябва да намерим наклона на линията, свързваща върха на палеца (или крайната точка) към тази изпъкнала точка с хоризонтала.
Стъпка 9:
В горния случай ъгълът α трябва да бъде между 0 до 90 градуса, ако жестът е за завой наляво. Тоест тен (α) трябва да е положителен.
Стъпка 10:
В горния случай ъгълът α трябва да бъде между 180 до 90 градуса, ако жестът е за десен завой. Тоест тен (α) трябва да е отрицателен.
Следователно, ако Tan α е положителен, тогава завийте наляво. Ако Tan α е отрицателен, тогава завийте надясно. Сега е време да видим как да открием най -важната команда за спиране.
Тук се изследва определено съотношение (установено чрез попадение и проба) и в максимални случаи това съотношение на разстоянията остава в този конкретен диапазон.
Стъпка 11:
Най -накрая, жестът за движение напред се анализира от функцията matchShape () в OpenCV. Тази функция сравнява формата на два брояча, в този случай, между пример за тренировка на thright в горната картина с контура в лявата страна на горното изображение. Той връща стойност, варираща от 0 до 2 или 3, в зависимост от вариацията във формата на два контура. За идентично същия контур връща 0.
ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)
Тук cn1 и cnt2 са двата контура, които трябва да бъдат сравнени.
Стъпка 12: КОНТРОЛ НА ДВИЖЕНИЕТО:
PySerial:
Използвахме PySerial библиотека на python, за да преобразуваме обработените данни в серийни данни, за да се съобщи на Arduino Uno чрез Arduino USB кабел. След като конкретен жест беше открит от opencv, ние създадохме временна променлива, наречена „x“и му присвоихме някаква уникална стойност и я преобразувахме в сериен вход, като използваме следния команден ред:-
import serial #to import Pyserial library
serial. Serial ('', baudrate = '9600', timeout = '0') # настройка на сериен изход.. PORT NAME е името на порта, през който ще се осъществява предаването на данни.
serial.write (b'x ') # x е азбуката, изпратена до порта … b е за преобразуване на този низ в байтове.
Arduino обработка:
Сега arduino е кодиран по такъв начин, че всеки различен сериен х е линейно съпоставен с определено действие, отговорно за плавното движение на робота (да речем откриването на ляв жест ще задейства двигателите отдясно, за да завие наляво). Можем да контролираме движението на всяко колело транслационно, както и ротационно, като променим кода правилно.
L298N Драйвер на двигателя:-
Motor Driver се използва като посредник между двигателя и източника на захранване, тъй като двигателите не могат да се захранват директно поради ниско напрежение. Li-Po батерията е свързана към своя 12V входен терминал и ние свързваме 5V гнездото на arduino към 5V входа на драйвера на двигателя, като най-накрая свързваме земята на Li-Po, както и arduino в общ заземен контакт на драйвера на двигателя.
Сега клемите на двигателите са свързани към дадени гнезда. Накрая свързваме входните клеми за двигателя към PWM изходните гнезда на arduino, което ни позволява да решим точно ротационните и транслационните аспекти на движението.
Препоръчано:
Робот, управляван с жестове, използващ Arduino: 7 стъпки
Робот, управляван с жестове, използващ Arduino: Роботите се използват в много сектори като строителство, военни, производство, сглобяване и т.н. Роботите могат да бъдат автономни или полуавтономни. Автономните роботи не изискват човешка намеса и могат да действат сами според ситуацията. Вижте
Прост контрол с жестове - Контролирайте вашите RC играчки с движението на ръката си: 4 стъпки (със снимки)
Прост контрол с жестове - Контролирайте вашите RC играчки с движението на ръката си: Добре дошли в моя „ible“#45. Преди малко направих напълно работеща RC версия на BB8, използвайки части от Lego Star Wars … https://www.instructables.com/id/Whats-Inside-My-R … Когато видях колко е готино Force Band, направен от Sphero, си помислих: „Добре, аз
SKARA- Автономен плюс ръчен робот за почистване на плувни басейни: 17 стъпки (със снимки)
SKARA- Робот за почистване на басейни с ръчно почистване: Времето е пари, а ръчният труд е скъп. С появата и напредъка на технологиите за автоматизация трябва да се разработи безпроблемно решение за собствениците на жилища, общества и клубове за почистване на басейни от отломките и мръсотията на ежедневието, за да
Nevma: Контрол с жестове за масите: 3 стъпки (със снимки)
Nevma: Контрол на жестове за масите: Работата в Delphi (скоро Aptiv) ми позволява лукса да бъда потопен във високотехнологична и иновативна среда, която осигурява постоянно вдъхновение за създаване на нови и вълнуващи джаджи. Един ден някои колеги споменаха, че контролът с жестове е един от
Безжичен роботизиран ръчен контрол с жест и глас: 7 стъпки (със снимки)
Безжична роботизирана ръка, контролирана от жестове и глас: По принцип това беше нашият проект за колеж и поради липса на време да изпратим този проект, забравихме да направим снимки на някои стъпки. Ние също така разработихме код, чрез който човек може да контролира тази роботизирана ръка, като използва жест и глас едновременно, но поради