Mündəricat:
- Addım 1: Tələb olunan şeylər:
- Addım 2: ÇALIŞMA PRİNSİBİ:
- Addım 3: GİRİŞ ÇƏKMƏ VƏ İŞLƏMƏ:
- Addım 4:
- Addım 5:
- Addım 6: BÖLMƏNİN İŞLƏNMƏSİ:
- Addım 7:
- Addım 8:
- Addım 9:
- Addım 10:
- Addım 11:
- Addım 12: HƏRƏKƏT NƏZARƏTİ:
- Addım 13:
Video: Jest Hawk: Şəkil İşləmə Əsaslı İnterfeysdən istifadə edərək Əl Jestinə Nəzarət Edilən Robot: 13 Addım (Şəkillərlə birlikdə)
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
Gesture Hawk, TechEvince 4.0-də sadə bir görüntü emalına əsaslanan insan-maşın interfeysi kimi nümayiş etdirildi. Faydası, diferensial idarəetmə prinsipi ilə işləyən robot maşını idarə etmək üçün əlcəkdən başqa heç bir əlavə sensora və ya geyilə bilməməsinə əsaslanır. Bu təlimatda sizi sistemdə istifadə olunan obyekt izləmə və jest aşkarlamanın iş prinsipi ilə tanış edəcəyik. Bu layihənin mənbə kodu Github-dan link vasitəsilə yüklənə bilər:
Addım 1: Tələb olunan şeylər:
- L298N motor sürücü
- DC mühərrikləri
- Robot avtomobil şassisi
- Arduino Uno
- LiPo batareyaları
- Arduino USB Kabeli (uzun)
- Python ilə OpenCV Kitabxanası
Addım 2: ÇALIŞMA PRİNSİBİ:
Gesture Hawk, yuxarıdakı diaqramda gördüyünüz kimi üç fazalı bir işləmə sistemidir.
Addım 3: GİRİŞ ÇƏKMƏ VƏ İŞLƏMƏ:
Giriş ələ keçirilməsi yuxarıdakı diaqramda verilən daha geniş kateqoriyalarda başa düşülə bilər.
Əl şəklini ətrafdan çıxarmaq üçün müəyyən bir rəngin maskalanmasından və ya süzülməsindən istifadə etməliyik (bu halda - bənövşəyi mavi '). Bunu etmək üçün görüntüyü aşağıdakı kod parçasından istifadə edərək edilə bilən BGR -dən HSV formatına çevirməlisiniz.
hsv = cv2.cvtColor (çərçivə, cv2. COLOR_BGR2HSV)
İndi, növbəti addım, maskanı və ya filtri əlini çıxarmaq üçün istədiyiniz HSV parametr aralığını tapmaqdır. Bunun üçün ən yaxşı yol uyğun bir aralıq tapmaq üçün yol çubuqlarından istifadə etməkdir. Bu layihə üçün istifadə olunan bir iz çubuğunun ekran görüntüsü.
Addım 4:
Addım 5:
Burada, maska istehsalı üçün belə bir iz çubuğu etmək üçün aşağıda verilmiş bir kod parçası var:
idxal cv2
npdef heç bir şey (x) olaraq numpy idxal edin: cv2.namedWindow ('image') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, heç bir şey) cv2.createTrackbar ('l_S ',' image ', 50, 255, heç bir şey) cv2.createTrackbar (' l_V ',' image ', 50, 255, heç bir şey) cv2.createTrackbar (' h_H ',' image ', 130, 255, heç bir şey) cv2. createTrackbar ('h_S', 'image', 255, 255, heç bir şey) cv2.createTrackbar ('h_V', 'image', 255, 255, heç bir şey) while (1): _, frame = img.read ()
hsv = cv2.cvtColor (çərçivə, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos ('l_H', 'görüntü') lS = cv2.getTrackbarPos ('l_S', 'görüntü') lV = cv2.getTrackVPos, ' 'image') hH = cv2.getTrackbarPos ('h_H', 'image') hS = cv2.getTrackbarPos ('h_S', 'image') hV = cv2.getTrackbarPos ('h_V', 'image') low_R = np. array ([lH, lS, lV]) ali_R = np.array ([hH, hS, hV]) maska = cv2.inRange (hsv, alt_R, daha yüksək_R) res = cv2.bitwise_and (çərçivə, çərçivə, maska = maska) cv2.imshow ('image', res) k = cv2.waitKey (1) & 0xFF if k == 27: break cv2.destroyAllWindows ()
Addım 6: BÖLMƏNİN İŞLƏNMƏSİ:
Əlin həndəsi formasına sahibik, indi onu istifadə etməyin və əl jestini anlamaq üçün istifadə etməyin vaxtı gəldi.
Konveks gövdə:
Konveks gövdə vasitəsilə, formada mövcud olan həddindən artıq nöqtələr vasitəsilə təxminən bir çoxbucaqlı yerləşdirməyə çalışırıq. Solda olan şəkil, qırmızı ilə işarələnmiş qabarıq nöqtələri olan forma verilən təxmini çoxbucağı göstərir.
Konveks nöqtələr, bu yaxınlaşdırılmış çoxbucağın bir tərəfindən ən uzaq olan formalı nöqtələrdir. Ancaq konveks gövdəsindəki problem, hesablama zamanı bütün qabarıq nöqtələrdən ibarət bir sıra əldə etməyimizdir, ancaq ehtiyacımız olan mavi uclu qabarıq nöqtədir. Niyə lazım olduğunu sizə xəbər verəcəyik.
Bu qabarıq nöqtəni tapmaq üçün ən yaxın tərəfi olan qabarıq nöqtənin məsafəsini tapmaq üçün dik məsafə düsturunu tətbiq etməliyik. Mavi sivri nöqtənin yan tərəfdən maksimum məsafəyə malik olduğunu müşahidə etdik və bu nöqtəni əldə edirik.
Addım 7:
Addım 8:
Sonra baş barmağının ucunu (və ya həddindən artıq nöqtəni) üfüqi olan bu qabarıq nöqtəyə birləşdirən xəttin meylini tapmalıyıq.
Addım 9:
Yuxarıda göstərilən vəziyyətdə, jest sola dönmə üçündürsə α bucağı 0 ilə 90 dərəcə arasında olmalıdır. Yəni tan (α) müsbət olmalıdır.
Addım 10:
Yuxarıda göstərilən halda, jest sağa dönmək üçündürsə α bucağı 180 ilə 90 dərəcə arasında olmalıdır. Yəni tan (α) mənfi olmalıdır.
Buna görə, Tan α müsbətdirsə, sola dönün. Tan α mənfi olarsa, sağa dönün. İndi ən vacib dayandırma əmrini necə aşkar edəcəyinizi görmək vaxtıdır.
Burada, müəyyən bir nisbət (vurma və sınaq yolu ilə tapılır) araşdırılır və maksimum hallarda bu məsafə nisbəti bu xüsusi aralığında qalır.
Addım 11:
Nəhayət, ön hərəkət jesti OpenCV -də matchShape () funksiyası ilə təhlil edilir. Bu funksiya, bu vəziyyətdə yuxarıdakı şəkildəki üçbucaqlı təlim nümunəsi ilə yuxarıdakı görüntünün sol tərəfindəki kontur arasındakı iki sayacın şəklini müqayisə edir. İki kontur şəklində mövcud olan dəyişikliyə görə 0 ilə 2 və ya 3 arasında dəyişən bir dəyər qaytarır. Eyni kontur üçün 0 qaytarır.
ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)
Burada cn1 və cnt2 müqayisə edilməli olan iki konturdur.
Addım 12: HƏRƏKƏT NƏZARƏTİ:
PySerial:
İşlənmiş məlumatları Arduino USB Kabel vasitəsilə Arduino Uno ilə əlaqə qurmaq üçün ardıcıl məlumatlara çevirmək üçün python PySerial kitabxanasından istifadə etdik. Opencv tərəfindən müəyyən bir jest aşkar edildikdən sonra 'x' deyən müvəqqəti bir dəyişən yaratdıq və ona unikal bir dəyər təyin etdik və aşağıdakı əmr satırından istifadə edərək serial girişinə çevirdik:-
Pyserial kitabxanasını idxal etmək üçün serial #-i idxal edin
serial. Serial ('', baudrate = '9600', timeout = '0') # serial çıxışı qurmaq.. PORT NAME, məlumat ötürülməsinin baş verəcəyi limanın adıdır.
serial.write (b'x ') # x limana göndərilən əlifba… b bu sətri bayta çevirməkdir.
Arduino İşləmə:
İndi arduino, hər bir fərqli seriya x -in robotun hamar bir hərəkətindən məsul olan müəyyən bir hərəkətlə xətti olaraq müqayisə edildiyi şəkildə kodlaşdırılmışdır (deyək ki, sol hərəkətin aşkarlanması sağdakı mühərrikləri sola çevirəcək). Kodu düzgün dəyişdirərək hər bir təkərin hərəkətini həm translational olaraq, həm də fırlanma ilə idarə edə bilərik.
L298N Motor sürücüsü:-
Motor Sürücü, aşağı gərginlik dərəcələri səbəbindən mühərriklərə birbaşa enerji verilə bilmədiyi üçün mühərriklə enerji mənbəyi arasında vasitəçi olaraq istifadə olunur. Li-Po Batareyası 12V giriş terminalına bağlıdır və biz arduino-nun 5V soketini motor sürücüsünün 5V giriş yuvasına, nəhayət Li-Po-nun və arduino-nun ümumi sürücülük yuvasına qoşuruq.
İndi mühərriklərin terminalları verilən rozetkalara bağlanır. Nəhayət, motorun giriş terminallarını arduinonun PWM çıxış yuvalarına bağlayırıq ki, hərəkətin fırlanma və tərcümə aspektlərini dəqiq bir şəkildə qərar verək.
Tövsiyə:
Arduino istifadə edərək DC MOTOR Əl Jestinə Nəzarət Sürəti və İstiqaməti: 8 addım
Arduino istifadə edərək DC MOTOR Əl Jestinə Nəzarət Sürəti və İstiqaməti: Bu dərsdə arduino və Visuino istifadə edərək bir DC motorunu əl hərəkətləri ilə idarə etməyi öyrənəcəyik. Videoya baxın! Əlavə jest təlimatı
Şəkil İşləmə Əsaslı Yanğın Tanıma və Söndürmə Sistemi: 3 Addım
Şəkil Emalına əsaslanan Yanğın Tanıma və Söndürmə Sistemi: Salam dostlar bu Arduino istifadə edərək görüntü emalına əsaslanan yanğın aşkarlama və söndürmə sistemidir
NodeMCU istifadə edərək IoT əsaslı Torpaq Nəmini İzləmə və Nəzarət Sistemi: 6 Addım
NodeMCU istifadə edərək IoT əsaslı Torpaq Nəminin İzlənməsi və Nəzarət Sistemi: Bu dərslikdə ESP8266 WiFi Modulu, yəni NodeMCU istifadə edərək IoT əsaslı Torpaq Nəminin İzlənməsi və İdarəetmə sistemini tətbiq edəcəyik. Bu layihə üçün lazım olan komponentlər: ESP8266 WiFi Modulu- Amazon (334/- INR) Relay Modulu- Amazon (130/- INR
ESP32 əsaslı veb serverindən istifadə edərək İnternetə nəzarət LED: 10 addım
ESP32 Əsaslı Veb Serverindən istifadə edərək İnternetə Nəzarət Edilən LED: Layihəyə ümumi baxış Bu nümunədə, dünyanın hər yerindən əldə edilə bilən LED vəziyyətini idarə etmək üçün ESP32 əsaslı bir veb serverin necə yaradılacağını anlayacağıq. Bu layihə üçün Mac kompüterə ehtiyacınız olacaq, ancaq bu proqramı hətta bir kompüterdə də işlədə bilərsiniz
Wemos D1 ESP8266, Arduino IDE və Blynk Tətbiqindən istifadə edərək Wi-Fi İdarə Edilən Robot: 11 Addım (Şəkillərlə birlikdə)
Wemos D1 ESP8266, Arduino IDE və Blynk Tətbiqindən istifadə edərək Wi-Fi İdarə Edilən Robot: Bu təlimatda sizə Blynk Tətbiqi istifadə edərək bir ağıllı telefondan idarə olunan Wi-Fi idarə olunan robot tankının necə hazırlanacağını göstərəcəyəm. Bu layihədə bir ESP8266 Wemos D1 lövhəsi istifadə edildi, lakin digər boşqab modelləri də istifadə edilə bilər (NodeMCU, Firebeetle və s.) Və pr