קורס רובוטיקה ובינה מלאכותית : A106-02T תרגיל
תרגיל 1: תרגול שפת Python בסביבת Google Colab
סביבת עבודה: Google Colab
צרו בעזרת כלי בינה מלאכותית (AI) תוכנית פשוטה בשפת Python, בהתאם להוראות הבאות.
חלק א׳ — יצירת מערך, חישוב מדדים והצגת גרף
- צרו מערך NumPy חד־ממדי בשם
s1, המכיל 20 איברים מטיפוסfloat. - מלאו את המערך ב־20 מספרים אקראיים בטווח שבין
-1ל־1. - חשבו והדפיסו את הממוצע, החציון, השונות וסטיית התקן של ערכי המערך.
- הציגו את ערכי המערך בגרף קווי בצבע כחול. הוסיפו כותרת לגרף ותוויות לצירים: ציר X יציין את אינדקס האיבר, מ־0 עד 19, וציר Y יציין את ערך האיבר.
- הריצו את התוכנית ב־Google Colab ובדקו שהמדדים והגרף מוצגים.
חלק ב׳ — יצירת מערך נוסף וחישוב MSE
לאחר הרצת התא הראשון, הוסיפו תא קוד חדש באותה מחברת Colab. המשיכו להשתמש במערך s1 שנוצר בתא הראשון.
- צרו מערך NumPy חד־ממדי נוסף בשם
s2, המכיל 20 איברים מטיפוסfloat. - מלאו את המערך
s2ב־20 מספרים אקראיים בטווח שבין-1.7ל־1.4. - חשבו והדפיסו את MSE — ממוצע ריבועי ההפרשים בין האיברים המתאימים במערכים
s1ו־s2. - הציגו את שתי הסדרות באותו גרף: את
s1בצבע כחול ואתs2בצבע אדום. הוסיפו כותרת לגרף, תוויות לצירים ומקרא לזיהוי כל סדרה.
הריצו את תא הקוד החדש ובדקו שערך ה־MSE והגרף המשותף מוצגים.
תרגיל 2: תרגול Python — לולאת FOR, תנאי IF וספריית NumPy
סביבת עבודה: Google Colab
נושאי התרגיל: מערכים, לולאות, תנאים, מספרים אקראיים וחישובים סטטיסטיים.
חלק א׳ — יצירת מערך מספרים
צרו בעזרת AI תוכנית פשוטה בשפת Python המבצעת את הפעולות הבאות:
- ייבאו את ספריית
NumPy. - צרו מערך NumPy בשם
s1, המכיל 20 מספרים שלמים אקראיים בטווח שבין-10ל־10, כולל. - הציגו את כל איברי המערך.
- השתמשו בלולאת
forכדי לעבור על כל איברי המערך. - השתמשו בתנאי
if / elif / elseכדי לבדוק כל מספר ולהדפיס אם הוא חיובי, שלילי או אפס.
חלק ב׳ — ספירה וחישובים
- בעזרת לולאת
forותנאיif, ספרו כמה מספרים חיוביים וכמה מספרים שליליים קיימים במערך. - ספרו כמה איברים שווים לאפס.
- חשבו באמצעות NumPy את:
- ממוצע המספרים.
- הערך הגבוה ביותר.
- הערך הנמוך ביותר.
- סטיית התקן.
- הדפיסו את כל התוצאות בצורה ברורה.
חלק ג׳ — יצירת מערך חדש
לאחר הרצת התוכנית, הוסיפו תא קוד חדש ב־Google Colab.
- צרו מערך NumPy חדש בשם
s2, בעל 20 איברים, שכולם מאותחלים לאפס. - באמצעות לולאת
forותנאיif, עברו על איברי המערךs1והעתיקו את הערכים ל־s2לפי הכללים הבאים:- אם המספר חיובי — הכפילו אותו ב־2.
- אם המספר שלילי — שנו אותו ל־0.
- אם המספר שווה לאפס — השאירו אותו ללא שינוי.
- הציגו את שני המערכים
s1ו־s2. - חשבו את הממוצע של
s2והשוו אותו לממוצע שלs1. - השתמשו בתנאי
if / elif / elseכדי להדפיס האם הממוצע שלs2גדול, קטן או שווה לממוצע שלs1.
חלק ד׳ — הצגת תוצאות בגרף
- השתמשו בספריית
Matplotlibלהצגת שני המערכים באותו גרף. - הציגו את
s1בקו כחול ואתs2בקו אדום. - הוסיפו כותרת לגרף, שמות לצירים ומקרא.
הנחיות לביצוע
- השתמשו בלולאת
forובתנאיifבאופן מפורש, גם כאשר ניתן לבצע את אותה פעולה ישירות באמצעות NumPy. - כתבו הערות באנגלית המסבירות את שלבי התוכנית.
- הריצו כל תא קוד ובדקו שהתקבלו התוצאות הנדרשות.
- אין צורך להשתמש בפונקציות שהוגדרו על ידי המשתמש (
def) או במחלקות.
מטרת התרגיל: להבין כיצד משלבים מערכי NumPy עם לולאות for ותנאי if לצורך עיבוד נתונים, ביצוע חישובים והצגת תוצאות.
תרגיל 3: זרוע רובוטית חכמה — זיהוי עצמים וקבלת החלטות באמצעות YOLO ו־IF
סביבת עבודה: Google Colab
נושאי התרגיל: Python, YOLO, FOR, IF / ELSE, Object Detection, Robotics
מטרת התרגיל
פיתוח תוכנית בשפת Python המדמה מערכת ראייה ממוחשבת של זרוע רובוטית.
התוכנית תזהה עצמים בתמונה באמצעות YOLO, תחשב את מיקומם ותחליט איזו פעולה הזרוע הרובוטית צריכה לבצע בהתאם לסוג העצם ומיקומו.
התרגיל יתבצע בסימולציה תוכנתית בלבד, ללא חיבור לזרוע רובוטית אמיתית.
חלק א׳ — טעינת תמונה וזיהוי עצמים באמצעות YOLO
צרו בעזרת AI תוכנית Python המבצעת את הפעולות הבאות:
- התקינו את ספריית
ultralyticsבסביבת Google Colab. - ייבאו את הספריות הנדרשות.
- אפשרו למשתמש להעלות תמונה מהמחשב האישי באמצעות
files.upload(). - טענו מודל YOLO מאומן מראש לזיהוי עצמים.
- הפעילו את המודל על התמונה שהועלתה.
- השתמשו בלולאת
forכדי לעבור על כל העצמים שזוהו. - השתמשו בתנאי
ifכדי לבדוק אם העצם שזוהה שייך לאחת הקטגוריות הבאות:
| שם באנגלית | פירוש בעברית |
|---|---|
| Bottle | בקבוק |
| Cup | כוס |
| Cell phone | טלפון נייד |
| Book | ספר |
- הגדירו סף ביטחון (
Confidence) של0.5לזיהוי העצמים.
חלק ב׳ — קבלת החלטות באמצעות IF
- עבור כל עצם שזוהה, השתמשו בתנאי
if / elif / elseכדי לקבוע איזו פעולה הזרוע הרובוטית צריכה לבצע.
| העצם שזוהה | פעולת הרובוט |
|---|---|
| Bottle | PICK AND PLACE IN BOX A |
| Cup | PICK AND PLACE IN BOX B |
| Cell phone | DO NOT TOUCH |
| Book | PICK AND PLACE IN BOX C |
| אחר | IGNORE OBJECT |
- הדפיסו את שם העצם ואת הפעולה שהרובוט אמור לבצע.
- השתמשו במשתנים לספירת מספר העצמים שזוהו מכל קטגוריה.
- הדפיסו את מספר העצמים הכולל שהרובוט אמור להרים, ללא עצמים שהוגדרו כ־
DO NOT TOUCHאוIGNORE OBJECT.
חלק ג׳ — הצגת העצמים בתמונה
- ציירו מלבן אדום סביב כל עצם רלוונטי שזוהה.
- הציגו מעל כל מלבן את שם העצם.
- הציגו ליד כל עצם את הפעולה שהרובוט אמור לבצע.
- הציגו את התמונה המעובדת ב־Google Colab.
חלק ד׳ — חישוב מיקום העצם באמצעות YOLO
- קבלו ממודל YOLO את הקואורדינטות של המלבן המקיף כל עצם:
Xmin— הקצה השמאלי של המלבן.Xmax— הקצה הימני של המלבן.Ymin— הקצה העליון של המלבן.Ymax— הקצה התחתון של המלבן.
- חשבו את מרכז המלבן של כל עצם לפי הנוסחאות הבאות:
|
1 2 3 |
Xc = (Xmin + Xmax) / 2 Yc = (Ymin + Ymax) / 2 |
כאשר Xc ו־Yc הם מיקום מרכז המלבן בפיקסלים בתמונה.
- הדפיסו את שם העצם ואת מיקומו
(Xc, Yc).
חלק ה׳ — קבלת החלטה על כיוון תנועת הזרוע
- מצאו את רוחב התמונה בפיקסלים.
- חשבו את מרכז התמונה בציר X:
|
1 |
ImageCenterX = ImageWidth / 2 |
- השתמשו בתנאי
if / elif / elseכדי לקבוע את כיוון התנועה:
- אם
Xc < ImageCenterX, הדפיסוMOVE ARM LEFT. - אם
Xc > ImageCenterX, הדפיסוMOVE ARM RIGHT. - אם
Xc == ImageCenterX, הדפיסוARM CENTERED.
- הציגו על התמונה נקודה צהובה במרכז כל עצם.
- הדפיסו את כיוון התנועה עבור כל עצם שהרובוט רשאי להרים.
הערה: בתרגיל זה כיוון התנועה מחושב לפי מיקום העצם בתמונה בלבד. במערכת רובוטית אמיתית נדרשים גם כיול מצלמה, המרת קואורדינטות ומידע על העומק.
חלק ו׳ — בדיקת התוכנית
- בדקו את התוכנית עם תמונה המכילה בקבוק וכוס.
- הריצו אותה שוב עם תמונה המכילה ספר וטלפון.
- בדקו אם YOLO מזהה את העצמים בצורה נכונה.
- ודאו שהתוכנית מדפיסה את הפעולה ואת כיוון התנועה המתאימים לכל עצם.
הנחיות כלליות
- השתמשו בלולאת
forובתנאיif / elif / else. - השתמשו במודל YOLO מאומן מראש, ללא צורך באימון חדש.
- כתבו קוד פשוט עם הערות באנגלית.
- הציגו את תוצאות הזיהוי על התמונה המקורית.
- התוכנית אינה מפעילה מנועים בפועל.
שאלות מחשבה
- מדוע צריך לחשב את מרכז העצם ולא להסתפק בזיהוי סוג העצם?
- מה יקרה אם שני בקבוקים יופיעו באותה תמונה?
- האם מיקום
(Xc, Yc)מספיק כדי שזרוע רובוטית תוכל לאחוז בעצם? - אילו חיישנים נוספים יכולים לעזור לרובוט לקבוע את המרחק לעצם?