תוכן עניינים:
- שלב 1: דברים נדרשים:
- שלב 2: עקרון העבודה:
- שלב 3: כניסת קלט ועיבוד:
- שלב 4:
- שלב 5:
- שלב 6: חלק עיבוד:
- שלב 7:
- שלב 8:
- שלב 9:
- שלב 10:
- שלב 11:
- שלב 12: בקרת תנועה:
- שלב 13:
וִידֵאוֹ: הוק מחווה: רובוט נשלט על ידי מחוות יד באמצעות ממשק מבוסס עיבוד תמונה: 13 שלבים (עם תמונות)
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:15
Gesture Hawk הוצג ב- TechEvince 4.0 כממשק פשוט המבוסס על עיבוד תמונה ומכונה. התועלת שלה טמונה בעובדה שאין צורך בחיישנים נוספים או לבישים למעט כפפה בכדי לשלוט במכונית הרובוטית הפועלת על עקרון הנעה דיפרנציאלי. במדריך זה, ניקח אותך על עקרון העבודה מאחורי מעקב אחר אובייקטים וזיהוי מחוות המשמשים את המערכת. ניתן להוריד את קוד המקור של פרויקט זה מ- Github באמצעות קישור:
שלב 1: דברים נדרשים:
- נהג מנוע L298N
- מנועי DC
- שלדת מכונית רובוטית
- ארדואינו אונו
- סוללות LiPo
- כבל USB Arduino (ארוך)
- ספריית OpenCV עם Python
שלב 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', 'image', 110, 255, כלום) cv2.createTrackbar ('l_S ',' תמונה ', 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, כלום) בעוד (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_ '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]) higher_R = np.array ([hH, hS, hV]) mask = cv2.inRange (hsv, lower_R, higher_R) res = cv2.bitwise_and (מסגרת, מסגרת, מסכה = מסכה) cv2.imshow ('image', res) k = cv2.waitKey (1) & 0xFF אם k == 27: break cv2.destroyAllWindows ()
שלב 6: חלק עיבוד:
ובכן, יש לנו צורה גיאומטרית של יד, עכשיו הגיע הזמן לנצל אותה ולנצל אותה כדי להבין את מחוות הידיים.
גוף קמור:
באמצעות גוף קמור, אנו מנסים להתאים מצולע משוער באמצעות נקודות קיצון הנמצאות בצורה. התמונה המופיעה משמאל מציגה את המצולע המשוער שהוקצה לצורה כשהנקודות הקמורות מסומנות באדום.
נקודות קמורות הן הנקודות בצורה הנמצאות רחוק ביותר מצלע של מצולע משוער זה. אבל הבעיה עם גוף קמור היא שבמהלך החישוב שלו נקבל מערך של כל הנקודות הקמורות אבל מה שאנחנו צריכים הוא הנקודה הקמורה הכחולה. אנו נספר לך מדוע יש צורך בכך.
כדי למצוא נקודה קמורה זו, עלינו ליישם את נוסחת המרחק הניצב למציאת המרחק של הנקודה הקמורה עם הצד הקרוב ביותר. הבחנו כי לנקודה המחודדת הכחולה יש מרחק מרבי מהצד ולכן אנו מקבלים את הנקודה הזו.
שלב 7:
שלב 8:
בשלב הבא עלינו למצוא את נטיית הקו המצטרף לקצה האגודל (או לנקודה הקיצונית) לנקודה קמורה זו עם אופקית.
שלב 9:
במקרה לעיל, הזווית α צריכה להיות בין 0 ל- 90 מעלות אם המחווה היא לפנייה שמאלה. כלומר שיזוף (α) צריך להיות חיובי.
שלב 10:
במקרה לעיל, הזווית α צריכה להיות בין 180 ל- 90 מעלות אם המחווה היא לפנייה ימינה. כלומר שיזוף (α) צריך להיות שלילי.
לכן, אם טאן α חיובי, אז פנייה שמאלה. אם טאן α הוא שלילי, אז פנה ימינה. כעת, הגיע הזמן לראות כיצד לזהות את פקודת העצירה החשובה ביותר.
כאן נבדק יחס מוגדר (שנמצא על ידי פגיעה וניסוי) ובמקרים המרביים יחס המרחקים הזה נשאר בטווח הספציפי הזה.
שלב 11:
סוף סוף מחוות תנועה קדימה מנותחת על ידי פונקציית matchShape () ב- OpenCV. פונקציה זו משווה את צורת שני הסופרים, במקרה זה, בין דוגמא לאימון על אבן בתמונה למעלה לקווי המתאר בצד שמאל של התמונה למעלה. הוא מחזיר ערך שנע בין 0 ל -2 או 3, על פי הווריאציה הקיימת בצורת שתי קווי מתאר. עבור אותו מתאר זהה, הוא מחזיר 0.
ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)
כאן, cn1 ו- cnt2 הן שתי קווי המתאר שיש להשוות.
שלב 12: בקרת תנועה:
PySerial:
השתמשנו בספריית PySerial של פייתון כדי להמיר את הנתונים המעובדים לנתונים סדרתיים שיועברו ל- Arduino Uno באמצעות כבל USB Arduino. לאחר שזוהתה מחווה מסוימת על ידי opencv יצרנו משתנה זמני שאומר 'x' והקצנו לו ערך ייחודי והמירנו אותו לקלט סידורי באמצעות שורת הפקודה הבאה:-
יבוא סדרתי #t ליבוא ספריית Pyserial
serial. Serial ('', baudrate = '9600', timeout = '0') # הגדרת פלט סדרתי.. שם הנמל הוא שם הנמל שבאמצעותו תתבצע העברת נתונים.
serial.write (b'x ') # x הוא האלפבית שנשלח ליציאה … b הוא להמיר מחרוזת זו לבייטים.
עיבוד ארדואינו:
כעת ארדואינו מקודד בצורה כזו שכל x סדרתי שונה ממופה באופן לינארי לפעולה מסוימת האחראית לתנועה חלקה של רובוט (נניח שזיהוי מחווה שמאל יפעיל את המנועים ימינה לפנייה שמאלה). אנו יכולים לשלוט בתנועת כל גלגל מבחינה תרגומית וגם סיבובית על ידי שינוי הקוד הנכון.
נהג מנוע L298N:-
נהג מנוע משמש כמתווך בין המנוע למקור החשמל מכיוון שלא ניתן להפעיל מנועים ישירות בגלל דירוגי מתח נמוך. סוללת Li-Po מחוברת למסוף הכניסה שלה 12V ואנחנו מחברים את שקע 5V של arduino לשקע הכניסה של 5V של נהג המנוע, המחבר סוף סוף את הקרקע של Li-Po כמו גם את arduino בשקע קרקע משותף של נהג המנוע.
כעת מסופי המנועים מחוברים בשקעים שניתנו. לבסוף אנו מחברים מסופי קלט למנוע לשקעי פלט PWM של ארדואינו ומאפשרים לנו להחליט בצורה מדויקת על היבטי הסיבוב והתרגום של התנועה.
מוּמלָץ:
רובוט נשלט באמצעות מחוות באמצעות Arduino: 7 שלבים
רובוט נשלט באמצעות מחוות באמצעות Arduino: רובוטים משמשים במגזרים רבים כמו בנייה, צבא, ייצור, הרכבה וכו '. רובוטים יכולים להיות אוטונומיים או אוטונומיים למחצה. רובוטים אוטונומיים אינם דורשים שום התערבות אנושית ויכולים לפעול בעצמם בהתאם למצב. ראה
עכבר נשלט על ידי מחוות באמצעות מיקרו: ביט: 5 שלבים
עכבר הנשלט על ידי מחוות באמצעות מיקרו: ביט: מבוא הפרויקט הוא עכבר הנשלט על ידי מחוות, בדמות כפפה עם מיקרו: ביט מוטבע בתוכה. זהו פרויקט בהשראת רעיון מוקדם שהיה לי כמהנדס מוטבע. אני תמיד רוצה לקבל גישה לעכבר ומקלדת אלחוטית
רובוט SCARA: למידה על קיממטיקה של פאוורד והיפוך !!! (עלילת טוויסט למד כיצד ליצור ממשק בזמן אמת ב- ARDUINO באמצעות עיבוד !!!!): 5 שלבים (עם תמונות)
רובוט SCARA: למידה על קיממטיקה של פאוורד והיפוך !!! (Plot Twist למד כיצד ליצור ממשק בזמן אמת ב- ARDUINO באמצעות עיבוד !!!!): רובוט SCARA הוא מכונה פופולרית מאוד בעולם התעשייה. השם מייצג הן זרוע רובוט הרכבה תואמת סלקטיבית והן זרוע רובוט מפרקית תואמת סלקטיבית. זהו בעצם רובוט של שלוש דרגות של חופש, בהיותו שני ההחלפות הראשונות
רובוט ארדואינו עם מרחק, כיוון ותואר סיבוב (מזרח, מערב, צפון, דרום) נשלט על ידי קול באמצעות מודול Bluetooth ותנועת רובוט אוטונומית .: 6 שלבים
רובוט ארדואינו עם מרחק, כיוון ותואר סיבוב (מזרח, מערב, צפון, דרום) הנשלט על ידי קול באמצעות מודול Bluetooth ותנועת רובוט אוטונומית: מדריך זה מסביר כיצד להכין רובוט ארדואינו הניתן לכיוון בנדרש (קדימה, אחורה , שמאל, ימין, מזרח, מערב, צפון, דרום) נדרש מרחק בסנטימטרים באמצעות הפקודה הקולית. ניתן להזיז את הרובוט באופן אוטונומי
רובר נשלט באמצעות מחווה באמצעות מד תאוצה ומשדר משדר-מקלט RF: 4 שלבים
רובר מבוקר באמצעות מחווה באמצעות מד תאוצה ומשדר מקלט RF: היי, תמיד רצית לבנות רובר שתוכל לנווט באמצעות מחוות יד פשוטות, אך לעולם לא תוכל לאזור אומץ להיכנס למורכבויות עיבוד התמונה ולממשק מצלמת רשת עם שלך מיקרו -בקר, שלא לדבר על העלייה