Mundarija:

Gesture Hawk: Tasvirni qayta ishlashga asoslangan interfeys yordamida qo'lda boshqariladigan robot: 13 qadam (rasmlar bilan)
Gesture Hawk: Tasvirni qayta ishlashga asoslangan interfeys yordamida qo'lda boshqariladigan robot: 13 qadam (rasmlar bilan)

Video: Gesture Hawk: Tasvirni qayta ishlashga asoslangan interfeys yordamida qo'lda boshqariladigan robot: 13 qadam (rasmlar bilan)

Video: Gesture Hawk: Tasvirni qayta ishlashga asoslangan interfeys yordamida qo'lda boshqariladigan robot: 13 qadam (rasmlar bilan)
Video: Bu Yura Parkiga o'xshaydi. ๐Ÿฆ–๐Ÿฆ• - Mexico Rex GamePlay ๐ŸŽฎ๐Ÿ“ฑ ๐Ÿ‡บ๐Ÿ‡ฟ 2024, Noyabr
Anonim
Gesture Hawk: Tasvirni qayta ishlashga asoslangan interfeys yordamida qo'lda ishorali boshqariladigan robot
Gesture Hawk: Tasvirni qayta ishlashga asoslangan interfeys yordamida qo'lda ishorali boshqariladigan robot

Gesture Hawk TechEvince 4.0 da tasvirni qayta ishlashga asoslangan oddiy inson-mashina interfeysi sifatida namoyish etildi. Uning foydasi shundaki, differentsial haydash printsipida ishlaydigan robotli mashinani boshqarish uchun qo'lqopdan boshqa qo'shimcha datchiklar yoki taqiladigan kiyimlar kerak emas. Bu yo'riqnomada biz sizni tizimda ishlatiladigan ob'ektlarni kuzatish va imo -ishoralarni aniqlash printsipi bilan tanishtiramiz. Ushbu loyihaning manba kodini Github-dan havola orqali yuklab olish mumkin:

1 -qadam: talab qilinadigan narsalar:

Kerakli narsalar
Kerakli narsalar
Kerakli narsalar
Kerakli narsalar
Kerakli narsalar
Kerakli narsalar
Kerakli narsalar
Kerakli narsalar
  1. L298N dvigatel uchun haydovchi
  2. DC motorlar
  3. Robotli avtomobil shassisi
  4. Arduino Uno
  5. LiPo batareyalari
  6. Arduino USB kabeli (uzun)
  7. Python bilan OpenCV kutubxonasi

2 -qadam: Ish printsipi:

Ish printsipi
Ish printsipi

Gesture Hawk - bu uch bosqichli ishlov berish tizimi, yuqoridagi diagrammada ko'rib turganingizdek.

3 -qadam: Kirish va ishlov berish:

Kirish va ishlov berish
Kirish va ishlov berish

Kirish yozuvini yuqoridagi diagrammada berilgan kengroq toifalarda tushunish mumkin.

Qo'l shaklini atrof -muhitdan ajratib olish uchun biz ma'lum bir rangni niqoblash yoki filtrlashimiz kerak (bu holda - binafsha rang ko'k). Buning uchun siz tasvirni BGR -dan HSV formatiga o'zgartirishingiz kerak, uni quyidagi kod parchasi yordamida bajarish mumkin.

hsv = cv2.cvtColor (ramka, cv2. COLOR_BGR2HSV)

Endi, keyingi qadam - qo'lni niqob yoki filtr orqali chiqarib olish uchun kerakli HSV parametrlari diapazonini topish. Buning uchun eng yaxshi usul - mos diapazonni topish uchun treklardan foydalanish. Mana bu loyiha uchun ishlatiladigan trekka barining skrinshoti.

4 -qadam:

Rasm
Rasm

5 -qadam:

Bu erda niqob qurilishi uchun shunday yo'l paneli yaratish uchun quyida berilgan kod parchasi mavjud:

cv2 import qilish

npdef hech narsa (x) sifatida import qilish: cv2.namedWindow ('rasm') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'tasvir', 110, 255, hech narsa) cv2.createTrackbar ('l_S ',' tasvir ', 50, 255, hech narsa) cv2.createTrackbar (' l_V ',' tasvir ', 50, 255, hech narsa) cv2.createTrackbar (' h_H ',' tasvir ', 130, 255, hech narsa) cv2. createTrackbar ('h_S', 'tasvir', 255, 255, hech narsa) cv2.createTrackbar ('h_V', 'tasvir', 255, 255, hech narsa) while (1): _, frame = img.read ()

