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

למידה עצמית רובוט כאוטי: 3 שלבים
למידה עצמית רובוט כאוטי: 3 שלבים

וִידֵאוֹ: למידה עצמית רובוט כאוטי: 3 שלבים

וִידֵאוֹ: למידה עצמית רובוט כאוטי: 3 שלבים
וִידֵאוֹ: 3 דרכים להתחבר לאנשים מבלי להתאמץ 2024, נוֹבֶמבֶּר
Anonim
למידה עצמית רובוט כאוטי
למידה עצמית רובוט כאוטי

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

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

שלב 1: חומרה AKA הרובוט

חומרה AKA הרובוט
חומרה AKA הרובוט
חומרה AKA הרובוט
חומרה AKA הרובוט
חומרה AKA הרובוט
חומרה AKA הרובוט

אתה צריך:

- ארדואינו דו

- 8 מיקרו -סרוווס

- עכבר PS/2 אחד

- 1 מעלה רמות

- גרסה כלשהי של מגן חיישן או דומה, נמאס לי ממגן החיישן וריתכתי את שלי.

-חוטים

-אספקת חשמל חיצונית 5V עבור הסרווואים

- כמה חתיכות גרוטאות מתכת, קצת דבק וחוט פלדה. והקלטת!

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

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

חבר את הסרווואים לתשלום, במקרה שלי הם מחוברים ל- D39, 41, 43, 45, 47, 49, 51, 53.

חבר את סרווס לספק הכוח החיצוני של 5V. לשם כך, בנה איזשהו מגן, או השתמש במגן חיישן או דומה. אין להאכיל את סרווס מהסיכת 5V תשלומים, זה לא מספיק, Due יישרף. השתמשתי בלוח אב טיפוס קטן כדי להפיץ את ה -5 V לכל הסרבים. לוח זה מחזיק גם את מחוון הרמות עבור שעון העכבר PS/2 וקווי הנתונים. הלוח גם מזין את העכבר עם 5V. זכור לחבר את הקרקע מכוח חיצוני לאדואי הארדואינו! סכמות מראה כיצד לחבר את כל זה.

חבר את PS/2 לחשמל (5V) ולקרקע. חבר את השעון וקו הנתונים של ה- PS/2 למכשיר ה- Due באמצעות מחלף רמות. (מגיע 3.3V, PS/2 הולך 5V). חבר שעון ב- D12 ונתונים ב- D13.

לפרטים על פרוטוקול PS/2, זהו מדריך טוב מאוד:

www.instructables.com/id/Optical-Mouse-Od…

ספריית PS/2 מאת jazzycamel שהשתמשתי בו:

שלב 2: הקוד

הקוד
הקוד

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

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

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

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

הקוד משתמש ב -50 יחידים. הליבה של זה היא מערך של 50x50 בתים.

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

בתחילת הריצה ישנם 8 משתנים m1, m2, m3, m4, m5, m6, m7 ו- m8 (אחד לכל סרוו). ברובוט הזה לכולם יש ערכי התחלה קבועים. ב- "tolken" ה- mś הופכים בלולאת מקרה/swich בהתאם לערכי האינדיבידואל. למשל ערך של "1" מבצע את הדברים הבאים: m1 = m1 + m2.

אם אינדיבידואל הוא: 1, 2, 3, 0, 0, 0, 0….. אז ה- mś ישתנה בצורה הבאה:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Tolken היא רשימה של 256 פעולות מתמטיות שונות, כך שכל ערך אפשרי של מערך הפרט מייצג שינוי מתמטי של ערכי m.

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

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

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

אתה יכול למצוא את הקוד ב- GitHub:

שלב 3: איך לאמן אותו?

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

שמתי כמה נקודות בדיקה בתוך הקוד כדי להבטיח שהרובוט נמצא במיקום ההתחלתי שלו.

אז יישר את הרובוט ותן לו לרוץ.

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

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

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

שיפורים אפשריים:

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

2. איזשהו מבחן מבחן שגרר את הרובוט חזרה למיקום ההתחלה שלו יאיץ את האימון.

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

מוּמלָץ: