תקלה ולקח קטן ברובוט בתכנון עצמי, שמזכירים לנו לא להתעלם מהיסודות הפשוטים של המכניקה.
לפני מספר חודשים קיבלתי שלושה רובוטים "לימודיים" קטנים, ישנים ומאובקים, שבימים יפים יותר היו מסוגלים לנסוע לאורך פס שחור בניצוחו של מיקרו-בקר PIC מתקופת אנטיוכוס. גם אם הייתי מצליח להשמיש אותם לא היה בכך הרבה טעם, אך המנועים והגלגלים שלהם נראו במצב טוב יחסית, אז שמרתי אותם בצד.
לאחרונה, כשהחלו להירקם תוכניות לסדנה קצרה בנושא רובוטים בבית ספר, חשבתי שיהיה נחמד לבנות רובוט או שניים להדגמות חיות. מדדתי את החלקים הישנים וערכתי בזריזות לפיהם PCB לרובוט חדש, עם רכיבים מודרניים ו"מוח" מתקדם – במקרה זה, לוח Xiao RP2040.
הרובוט החדש, כמו אבותיו, נוסע ופונה באמצעות שליטה דיפרנציאלית במהירות הסיבוב של שני גלגלים עיקריים גדולים, ושומר על יציבות באמצעות גלגל שלישי, קטן וחופשי, שתומך במשקל הרובוט בצדו האחורי ומתאים את עצמו לכיוון הנסיעה. כיוון שהרכבתי את מכלולי המנועים בצורה שונה מאשר ברובוטים המקוריים, הדפסתי בתלת-ממד הגבהה לגלגל החופשי, כך שהרובוט יהיה מאוזן. במקום שתי סוללות ה-AAA הצנועות ברובוטים המקוריים שמתי סוללת 18650, פלוס מודול קנוי לטעינה נוחה והגנה, ואת הטרנזיסטורים הפרימיטיביים והמגושמים ששלטו פעם בזרם למנועים החלפתי ברכיב DRV8210DRLR – דרייבר פצפון (1.6×1.2 מילימטרים) ונוח מאוד למנוע DC.
עוד כמה לדים לקישוט, הכנה לחיישן, מפסק הפעלה מפואר וכדומה, והדגם הראשון של הרובוט החדש היה מוכן. והוא נסע ממש גרוע. כששני המנועים פעלו באותה עוצמה באותו כיוון, מה שאמור כמובן לגרום לנסיעה ישרה, הרובוט למעשה נסע בעיקול משמעותי, כאילו אחד המנועים חלש יותר מהשני.
ההשערה הראשונה שלי הייתה שזה בדיוק העניין. בכל זאת, מנועים ישנים, מי יודע מה עבר עליהם, כמה אבק חדר פנימה אל התמסורת, גריז התקשה וכו'. בהנחה שלא מחליפים או פותחים ומנקים את מכלולי המנוע, אפשר לעקוף את הבעיה באמצעות האטה מכוונת של המנוע החזק-יותר. ניסיתי את זה, אך הבעיה המשיכה, ואף החמירה: בזמן שהרובוט סייר על הרצפה וניסה להימנע מהיתקלות במכשולים, הבחנתי שלפעמים עיקול הנסיעה חד ולפעמים מתון, ומה שהכי מוזר – לפעמים העיקול היה בכלל לצד השני!
את זה כבר אי אפשר לתרץ במנועים מלוכלכים. משהו אחר גורם לרובוט לסטות מדרך הישר, וזה לא הקוד. מה עוד יכול להשפיע? המשכתי להתבונן על הרובוט בפעולה, ואז הבחנתי שהגלגל האחורי החופשי פונה בהתאם לעיקול… עוד לפני שהנסיעה התחילה! כשהרובוט הבחין במכשול, עצר והסתובב קצת ימינה או שמאלה, הגלגל האחורי אימץ זווית מסוימת, ושמר עליה גם כשהרובוט ניסה להתקדם ישר. הזווית הזו הספיקה כדי להטות לאורך זמן את כיוון הנסיעה, למרות ההשפעה הגדולה הרבה יותר, לכאורה, של הגלגלים הראשיים.
וידאתי את נכונות ההשערה על ידי שינוי ידני של זווית הגלגל האחורי. כן, הרובוט סטה בהתאם לשינוי שגרמתי. אבל כל המהות של הגלגל הזה היא החופש שלו, הוא אמור להתאים את עצמו לכיוון הנסיעה ולא להיפך. מה גורם לו להיתקע ככה? כשהחזקתי את הרובוט באוויר ונגעתי בגלגל, המכלול הסתובב בקלות. ליתר ביטחון הוספתי קצת גריז לחלקים הנעים (גריז מיוחד לתמסורות פלסטיק, שארית ממכונית צעצוע שקניתי פעם לילדים). לא עזר. ואז הבנתי.
הסיבה להיתקעות הגלגל מופיעה בתמונה הבאה. נקודת המגע של הגלגל עם הרצפה, וכן ציר הסיבוב שלו, נמצאים על קו (באדום) מרוחק מציר הזווית (בירוק). משקל הרובוט מפעיל לחץ כלפי מטה בדיוק על ציר הזווית, וגורם לגלגל להתרומם ביחס אליו. ניתן לראות בעין את האלכסון שנוצר, שכמובן יוצר חיכוך מיותר עם הציר ומתנגד לשינוי נוסף בזווית.
האלכסון שרואים בתמונה מודגש מאד כי היה רווח גדול בין הציר לבין מכלול הגלגל. ניסיתי להוסיף דיסקית פלסטיק דקה (ועוד גריז) כדי לצמצם את הרווח הזה, אך גיליתי שהחיכוך עדיין היה גדול מדי. הפתרון הנכון הוא להזיז את הצירים עצמם כך שיהיו על אותו קו. ברובוטים הישנים הבעיה הייתה פחות ניכרת בזכות המיקום של הגלגל החופשי (קרוב יותר למרכז הכובד), המשקל הקטן יותר של הרובוט כולו, ובעיקר בזכות תיקוני הכיוון הרצופים שהם לחם חוקה של נסיעה לפי קו.
לא היו לי גלגלים חלופיים מתאימים. כן היו לי כדורי מתכת ב"כלוב" פלסטי, שקניתי פעם לפרויקט אחר שלא יצא לי לבנות. כדורים כאלה משמשים לעתים קרובות ברובוטים קלים, לרהיטים וגם בתעשייה. המבנה וצורת ההברגה שלהם חייבו תכנון והדפסה מחדש של המגביה: מחיר זול מאוד לשלם עבור רובוט שמסוגל, סוף כל סוף, לנסוע ישר בלי טובות. לחץ המשקל עובר היישר למטה דרך הכדור, בכיוון שיועד מלכתחילה להתמודד עם החיכוך, וכמובן שצורת הכדור עצמה מקלה עליו לקבל כיווני תנועה משתנים. החיסרון היחיד הוא שהכדור הקשיח נוקש בכל פעם שהוא חולף על פני חריץ בין מרצפות.
אז מה מוסר ההשכל? כשעוברים מאלקטרוניקה ומודולים סטטיים אל מכונות שפועלים בהן ועליהן כוחות מכניים, צריך להכיר גם את הכוחות האלה ולהתחשב בהם – אפילו אם זהו רק רובוט קטן, ואפילו אם הוא בנוי מחלקים של רובוט אחר שכן עבד.
איחוד של שני הצירים דווקא לא היה מביא לתוצאה הרצויה, כיוון שבמצב כזה תנועת סיבוב היתה גורמת לכוחות שפועלים בניצב לכיוון התקדמות של הגלגל, דבר שהיה מקשה על הסיבוב. פתרון אפשרי הוא להוסיף מעט משקל לרובוט, דבר שיגרום לכך שהכוחות המופעלים על הציר יהי דווקא גדולים יותר ולא יתנו לגלגל להתקע בזווית מסויימת, או להוסיף מיסב שיקטין את החיכוך. פתרון נוסף הוא omni wheel שפותרים את הבעיה של כוחות ניצבים לגלגל על ידי גלגל נוסף על הגלגל הגדול. גם אחרי פתרונות כאלו עצם השיטה הזו מועדת לסטיות כיוון שאפילו עם הגלגל לא נשאר תקוע בזווית מסויימת אלא מתיישר לכיוון הנסיעה… לקרוא עוד »
חבל שאי אפשר לעשות ניסויים כאלה בקלות כמו שעושים עם קוד או מטריצה. הפחתת החיכוך עם גריז לא עזרה – אולי מיסב טוב היה מועיל יותר. תוספת משקל נראית לי נוגדת את האינטואיציה, אבל זה דורש בדיקה אמפירית. גם צורת ה"צמיג" בוודאי משפיעה. תודה!
מדליק! תוכל בבקשה לשלוח קישור לסרטון? תודה!
תודה, אבל אין לי סרטון לרובוט הזה…