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

Rpibot - אודות למידת רובוטיקה: 9 שלבים
Rpibot - אודות למידת רובוטיקה: 9 שלבים

וִידֵאוֹ: Rpibot - אודות למידת רובוטיקה: 9 שלבים

וִידֵאוֹ: Rpibot - אודות למידת רובוטיקה: 9 שלבים
וִידֵאוֹ: אקסל פיבוט - כל מה שצריך לדעת PIVOT TABLE 2024, יולי
Anonim
Rpibot - אודות למידת רובוטיקה
Rpibot - אודות למידת רובוטיקה

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

היו לי דרישות הבאות:

  • חומרה פשוטה (המיקוד הוא התוכנה)
  • חומרה זולה (כ -100 €)
  • ניתן להרחבה (כמה אפשרויות כבר חלק מהתיאור)
  • מתח אספקה לכל הרכיבים ממקור 5V יחיד (פאוורבנק)

לא באמת הייתה מטרה מלבד למידה. ניתן להשתמש בפלטפורמה ללמידה, מעקב, תחרויות רובוטיות, …

זה לא מדריך למתחילים. אתה צריך קצת ידע בסיסי בנושא:

  • תכנות (פייתון)
  • אלקטרוניקה בסיסית (לחיבור מודולים יחד במתח הנכון)
  • תורת הבקרה הבסיסית (PID)

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

קוד המקור והקבצים המלאים זמינים כאן:

אספקה:

מֵכָנִיקָה

  • 1x לוח דיקט (גודל A4, עובי 4 מ"מ)
  • 3x M4 x 80 ברג ואום
  • 2x מנועי הילוכים עם פיר פלט משני למקודד. גלגלים.
  • 1x גלגל חינם

1x הרכבה של מצלמת פאן והטיה (אופציונלי)

מכשירי חשמל

  • 1x Raspberry Pi Zero עם כותרת ומצלמה
  • 1 בקרת סרוו PCA 9685
  • 2x גלגל מקודד אופטי ומעגל
  • 1x חוטי מגשר נקבה
  • 1x בנק כוח USB
  • 1 x נהג מנוע כפול DRV8833
  • 2x מיקרו סרוו SG90 למצלמת מצלמה והטיה (אופציונלי)
  • 1x MPU9250 IMU (אופציונלי)
  • 1x חיישן מרחק קולי HC-SR04 (אופציונלי)
  • 1x לוח מחורר וחוט הלחמה, כותרות, …

שלב 1: בנה את השלדה

בנה את השלדה
בנה את השלדה
בנה את השלדה
בנה את השלדה
בנה את השלדה
בנה את השלדה

אני לא מעצב מכונאי טוב. כמו כן מטרת הפרויקטים היא לא לבזבז יותר מדי זמן בשלדה. בכל מקרה הגדרתי את הדרישות הבאות:

  • חומרים זולים
  • הרכבה ופירוק מהירים
  • ניתן להרחבה (למשל מקום לחיישנים נוספים)
  • חומרים קלים לחיסכון באנרגיה לאלקטרוניקה

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

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

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

מאפייני גלגלים (לחישובי תוכנה)

היקף: 21, 5 ס"מ פולסים: 20 פולסים/מהירות. רזולוציה: 1, 075 ס"מ (לבסוף דופק אחד הוא בערך 1 ס"מ, וזה קל לחישובי תוכנה)

שלב 2: אלקטרוניקה וחיווט

אלקטרוניקה וחיווט
אלקטרוניקה וחיווט
אלקטרוניקה וחיווט
אלקטרוניקה וחיווט
אלקטרוניקה וחיווט
אלקטרוניקה וחיווט

הפרויקט משתמש במודולים שונים כפי שמוצג בתרשים.

ה- Raspberry Pi Zero הוא הבקר הראשי. הוא קורא את החיישנים ושולט במנועים באמצעות אות PWM. הוא מחובר למחשב מרוחק באמצעות wifi.

ה- DRV8833 הוא גשר H בעל מנוע כפול. היא מספקת את הזרם המספיק למנועים (מה שהפטל פאי לא יכול לעשות מכיוון שהיציאות יכולות לספק מעט mA בלבד).

המקודד האופטי מספק אות בצורת ריבוע בכל פעם שהאור עובר בגלגלי המקודד. נשתמש בהפרעות HW של ה- Raspberry Pi כדי לקבל את המידע בכל פעם שהאות מתחלף.

ה- pca9695 הוא לוח בקרת סרוו. הוא מתקשר באמצעות אוטובוס טורי I2C. לוח זה מספק את אותות ה- PWM ומתח האספקה השולטים בסרווואים לתבנית והטיה של המצלמה.

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

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

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

שלב 3: תשתית תוכנה

תשתית תוכנה
תשתית תוכנה
תשתית תוכנה
תשתית תוכנה

לאחר השגת המכניקה, נקים כמה תשתיות תוכנה שיהיו להן תנאי פיתוח נוחים.

גיט

זוהי מערכת בקרת גירסאות בחינם וקוד פתוח. הוא משמש לניהול פרויקטים גדולים כמו לינוקס, אך יכול לשמש בקלות גם לפרויקטים קטנים (ראה Github ו- Bitbucket).

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

הפקודות העיקריות בשימוש הן:

שיבוט git https://github.com/makerobotics/RPIbot.git [קבל את קוד המקור ותצורת git]

git pull origin master [קבל את העדכונים האחרונים מהמאגר המרוחק]

git status [קבל את סטטוס המאגר המקומי. האם יש קבצים ששונו?] Git log [get the list of commits] git add. [הוסף את כל הקבצים שהשתנו לשלב שיש לקחת בחשבון לקראת ההתחייבות הבאה] git commit -m "comment for commit" [לבצע את השינויים במאגר המקומי] master git push origin [לדחוף את כל ההתחייבויות למאגר המרוחק]

רישום

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

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

logger = logging.getLogger (_ שם_)

logger.setLevel (logging. DEBUG)

מדידה ושרטוט

כדי לנתח אותות לאורך זמן, הטוב ביותר הוא לשרטט אותם בתרשים. מכיוון של- Raspberry Pi יש מסוף קונסולה בלבד, נעקוב אחר הנתונים בקובץ csv המופרד עם נקודה -פסיק ונתווה אותם מהמחשב המרוחק.

קובץ העקוב המופרד עם נקודה -פסיק נוצר על ידי קוד הפיתון הראשי שלנו וחייב שיהיו לו כותרות כאלה:

חותם זמן;

1603466959.65;0;0;25;0.0;-0.02685546875;0;25;0;25;25;52;0.0;23;0.221252441406;16;0.0;0;252.069366413;-5.19555664062;-16.0563964844;0;6; 1603466959.71;0;0;50;0.0;0.29150390625;0;50;0;25;25;55;0.0;57;-8.53729248047;53;0.0;0;253.562118111;-5.04602050781;-17.1031494141;0;6; 1603466959.76;0;-1;75;0.0;-0.188232421875;1;75;2;25;25;57;0;52;-24.1851806641;55;0;0;251.433794171;-5.64416503906;-16.8040771484;2;7;

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

מרוחק@מחשב: ~/python rpibot_plotter -f trace.csv -p speedL, speedR, pwmL, pwmR

סקריפט העלילה זמין בתיקיית הכלים:

הקושר משתמש ב- mathplotlib ב- Python. עליך להעתיק אותו למחשב האישי שלך.

ליתר נוחות, סקריפט הפייתון נקרא על ידי סקריפט bash (plot.sh) המשמש להעתיק את קובץ העקיבה של Raspberry Pi למחשב המרוחק ולהתקשר לפלוטר עם בחירת אות. סקריפט bash "plot.sh" שואל אם יש להעתיק את הקובץ. זה היה נוח לי יותר במקום להעתיק ידנית בכל פעם. "sshpass" משמש להעתקת הקובץ מ- Raspberry Pi למחשב המרוחק באמצעות scp. הוא מסוגל להעתיק קובץ מבלי לבקש את הסיסמה (הוא מועבר כפרמטר).

לבסוף נפתח חלון עם העלילה כפי שמוצג בתמונה.

תקשורת מרחוק

ממשק הפיתוח ל- Raspberry Pi הוא SSH. ניתן לערוך קבצים ישירות במטרה, או להעתיק אותם באמצעות scp.

כדי לשלוט ברובוט, שרת אינטרנט פועל בפי, המספק שליטה באמצעות Websockets. ממשק זה מתואר בשלב הבא.

התקן את ה- Raspberry Pi

יש קובץ המתאר את ההתקנה של ה- Raspberry Pi בתיקייה "doc" של קוד המקור (setup_rpi.txt). אין הרבה הסברים אבל הרבה פקודות וקישורים שימושיים.

שלב 4: ממשק המשתמש

ממשק המשתמש
ממשק המשתמש

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

אדריכלות תוכנה

ממשק המשתמש בנוי על ידי הקבצים הבאים: gui.html [תיאור הפקדים והפריסה של דפי האינטרנט] gui.js [מכיל את קוד javascript לטיפול בפקדים ולפתוח חיבור WebSocket לרובוט שלנו] gui.css [מכיל את סגנונות ה- פקדי html. המיקומים של הפקדים מוגדרים כאן]

תקשורת האינטרנט

ממשק המשתמש הוא לא הכי מגניב, אבל הוא עושה את העבודה. התמקדתי כאן בטכנולוגיות שהיו חדשות בשבילי כמו Websockets.

אתר האינטרנט מתקשר עם שרת האינטרנט הרובוט על ידי Websockets. זהו ערוץ תקשורת דו -כיווני אשר יישאר פתוח עם התחלת החיבור. אנו שולחים את פקודות הרובוט דרך Websocket ל- Raspberry Pi ומקבלים מידע (מהירות, מיקום, זרם מצלמה) לתצוגה.

פריסת הממשק

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

שלב 5: תכנות פלטפורמת הרובוט

תכנות פלטפורמת הרובוט
תכנות פלטפורמת הרובוט
תכנות פלטפורמת הרובוט
תכנות פלטפורמת הרובוט
תכנות פלטפורמת הרובוט
תכנות פלטפורמת הרובוט

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

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

ארכיטקטורת תוכנה עיקרית

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

חוש חוש לפעול

Sense.py

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

Control.py

תת -סוג הפעלה שולט על המנועים והסרוויים לאחר הפשטה מסוימת. אובייקט הבקרה העיקרי הוא טיפול בפקודות ברמה גבוהה וגם באלגוריתמי הבקרה (PID) של המנוע.

rpibot.py

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

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

בקרת ה- PID

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

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

כדי להגדיל את המורכבות צעד אחר צעד, יש לשלוט ברובוט:

לולאה פתוחה (עם כוח קבוע)

pwm = K

לאחר מכן הוסף את אלגוריתם הלולאה הקרובה

pwm = Kp.speedError+Ki. Integration (speedError)

ולבסוף להוסיף את בקרת הכיוון כצעד אחרון.

עבור בקרת המהירות השתמשתי בבקרת "PI" וב- "P" רק עבור המפה. הגדרתי את הפרמטרים באופן ידני על ידי ניסוי. כנראה שניתן להשתמש כאן בפרמטרים הרבה יותר טובים. היעד שלי היה רק קו ישר וכמעט השגתי אותו. יצרתי ממשק בתוכנה כדי לכתוב כמה משתנים על ידי ממשק המשתמש. הגדרת הפרמטר Kp ל- 1.0 דורשת את הפקודה הבאה בממשק המשתמש:

SET; Kp; 1.0

אני יכול להגדיר את הפרמטר P מספיק נמוך כדי להימנע מחריפה. השגיאה הנותרת מתוקנת על ידי פרמטר I (שגיאה משולבת)

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

מצורפת תרשים הבקרה המשומש. הוא מציג רק את הצד השמאלי של השליטה ברובוט.

שלב 6: כיול החיישן

כיול החיישן
כיול החיישן
כיול החיישן
כיול החיישן
כיול החיישן
כיול החיישן

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

יש לכייל את אותות חיישן ה- IMU לפני השימוש בו. כמה אותות חיישן תלויים בזווית ההרכבה ובמיקום.

כיול מהירות התאוצה והסיבוב

הכיול הקל ביותר הוא להאצת האורך (A_x). בעמידה צריך להיות בסביבות 0 מ 'לשנייה. אם תסובב את החיישן כראוי, תוכל למדוד את כוח הכבידה (בסביבות 9, 8 מ '/ש'). כדי לכייל a_x, אתה רק צריך להתקין אותו כראוי ולאחר מכן להגדיר את הקיזוז כדי לקבל 0 מ '/ש' בעת קיפאון. עכשיו A_x מכויל.אתה יכול לקבל את הקיזוזים למהירויות הסיבוב באופן דומה בעמידה.

כיול המגנטומטר עבור המצפן

כיול מורכב יותר נחוץ לחיישני השדה המגנטי. נשתמש ב- m_x ו- m_y בכדי לקבל את השדה המגנטי ברמה האופקית. קיום m_x ו- m_y ייתן לנו את האפשרות לחשב כותרת מצפן.

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

אנו רושמים m_x ו- m_y בזמן שאנחנו מסובבים את הרובוט סביב ציר z. אנו משרטטים את m_x לעומת m_y בתרשים XY. התוצאה באליפסיס כפי שמוצג בתמונה. האליפסיס צריך להיות מרוכז במקור. כאן אנו שוקלים את הערכים המקסימליים והמינימליים של m_x ו- m_y כדי לקבל את הקיזוזים לשני הכיוונים. לבסוף אנו בודקים את הכיול ורואים שהאליפסיס מרוכז כעת.

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

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

כותרת המצפן

נתוני המגנטומטר ישמשו כעת לחישוב כותרת המצפן. לשם כך עלינו להמיר את האותות m_x ו- m_y לזווית. Python מספקת ישירות את הפונקציה math.atan2 שמטרתה זו. החישוב המלא מוגדר בקובץ mpu9250_i2c.py ("calcHeading (mx, my, mz)").

שלב 7: עיצובים חלופיים

עיצובים אלטרנטיביים
עיצובים אלטרנטיביים
עיצובים אלטרנטיביים
עיצובים אלטרנטיביים
עיצובים אלטרנטיביים
עיצובים אלטרנטיביים

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

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

סרוו סיבוב רציף מחובר ל- pca 9695

כדי להימנע מגשר H נוסף עבור מנוע DC, התחלתי לראשונה עם סרוו סיבוב רציף. אלה הופעלו על ידי נהג הסרו 9695 שכבר קיים. כל מכניקת ההנעה והאלקטרוניקה של המתכתבים היו פשוטים בהרבה. לעיצוב זה היו שני חסרונות:

  • טווח השליטה הלקוי של הסרווואים.
  • המיקום החסר של המקודד

סרוו מתחילים לנוע עם 50% pwm ויש להם מהירות מלאה בסביבות 55%. זהו טווח שליטה גרוע מאוד.

ללא החזקת מקודד, היה מאוד קשה למצוא מקודד מוכן לשימוש. בדקתי 3 מקודד השתקפויות שונה שהותקנו על המארז. הדבקתי גלגל מקודד תוצרת חוץ על החלק החיצוני של הגלגל עם חלקים בשחור ולבן. השתמשתי בחיישני QTR-1RC הזקוקים לעיבוד אותות רב כדי לקבל את האות הנכון. ה- Raspberry Pi לא הצליח לבצע עיבוד מסוג זה בזמן אמת. אז החלטתי להוסיף רובד NodeMCU D1 כבקר בזמן אמת. הוא היה מחובר ל- Pi פטל באמצעות ה- UART הטורי כדי לספק את נתוני החיישנים המעובדים. ה- NodeMCU ניהל גם את חיישן HC-SR04. המכניקה הייתה קשה ולא מאוד חזקה, הקו הסדרתי קיבל רעש מקו I2C והמנועים, אז לבסוף בניתי את הגרסה השנייה של המארז עם מנועי DC פשוטים המונעים על ידי גשר H. למנועים אלה יש פיר פלט משני להציב מקודד אופטי.

שלב 8: עיבוד תמונה

עיבוד תמונה
עיבוד תמונה
עיבוד תמונה
עיבוד תמונה
עיבוד תמונה
עיבוד תמונה
עיבוד תמונה
עיבוד תמונה

כדי לשפר את הנהיגה האוטונומית, אנו יכולים לבצע עיבוד תמונה כלשהו.

ספריית opencv מהווה אסמכתא לכך. Python יכול להשתמש בו כדי ליישם במהירות זיהוי מכשולים.

אנו מצלמים תמונה ומיישמים מספר משימות לעיבוד תמונות:

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

לבסוף הכנתי מסנן משלי לערבוב כל השיפועים האופקיים והאנכיים (זיהוי רהיטים):

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

כעת נוכל להשתמש במידע החדש הזה כדי לזהות מכשולים …

שלב 9: השלבים הבאים …

הצעדים הבאים…
הצעדים הבאים…
הצעדים הבאים…
הצעדים הבאים…

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

  • מיזוג חיישנים של אותות כוונון ואותיות מגנטיות
  • עיבוד תמונות מצלמה (רק CPU נמוך זמין לשם כך)
  • זיהוי התנגשות (מרחק קולי ומצלמה)
  • בניית מפה או התמצאות

עכשיו צא וצור אתגרים או מטרות משלך …

מוּמלָץ: