תוכן עניינים:

רכב אוטונומי: 7 שלבים (עם תמונות)
רכב אוטונומי: 7 שלבים (עם תמונות)

וִידֵאוֹ: רכב אוטונומי: 7 שלבים (עם תמונות)

וִידֵאוֹ: רכב אוטונומי: 7 שלבים (עם תמונות)
וִידֵאוֹ: שם קוד | איך עובדים רכבים אוטונומיים? 2024, נוֹבֶמבֶּר
Anonim
רכב אוטונומי
רכב אוטונומי
רכב אוטונומי
רכב אוטונומי

פרויקט זה הוא רובוט ניווט אוטונומי המנסה להגיע למיקום המטרה שלו תוך הימנעות ממכשולים בדרכו. הרובוט יצויד בחיישן LiDAR שישמש לאיתור אובייקטים בסביבתו. כאשר אובייקטים אובייקטים והרובוט מסתובב, מפת זמן אמת תתעדכן. המפה תשמש לשמירת מיקומי המכשולים שזוהו. בדרך זו, הרובוט לא ינסה שוב דרך כושלת לעמדת המטרה. במקום זאת הוא ינסה נתיבים שאין להם מכשולים או שבילים שטרם נבדקו לאיתור מכשולים.

הרובוט ינוע בשני גלגלים המונעים על ידי מנוע DC ושני גלגלי גלגלים. המנועים יוצמדו לתחתית פלטפורמה עגולה. המנועים יהיו בשליטת שני נהגים מנועים. נהגי המנוע יקבלו פקודות PWM ממעבד Zynq. מקודדים על כל מנוע ישמשו כולם כדי לעקוב אחר מיקום וכיוון הרכב. המערכת כולה תהיה בעלת סוללת LiPo.

שלב 1: הרכבת הרכב

הרכבת הרכב
הרכבת הרכב
הרכבת הרכב
הרכבת הרכב
הרכבת הרכב
הרכבת הרכב
הרכבת הרכב
הרכבת הרכב

הרובוט מופעל על ידי שני מנועים המחוברים לגלגלים הצדדיים ואז נתמך בנוסף על ידי שני גלגלי גלגלים, אחד מלפנים ואחד מאחור. הרציפים ותושבי המנוע היו עשויים אלומיניום מתכת. רכזת מנוע נרכשה לחיבור הגלגלים למנוע. עם זאת, היה צורך לבצע מצמד ביניים מותאם אישית מכיוון שתבנית החור של הרכזת שונה מתבנית החור של הגלגל.

המנוע שנבחר היה מנוע Port Escap 12V DC עם מקודדים מובנים. ניתן לרכוש מנוע זה ב- ebay במחיר סביר מאוד (ראו שטר החומרים). חפש מילות מפתח "12V Escap 16 מנוע DC בעל הילוכים עם קורנים" ב- ebay כדי למצוא את המנוע. בדרך כלל יש כמות לא מבוטלת של מוכרים לבחירה. המפרט והפינים של המנועים מוצגים בתרשימים שלהלן.

הרכבת הרובוט החלה בעיצוב מודל CAD של השלדה. הדגם שלהלן מציג את המבט העליון של פרופיל צורת הדו מימד המיועד לשלדה.

מוצע כי השלדה תוכננה כפרופיל 2D כך שניתן לייצר אותה בקלות. אנו חותכים יריעת אלומיניום בגודל 12 "X12" לצורת השלדה באמצעות חותך סילוני מים. ניתן גם לחתוך את פלטפורמת השלדה בעזרת מסור.

שלב 2: הרכבת מנועים

מנועי הרכבה
מנועי הרכבה
מנועי הרכבה
מנועי הרכבה

השלב הבא הוא ייצור הרכבות המנועים. מוצע כי תושבי המנוע עשויים אלומיניום מתכת 90 מעלות. באמצעות חלק זה, ניתן לחבר את המנוע על שלוחה על צד אחד של המתכת באמצעות השניים

ניתן לחבר את חורי M2 של המנוע ואת הפנים האחרות לרציף. יש לקדוח חורים לתושבת המנוע כך שניתן להשתמש בברגים כדי להדק את המנוע על הר המנוע ואת הר המנוע על הרציף. ניתן לראות את הר המנוע באיור למעלה.

לאחר מכן מוצב רכז המנועים של פולולו (ראו שטר החומרים) על ציר המנוע והידוק בעזרת בורג הסט המצורף ומפתח הברגים. דפוס החורים של רכזת המנוע של Pololu אינו תואם את תבנית החורים של גלגל ה- VEX ולכן יש לבצע מצמד ביניים מותאם אישית. מוצע כי מתכת הגרוטאות אלומיניום המשמשת לייצור פלטפורמת המארז תשמש לייצור המצמד. דפוס החור והמידות של בני הזוג הזה מוצגים באיור שלהלן. הקוטר החיצוני והצורה (לא צריך להיות עיגול) של מצמד האלומיניום המותאם אישית אינם חשובים כל עוד כל החורים מתאימים לחלק.

שלב 3: יצירת עיצוב בלוק Vivado

יצירת עיצוב בלוק Vivado
יצירת עיצוב בלוק Vivado
יצירת עיצוב בלוק Vivado
יצירת עיצוב בלוק Vivado

- התחל ביצירת פרויקט חדש של Vivado ובחר את Zybo Zynq 7000 Z010 כמכשיר היעד.

- הקלק הבא על צור עיצוב בלוק חדש והוסף את ה- Zynq IP. לחץ פעמיים על ה- Zynq IP וייבא את הגדרות XPS המסופקות עבור Zynq. לאחר מכן הפעל את UART0 עם MIO 10..11 בכרטיסייה תצורות MIO, וודא גם כי טיימר 0 וטיימר כלב השמירה מופעלים.

- הוסף שני AXI GPIOS לעיצוב הבלוק. עבור GPIO 0 אפשר ערוץ כפול והגדר את שניהם לכל היציאות. הגדר את רוחב GPIO לערוץ 1 עד 4 סיביות ולערוץ 2 עד 12 סיביות, ערוצים אלה ישמשו לקביעת כיוון המנוע ושליחת כמות הקרציות שהמקודד מודד למעבד. עבור GPIO 1 הגדר רק ערוץ אחד לכל הכניסות ברוחב הערוץ של 4 סיביות. זה ישמש לקבלת נתונים מהמקודדים. הפוך את כל יציאות GPIO לחיצוניות.

- הבא הוסף שני טיימרים AXI. הפוך את יציאות pwm0 בשני הטיימרים לחיצוניים. אלה יהיו ה- pwms השולטים במהירות המנועים בהם מסתובבים.

- לבסוף הפעל את אוטומציית הבלוק ואוטומציית החיבור. ודא שעיצוב הבלוק שיש לך תואם את זה שסופק.

שלב 4: תקשורת עם LiDAR

LiDAR זה משתמש בפרוטוקול SCIP 2.0 כדי לתקשר באמצעות UART, הקובץ המצורף מתאר את כל הפרוטוקול.

כדי לתקשר עם LiDAR נשתמש ב- UART0. ה- LiDAR מחזיר 682 נקודות נתונים שכל אחת מהן מייצגת את המרחק לאובייקט בזווית זו. ה- LiDAR סורק נגד כיוון השעון מ -30 מעלות עד 210 מעלות עם צעד של 0.351 מעלות.

- כל התקשורת ל- LiDAR מתבצעת עם תווי ASCI, עיין בפרוטוקול SCIP לגבי הפורמט המשמש. אנו מתחילים בשליחת פקודת QT כדי להפעיל את LiDAR. לאחר מכן אנו שולחים את הפקודה GS מספר פעמים ומבקשים 18 נקודות נתונים בכל פעם ל- ft ב- UARTS 64 בתים FIFO. הנתונים המוחזרים מה- LiDAR לאחר מכן מנותחים ומאוחסנים במערך העולמי SCANdata.

- כל נקודת נתונים המאוחסנת היא 2 בתים של נתונים מקודדים. העברת נתונים אלה למפענח תחזיר מרחק במילימטרים.

בקובץ main_av.c תמצא את הפונקציות הבאות לתקשר עם LiDAR

sendLIDARcmd (פקודה)

- זה ישלח את מחרוזת הקלט ל- LiDAR דרך UART0

recvLIDAR נתונים ()

- זה יקבל נתונים לאחר שנשלחה פקודה ל- LiDAR ותשמור את הנתונים ב- RECBuffer

requestDistanceData ()

- פונקציה זו תשלח סדרה של פקודות לאחזור כל 682 נקודות הנתונים. לאחר כל סט של 18 נקודות נתונים מתקבלת parseLIDARinput () נקרא לנתח את הנתונים ולאחסן בהדרגה את נקודות הנתונים ב- SCANdata.

שלב 5: אוכלוסיית רשת עם מכשולים

אוכלוסיית רשת עם מכשולים
אוכלוסיית רשת עם מכשולים
אוכלוסיית רשת עם מכשולים
אוכלוסיית רשת עם מכשולים

ה- GRID המאוחסן הוא מערך דו ממדי כאשר כל ערך אינדקס מייצג מיקום. הנתונים המאוחסנים בכל אינדקס הם 0 או 1, ללא מכשול ומכשול בהתאמה. ניתן לשנות את המרחק המרובע במילימטרים שכל אינדקס מייצג בעזרת ההגדרה GRID_SCALE בקובץ vehicle.h. ניתן גם לשנות את גודל מערך הדו מימד כדי לאפשר לרכב לסרוק שטח גדול יותר על ידי שינוי ההגדרה GRID_SIZE.

לאחר ערכה חדשה של נתוני מרחק שנסרקים מהעדכון LiDAR נקרא גרסה (). זה יחזור על כל נקודת נתונים המאוחסנת במערך SCANdata כדי לקבוע לאיזה אינדקסים ברשת יש מכשולים. בעזרת הכיוון הנוכחי של הרכב אנו יכולים לקבוע את הזווית המתאימה לכל נקודת נתונים. כדי לקבוע היכן נמצא המכשול, פשוט הכפל את המרחק המתאים ב cos/sin של הזווית. הוספת שני הערכים הללו למיקום הנוכחי x ו- y של כלי הרכב תחזיר את המדד ברשת המכשול. חלוקת המרחק שהפעולה הזו מחזירה ב- GRID_SCALE תאפשר לנו לשנות את גודל המרחק המרובע של כל אינדקס.

התמונות לעיל מציגות את הסביבה הנוכחית של הרכבים ואת הרשת המתקבלת.

שלב 6: תקשורת עם מנועים

כדי לתקשר עם המנועים אנו מתחילים לאתחל את ה- GPIO לשליטה בכיוון שבו המנוע מסתובב. לאחר מכן כתיבה ישירה לכתובת הבסיס של ה- PWM בטיימר AXI מאפשרת לנו להגדיר דברים כמו התקופה ומחזור החובה ששולטים ישירות על המהירות שבה המנוע מסתובב.

שלב 7: תכנון נתיבים

מיושם בעתיד הקרוב.

באמצעות הפונקציונליות של הרשת והמנוע שתוארו לעיל, קל מאוד ליישם אלגוריתמים כגון A*. כשהרכב זז הוא ימשיך לסרוק את האזור שמסביב ולקבוע אם הנתיב עליו הוא עדיין תקף

מוּמלָץ: