רובוט ערבוב קובייה הונגרית

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

הדגמה

המוטיבציה

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

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

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

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

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

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

איך להתחיל?

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

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

היה לי LEGO NXT Mindstorms 1 (סוג של מחשב שמאפשר לך לשלוט במנועים וחיישנים של לגו) שלא עשיתי בו כמעט שימוש אז החלטתי שזה יכול להיות אחלה פרויקט בשבילו.

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

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

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

כשרעיון פוגש מציאות

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

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

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

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

הדגם הסופי

הדגם הסופי היה מאוד שונה ממה שדמיינתי

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

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

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

תכנות

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

באותו תקופה ידעתי לתכנת ב Java ואחרי חיפוש קצר מצאתי את LeJOS, קושחה (סוג של תוכנה של הרכיב החומרתי) חלופית ל NXT שמאפשרת להעלות תוכנות שכתובות ב Java במקום תוכנות שכתובות בשפת הקוביות של לגו.
התכנות עם LeJos הוא מאוד אינטואטיבי ודומה ל Java, לדוגמה אם רוצים להזיז את המנוע קדימה אז פשוט כותבים ()Motor.forward.

טיפ של אלופים, כאשר ניגשים לספרייה או לשפת תכנות חדשה מומלץ להיעזר מאוד בתיעוד שלה במידה וקיים אחד. התיעוד מכיל הסברים על הפונקציות השונות ודוגמאות על איך אפשר להשתמש בהן. לדוגמה כאן אפשר למצוא את התיעוד של LeJos.
כדי למצוא את התיעוד של השפה צריך לחפש "שם השפה" + documentation (תיעוד). אפשר למצוא עוד הרבה שפות תכנות חלופיות ל NXT כאן.

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

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

מחשבות ותובנות

אב טיפוס מול מוצר מוגמר

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

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

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

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

פרויקט בשבוע

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

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

לתכנן פחות, לנסות יותר

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

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

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

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

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