Мазмұны:

Gesture Hawk: Қолмен қимылмен басқарылатын робот кескінді өңдеу интерфейсін қолданады: 13 қадам (суреттермен)
Gesture Hawk: Қолмен қимылмен басқарылатын робот кескінді өңдеу интерфейсін қолданады: 13 қадам (суреттермен)

Бейне: Gesture Hawk: Қолмен қимылмен басқарылатын робот кескінді өңдеу интерфейсін қолданады: 13 қадам (суреттермен)

Бейне: Gesture Hawk: Қолмен қимылмен басқарылатын робот кескінді өңдеу интерфейсін қолданады: 13 қадам (суреттермен)
Бейне: Gesture Hawk - Hand Gesture Controlled Bot, Robotics Club, IIT Guwahati 2024, Шілде
Anonim
Gesture Hawk: суретті өңдеуге негізделген интерфейсті қолданатын қолмен басқарылатын робот
Gesture Hawk: суретті өңдеуге негізделген интерфейсті қолданатын қолмен басқарылатын робот

Gesture Hawk TechEvince 4.0-де адам-машиналық интерфейске негізделген суретті өңдеуге арналған қарапайым құрал ретінде көрсетілді. Оның дифференциалды жетек принципі бойынша жұмыс істейтін роботты машинаны басқару үшін қолғаптан басқа қосымша датчиктер немесе киінетін киімдер қажет емес. Бұл нұсқаулықта біз сізді жүйеде қолданылатын объектілерді бақылау мен қимылды анықтаудың жұмыс принципі бойынша қарастырамыз. Бұл жобаның бастапқы кодын Github-тан сілтеме арқылы жүктеуге болады:

1 -қадам: Қажетті нәрселер:

Қажет нәрселер
Қажет нәрселер
Қажет нәрселер
Қажет нәрселер
Қажет нәрселер
Қажет нәрселер
Қажет нәрселер
Қажет нәрселер
  1. L298N мотор драйвері
  2. DC қозғалтқыштары
  3. Робот автокөлік шассиі
  4. Ардуино Уно
  5. LiPo батареялары
  6. Arduino USB кабелі (ұзын)
  7. Python көмегімен OpenCV кітапханасы

2 -қадам: ЖҰМЫС ПРИНЦИПІ:

ЖҰМЫС ПРИНЦИПІ
ЖҰМЫС ПРИНЦИПІ

Gesture Hawk - бұл жоғарыда көрсетілген диаграммадан көріп тұрғандай үш фазалы өңдеу жүйесі.

3 -қадам: КІРІС ЖАЗУ ЖӘНЕ ӨҢДЕУ:

Кіріс түсіру және өңдеу
Кіріс түсіру және өңдеу

Кіріс түсіруді жоғарыдағы диаграммада берілген кеңірек категорияларда түсінуге болады.

Қолдың пішінін қоршаған ортадан алу үшін бізге белгілі бір түстің маскировкасы немесе сүзгісі қажет (бұл жағдайда - күлгін көк »). Мұны істеу үшін суретті BGR -ден HSV форматына түрлендіру қажет, оны келесі код үзіндісі арқылы жасауға болады.

hsv = cv2.cvtColor (кадр, cv2. COLOR_BGR2HSV)

Енді келесі қадам - қолды маска немесе сүзгі арқылы шығаратын HSV параметрлерінің қажетті диапазонын табу. Бұл үшін қолайлы диапазонды табу үшін жолақтарды пайдалану ең жақсы әдіс. Міне, бұл жоба үшін пайдаланылатын жолақтардың скриншоты.

4 -қадам:

Кескін
Кескін

5 -қадам:

Міне, маска жасау үшін осындай жолақ жасау үшін төменде берілген код үзіндісі бар:

cv2 импорттау

numpy файлын npdef ретінде импорттау (x): cv2.namedWindow ('сурет') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'сурет', 110, 255, ештеңе) емес cv2.createTrackbar ('l_S ',' image ', 50, 255, ештеңе) cv2.createTrackbar (' l_V ',' image ', 50, 255, ештеңе) cv2.createTrackbar (' h_H ',' image ', 130, 255, ештеңе) cv2. createTrackbar ('h_S', 'image', 255, 255, ештеңе) cv2.createTrackbar ('h_V', 'image', 255, 255, ештеңе) while (1): _, frame = img.read ()

