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

בנה רובוט Turtlebot משלך !: 7 שלבים
בנה רובוט Turtlebot משלך !: 7 שלבים

וִידֵאוֹ: בנה רובוט Turtlebot משלך !: 7 שלבים

וִידֵאוֹ: בנה רובוט Turtlebot משלך !: 7 שלבים
וִידֵאוֹ: 5 лучших STEM-игрушек для детей в 2024 году 2024, יולי
Anonim
בנה רובוט Turtlebot משלך!
בנה רובוט Turtlebot משלך!
בנה רובוט Turtlebot משלך!
בנה רובוט Turtlebot משלך!
בנה רובוט Turtlebot משלך!
בנה רובוט Turtlebot משלך!

לַעֲרוֹך:

מידע נוסף הקשור לתוכנה ובקרה זמין בקישור הזה:

hackaday.io/project/167074-build-your-own-turtlebot-3-backbone

הקישור הישיר לקוד הוא:

github.com/MattMgn/foxbot_core

למה הפרויקט הזה?

Turtlebot 3 היא הפלטפורמה המושלמת לעומק אלקטרוניקה, רובוטיקה ואפילו AI! אני מציע לך לבנות משלך turtlebot שלב אחר שלב עם רכיבים במחירים נוחים מבלי לוותר על תכונות וביצועים. עם דבר אחד בראש: שמירה על המיטב מהרובוט הראשוני, המודולריות שלו, הפשטות והמספר העצום של חבילות לניווט אוטונומי ו- AI מקהילת הקוד הפתוח.

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

מה תגלו בפרויקט הזה?

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

כל תהליך הבנייה יפורט: מעבר מהדפסה של חלקים תלת -ממדיים, הרכבה ומספר המרכיבים, הלחמה ושילוב אלקטרוניקה ועד סוף סוף עריכת קוד ב- Arduino. מדריך זה יסתיים בדוגמת 'שלום עולם' להכיר אותך ב- ROS. אם משהו נראה לא ברור, אתה מוזמן לשאול שאלה!

אספקה

מכשירי חשמל:

1 x מחשב לוח יחיד להפעלת ROS, יכול להיות פטל פטל או ג'טסון ננו למשל

1 x Arduino DUE, אתה יכול גם להשתמש ב- UNO או ב- MEGA

1 x לוח פרוטו המתאים ל- pin-out של Arduino DUE זמין כאן

2 x מנועי DC 12V עם מקודדים (אופציה של 100 סל ד)

1 x נהג מנוע L298N

רגולטור 2 x 5V

1 x סוללה (סוללת LiPo 3S/4S למשל)

2 x מתגים ON/OFF

2 x LED

2 x 470kOhm נגדים

3 x 4 פינים מחברי JST

1 x כבל USB (לפחות אחד בין SBC ל- Arduino)

חיישנים:

1 x חיישן זרם (אופציונלי)

1 x 9 דרגות חופש IMU (אופציונלי)

1 x LIDAR (אופציונלי)

שִׁלדָה:

16 x צלחות מודולריות של Turtlebot (שניתן להדפיס גם בתלת מימד)

2 x גלגלים בקוטר 65 מ"מ (אופציה ברוחב 6 מ"מ)

4 x מרווחי ניילון 30 מ מ (אופציונלי)

20 x מוסיף M3 (אופציונלי)

אחרים:

חוטים

ברגים ותוספות M2.5 ו- M3

מדפסת תלת מימד או מישהו שיכול להדפיס עבורך את החלקים

מקדחה ידנית עם סט מקדחים כמו זה

שלב 1: תיאור

תיאור
תיאור
תיאור
תיאור

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

השכבה התחתונה: עם קבוצת ההנעה (סוללה, בקר מנועים ומנועים), ואלקטרוניקה 'ברמה נמוכה': מיקרו -בקר Arduino, ווסת מתח, מתגים …

השכבה העליונה: עם האלקטרוניקה 'ברמה גבוהה' כלומר מחשב הלוח היחיד וה- LIDAR

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

סכמטי אלקטרוני

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

סוללת ליתיום יון פולימר 3S בעלת קיבולת של 3000mAh מפעילה את המעגל הראשון, היא מפעילה הן את לוח בקר המנוע (L298N) והן וויסת 5V ראשונה עבור מקודדי מנוע וארדואינו. מעגל זה מופעל באמצעות מתג עם נורית המציין את מצב ההפעלה/כיבוי שלו.

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

לאחר מכן ניתן להוסיף חיישנים נוספים כמו LIDAR או מצלמה ישירות ל- Raspberry Pi באמצעות USB או יציאת CSI.

עיצוב מכני

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

שלב 2: הרכבת בלוק מנוע

הרכבת בלוק מוטורי
הרכבת בלוק מוטורי
הרכבת בלוק מוטורי
הרכבת בלוק מוטורי
הרכבת בלוק מוטורי
הרכבת בלוק מוטורי

הכנה מוטורית

השלב הראשון הוא להוסיף סרט קצף בעובי 1 מ מ מסביב לכל מנוע כדי למנוע רעידות ורעש כאשר המנוע יסתובב.

חלקים מודפסים

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

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

הגדרות מדפסת תלת מימד: כל החלקים מודפסים עם הפרמטרים הבאים

  • זרבובית בקוטר 0.4 מ"מ
  • 15% מילוי חומרים
  • שכבה בגובה 0.2 מ"מ

גַלגַל

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

קיבעון

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

שלב 3: מתגים והכנת כבלים

מתגים והכנת כבלים
מתגים והכנת כבלים
מתגים והכנת כבלים
מתגים והכנת כבלים
מתגים והכנת כבלים
מתגים והכנת כבלים

הכנת כבל מנוע

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

יש לך אפשרות להלחם אותם ישירות בלוח הפרוטו שלך או אפילו בארדואינו שלך, אך אני ממליץ לך להשתמש בכותרות סיכות נקבות ומחברי JST-XH במקום זאת. כך תוכל לחבר/לנתק אותם מהלוח הקדמי ולהקל על ההרכבה.

טיפים: אתה יכול להוסיף צמת שרוולים ניתנת להרחבה סביב החוטים שלך וחתיכות של צינור כיווץ ליד מחברים, וכך תקבל כבל 'נקי'.

מתג ולד

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

הַרכָּבָה

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

שלב 4: חיווט לוחות אלקטרוניים

חיווט לוחות אלקטרוניים
חיווט לוחות אלקטרוניים
חיווט לוחות אלקטרוניים
חיווט לוחות אלקטרוניים
חיווט לוחות אלקטרוניים
חיווט לוחות אלקטרוניים

פריסת לוחות

לוח פרוטו המתאים לפריסת הלוח של Arduino משמש לצמצום מספר החוטים. בחלקו העליון של לוח הלוח הקדמי, ה- L298N מוערם עם כותרת נקבה של דופונט (דופונט הם כותרות 'כמו Arduino').

הכנה L298N

במקור, לוח L298N אינו מגיע עם כותרת Dupont זכר מתאימה, עליך להוסיף שורה של 9 סיכות מתחת ללוח. אתה צריך לממש 9 חורים עם מקדח בקוטר 1 מ מ במקביל לחורים הקיימים כפי שאתה יכול לראות בתמונה. לאחר מכן קשר את הפינים המתאימים של 2 השורות עם חומרי הלחמה וחוטים קצרים.

L298N סיכה החוצה

ה- L298N מורכב משני ערוצים המאפשרים בקרת מהירות וכיוון:

כיוון באמצעות 2 יציאות דיגיטליות, הנקראות IN1, IN2 לערוץ הראשון, ו- IN3 ו- IN4 לשני

מהירות דרך 1 יציאות דיגיטליות, הנקראות ENA לערוץ הראשון ו- ENB לשני

בחרתי את ה- pin-out הבא עם הארדואינו:

מנוע שמאל: IN1 על סיכה 3, IN2 על סיכה 4, ENA על סיכה 2

מנוע ימין: IN3 בסיכה 5, IN4 בסיכה 6, ENB בסיכה 7

רגולטור 5V

גם אם ה- l298N בדרך כלל מסוגל לספק 5V, אני עדיין מוסיף רגולטור קטן. הוא מניע את הארדואינו דרך יציאת VIN ושני המקודדים במנועים. אתה יכול לדלג על שלב זה באמצעות ישירות באמצעות הרגולטור המובנה L298N 5V.

מחברי JST ו- pin-out של מקודד

השתמש במתאמי מחבר JST-XH נקביים של 4 סיכות, כל מחבר מקושר לאחר מכן ל:

  • 5V מהרגולטור
  • קרקע
  • שתי יציאות קלט דיגיטליות (לדוגמא: 34 ו -38 למקודד הימני ו -26 ו -30 לשמאל)

תוספת I2C

כפי שאולי שמתם לב, יש מחבר JST נוסף בעל 4 פינים על לוח הלוח הקדמי. הוא משמש לחיבור התקן I2C כמו IMU, אתה יכול לעשות את אותו הדבר ואפילו להוסיף יציאה משלך.

שלב 5: קבוצת מוטור וארדואינו בשכבה התחתונה

קבוצת מוטור וארדואינו בשכבה התחתונה
קבוצת מוטור וארדואינו בשכבה התחתונה
קבוצת מוטור וארדואינו בשכבה התחתונה
קבוצת מוטור וארדואינו בשכבה התחתונה
קבוצת מוטור וארדואינו בשכבה התחתונה
קבוצת מוטור וארדואינו בשכבה התחתונה

קיבוע בלוקים של מנוע

לאחר הרכבת השכבה התחתונה עם 8 הלוחות של Turtlebot, פשוט השתמש ב -4 ברגים M3 ישירות בתוספות כדי לשמור על בלוקים של מנוע. לאחר מכן תוכל לחבר את חוטי החשמל של המנוע ליציאות L298N ולכבלים שנעשו בעבר למחברי ה- JST הלוח הקדמי.

חלוקת כוח

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

ניהול כבלים

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

שמירה על סוללה

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

רכבת הרים

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

שלב 6: מחשב לוח אחד וחיישנים בשכבה העליונה

מחשב לוח אחד וחיישנים בשכבה העליונה
מחשב לוח אחד וחיישנים בשכבה העליונה
מחשב לוח אחד וחיישנים בשכבה העליונה
מחשב לוח אחד וחיישנים בשכבה העליונה
מחשב לוח אחד וחיישנים בשכבה העליונה
מחשב לוח אחד וחיישנים בשכבה העליונה

איזה מחשב לוח יחיד לבחור?

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

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

רגולטור 5V

לא משנה מה הלוח שהחלטת להביא על הרובוט שלך, אתה צריך וסת 5V. ה- Raspberry Pi 4 העדכני ביותר דורש 1.25A מקסימום אך ג'טסון ננו דורש עד 3A על מתח ולכן בחרתי בפולו 5V 6A שיהיה לו עתודת חשמל לרכיבים עתידיים (חיישנים, אורות, צעדים …), אבל כל 5V 2A זול צריך לעשות העבודה. הג'טסון משתמש בחבית DC 5.5 מ מ והפי מיקרו USB, תפוס את הכבל המתאים והלחם אותו ליציאת הרגולטור.

פריסת LIDAR

LIDAR המשמש כאן הוא LDS-01, ישנם LIDAR 2D שונים אחרים שיכולים לשמש כמו RPLidar A1/A2/A3, YDLidar X4/G4 או אפילו Hokuyo LIDAR. הדרישה היחידה היא שצריך לחבר אותו באמצעות USB ולהציב אותו במרכז המבנה. ואכן אם LIDAR אינו מרוכז היטב, המפה שנוצרה על ידי אלגוריתם SLAM עשויה להזיז את המיקום המשוער של קירות ומכשולים ממיקומם האמיתי. כמו כן אם מכשולים מהרובוט חוצים את קרן הלייזר, הוא הולך לצמצם את הטווח ושדה הראייה.

הרכבה LIDAR

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

מצלמה כחיישן נוסף או תחליף LIDAR

אם אינך רוצה להשקיע יותר מדי כסף ב- LIDAR (שעולה בסביבות 100 $), לך על מצלמה: קיימים גם אלגוריתמים SLAM הפועלים רק עם מצלמת RGB חד -עינית. שני SBC מקבלים מצלמת USB או CSI.

יתר על כן, המצלמה תאפשר לך להריץ סקריפטים של ראיית מחשב וגילוי אובייקטים!

הַרכָּבָה

לפני סגירת הרובוט, העבר כבלים דרך החורים הגדולים יותר בצלחת העליונה:

  • הכבל המתאים מהווסת 5V ל- SBC שלך
  • כבל ה- USB מיציאת התכנות של ה- Arduino DUE (הקרוב ביותר לחבית DC) ליציאת USB של ה- SBC שלך

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

שלב 7: לגרום לזה לזוז

ערכו את הארדואינו

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

התאם את הגדרות הליבה

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

#define ARDUINO_DUE // ** הגיבו על השורה הזו אם אינכם משתמשים בתשלום **

יש להשתמש בו רק עם Arduino DUE, אם לא הגיבו על השורה.

#הגדר RATE_CONTROLLER_KP 130.0 // ** TUNE ערך זה **

#הגדר RATE_CONTROLLER_KD 5000000000000.0 // ** TUNE הערך הזה ** #הגדר RATE_CONTROLLER_KI 0.00005 // ** TUNE הערך הזה **

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

/ * הגדר סיכות */

// מנוע A (מימין) const byte motorRightEncoderPinA = 38; // ** שנה עם ה- PIN שלך NB ** const byte motorRightEncoderPinB = 34; // ** שנה עם ה- PIN שלך NB ** const byte enMotorRight = 2; // ** שנה עם ה- PIN שלך NB ** const byte in1MotorRight = 4; // ** שנה עם ה- PIN שלך NB ** const byte in2MotorRight = 3; // ** שנה עם ה- PIN שלך NB ** // מנוע B (משמאל) const byte motorLeftEncoderPinA = 26; // ** שנה עם ה- PIN שלך NB ** const byte motorLeftEncoderPinB = 30; // ** שנה עם ה- PIN שלך NB ** const byte enMotorLeft = 7; // ** שנה עם ה- PIN שלך NB ** const byte in1MotorLeft = 6; // ** שנה עם ה- PIN שלך NB ** const byte in2MotorLeft = 5; // ** שנה עם מספר ה- PIN שלך **

בלוק זה מגדיר את pinout בין L298N לבין Arduino, פשוט שנה את מספר הסיכה כך שיתאים לשלך. כאשר סיימת עם קובץ התצורה, הידור והעלה את הקוד!

התקן והתקן את ROS

לאחר שהגעת לשלב זה, ההוראות זהות לחלוטין לאלה המפורטות במדריך המצוין של TurtleBot3, עליך לעקוב בקפידה

כל הכבוד TurtleBot 3 כעת שלך ותוכל להריץ את כל החבילות וההדרכות הקיימות באמצעות ROS.

אוקיי אבל מה זה ROS?

ROS מייצג Robots Operating System, זה אולי נראה מורכב בהתחלה אבל זה לא, רק דמיינו דרך תקשורת בין חומרה (חיישנים ומפעילים) לבין תוכנה (אלגוריתמים לניווט, שליטה, ראיית מחשב …). לדוגמה, תוכל להחליף בקלות את ה- LIDAR הנוכחי שלך עם דגם אחר מבלי לשבור את ההגדרה שלך, מכיוון שכל LIDAR מפרסם את אותה הודעת LaserScan. ROS נמצא בשימוש נרחב הוא רובוטיקה, הפעל את הדוגמה הראשונה שלך

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

  • צומת turtlebot_teleop, הפועל במחשב המרוחק, מפרסם נושא "/cmd_vel" כולל הודעת טוויסט
  • הודעה זו מועברת דרך רשת הודעות ROS ל- SBC
  • צומת סדרתי מאפשר לקבל את "/cmd_vel" ב- Arduino
  • הארדואינו קורא את ההודעה וקבע את קצב הזווית על כל מנוע כך שיתאים למהירות הלינארית והזוויתית הרצויה של הרובוט

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

[SBC]

רוזקור

[SBC]

rosrun rosserial_python serial_node.py _port: =/dev/ttyACM0 _baud: = 115200

[מחשב מרוחק]

ייצא TURTLEBOT3_MODEL = $ {TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

כדי ללכת רחוק יותר

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

roslaunch turtlebot3_bringup turtlebot3_robot.launch

עליך להפעיל את הפקודה הזו ב- SBC שלך במקום זאת:

rosrun rosserial_python serial_node.py _port: =/dev/ttyACM0 _baud: = 115200

ואם יש לך LIDAR הפעל את הפקודה המשויכת ב- SBC שלך, במקרה שלי אני מפעיל LDS01 עם השורה למטה:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

וזה הכל, בניתם באופן סופי turtlebot משלכם:) אתם מוכנים לגלות את היכולות הפנטסטיות של ROS, ולקודד אלגוריתמים של ראייה ולמידת מכונה.

מוּמלָץ: