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

AI ברובוט הנהיגה במבוך לגו EV3: 13 שלבים
AI ברובוט הנהיגה במבוך לגו EV3: 13 שלבים

וִידֵאוֹ: AI ברובוט הנהיגה במבוך לגו EV3: 13 שלבים

וִידֵאוֹ: AI ברובוט הנהיגה במבוך לגו EV3: 13 שלבים
וִידֵאוֹ: EBE OLie 00b)2018-9-22 - Live Contact UFO Congress Czech CC.- Subtitles 2024, נוֹבֶמבֶּר
Anonim
Image
Image
איך מבוך נפתר
איך מבוך נפתר

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

הרובוט הקודם שלי מתואר כאן:

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

אספקה

חלקים

  1. סט LEGO Mindstorms EV3
  2. חיישן קולי LEGO Mindstorms EV3. הוא אינו כלול במערך EV3.
  3. קרטון גלי למבוך. שתי קרטונים אמורים להספיק.
  4. פיסת קרטון דקה שתסייע לייצב כמה פינות וקירות.
  5. הדבק והדבק לחיבור חתיכות קרטון יחד.
  6. מעטפת כרטיס ברכה אדומה לזיהוי יציאת המבוך.

כלים

  1. סכין שירות לחיתוך הקרטון.
  2. סרגל פלדה המסייע לתהליך החיתוך.

תוֹכנָה

התוכנית נמצאת כאן:

שלב 1: איך מבוך נפתר

שיטת נהיגה במבוך

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

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

  1. אם אפשר לפנות שמאלה, עשה זאת.
  2. אחרת, לך ישר אם אפשר.
  3. אם זה לא יכול ללכת שמאלה או ישר, פנה ימינה, במידת האפשר.
  4. אם אף אחד מהאמור לעיל אינו אפשרי, זה חייב להיות מבוי סתום. תסתובב.

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

פתרון המבוך למציאת דרך ישירה

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

הפניות האפשריות הן: שמאל, ימין, אחורה (במבוי סתום) וישר (שהוא צומת).

שילובים מוחלפים כדלקמן:

  • "שמאל, אחורה, שמאל" הופך ל"ישר ".
  • "שמאל, אחורה, ימין" הופך ל"אחור ".
  • "שמאל, אחורה, ישר" הופך ל"ימין ".
  • "ימין, אחורה, שמאל" הופך ל"אחור ".
  • "ישר, אחורה, שמאל" הופך ל"ימין ".
  • "ישר, גב, ישר" הופך ל"חזרה ".

כיצד רובוט מטפל במבוך שלי

  1. כשהרובוט מתחיל לנסוע הוא רואה רווח מימין ושומר ישר ברשימה במערך.
  2. ואז הוא פונה שמאלה ומוסיף שמאלה לרשימה. הרשימה מכילה כעת: ישר, שמאל.
  3. עם מבוי סתום, הוא מסתובב ומוסיף חזרה לרשימה. הרשימה מכילה כעת: ישר, שמאל, אחורה.
  4. הוא עובר את הנתיב שהוא השתמש בו מהכניסה, והוא מוסיף ישר לרשימה. הרשימה מכילה כעת: ישר, שמאל, אחורה, ישר. הוא מזהה שילוב ומשנה שמאל, אחורה, ישר לימין. הרשימה מכילה כעת ישר, ימין.
  5. עם מבוי סתום, הוא מסתובב ומוסיף חזרה לרשימה. הרשימה מכילה כעת: ישר, ימינה, אחורה.
  6. לאחר הפנייה שמאלה הרשימה מכילה ישר, ימינה, אחורה, שמאלה. הוא מזהה שילוב ומשנה ימין, אחורה, שמאל לאחור. הרשימה מכילה כעת סטרייט, גב.
  7. לאחר הפנייה השמאלית הבאה הרשימה מכילה ישר, אחורה, שמאלה. זה משנה את השילוב הזה לימין. הרשימה מכילה כעת רק נכון.
  8. הוא עובר רווח ומוסיף ישר לרשימה. הרשימה מכילה כעת Right, Straight.
  9. לאחר הפנייה ימינה הרשימה מכילה ימינה, ישרה, ימינה שהיא הנתיב הישיר.

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

שיקולים לכל מיקרו -בקרה

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

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

שיקולים מיוחדים ללגו MINDSTORMS EV3

למרות ש LEGO Mindstorms EV3 הוא מאוד תכליתי, הוא מאפשר לא יותר מאחד מכל סוג של חיישן המחובר לבנה אחת. שני בריקים או יותר יכולים להיות כבולים כשרשרת חיננית, אך לא רציתי לקנות לבנה נוספת, ולכן השתמשתי בחיישנים הבאים (במקום שלושה חיישנים אולטראסוניים): חיישן אינפרא אדום, חיישן צבע וחיישן קולי. זה הסתדר היטב.

אבל לחיישן הצבעים יש טווח קצר מאוד, של כ -2 סנטימטרים (5 ס מ), מה שמוביל לכמה שיקולים מיוחדים כפי שמתואר להלן:

  1. כאשר חיישן הצבע מזהה קיר מלפנים והרובוט מחליט לפנות ימינה או להסתובב, עליו לגבות תחילה, על מנת לתת לעצמו מספיק מקום להסתובב מבלי להיתקל בקיר.
  2. בעיה מסובכת מתרחשת בכמה צמתים "ישרים". בגלל הטווח הקצר של חיישן הצבעים, הרובוט אינו יכול לקבוע אם הוא מרגיש צומת "ישר" ראוי או לקראת פנייה ימינה. ניסיתי לתקן בעיה זו על ידי הגדרת התוכנית לאחסון "סטרייט" ברשימה בכל פעם שהרובוט מרגיש אחד, ולאחר מכן לחסל יותר מ"ישר "ברציפות ברשימה. זה מתקן את המצב שבו פנייה ימינה עוקבת אחר "ישר" במבוך אך לא המצב שבו יש פנייה ימינה ללא "ישר" לפניו. ניסיתי גם להגדיר את התוכנית כדי לחסל "סטרייט" אם היא ממש לפני "ימין" אבל זה לא עובד אם פנייה ימינה עוקבת אחר "סטרייט". לא הצלחתי למצוא פתרון המתאים לכל המקרים, למרות שאני מניח שאפשר יהיה הרובוט להסתכל על המרחק שעבר (על ידי קריאת חיישני סיבוב המנוע) ולהחליט אם זה "ישר" או נכון תור. לא חשבתי שהסיבוך הזה שווה לעשות למטרות הדגמת תפיסת ה- AI בפרויקט הזה.
  3. יתרון של חיישן הצבעים הוא בכך שהוא מבחין בין החום של קיר לאדום המחסום בו השתמשתי ביציאה, ומספק דרך קלה עבור הרובוט להחליט מתי הוא סיים את המבוך.

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

התוכנית הראשית
התוכנית הראשית

ל- LEGO Mindstorms EV3 יש שיטת תכנות מאוד נוחה מבוססת אייקונים. בלוקים מוצגים בתחתית מסך התצוגה במחשב וניתן לגרור ולשחרר אותם לחלון התכנות כדי לבנות תוכנית. ניתן לחבר את ה- EV3 Brick למחשב באמצעות כבל USB, Wi-Fi או Bluetooth, ולאחר מכן ניתן להוריד את התוכנית מהמחשב אל ה- Brick.

התוכנית מורכבת מתוכנית ראשית וכמה "הבלוקים שלי" שהם שגרת משנה. הקובץ שהועלה מכיל את כל התוכנית שנמצאת כאן:

השלבים בתוכנית הראשית הם כדלקמן:

  1. הגדר והתחל את משתנה ספירת התורות והמערך.
  2. המתן 5 שניות ואמר "לך".
  3. התחל לולאה.
  4. סע דרך המבוך. כאשר מגיעים ליציאה, הלולאה יוצאת.
  5. הצג על מסך הבריק, את הצמתים שנמצאו במבוך עד כה.
  6. בדוק אם יש לקצר את השביל.
  7. הצגת הצמתים בנתיב המקוצר.
  8. חזור לשלב 4.
  9. לאחר הלולאה, סע את הנתיב הישיר.

צילום המסך מציג את התוכנית הראשית הזו.

שלב 4: הבלוקים שלי (שגרות משנה)

הבלוקים שלי (שגרות משנה)
הבלוקים שלי (שגרות משנה)

מוצג ה- Navigate My Block, השולט באופן בו הרובוט נוסע דרך המבוך, מוצג. ההדפסה קטנה מאוד וייתכן שהיא לא קריאה. אבל זו דוגמה טובה לכמה צדדיות וחזקות הן הצהרות ה- if (הנקראות מתגים במערכת LEGO EV3).

  1. חץ מס '1 מצביע על מתג הבודק אם החיישן האינפרא אדום רואה אובייקט במרחק רב יותר ממרחק מסוים. אם כן, סדרת הבלוקים העליונה מבוצעת. אם לא, השליטה מועברת לסדרת הבלוקים הגדולה והתחתונה, שבה נמצא החץ מספר 2.
  2. חץ מספר 2 מצביע על מתג הבודק איזה צבע רואה חיישן הצבעים. ישנם 3 מקרים: אין צבע בחלקו העליון, אדום באמצע וחום בתחתית.
  3. שני חיצים מס '3 מצביעים על מתגים הבודקים אם החיישן האולטראסוני רואה אובייקט במרחק יותר ממרחק מסוים. אם כן, סדרת הבלוקים העליונה מבוצעת. אם לא, השליטה מועברת לסדרת הבלוקים התחתונה.

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

שלב 5: התחלת בניית הרובוט: הבסיס

מתחיל לבנות את הרובוט: הבסיס
מתחיל לבנות את הרובוט: הבסיס
מתחיל לבנות את הרובוט: הבסיס
מתחיל לבנות את הרובוט: הבסיס

כפי שצוין קודם לכן, LEGO Mindstorms EV3 מאפשר לא יותר מאחד מכל סוג של חיישן המחובר לבנה אחת. השתמשתי בחיישנים הבאים (במקום שלושה חיישנים אולטראסוניים): חיישן אינפרא אדום, חיישן צבע וחיישן קולי.

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

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

שלב 6: החלק העליון של הבסיס, 1

ראש הבסיס, 1
ראש הבסיס, 1
ראש הבסיס, 1
ראש הבסיס, 1

שלב זה ושני השלבים הבאים מיועדים לחלק העליון של בסיס הרובוט, חיישן הצבעים והכבלים, כולם כבלים בגודל 10 אינץ '(26 ס מ).

שלב 7: החלק העליון של הבסיס, 2

ראש הבסיס, 2
ראש הבסיס, 2
ראש הבסיס, 2
ראש הבסיס, 2

שלב 8: החלק העליון של הבסיס, 3

ראש הבסיס, 3
ראש הבסיס, 3
ראש הבסיס, 3
ראש הבסיס, 3

שלב 9: חיישנים אינפרא אדום ואולטרא סאונד

חיישנים אינפרא אדום ואולטרא סאונד
חיישנים אינפרא אדום ואולטרא סאונד
חיישנים אינפרא אדום ואולטרא סאונד
חיישנים אינפרא אדום ואולטרא סאונד

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

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

שלב 10: כבלים

כבלים
כבלים

הכבלים מתחברים לבריק כדלקמן:

  • יציאה B: מנוע גדול שמאלי.
  • יציאה C: מנוע גדול ימני.
  • יציאה 2: חיישן קולי.
  • יציאה 3: חיישן צבע.
  • יציאה 4: חיישן אינפרא אדום.

שלב 11: השלב האחרון בבניית הרובוט: קישוט

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

הכנפיים והסנפירים מיועדים לקישוט בלבד.

שלב 12: בנה מבוך

בנה מבוך
בנה מבוך
בנה מבוך
בנה מבוך

שתי קרטוני גלי גלי אמורים להספיק למבוך. הכנתי את קירות המבוך בגובה 5 אינץ '(12.5 ס מ), אך 10 אינץ' (10 אינץ ') אמורים לעבוד לא פחות אם חסר לך קרטון גלי.

ראשית, חתכתי מסביב לדפנות הקרטונים, 10 אינץ '(25 ס מ) מהתחתית. אחר כך חתכתי מסביב לקירות 5 סנטימטרים מהתחתית. זה מספק מספר קירות בגודל 5 אינץ '. כמו כן, חתכתי את תחתיות הקרטונים והשארתי כ- 2.5 סנטימטר מחובר לקירות ליציבות.

את החלקים השונים ניתן לחתוך ולהדביק או להדביק בכל מקום שצריך כדי ליצור את המבוך. צריך להיות מרווח של 11 או 12 אינץ '(30 ס"מ) בין דפנות הצד בכל שביל עם מבוי סתום. האורך צריך להיות לא פחות מ -10 אינץ '(25 ס"מ). המרחקים האלה נחוצים כדי שהרובוט יסתובב.

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

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

שלב 13: המבוך

המבוך
המבוך

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

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

סיכום לסיכום

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

מוּמלָץ: