דלגו לתוכן המרכזי
KitLab
שיעור קודם
נהיגה חכמה — סדר עדיפויות ופונקציות· 14 / 16
נהיגה חכמה — סדר עדיפויות ופונקציות
🎬

הסרטון בדרך אלינו

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

נהיגה חכמה — סדר עדיפויות ופונקציות

מה בשיעור?

  • קבלת החלטות בנהיגה אוטונומית
  • למה עקיפת מכשולים קודמת לעקיבת קו
  • פונקציות: הגדרה וקריאה
  • משימה: שתי התנהגויות שעובדות יחד

חיות קטנות על הכביש

TinkerBott ממשיך לנסוע לאורך הקו השחור — וכשהוא מגיע לאזור המגורים, חיות קטנות מופיעות לפתע לפניו.

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

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

ואתם שואלים את השאלה הנכונה: "מה הוא צריך לעשות קודם — לעקוף מכשולים או לעקוב אחרי הקו?"

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


הידע שצריך

קבלת החלטות בנהיגה חכמה

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

והכלל הראשון בנהיגה הוא תמיד אותו כלל: בטיחות קודמת לכל.

לכן סדר העדיפויות כאן ברור:

  1. עקיפת מכשולים — עדיפות ראשונה
  2. עקיבת קו — עדיפות שנייה

הרובוט יבדוק קודם אם יש מכשול. רק אם אין — הוא יעסוק בקו.

הרעיון החדש: פונקציות

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

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

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

לפונקציה שני חלקים:

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

משימה: לעקוב אחרי הקו ולעצור למכשולים

הרובוט נוסע לאורך הקו השחור. כשמופיע מכשול — הוא עוצר. כשהמכשול מוסר — הוא ממשיך.

תרשים הזרימה

תרשים זרימה — עדיפות למכשולים

אבני הפונקציות

יצירת פונקציה חדשה

Make a Function — יוצרים פונקציה ונותנים לה שם. תנו שם שמסביר מה היא עושה, למשל עקיפה או עקיבה.

הגדרת גוף הפונקציה

function doSomething — כאן כותבים את גוף הפונקציה. השם ניתן לשינוי.

אבן return

return — מחזירה ערך מהפונקציה אל מי שקרא לה.

קריאה לפונקציה

call — מפעילה פונקציה שהגדרתם.

התוכנית

התוכנית של שיעור 14

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

מריצים

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

הרובוט עוקב ועוצר


המטרה נעלמת

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

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

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


נסו בעצמכם

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

🧰 הרכיבים לשיעור הזה

רוצים את חומרי הקורס והעדכונים?

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