hsv = cv2.cvtColor (кадр, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos ('l_H', 'сурет') lS = cv2.getTrackbarPos ('l_S', 'сурет') lV = cv2.getTrack_Pos (' 'image') hH = cv2.getTrackbarPos ('h_H', 'image') hS = cv2.getTrackbarPos ('h_S', 'image') hV = cv2.getTrackbarPos ('h_V', 'image') төменгі_R = np. массив ([lH, lS, lV]) жоғарырақ_R = np.array ([hH, hS, hV]) маска = cv2.inRange (hsv, төменгі_R, жоғары_R) res = cv2.біліспен_және (жақтау, жақтау, маска = маска) cv2.imshow ('image', res) k = cv2.waitKey (1) & 0xFF if k == 27: break cv2.destroyAllWindows ()

6 -қадам: ӨНДІРУ БӨЛІМІ:

ӨҢДЕУ БӨЛІМІ
ӨҢДЕУ БӨЛІМІ

Бізде қолдың геометриялық фигурасы бар, енді оны пайдаланып, қол қимылын анықтау үшін қолданатын уақыт келді.

Дөңес корпус:

Дөңес корпус арқылы біз формадағы экстремалды нүктелер арқылы жуық полигонды орнатуға тырысамыз. Сол жақтағы суретте дөңес нүктелері қызыл түспен белгіленген пішінге берілген шамамен полигон көрсетілген.

Дөңес нүктелер - бұл жуықталған көпбұрыштың жанынан ең алыс орналасқан пішіндегі нүктелер. Бірақ дөңес корпустағы мәселе мынада: оны есептеу кезінде біз барлық дөңес нүктелердің жиынын аламыз, бірақ бізге керегі - көк түсті дөңес нүкте. Біз сізге не үшін қажет екенін айтамыз.

Бұл дөңес нүктені табу үшін біз ең жақын қабырғасы бар дөңес нүктенің қашықтығын табудың перпендикулярлық қашықтық формуласын қолдануымыз керек. Біз көк нүктенің бүйірден максималды қашықтыққа ие екенін байқадық, сондықтан біз бұл нүктені аламыз.

7 -қадам:

Кескін
Кескін

8 -қадам:

Кескін
Кескін

Содан кейін біз бас бармақтың ұшын (немесе шеткі нүктені) көлденеңінен осы дөңес нүктеге қосатын сызықтың көлбеуін табуымыз керек.

9 -қадам:

Кескін
Кескін

Жоғарыда айтылған жағдайда α бұрышы 0 -ден 90 градусқа дейін болуы керек, егер қимыл солға бұрылуға арналған болса. Яғни, tan (α) оң болуы керек.

10 -қадам:

Кескін
Кескін

Жоғарыда айтылған жағдайда α бұрышы 180-90 градус аралығында болуы керек, егер қимыл оңға бұрылуға арналған болса. Яғни, tan (α) теріс болуы керек.

Сондықтан, егер Tan α оң болса, онда солға бұрылу. Егер Tan α теріс болса, онда оңға бұрылу. Енді, ең маңызды тоқтату пәрменін қалай анықтау керектігін білу уақыты келді.

Мұнда көрсетілген қатынас (соққы мен сынақ бойынша табылған) зерттеледі және максималды жағдайда бұл ара қашықтық осы нақты диапазонда қалады.

11 -қадам:

Кескін
Кескін

Ақырында, алдын ала қимыл қозғалысы OpenCV -де matchShape () функциясымен талданады. Бұл функция екі есептегіштің пішінін салыстырады, бұл жағдайда жоғарыдағы суреттегі үштікке үйрету мысалы жоғарыдағы суреттің сол жағындағы контурмен салыстырылады. Ол екі контур түрінде болатын вариацияға сәйкес 0 -ден 2 -ге немесе 3 -ке дейінгі мәнді қайтарады. Бірдей контур үшін ол 0 қайтарады.

ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)

Мұнда cn1 мен cnt2 - салыстыруға болатын екі контур.

12 -қадам: Қозғалысты басқару:

Қозғалысты басқару
Қозғалысты басқару

PySerial:

Біз Python PySerial кітапханасын өңделген деректерді Arduino Uno USB кабелі арқылы Arduino Uno -ға жеткізу үшін сериялық деректерге түрлендіру үшін қолдандық. Белгілі бір қимыл opencv арқылы анықталғаннан кейін біз «x» деп айтатын уақытша айнымалы құрдық және оған бірегей мән бердік және оны келесі пәрмен жолы арқылы сериялық енгізуге айналдырдық:-

Pyserial кітапханасын импорттау үшін сериялық #импорттаңыз

serial. Serial ('', baudrate = '9600', timeout = '0') # сериялық шығуды реттеу.. ПОРТ АТАУЫ - деректерді беру жүзеге асатын порт атауы.

serial.write (b'x ') # x - портқа жіберілген алфавит… b - бұл жолды байтқа түрлендіру.

Arduino өңдеу:

Енді arduino әр түрлі сериялық х роботтың бірқалыпты қозғалысы үшін жауап беретін белгілі бір әрекетке сызықты түрде сәйкес келетін түрде кодталған (сол қимылдың анықталуы қозғалтқыштарды оңға қарай бұруға мүмкіндік береді). Біз кодты дұрыс өзгерту арқылы әр дөңгелектің қозғалысын трансляциялық және айналмалы түрде басқара аламыз.

L298N мотор драйвері:-

Қозғалтқыш пен қуат көзі арасындағы делдал ретінде мотор драйвері қолданылады, себебі төмен кернеу көрсеткіштеріне байланысты қозғалтқыштарды тікелей қуаттандыру мүмкін емес. Li-Po аккумуляторы оның 12 В кіріс терминалына қосылған және біз 5 вольтты розетканы мотор драйверінің 5 В кіріс розеткасына қосамыз, ақырында Li-Po жерін қосамыз, сонымен қатар мотор драйверінің жалпы жерге қосылған розеткасына ардуино қосамыз.

Енді қозғалтқыштардың терминалдары берілген розеткаларға қосылады. Соңында біз қозғалтқыштың кіріс терминалдарын arduino PWM шығыс ұяшығына қосамыз, бұл бізге қозғалыстың айналу және аудару аспектілерін дәл шешуге мүмкіндік береді.

Ұсынылған: