תוכן עניינים:

מדריך לגילוי אובייקטים רובוטיים של ג'טסון ננו: ארבעה שלבים
מדריך לגילוי אובייקטים רובוטיים של ג'טסון ננו: ארבעה שלבים

וִידֵאוֹ: מדריך לגילוי אובייקטים רובוטיים של ג'טסון ננו: ארבעה שלבים

וִידֵאוֹ: מדריך לגילוי אובייקטים רובוטיים של ג'טסון ננו: ארבעה שלבים
וִידֵאוֹ: סרטון מדהים ומרגש עם מסר חזק במיוחד 2024, יוני
Anonim
Image
Image

Nvidia Jetson Nano היא ערכת מפתחים, המורכבת מ- SoM (System on Module) ולוח מנשא התייחסות. הוא מיועד בעיקר ליצירת מערכות משובצות הדורשות כוח עיבוד גבוה ללימוד מכונה, ראיית מכונה ויישומי עיבוד וידאו. אתה יכול לצפות בסקירה מפורטת עליו בערוץ היוטיוב שלי.

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

עם זאת היו לי בעצמי כמה בעיות עם ה- Jetbot כפרויקט:

1) זה לא היה מספיק EPIC בשבילי. ג'טסון ננו הוא לוח מעניין מאוד עם יכולות עיבוד נהדרות וייצור בעזרתו רובוט פשוט עם גלגלים פשוט נראה כמו משהו מאוד לא נעים לעשות.

2) בחירת החומרה. Jetbot דורש חומרה מסוימת שהיא יקרה/ניתנת להחלפה בחלופות אחרות - למשל, הם משתמשים בג'ויסטיק לתפעול. נשמע כיף, אבל האם אני באמת צריך ג'ויסטיק כדי לשלוט ברובוט?

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

שלב 1: הכינו את החומרה שלכם

הכינו את החומרה שלכם
הכינו את החומרה שלכם

לפרויקט זה השתמשתי באב -טיפוס מוקדם של רובוט מרובע Zuri, תוצרת Zoobotics. הוא שכב במעבדה של החברה שלנו במשך זמן רב. הוצאתי אותו עם תושבת עץ בחיתוך לייזר לג'טסון ננו ומרכב מצלמה. העיצוב שלהם הוא קנייני, כך שאם ברובוט Jetson Nano שלך אתה רוצה ליצור משהו דומה, תוכל להציץ בפרויקט Meped, שהוא מרובע דומה עם עיצוב קוד פתוח. למעשה, מכיוון שלאף אחד לא היה קוד המקור של המיקרו -בקר של זורי (Arduino Mega) במעבדה שלנו, השתמשתי בקוד מ- Meped עם כמה התאמות קלות בריכוז הרגליים/רגליים.

השתמשתי במצלמת אינטרנט תואמת USB Raspberry Pi ובדונגל USB Wifi.

הנקודה העיקרית היא שמכיוון שאנחנו הולכים להשתמש ב- Pyserial לתקשורת טורית בין מיקרו -בקר לג'טסון ננו, המערכת שלך בעצם יכולה להשתמש בכל סוג של מיקרו -בקר, כל עוד היא יכולה להיות בממשק עם ג'טסון ננו באמצעות כבל טורי USB. אם הרובוט שלך משתמש במנועי DC ומנהג מנוע (למשל מבוסס L298P) אפשר להתממשק ישירות למנהג מנוע עם Jetson Nano GPIO. אך, למרבה הצער, עבור שליטה בסרוואות אתה יכול להשתמש במיקרו -בקר אחר בלבד או במנהל התקן ייעודי של I2C, מכיוון שלג'טסון ננו אין חומרה GPIO PWM.

לסיכום, אתה יכול להשתמש ברובוט מסוג כל מיקרו -בקר שניתן לחבר אותו עם ג'טסון ננו באמצעות כבל נתונים USB. העליתי את הקוד עבור Arduino Mega למאגר github עבור הדרכה זו והחלק הרלוונטי לממשק ג'טסון ננו עם Arduino נמצא כאן:

if (Serial.available ()) {switch (Serial.read ()) {

{

תיק 1':

קָדִימָה();

לשבור;

מקרה '2':

חזור();

לשבור;

מקרה '3':

פנה ימינה();

לשבור;

מקרה '4':

פונה שמאלה();

לשבור;

אנו בודקים אם יש נתונים זמינים, ואם כן, העבר אותם למבנה הבקרה של המתג. שימו לב, שהנתונים מהסדרה מגיעים כדמויות, שימו לב למרכאת היחידה סביב המספרים 1, 2, 3, 4.

שלב 2: התקן את החבילות הדרושות

למרבה המזל עבורנו, תמונת מערכת ברירת המחדל של Jetson Nano מגיעה עם הרבה דברים מותקנים מראש (כמו OpenCV, TensorRT וכו '), כך שנצטרך להתקין רק כמה חבילות אחרות כדי לגרום לקוד לפעול ולאפשר SSH.

נתחיל בהפעלת SSH למקרה שתרצה לבצע את שאר העבודה מרחוק.

עדכון sudo apt

sudo apt להתקין openssh-server

שרת SSH יופעל אוטומטית.

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

ssh שם משתמש@ip_address

אם יש לך מכונת Windows, יהיה עליך להתקין לקוח SSH, למשל Putty.

נתחיל בהתקנת מנהל חבילות Python (pip) וכרית למניפולציות תמונה.

sudo apt להתקין python3-pip python3-pil

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

sudo apt להתקין python3-smbus python-pyserial

שיבוט git

cd jetbot

sudo apt-get להתקין cmake

sudo python3 setup.py התקנה

לבסוף שיבוט את מאגר Github שלי לפרויקט זה לתיקיית הבית שלך והתקן Flask וכמה חבילות אחרות לשלט רחוק של רובוט באמצעות שרת אינטרנט.

שיבוט git

CD

sudo pip3 להתקין -r דרישות -opencv

הורד את דגם ה- SSD (גלאי זריקה יחיד) מראש מהקישור הזה והנח אותו בתיקיית jetspider_demos.

עכשיו אנחנו מוכנים לצאת לדרך!

שלב 3: הפעל את הקוד

הפעל את הקוד
הפעל את הקוד

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

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

הסקריפט העיקרי לאובייקט הבא הוא object_following.py ב- jetspider_object_following, שכן טלופרציה היא spider_teleop.py ב- jetspider_teleoperation.

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

app.run (host = '0.0.0.0', threaded = True)

ברגע שנפתח את כתובת 0.0.0.0 (localhost) בדפדפן האינטרנט שלנו או בכתובת Jetson Nano ברשת (ניתן לבדוק באמצעות הפקודה ifconfig), פונקציה זו תבוצע

אינדקס def ():

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

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

ב- def gen (): פונקציה אנו מיישמים את פונקציית הגנרטור בלולאה אינסופית שלוכדת את התמונה, שולחת אותה ל- def execute (img): function, ומניבה תמונה שתישלח לדף האינטרנט לאחר מכן.

def execute (img): הפונקציה היא המקום בו כל הקסם מתרחש, הוא לוקח תמונה, משנה את גודלו עם OpenCV ומעביר אותו ל- Jetbot ObjectDetector בכיתה "מודל". הוא מחזיר את רשימת הגילויים ואנו משתמשים ב- OpenCV כדי לצייר מלבנים כחולים מסביבם ולכתוב ביאורים עם מחלקת אובייקטים. לאחר מכן אנו בודקים אם יש אובייקט שמעניין אותנו detectmatching_detections = [d עבור d בגילויים [0] אם d ['label'] == 53]

אתה יכול לשנות מספר זה (53) למספר אחר ממערך הנתונים של CoCo אם אתה רוצה שהרובוט שלך יעקוב אחר אובייקטים אחרים, 53 הוא תפוח. הרשימה כולה נמצאת בקובץ category.py.

לבסוף אם לא אובייקט אובייקט למשך 5 שניות אנו מעבירים את התו "5" כדי שהרובוט יעצור מעל הסידרה. אם נמצא אובייקט אנו מחשבים עד כמה הוא רחוק ממרכז התמונה ופועל בהתאם (אם קרוב למרכז, עבור ישר (תו "1" בסדרה), אם בצד שמאל, לך שמאלה וכו '). אתה יכול לשחק עם הערכים האלה כדי לקבוע את הטוב ביותר עבור ההתקנה הספציפית שלך!

שלב 4: מחשבות אחרונות

מחשבות אחרונות
מחשבות אחרונות

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

תוכל גם להסתכל במחברת זיהוי האובייקטים של Nvidia Jetbot כאן.

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

הוסף אותי ב- LinkedId אם יש לך שאלות והירשם לערוץ היוטיוב שלי כדי לקבל הודעה על פרויקטים מעניינים יותר הקשורים ללמידת מכונות ורובוטיקה.

מוּמלָץ: