תוכן עניינים:
- אספקה
- שלב 1: מבוא
- שלב 2: חומרים ומרכיבים רכים המשמשים בפרויקט זה
- שלב 3: מה לעשות?
- שלב 4: תרשימים
- שלב 5: איך לעשות?
- שלב 6: קוד פסאודו
- שלב 7: קוד
- שלב 8: קישורים חיצוניים
וִידֵאוֹ: רובוט מעקב אחר כדור: 8 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:13
אז בזה, אני הולך לספר כיצד להכין רובוט מעקב אחר כדורים שהוא רובוט יזהה כדור ויעקוב אחריו. זו בעצם טכניקת מעקב אוטומטית שניתן להשתמש בה בעולם המודרני. אז רק תנו לנו להיכנס ולהתחיל לבנות …
הערה: זוהי מטלת החלקים שהוגשה לאוניברסיטת דיקין, בית הספר למחשוב, פיתוח מערכות משובצות SIT-210
אספקה
www.hackster.io/junejarohan/ball-tracking-robot-7a9865
שלב 1: מבוא
המעקב של היום מהווה חיסרון מרכזי שהוא שהוא מסתמך על מעורבותם של בני אדם אשר כפי שכולנו יודעים ניתן להסיח את הדעת בקלות, ולכן היה לנו חשיבות עליונה לגלות מערכת שיכולה לעקוב אחר אזורים באופן אוטונומי ורציף. וגם אנחנו רוצים לזהות דברים וסכנות מגעילים או לא רצויים ובמקביל לקבל החלטות ולהגיב בהתאם. לכן מעקב אחר אובייקטים באמצעות מערכות ומחשבים חכמים הוא חיוני ומכריע להשגת מעקב אוטומטי.
כל מערכת מעקב חיצונית חייבת להיות מסוגלת לעקוב אחר אובייקטים הנעים בשדה הראייה שלה, לסווג אובייקטים אלה ולזהות חלק מפעולותיהם. פיתחתי שיטה לעקוב ולסווג אובייקטים אלה בתרחישים מציאותיים. מעקב אחר אובייקטים במצלמה אחת מתבצע באמצעות חיסור רקע, ואחריו התכתבות אזורית. זה לוקח בחשבון סימנים מרובים כולל מהירות, גדלים ומרחקים של תיבות מגבילות.
שלב 2: חומרים ומרכיבים רכים המשמשים בפרויקט זה
רכיבי חומרה בשימוש:
- פטל פאי (x1)
- מודול מצלמת Raspberry Pi (x1)
- חיישן אולטרסאונד (x3)
- נהגי מנוע SparkFun Dual H-Bridge L298 (x1)
- מנוע DC (x1)
- לוח לחם (x1)
- חיבור חוטים
תוכנה בשימוש:
OpenCV
כלים ידניים:
פִּיתוֹן
שלב 3: מה לעשות?
כל מערכת מעקב חיצונית חייבת להיות מסוגלת לעקוב אחר אובייקטים הנעים בשדה הראייה שלה, לסווג אובייקטים אלה ולזהות חלק מפעולותיהם. פיתחתי שיטה לעקוב ולסווג אובייקטים אלה בתרחישים מציאותיים. מעקב אחר אובייקטים במצלמה אחת מתבצע באמצעות חיסור רקע, ואחריו התכתבות אזורית. זה לוקח בחשבון סימנים מרובים כולל מהירות, גדלים ומרחקים של תיבות מגבילות.
דבר חיוני בעת זיהוי תמונות מסגרת אחר מסגרת היה להימנע מירידות מסגרות, כיוון שהבוט יכול להיכנס למצב של לימבו אם הבוט לא מבחין בכיוון התנועה של הכדור בגלל טיפות מסגרת. אם הכדור יוצא מהטווח של המצלמה, הוא ייכנס למה שאנו מכנים מצב לימבו, במקרה זה, הבוט מבצע סיבוב של 360 מעלות כדי לצפות בחלל סביבו עד שהכדור יחזור במסגרת של המצלמה ולאחר מכן התחל לנוע לכיוונה.
לצורך ניתוח התמונה, אני לוקח כל מסגרת ולאחר מכן מסווה אותה בצבע הדרוש. אחר כך אני מוצא את כל קווי המתאר ומוצא את הגדול שבהם וקושר אותו במלבן. והראו את המלבן בתמונה הראשית ומצא את הקואורדינטות של מרכז המלבן.
לבסוף, הבוט מנסה להביא את קואורדינטות הכדור למרכז ציר הקואורדינטות שלו. כך עובד הרובוט. ניתן לשפר זאת באמצעות מכשיר IoT כמו חלקיק פוטון שיכול לאפשר לך להתעדכן כאשר דבר מזוהה וכי הרובוט עוקב אחריו או כשהרובוט איבד את המסלול שלו ועכשיו הוא חוזר לבסיס.
לצורך עיבוד תמונה, עליך להתקין תוכנת OpenCV על פטל הפטל שלך וזה היה די מסובך בשבילי.
תוכל לקבל את כל המידע הנדרש להתקנת OpenCV באמצעות הקישור הזה: לחץ כאן
שלב 4: תרשימים
למעלה סיפקתי את התרשימים לפרויקט שלי ויחד איתו לוח הלוח המודפס (PCB).
והנה כמה מהחיבורים העיקריים שעליך לעשות:
• קודם כל מודול מצלמת Raspberry Pi מחובר ישירות ל- Raspberry Pi.
• החיישנים האולטראסוניים VCC מחוברים למסוף המשותף אותו הדבר עם ה- GND (הקרקע) ושתי היציאות הנותרות של החיישן הקולי מחוברות לסיכות GPIO ב- Raspberry Pi.
• המנועים מחוברים באמצעות H-Bridge.
• החשמל מסופק באמצעות הסוללה.
הוספתי גם את הסרטון שעשוי לסייע בהבנת פעולתו של החיישן האולטראסוני וכיצד הוא פועל.
וגם אתה יכול לעקוב אחר הקישור הזה אם אינך יכול למצוא את הסרטון למעלה.
שלב 5: איך לעשות?
הכנתי את הפרויקט הזה המתאר רובוט בסיסי שיכול לעקוב אחר כדור. הרובוט משתמש במצלמה לעיבוד תמונות על ידי צילום מסגרות ועקוב אחר הכדור. כדי לעקוב אחר הכדור משתמשים בתכונות שונות כמו צבעו, גודלו, צורתו.
הרובוט מוצא צבע מקודד ואז מחפש את הכדור בצבע זה ועוקב אחריו. בחרתי ב- Raspberry Pi כבקר מיקרו בפרויקט זה מכיוון שהוא מאפשר לנו להשתמש במודול המצלמה שלו ונותן גמישות רבה בקוד מכיוון שהוא משתמש בשפת פייתון שהיא מאוד ידידותית למשתמש וגם היא מאפשרת לנו להשתמש בספריית OpenCV לניתוח התמונות.
גשר H שימש כדי לשנות את כיוון הסיבוב של מנועים או לעצור אותם.
לצורך ניתוח התמונה, אני לוקח כל מסגרת ולאחר מכן מסווה אותה בצבע הדרוש. אחר כך אני מוצא את כל קווי המתאר ומוצא את הגדול שבהם וקושר אותו במלבן. והראו את המלבן בתמונה הראשית ומצא את הקואורדינטות של מרכז המלבן.
לבסוף, הבוט מנסה להביא את קואורדינטות הכדור למרכז ציר הקואורדינטות שלו. כך עובד הרובוט. ניתן לשפר זאת באמצעות מכשיר IoT כמו חלקיק פוטון שיכול לאפשר לך להתעדכן כאשר דבר מזוהה וכי הרובוט עוקב אחריו או כשהרובוט איבד את המסלול שלו ועכשיו הוא חוזר לבסיס. וכדי לעשות זאת נשתמש בפלטפורמת תוכנה מקוונת המחברת את המכשירים ומאפשרת להם לבצע פעולות מסוימות על טריגרים ספציפיים שהם טריגרים IFTTT.
שלב 6: קוד פסאודו
להלן קוד הפסאודו לחלק הגילוי באמצעות OpenCV שבו אנו מזהים כדור.
שלב 7: קוד
מעל קטעי הקוד להלן תיאור הקוד המפורט.
# לייבא את החבילות הדרושות
אנו מייבאים את כל החבילות הדרושות
מ picamera.array יבוא PiRGBArray #מכיוון שיש בעיית רזולוציה בפטל פאי, לא תוכל ללכוד פריימים על ידי VideoCapture
מיבוא picamera ייבוא PiCamera RPi. GPIO כשעת יבוא GPIO יבוא numpy כמו np
כעת הגדרנו את החומרה והקצנו את הסיכות המחוברות ב- RASPBERRY PI
GPIO.setmode (GPIO. BOARD)
GPIO_TRIGGER1 = 29 #חיישן אולטרסאונד שמאל
GPIO_ECHO1 = 31
GPIO_TRIGGER2 = 36 #חיישן קולי קדמי
GPIO_ECHO2 = 37
GPIO_TRIGGER3 = 33 #חיישן קולי ימני
GPIO_ECHO3 = 35
MOTOR1B = 18 #מנוע שמאל
MOTOR1E = 22
MOTOR2B = 21 #מנוע ימני
MOTOR2E = 19
LED_PIN = 13 #אם הוא מוצא את הכדור, אז הוא ידליק את הלייד
# הגדר סיכות כפלט וכניסה
GPIO.setup (GPIO_TRIGGER1, GPIO. OUT) # טריגר GPIO.setup (GPIO_ECHO1, GPIO. IN) # הד GPIO.setup (GPIO_TRIGGER2, GPIO. OUT) # טריגר GPIO.setup (GPIO_ECHO2, GPIO. IN) GPIO.setup (GPIO_TRIGGER3, GPIO. OUT) # טריגר GPIO.setup (GPIO_ECHO3, GPIO. IN) GPIO.setup (LED_PIN, GPIO. OUT)
# הגדר את ההדק ל- False (נמוך)
GPIO.output (GPIO_TRIGGER1, False) GPIO.output (GPIO_TRIGGER2, False) GPIO.output (GPIO_TRIGGER3, False)
פונקציה זו משתמשת בכל החיישנים האולטראסוניים האוספים את המרחק מהמטרות מסביב לבוט שלנו
# אפשר למודול להתיישב
סונאר def (GPIO_TRIGGER, GPIO_ECHO): start = 0 stop = 0 # הגדר סיכות כפלט והכנס GPIO.setup (GPIO_TRIGGER, GPIO. OUT) # טריגר GPIO.setup (GPIO_ECHO, GPIO. IN) # הד # הגדר טריגר לשקר (נמוך) פלט GPIO.output (GPIO_TRIGGER, שקר) #אפשר למודול ליישב time.sleep (0.01) #while distance> 5: #שלח דופק 10us להפעלת GPIO.output (GPIO_TRIGGER, True) time.sleep (0.00001) GPIO. פלט (GPIO_TRIGGER, False) begin = time.time () בעוד GPIO.input (GPIO_ECHO) == 0 ו- time.time ()
לגרום למנועי DC לעבוד עם ה- PI של הפטל
GPIO.setup (MOTOR1B, GPIO. OUT)
GPIO.setup (MOTOR1E, GPIO. OUT)
GPIO.setup (MOTOR2B, GPIO. OUT) GPIO.setup (MOTOR2E, GPIO. OUT)
הגדרת פונקציות להפעלת הרובוט ולגרום לו לנוע לכיוונים שונים
def קדימה ():
פלט GPIO.output (MOTOR1B, GPIO. HIGH) GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. HIGH) GPIO.output (MOTOR2E, GPIO. LOW) def reverse (): GPIO.output (MOTOR1B, GPIO. LOW) GPIO.output (MOTOR1E, GPIO. HIGH) GPIO.output (MOTOR2B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. HIGH) def rightturn (): GPIO.output (MOTOR1B, GPIO. LOW) פלט GPIO.output (MOTOR1E, GPIO. HIGH) GPIO.output (MOTOR2B, GPIO. HIGH) GPIO.output (MOTOR2E, GPIO. LOW) def leftturn (): GPIO.output (MOTOR1B, GPIO. HIGH) GPIO.output (MOTOR1E, GPIO. LOW) פלט GPIO.output (MOTOR2B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. HIGH)
def stop ():
פלט GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR1B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. LOW)
ביצוע עבודת מודול המצלמה והתאמת ההגדרות
צילום #מצלמה
# אתחל את המצלמה ותפוס הפניה למצלמת לכידת המצלמה הגולמית = PiCamera () camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray (מצלמה, גודל = (160, 120)) # אפשר למצלמה זמן חימום. שינה (0.001)
כעת יישום הדבר העיקרי בו הבוט עוקב אחר הכדור והימנע ממכשול כלשהו בדרך
בעוד (1 <10): { #מרחק שמגיע ממרחק חיישן קולי קדמי C = סונאר (GPIO_TRIGGER2, GPIO_ECHO2) #מרחק שמגיע ממרחק חיישן קולי ימין R = סונאר (GPIO_TRIGGER3, GPIO_ECHO3) #מרחק מגיע ממרחק חיישן קולי שמאל L = סונאר (GPIO_TRIGGER1, GPIO_ECHO1) if (distanceC = 8: rightturn () time.sleep (0.00625) stop () time.sleep (0.0125) forward () time.sleep (0.00625) stop () time.sleep (0.0125) #while found == 0: leftturn () time.sleep (0.00625) elif distanceL> = 8: leftturn () time.sleep (0.00625) עצור () time.sleep (0.0125) קדימה () time.sleep (0.00625) עצור () time.sleep) מרחק C> 10): #זה מביא את קואורדינטות הכדור למרכז הציר הדמיוני של המצלמה. אם (center_x = 20): if (center_x0): flag = 1 שמאלה () time.sleep (0.025) קדימה () time.sleep (0.00003125) stop () time.sleep (0.00625) else: stop () time.sleep (0.01)
אַחֵר:
#אם הוא מוצא את הכדור והוא קרוב מדי הוא מדליק את הלד. GPIO.output (LED_PIN, GPIO. HIGH) time.sleep (0.1) stop () time.sleep (0.1) # cv2.imshow ("צייר", מסגרת) rawCapture.truncate (0) # נקה את הזרם לקראת ההופעה המסגרת הבאה}
עשה את הניקויים הדרושים
GPIO.cleanup () #חינם כל סיכות GPIO
שלב 8: קישורים חיצוניים
קישור לסרטון ההדגמה: לחץ כאן (יוטיוב)
קישור לקוד ב- Git-hub: לחץ כאן (Git-Hub)
מוּמלָץ:
כדור כדור טניס שולחן LED: 16 שלבים (עם תמונות)
כדור כדור טניס שולחן LED: רקע אחורה לאחר שבניתי לוח שטוח של כדורי טניס שולחן לפני זמן מה, התחלתי לתהות אם אפשר יהיה ליצור לוח תלת מימד מכדורי טניס שולחן. בשילוב עם העניין שלי בעשיית " אמנות " מצורות גיאומטריות שחוזרות על עצמן אני
ערכות רכב חכמות למעקב אחר חכמות DIY מעקב אחר רגישות לרכב: 7 שלבים
ערכות רכב חכמות למעקב אחר רובוט חכם עוקבות אחר מכוניות רגישות: עיצוב על ידי SINONING ROBOT אתה יכול לקנות ממכונית רובוט מעקב Theory LM393 שבב להשוות את שני הפוטורזיסטור, כאשר יש צד פוטוסיסטור צד אחד על לבן הצד של המנוע ייעצר מייד, הצד השני של המנוע להסתובב כך ש
רובוט מעקב RC באמצעות Arduino - שלב אחר שלב: 3 שלבים
רובוט מעקב RC באמצעות Arduino - שלב אחר שלב: היי חבר'ה, חזרתי עם עוד שלדת רובוט מגניבה של BangGood. מקווה שעברת את הפרויקטים הקודמים שלנו - ספינל קרוקס V1 - הרובוט הנשלט על המחווה, ספינל קרוקס L2 - ארדואינו פיק אנד פלייס רובוט עם נשק רובוטית וחבטת באדלנד
כיצד להרכיב זרוע רובוט מעץ מרשים (חלק 1: רובוט למעקב אחר קווים)-מבוסס על המיקרו: ביט: 9 שלבים
כיצד להרכיב זרוע רובוט מעץ מרשים (חלק 1: רובוט למעקב אחר קווים)-מבוסס על המיקרו: ביט: לבחור העץ הזה יש שלוש צורות, הוא שונה ומרשים מאוד. אז בואו ניכנס לזה אחד אחד
בוט מעקב אחר שלדה מעקב מרחוק: 7 שלבים (עם תמונות)
בוט מעקב אחר שלדה מחוסרת מרחוק: מבוא: אז זה היה פרוייקט שרציתי להתחיל ולסיים עוד בשנת 2016, אולם בשל עבודות ושפע של דברים אחרים הצלחתי רק להתחיל ולהשלים את הפרויקט הזה בשנת 2016 שנה חדשה 2018! זה לקח בערך 3 שעות