hsv = cv2.cvtColor (ramka, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos ('l_H', 'tasvir') lS = cv2.getTrackbarPos ('l_S', 'rasm') lV = cv2.getTrack_Pos (' 'tasvir') hH = cv2.getTrackbarPos ('h_H', 'tasvir') hS = cv2.getTrackbarPos ('h_S', 'tasvir') hV = cv2.getTrackbarPos ('h_V', 'rasm') pastki_R = np. qator ([lH, lS, lV]) yuqori_R = np.array ([hH, hS, hV]) niqob = cv2.inRange (hsv, pastki_R, yuqori_R) res = cv2.bitwise_and (ramka, ramka, niqob = niqob) cv2.imshow ('image', res) k = cv2.waitKey (1) & 0xFF if k == 27: break cv2.destroyAllWindows ()

6 -qadam: ishlov berish qismi:

Ishlov berish qismi
Ishlov berish qismi

Xo'sh, biz qo'lning geometrik shaklini oldik, endi uni ishlatish va qo'l harakatini aniqlash uchun foydalanish vaqti keldi.

Qavariq korpus:

Qavariq korpus orqali biz shaklning o'ta nuqtalari orqali taxminiy ko'pburchakni o'rnatishga harakat qilamiz. Chapdagi rasmda qavariq nuqtalari qizil bilan belgilangan shaklga berilgan taxminiy ko'pburchak ko'rsatilgan.

Qavariq nuqtalar - bu taxmin qilingan ko'pburchakning eng chetida joylashgan shakldagi nuqtalar. Ammo, qavariq korpus bilan bog'liq muammo shundaki, uni hisoblash paytida biz barcha qavariq nuqtalarni olamiz, lekin bizga kerak bo'lgan - ko'k uchli qavariq nuqta. Sizga nima uchun kerakligini aytamiz.

Bu qavariq nuqtani topish uchun biz eng yaqin tomoni bo'lgan qavariq nuqtaning masofasini topish uchun perpendikulyar masofa formulasini qo'llashimiz kerak. Biz ko'rdikki, ko'k nuqta yon tomondan maksimal masofaga ega va shuning uchun biz bu nuqtani olamiz.

7 -qadam:

Rasm
Rasm

8 -qadam:

Rasm
Rasm

Keyinchalik, bosh barmog'ining uchini (yoki o'ta nuqtasini) gorizontal bilan bu qavariq nuqtaga bog'laydigan chiziqning moyilligini topishimiz kerak.

9 -qadam:

Rasm
Rasm

Yuqoridagi holatda, a burchagi 0 dan 90 darajagacha bo'lishi kerak, agar imo -ishora chapga burilgan bo'lsa. Ya'ni tan (a) ijobiy bo'lishi kerak.

10 -qadam:

Rasm
Rasm

Yuqoridagi holatda, a ishorasi o'ngga burilish uchun bo'lsa, a burchagi 180 dan 90 darajagacha bo'lishi kerak. Ya'ni tan (a) manfiy bo'lishi kerak.

Agar Tan a ijobiy bo'lsa, chapga burilish. Agar Tan a salbiy bo'lsa, u holda o'ngga burilish. Endi, eng muhim to'xtatish buyrug'ini qanday aniqlashni ko'rish vaqti keldi.

Bu erda ma'lum bir nisbat (urish va sinov orqali topilgan) tekshiriladi va maksimal hollarda bu masofalar nisbati aynan shu diapazonda qoladi.

11 -qadam:

Rasm
Rasm

Nihoyat, old harakat harakati OpenCV -da matchShape () funktsiyasi yordamida tahlil qilinadi. Bu funksiya ikkita hisoblagichning shaklini solishtiradi, bunda yuqoridagi rasmdagi uchburchakni o'rgatish misoli bilan yuqoridagi rasmning chap tomonidagi kontur. Ikki kontur shaklidagi o'zgarishlarga ko'ra, u 0 dan 2 yoki 3 gacha bo'lgan qiymatni qaytaradi. Xuddi shu kontur uchun u 0 qaytaradi.

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

Bu erda cn1 va cnt2 - solishtiriladigan ikkita kontur.

12 -qadam: HARAKATNI NAZORAT:

Harakatni boshqarish
Harakatni boshqarish

PySerial:

Biz Python PySerial kutubxonasidan foydalanib, qayta ishlangan ma'lumotlarni Arduino Uno -ga Arduino USB kabeli orqali uzatiladigan ketma -ket ma'lumotlarga aylantirdik. Opencv orqali ma'lum bir imo-ishorani aniqlagandan so'ng, biz "x" deb aytadigan vaqtinchalik o'zgaruvchini yaratdik va unga noyob qiymat berdik va uni quyidagi buyruq satri yordamida ketma-ket kirishga aylantirdik:-

Pyserial kutubxonasini import qilish uchun serial #ni import qiling

serial. Serial ('', baudrate = '9600', timeout = '0') # ketma -ket chiqishni sozlash.. PORT NAME - bu ma'lumot uzatiladigan port nomi.

serial.write (b'x ') # x - portga yuborilgan alifboโ€ฆ b - bu satrni baytga aylantirish.

Arduino -ni qayta ishlash:

Endi arduino shunday kodlanganki, har bir ketma -ket ketma -ket robotning silliq harakati uchun javobgar bo'lgan har qanday ketma -ket chiziqli xaritada ko'rsatiladi (masalan, chap ishorani aniqlash dvigatellarni o'ngga burilishga olib keladi). Kodni to'g'ri o'zgartirish orqali biz har bir g'ildirakning harakatini tarjimali va aylanma tarzda nazorat qila olamiz.

L298N dvigatel haydovchisi:-

Dvigatel haydovchisi vosita va quvvat manbai o'rtasida vositachi sifatida ishlatiladi, chunki past kuchlanish ko'rsatkichlari tufayli dvigatellarni to'g'ridan -to'g'ri quvvatlantirish mumkin emas. Li-Po batareyasi 12V kirish terminaliga ulangan va biz arduino 5V soketini dvigatel haydovchisining 5V kirish rozetkasiga ulaymiz, nihoyat Li-Po erini, shuningdek, dvigatel drayverining umumiy rozetkasida arduino.

Endi dvigatellarning terminallari berilgan rozetkalarga ulangan. Nihoyat, biz dvigatel uchun kirish terminallarini arduino -ning PWM chiqish rozetkalariga ulaymiz, bu esa harakatning aylanish va tarjima jihatlarini aniq tanlash imkonini beradi.

Tavsiya: