שרביט הקסם מבוסס-AI עם TensorFlow Lite למיקרו-בקרים ול-Arduino

1. מבוא

מה תפַתחו

בשיעור ה-Codelab הזה נלמד להשתמש בכלי TensorFlow Lite For Microcontrollers כדי להריץ מודל למידה עמוקה (Deep Learning) ב-Arduino Nano 33 BLE. המיקרו-בקר הופך ל'שרביט קסמים' דיגיטלי על ידי המשתמש לנופף לשלום ולהטיל עליו מגוון כישפים. כשהמשתמש מניע את השרביט, נתוני החיישנים המורכבים והרב-מימדיים האלה, שלא ניתנים לחדור אל המודל, מועברים כקלט למודל, וכתוצאה מכך מתקבל סיווג פשוט שמזהיר אותנו אם התרחשה אחת מכמה תנועות.

9208eb1207211349.gif

למידת מכונה במיקרו-בקרים

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

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

1914a419dfacf0b5.jpeg

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

TensorFlow Lite למיקרו-בקרים (תוכנה)

864114d0c2b4c919.png

TensorFlow היא מסגרת הקוד הפתוח של Google ללמידת מכונה ואימון של מודלים. TensorFlow Lite היא תוכנת framework, גרסה משופרת של TensorFlow, שמטרתה להריץ מודלים של tensorflow במכשירים קטנים יחסית, עם מתח נמוך יחסית, כמו טלפונים ניידים.

TensorFlow Lite For Microcontrollers היא מסגרת תוכנה, גרסה אופטימלית של TensorFlow, שמטרתה להריץ מודלים של tensorflow בחומרה זעירה בעוצמה נמוכה כמו מיקרו-בקרים. הוא פועל בהתאם למגבלות הנדרשות בסביבות המוטמעות האלה, כלומר, יש לו גודל בינארי קטן, הוא לא דורש תמיכה במערכת ההפעלה, ספריות C או C++ רגילות, או הקצאת זיכרון דינמית וכו'.

Arduino Nano 33 BLE (חומרה)

bcd452d4d660efa9.jpeg

Arduino היא פלטפורמה פופולרית בקוד פתוח שמשמשת לפיתוח פרויקטים אלקטרוניים. הוא מורכב מ:

  1. מעגל פיזי שניתן לתכנות (בדרך כלל מיקרו-בקר) כמו Arduino Nano 33 BLE שנעשה בו שימוש ב-Codelab הזה.
  2. סביבת פיתוח משולבת (IDE) של Arduino IDE), תוכנה שמשמשת לכתיבה ולהעלאה של קוד מחשב ללוח הפיזי.

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

מה תעשו

  • מגדירים את המיקרו-בקר Arduino Nano 33 BLE והופכים אותו ל'שרביט קסמים' דיגיטלי
  • הגדרה של Arduino IDE והתקנה של הספריות הנדרשות
  • פורסים את התוכנית במכשיר
  • מניפים את שרביט הקסמים וצופים בתחזיות כדי להפעיל מגוון קסמים

מה צריך להכין

  • מחשב נייד עם Linux, MacOS או Windows
  • Arduino Nano BLE Sense 33 (ללא כותרות)
  • כבל מיקרו USB (אם אתם משתמשים במחשב נייד עם חיבור USB-C, עדיף להשתמש בכבל USB-C למיקרו USB)
  • (אופציונלי) מוט, באורך של כ-12 אינץ' (באורך 30 ס"מ)
  • (אופציונלי) סרט דביק

2. הגדרת המיקרו-בקר של Arduino

פורקים את הציוד מ-Arduino

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

6ed84a651c871a58.jpeg

חיבור למחשב הנייד

  • מחברים את כבל המיקרו-USB לשקע שבצ'יפ.
  • מחברים את קצהו השני של הכבל לשקע USB במחשב הנייד.
  • נורת ה-LED השמאלית התחתונה ב-Arduino (בצד שמאל למעלה בתמונה למטה) אמורה להאיר.

c6936696f9659104.jpeg

להכיר את תהליך העבודה

99852afbed7e78b0.png

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

3. הגדרת סביבת הפיתוח המשולבת (IDE) של Arduino

1. הורדת סביבת הפיתוח המשולבת (IDE) של Arduino

כדי לפרוס את התוכנית במיקרו-בקר של Arduino, אנחנו משתמשים בסביבת הפיתוח המשולבת (IDE) של Arduino.

אחרי ההורדה, מתקינים ופותחים את סביבת הפיתוח המשולבת (IDE) של Arduino על ידי לחיצה על האפליקציה שהסמל שלה נראה כך: 75717f13527f36b9.png

דף הנחיתה ההתחלתי ייפתח כך:

933c91e6e1997c61.png

2. הגדרה של Board Manager

  1. בתפריט Arduino, בוחרים Tools -> Board: "Arduino .." —> Boards Manager.
  2. עליך לחפש את "Arduino Nano 33 BLE" ולהתקין את Arduino nRF528x Boards (Mbed OS). זה יבטיח שהמיקרו-בקר של Arduino Nano 33 BLE נתמך על ידי סביבת הפיתוח המשולבת (IDE) של Arduino. 817c63346152eda9.png
  1. בתפריט Arduino, בוחרים Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE".

9357691e1a1348eb.png

  1. לסיום, עליך לוודא שהלוח שבחרת הוא Arduino Nano 33 BLE בפינה הימנית התחתונה של סביבת הפיתוח המשולבת (IDE).

aa08706bb84fa9b2.png

3. הגדרת היציאה

בתפריט Arduino, בוחרים Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE). אתם אמורים לראות משהו כזה:

8c25990d0c6fb6f8.png

4. בדיקת החיבור של לוח ה-Jam

בתפריט Arduino, בוחרים Tools -> Get Board Info. אתם אמורים לראות משהו כזה:

ccd8f5305be6cf59.png

4. התקנת ספריות

1. ספריית TensorFlow Arduino

הספרייה הזו מכילה את כל הדוגמאות של TensorFlow Lite למיקרו-בקר, כולל קוד המקור של שרביט הקסמים הנדרש ל-Codelab הזה.

  1. בתפריט Arduino, בוחרים Sketch -> Include Library -> Add .ZIP Library....
  2. מוסיפים את ספריית TensorFlow Arduino .zip שהורדתם.

2. ספריית LSM9DS1 Arduino

הספרייה הזו מאפשרת לך לקרוא את הערכים של מד התאוצה, המגנטומטר והג'ירוסקופ מה-LSM9DS1 IMU ב-Arduino Nano 33 BLE Sense.

  1. בתפריט Arduino, בוחרים Sketch -> Include -> Manage Libraries....
  2. חיפוש והתקנה של "Arduino_LSM9DS1". ac2f78a737c5f233.png

5. טעינה ובנייה של הדוגמה

1. טעינת הדוגמה

בתפריט Arduino, בוחרים באפשרות File -> Examples -> Arduino_TensorFlowLite -> magic_wand כדי לטעון את הקוד לדוגמה.

de349f2d3cb49b98.png

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

cda8c35a597b0798.png

2. יצירת הדוגמה

לוחצים על הלחצן Upload בחלון השרטוט.

71cb1474d5e14669.png

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

3df1d0858c6e40a4.png

6. הדגמה (דמו)

בשלב הזה, שרביט הקסמים יכול לזהות 3 תנועות כפי שמוצג כאן: 99a607da66af9fc8.png

  1. אגף: מתחילים מהפינה השמאלית העליונה ועוקבים בקפידה אחרי האות W למשך שתי שניות.
  2. צלצול: מתחילים זקוף, מזיזים את המוט בעיגול בכיוון השעון למשך שנייה אחת.
  3. שיפוע: מתחילים בהחזקת השרביט כלפי מעלה ונורות ה-LED מכוונות אליכם. צריך להזיז את המוט למטה בשיפוע שמאלה ולאחר מכן בכיוון אופקי ימינה למשך שנייה אחת.

בתמונה הבאה מוצגות שתי תנועות. תחילה, מדרון ולאחר מכן אגף (השתמשו בו כחומר עזר להדגמה שלכם).

9208eb1207211349.gif

כדי להפעיל את ההדגמה, פועלים לפי ההוראות הבאות:

  1. כשה-USB מחובר, בוחרים באפשרות Tools -> Serial Monitor בתפריט Arduino. בשלב הראשון, ייפתח מסך ריק ללא פלט.

38e8d53652eb28f2.png

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

60b8a0017bcae419.png

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

7. השלבים הבאים

כל הכבוד, יצרת בהצלחה את התנועה הראשונה עם זיהוי 'שרביט הקסמים' במיקרו-בקר של Arduino!

אנחנו מקווים שנהניתם מהמבוא הקצר הזה לפיתוח עם TensorFlow Lite למיקרו-בקרים. הרעיון של למידה עמוקה (Deep Learning) על מיקרו-בקרים הוא חדש ומרגש, ואנחנו ממליצים לצאת ולהתנסות!

מסמכי עזר

647c3ef0dc103804.png

תודה, ושיהיה לכם כיף לבנות!