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

רובוט שחמט עשוי לגו ופטל פי: 6 שלבים
רובוט שחמט עשוי לגו ופטל פי: 6 שלבים

וִידֵאוֹ: רובוט שחמט עשוי לגו ופטל פי: 6 שלבים

וִידֵאוֹ: רובוט שחמט עשוי לגו ופטל פי: 6 שלבים
וִידֵאוֹ: ממכר SCP-261 פאן-ממדי וניסוי התחבר 261 מודעות + שלם De + 2024, יולי
Anonim
Image
Image

להדהים את החברים שלך עם רובוט השחמט הזה!

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

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

אחד הדברים החדשים ברובוט זה הוא הקוד לזיהוי מהלכים. קוד ראייה זה ניתן לשימוש גם עבור רובוטי שחמט שנבנו בדרכים רבות אחרות (כגון ChessRobot שלי באמצעות זרוע רובוטית Lynxmotion).

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

הקוד שלי זמין לשימוש אישי.

שלב 1: דרישות

אורות, מצלמה, אקשן!
אורות, מצלמה, אקשן!

כל הקוד כתוב בפייתון, שיופעל בין היתר על פטל פטל.

Raspberry Pi הוא מחשב בגודל כרטיס אשראי שניתן לחבר אותו למסך ולמקלדת. זהו מחשב לא יקר (בסביבות $ 40), שיכול לשמש בפרויקטים של אלקטרוניקה ורובוטיקה, ולרבים מהדברים שהמחשב השולחני שלך עושה.

הרובוט שלי משתמש ב- Raspberry Pi ולגו. ממשק החומרה בין המנועים והחיישנים של RPi ו- Lego Mindstorms EV3 מסופק על ידי BrickPi3 מבית Dexter Industries.

בניית הלגו מבוססת על "רוברט השחמט של צ'ארלי", מאת דרוז האדי, ששונה על ידי, כולל אופנות לשימוש ב- RPi, ולא במעבד לגו מיינסטסטורמס. Lego Mindstorms EV3 מנועים וחיישנים משמשים.

תזדקק גם לשולחן, מצלמה, תאורה, מקלדת, מסך והתקן הצבעה (למשל עכבר).

וכמובן, כלי שחמט ולוח.

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

שלב 2: בניית החומרה

Image
Image

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

ביססתי את הרובוט שלי על "רובוט השחמט של צ'ארלי" (גרסת EV3) מאת דארוס האדי, מידע בדף זה אומר כיצד לקבל את הוראות הבנייה. רשימת החלקים נמצאת כאן.

שיניתי את הרובוט בכמה דרכים.

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

למעלה החוטף בפעולה, המציג את ההצמדה שהשתנתה.

2. המבנה המקורי משתמש במעבד Lego Mindstorms EV3, אך אני משתמש ב- Raspberry Pi, מה שמקל על השימוש בפייתון.

3. אני משתמש ב- Raspberry Pi 3 דגם B.

4. על מנת לממשק את ה- RPi ללגו, אני משתמש ב- BrickPi3 של דקסטר תעשיות. ה- BrickPi מתחבר ל- Raspberry Pi ויחד הם מחליפים את לבני LEGO Mindstorms NXT או EV3.

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

אתה יכול גם להשתמש ב- Rebrickable: לפתוח חשבון, להעלות את קובץ ה- LDD ומתוך כך לקבל רשימת מוכרים.

מקור טוב נוסף הוא Bricklink.

שלב 3: התוכנה שעושה את מהלך הרובוט

כל הקוד כתוב בפייתון 2.

  1. דקסטר תעשיות מספקת קוד לתמיכה בהנעת מנועי EV3 וכו '. הדבר מגיע עם ה- BrickPi3.
  2. אני מספק את הקוד בכדי לגרום למנועים לנוע באופן שיניע את קטעי השחמט!
  3. מנוע השחמט הוא Stockfish - שיכול לנצח כל אדם! "סטוקפיש הוא אחד ממנועי השחמט החזקים בעולם. הוא גם הרבה יותר חזק מהטובים של שחמט האדם".
  4. הקוד להנעת מנוע השחמט, אימות של מהלך תקף וכן הלאה הוא ChessBoard.py
  5. אני משתמש בקוד של https://chess.fortherapy.co.uk כדי להתממשק לזה.
  6. הקוד שלי (ב -2 לעיל) מתממשק עם זה!

שלב 4: התוכנה לזיהוי מהלך האדם

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

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

זה מכסה את כל המקרים, כולל טירה ו- passant.

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

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

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

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

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

על הלוח הראשוני אנו מחשבים עבור כל ריבוע לבן, עבור כל אחד מ- R, G, B, את הערך הממוצע (הממוצע) של הפיקסלים שלו (מלבד אלה הסמוכים לגבולות הריבוע). המינימום של אמצעים אלה עבור כל ריבוע לבן גדול ממקסימום האמצעים על פני כל ריבוע שחור, וכך נוכל לקבוע את צבע היצירה לריבועים תפוסים. כאמור, זה כל מה שאנחנו צריכים לעשות כדי לקבוע מה היה המהלך של השחקן האנושי.

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

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

שלב 5: אורות, מצלמה, פעולה

אורות

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

עדכון: יש לי כעת שני אורות, כדי לתת מקור אור אחיד יותר

מַצלֵמָה

אין ספק שאתה יכול להשתמש במודול המצלמה המיוחד של Raspberry Pi (עם כבל ארוך), אבל אני משתמש במצלמת USB - "Logitech 960-001064 C525 HD Webcam - Black" - שעובדת עם ה- RPi. עליך לוודא שהמצלמה לא זזה ביחס ללוח, על ידי בניית מגדל או שיש מקום לתקן אותו היטב. המצלמה צריכה להיות גבוהה למדי מעל הלוח, על מנת להפחית עיוות גיאומטרי. יש לי את המצלמה שלי 58 ס"מ מעל הלוח.

עדכון: עכשיו אני מעדיף את מצלמת האינטרנט HD 2300 של HP, מכיוון שאני מוצא את זה כאמין יותר.

שולחן

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

מקלדת

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

לְהַצִיג

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

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

משפטים שהרובוט אומר:

  • חשבון!
  • מַט
  • מהלך לא חוקי
  • ניצחת!
  • מָבוֹי סָתוּם
  • צייר לפי חזרה שלוש פעמים
  • חוק צייר לפי 50 מהלכים

חוק חמישים המהלכים בשחמט קובע כי שחקן יכול לתבוע תיקו אם לא נעשתה שום חבטה ולא הועילה חייל בחמישים המהלכים האחרונים (למטרה זו "מהלך" מורכב משחקן שמסיים את תורו ואחריו היריב משלים את תורו).

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

שלב 6: כיצד להשיג את התוכנה

1. דג דג

אם אתה מפעיל Raspbian ב- RPi שלך אתה יכול להשתמש במנוע Stockfish 7 - זה בחינם. פשוט תרוץ:

sudo apt-get להתקין stockfish

2. ChessBoard.py

קבל את זה כאן.

3. הקוד מבוסס על

מגיע עם הקוד שלי.

4. מנהלי התקני Python עבור BrickPi3:

קבל את אלה כאן.

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

קבל את זה ממני על ידי פרסום תגובה, ואני אגיב.

מוּמלָץ: