7 minute read

שלום עולם!

אני יובל דולב, מנטור בקבוצת Ladies FIRST #4319, בוגר קבוצת ה-FRC מלוד The Spikes #2212 (מחזור 2016) ומנטור לשעבר בקבוצת The Red Pirates #4661. אני כאן כדי לעזור לקבוצות FRC ללמוד לתכנת רובוט לתחרות FRC בשפת Java - וגם ללמוד איתכן ביחד.

התחלתי ללמד את הנושא כבר משנתי השנייה כתלמיד בקבוצת The Spikes #2212, ומאז שסיימתי את התיכון, לימדתי את הנושא לסירוגין מדי פעם. בימים אלה אני כאמור מנטור בקבוצת Ladies FIRTS #4319 (עונת 2025 תהיה העונה השלישית שלי בקבוצה), והפוסטים שלי מבוססים על הנסיון שלי בלימוד הנושא ועל הנסיונות הנוכחיים.

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

למה להיות בצוות תכנות

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

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

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

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

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

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

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

מה צריך ללמוד בשביל להיות בצוות תכנות

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

האם צריך להתחיל לשנן

אל תתחילו לשנן.

כשהייתי בתיכון, הייתי במגמת מדעי המחשב, וכל המבחנים (כולל הבגרות) היו עם חומר פתוח - כמה חומר פתוח שרוצים. מחברות, ספרים - בגדול היה כתוב “הכל חוץ ממחשב” - אילו הייתי רוצה, היה בסדר גם אם הייתי מביא את כל כרכי “שר הטבעות” (שמעתי גם על מישהי שלבחינת המתכונת הביאה מקלדת, עכבר, מסך ורמקול - כיוון שהיה כתוב “הכל חוץ ממחשב”). בעולם האמיתי, מתכנתים כמעט תמיד יכולים לבדוק דברים בגוגל, וגם מתכנתים שעוסקים ב-Java כל יום במשך שנים עשויים למצוא את עצמם בודקים בגוגל “How to read from a file Java”. יש אולי מסגרות אקדמיות שונות שבהן לא ירשו חומר פתוח, ויש מעסיקים שהמחשבים שלהם לא מחוברים לרשת האינטרנט (בעיקר צה”ל), אבל הגישה שלי, היא שכיוון שאני לא מנהל מתכנתים בהקשר בטחוני, שבו צריך לשמור על מחשבים מסווגים שאסור שיהיו מחוברים לרגע לאינטרנט, וכיוון שאני גם לא מלמד למבחן אקדמי שבסופו צריך להיבחן עם נייר ועט, אז לא רק שאני בסדר עם חומר פתוח, זה כולל כל חומר פתוח, כולל גוגל.

אבל - שימו לב - יושרה אינטלקטואלית היא חשובה: אנחנו לא יכולות סתם להעתיק כל קוד. בין אם אנחנו מוצאים קוד בגוגל, ב-Stack Overflow או ב-Chat GPT, זה לא אומר שאנחנו רשאיות להשתמש בו. לא איכנס לענייני זכויות יוצרים מבחינת החוק על הנייר ותנאי השימוש שלא קראתן לאתרים השונים - בעיקר כי אני לא יכול לדבר בשמם של אותם אתרים, ואני גם לא משפטן. הנקודה החשובה היא שגם אם אנחנו לוקחות קוד ממקור אחר, במקרים שבהם זה טכנית חוקי ועומד בתנאי השימוש, יש לנו בנוסף גם חובה מוסרית חשובה של יושרה אינטלקטואלית - אנחנו צריכות לכל הפחות להבין את הרעיונות מאחוריו, לפחות במידה מסוימת. ככלל אצבע, אם אנחנו לוקחים קוד, אז בנוסף לשאלה של האם זה עומד בתנאי השימוש של המקור, חשוב גם הכלל שהקוד הזה צריך להיות משהו שהיינו יכולות לכתוב בעצמנו, עם מספיק זמן של קריאת התיעוד (שהן מעין “הוראות שימוש” של הכלים שמספקת שפת התכנות או הספריות).

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

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

מה התכנית

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

נקודות עיקריות

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

Comments