- נדרש חומרה:
- דרישת תכנות:
- הגדרת עיבוד ב- Raspberry Pi:
- תרשים מעגל:
- תוכנית מעקב כדורי פטל:
- עבודה של רובוט מעקב אחר פטל פי:
תחום הרובוטיקה, הבינה המלאכותית ולמידת המכונה מתפתח במהירות, כך שהוא בטוח ישנה את אורח החיים של האנושות בעתיד הקרוב. חושבים שרובוטים מבינים ומתקשרים עם העולם האמיתי באמצעות חיישנים ועיבוד למידת מכונה. זיהוי תמונות הוא אחת האופן הפופולרי שבו הרובוטים חושבים להבין אובייקטים על ידי התבוננות על העולם האמיתי דרך מצלמה בדיוק כמונו. בפרויקט זה, נשתמש בכוחו של Raspberry Pi לבניית רובוט שיכול לעקוב אחר הכדור ולעקוב אחריו בדיוק כמו הרובוטים שמשחקים כדורגל.
OpenCV הוא כלי מקור פתוח ומפורסם ביותר המשמש לעיבוד תמונה, אך במדריך זה בכדי לשמור על פשטות אנו משתמשים ב- IDE Processing. מכיוון שעיבוד עבור ARM פרסם גם את ספריית GPIO לעיבוד, לא נצטרך לעבור בין פיתון לעיבוד יותר כדי לעבוד עם Raspberry Pi. נשמע מגניב נכון? אז בואו נתחיל.
נדרש חומרה:
- פאי פטל
- מודול מצלמה עם כבל סרט
- שלדת רובוטים
- מנועי הילוכים עם גלגל
- נהג מנוע L293D
- בנק כוח או כל מקור כוח נייד אחר
דרישת תכנות:
- צג או תצוגה אחרת עבור פטל פי
- לוח מפתח או עכבר עבור פי
- עיבוד תוכנת ARM
הערה: חובה להחזיק תצוגה המחוברת ל- Pi באמצעות חוטים במהלך התכנות מכיוון שרק אז ניתן לצפות בווידיאו של המצלמה
הגדרת עיבוד ב- Raspberry Pi:
כפי שנאמר קודם, נשתמש בסביבת העיבוד כדי לתכנת את ה- Raspberry Pi שלנו ולא דרך ברירת המחדל לשימוש בפייתון. לכן, בצע את השלבים הבאים:
שלב 1: - חבר את ה- Raspberry Pi שלך למסך, למקלדת ולעכבר והפעל אותו.
שלב 2: - ודא ש- Pi מחובר לחיבור אינטרנט פעיל מכיוון שאנחנו עומדים להוריד כמה דברים.
שלב 3: - לחץ על Processing ARM, כדי להוריד את IDE העיבוד עבור Raspberry Pi. ההורדה תהיה בצורה של קובץ ZIP.
שלב 4: - לאחר ההורדה, חילץ את הקבצים בתיקיית ה- ZIP שלך בספריה המועדפת עליך. פשוט חילצתי אותו על שולחן העבודה שלי.
שלב 5: - כעת, פתח את התיקיה שחולצה ולחץ על הקובץ בשם עיבוד. עליו לפתוח חלון כמוצג להלן.
שלב 6: - זו הסביבה בה נקליד את הקודים שלנו. לאנשים שמכירים את ארדואינו, אל תהיו המומים כן ה- IDE נראה דומה לארדואינו וכך גם התוכנית.
שלב 7: - אנחנו זקוקים לשתי ספריות כדי שהכדור הבא שלנו יעבוד כדי להתקין ואז פשוט לחץ על סקיצה -> ייבוא ספרייה -> הוסף ספרייה . תיבת הדו-שיח הבאה תיפתח.
שלב 8: - השתמש בתיבת הטקסט השמאלית העליונה כדי לחפש את Raspberry Pi ולחץ על Enter, תוצאת החיפוש שלך צריכה להיראות ככה.
שלב 9: - חפש את הספריות בשם "GL Video" ו- "I / O חומרה" ולחץ על התקן כדי להתקין אותן. הקפד להתקין את שתי הספריות.
שלב 10: - בהתבסס על האינטרנט שלך ההתקנה תארך מספר דקות. לאחר סיום אנו מוכנים לעיבוד תוכנה.
תרשים מעגל:
תרשים המעגל של פרויקט מעקב אחר כדורי פטל זה מוצג להלן.
כפי שאתה יכול לראות המעגל כולל מצלמת PI, מודול דרייבר מוטור וזוג מנועים המחוברים ל- Raspberry pi. המעגל השלם מופעל על ידי בנק כוח נייד (המיוצג על ידי סוללת AAA במעגל לעיל).
מכיוון שפרטי הפינים לא מוזכרים ב- Raspberry Pi, עלינו לאמת את הפינים באמצעות התמונה למטה
כדי להניע את המנועים, אנו זקוקים לארבעה פינים (A, B, A, B). ארבעת הפינים הללו מחוברים מ- GPIO14,4,17 ו- 18 בהתאמה. החוט הכתום והלבן יחד מהווה את החיבור למנוע אחד. אז יש לנו שני זוגות כאלה לשני מנועים.
המנועים מחוברים למודול נהג המנוע L293D כמוצג בתמונה ומודול הנהג מופעל על ידי בנק כוח. וודאו שאדמת בנק הכוח מחוברת לאדמת ה- Raspberry Pi, רק אז החיבור שלכם יעבוד.
זהו שסיימנו עם חיבור החומרה שלנו, בואו נחזור לסביבת העיבוד שלנו ונתחיל לתכנת כדי ללמד את הרובוט שלנו כיצד לעקוב אחר כדור.
תוכנית מעקב כדורי פטל:
תכנית העיבוד המוחלטת של פרויקט זה ניתנת בסוף הדף הזה, שבו אתה משתמש באופן ישיר. בהמשך, למטה, הסברתי את פעולת הקוד כך שתוכלו להשתמש בו לפרויקטים דומים אחרים.
קונספט התוכנית היא פשוטה מאוד. למרות שכוונת הפרויקט היא לעקוב אחר כדור, אנחנו למעשה לא הולכים לעשות את זה. אנחנו רק הולכים לזהות את הכדור באמצעות צבעו. כפי שכולנו יודעים סרטונים אינם אלא מסגרות רציפות של תמונות. אז אנחנו מצלמים כל תמונה ומחלקים אותה לפיקסלים. לאחר מכן אנו משווים כל צבע פיקסל עם צבע הכדור; אם נמצא התאמה, נוכל לומר שמצאנו את הכדור. בעזרת מידע זה אנו יכולים גם לזהות את מיקום הכדור (צבע הפיקסלים) על המסך. אם המיקום הוא שמאל קיצוני אנו מעבירים את הרובוט ימינה, אם המיקום הוא קיצוני ימינה אנו מעבירים את הרובוט שמאלה כך שמיקום הפיקסלים יישאר תמיד במרכז המסך. תוכלו לצפות בסרטון ראיית המחשב של דניאל שיפמן כדי לקבל תמונה ברורה.
כמו תמיד אנו מתחילים בייבוא שתי הספריות שאנו מורידים. ניתן לעשות זאת בשתי השורות הבאות. ספריית ה- I / O של חומרה משמשת לגישה לסיכות ה- GPIO של ה- PI ישירות מסביבת העיבוד, וספריית ה- glvideo משמשת לגישה למודול המצלמה Raspberry Pi.
עיבוד יבוא.או. *; יבוא gohai.glvideo. *;
בתוך פונקציית ההתקנה אנו מאתחלים את סיכות הפלט כדי לשלוט במנוע וגם מקבלים את הווידאו ממצלמת ה- pi ומגדלים אותו בחלון בגודל 320 * 240.
הגדרת חלל () {size (320, 240, P2D); וידאו = GLCapture חדש (זה); video.start (); trackColor = צבע (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
תיקו הריק הוא כמו לולאה אינסופית הקוד בתוך לולאה זה יהיה לבצע כל עוד התוכנית מסתיימת. אם מקור מצלמה זמין אנו קוראים את הסרטון שיוצא ממנו
ציור בטל () {רקע (0); אם (video.available ()) {video.read (); }}
ואז אנו מתחילים לפצל את מסגרת הווידאו לפיקסלים. לכל פיקסל ערך אדום, ירוק וכחול. ערכים אלה נשמרים במשתנה r1, g1 ו- b1
עבור (int x = 0; x <video.width; x ++) {for (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // מהו צבע הצבע הנוכחי currentColor = video.pixels; לצוף r1 = אדום (currentColor); לצוף g1 = ירוק (currentColor); לצוף b1 = כחול (currentColor);
כדי לזהות את צבע הכדור בהתחלה, עלינו ללחוץ על הצבע. לאחר לחיצה צבע הכדור יאוחסן במשתנה הנקרא trackColour .
void mousePressed () {// שמור צבע במקום בו לוחצים על העכבר במשתנה trackColor int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
ברגע שיש לנו את צבע המסלול ואת הצבע הנוכחי עלינו להשוות ביניהם. השוואה זו משתמשת בפונקציה dist. הוא בודק עד כמה קרוב הצבע הנוכחי לצבע המסלול.
צף d = dist (r1, g1, b1, r2, g2, b2);
ערך ה- dist יהיה אפס להתאמה מדויקת. לכן, אם הערך של dist הוא פחות מערך מוגדר (שיא עולמי), אנו מניחים שמצאנו את צבע המסלול. לאחר מכן אנו מקבלים את המיקום של אותו פיקסל ואוחסנים אותו במשתנה הכי קרוב X ו- Y הכי קרוב כדי למצוא את המיקום של הכדור
אם (d <worldRecord) {worldRecord = d; X הכי קרוב = x; קרוב ביותר Y = y; }
אנו מציירים גם אליפסה סביב הצבע שנמצא כדי לציין כי הצבע נמצא. ערך המיקום מודפס גם על הקונסולה, זה יעזור מאוד בזמן ניפוי באגים.
אם (worldRecord <10) {// צייר מעגל במילוי הפיקסלים במעקב (trackColor); strokeWeight (4.0); שבץ מוחי (0); אליפסה (קרובX, קרוב ביותרY, 16, 16); println (קרובX, קרוב ביותרY);
לבסוף נוכל להשוות את המיקום של ה- X וה- Y הקרובים ביותר ולהתאים את המנועים באופן שהצבע יגיע למרכז המסך. הקוד שלמטה משמש לסיבוב ימינה של הרובוט מכיוון שנמצא כי מיקום ה- X בצבע נמצא בצד שמאל של המסך (<140)
אם (קרוב ל <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); עיכוב (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("פנה ימינה"); }
באופן דומה אנו יכולים לבדוק את המיקום של X ו- Y כדי לשלוט במנועים בכיוון הנדרש. כמו תמיד ניתן להפנות את החלק התחתון של הדף לקבלת התוכנית השלמה.
עבודה של רובוט מעקב אחר פטל פי:
ברגע שאתה מוכן עם החומרה והתוכנית הגיע הזמן ליהנות קצת. לפני שנבדוק את הבוט שלנו על הקרקע, עלינו לוודא שהכל עובד בסדר. חבר את ה- Pi שלך לפקח ולהפעיל את קוד העיבוד. אתה אמור לראות את עדכון הווידאו בחלון קטן. כעת, הכניס את הכדור לתוך המסגרת ולחץ על הכדור כדי ללמד את הרובוט שעליו לעקוב אחר הצבע המסוים הזה. כעת הזז את הכדור סביב המסך וכדאי לשים לב לגלגלים מסתובבים.
אם הכל עובד כמצופה, שחרר את הבוט על הקרקע והתחיל לשחק איתו. ודא שהחדר מואר באופן שווה לקבלת התוצאות הטובות ביותר. העבודה המלאה של הפרויקט מוצגת בסרטון להלן. מקווה שהבנתם את הפרויקט ונהניתם לבנות משהו דומה. אם יש לך בעיות אל תהסס לפרסם אותן בסעיף ההערות למטה או לעזור.