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

בקר רובוטי ROS מבוסס Matlab: 9 שלבים
בקר רובוטי ROS מבוסס Matlab: 9 שלבים

וִידֵאוֹ: בקר רובוטי ROS מבוסס Matlab: 9 שלבים

וִידֵאוֹ: בקר רובוטי ROS מבוסס Matlab: 9 שלבים
וִידֵאוֹ: 🚀 RUTUBE ונקודה. פיתוח RUTUBA תוך 5 שעות *ללא מים* [הבא / תגובה / Nest / PostgreSQL / Redux] 2024, יולי
Anonim
Image
Image
בקר רובוטי ROS מבוסס Matlab
בקר רובוטי ROS מבוסס Matlab

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

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

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

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

זיכויים לעריכת וידאו: עמאר אחר, בכתובת [email protected]

אספקה

לפרויקט יש צורך ברכיבים הבאים:

(1) מחשב/רובוט ROS

(2) נתב

(3) מחשב עם MATLAB (גרסה: 2014 ומעלה)

שלב 1: הגדרת הכל

הכנת הכל
הכנת הכל

לשם ההנחיה הזו, אני משתמש באובונטו 16.04 עבור מחשב לינוקס שלי ורוז-קינטית, אז כדי להימנע מבלבול אני ממליץ להשתמש ב- ros kinetic וב- ubuntu 16.04 מכיוון שיש לו את התמיכה הטובה ביותר ל- ros-kinetic. למידע נוסף על התקנת ros kinetic היכנס לאתר https://wiki.ros.org/kinetic/Installation/Ubuntu. עבור MATLAB אתה גם רוכש רישיון או מוריד גרסת שבילים מכאן.

שלב 2: הבנת אופן הפעולה של הבקר

הבנת אופן הפעולה של הבקר
הבנת אופן הפעולה של הבקר

מחשב מפעיל את הבקר הרובוטי ב- MATLAB. הבקר לוקח את כתובת ה- IP ואת היציאה של ה- pc/רובוט ros.

נושא ros משמש לתקשורת בין הבקר לבין ה- pc/רובוט ros, אשר נלקח גם כקלט על ידי הבקר. המודם נדרש ליצירת LAN (רשת מקומית) והוא מה שמקצה את כתובות ה- IP לכל המכשירים המחוברים לרשת שלו. לכן יש לחבר את ה- pc/רובוט ros והמחשב המפעיל את הבקר לאותה רשת (כלומר, הרשת של המודם). אז עכשיו שאתה יודע "איך זה עובד", בואו נגיע ל"איך זה בנוי "…

שלב 3: יצירת ממשק ROS-MATLAB

יצירת ממשק ROS-MATLAB
יצירת ממשק ROS-MATLAB
יצירת ממשק ROS-MATLAB
יצירת ממשק ROS-MATLAB
יצירת ממשק ROS-MATLAB
יצירת ממשק ROS-MATLAB

ממשק ה- ROS-MATLAB הוא ממשק שימושי לחוקרים ולסטודנטים לאב-טיפוס של האלגוריתמים הרובוטיים שלהם ב- MATLAB ולבדיקתו על רובוטים תואמי ROS. ניתן ליצור ממשק זה על ידי ארגז הכלים של מערכת הרובוטיקה ב- Matlab ונוכל לאבחר אב-טיפוס לאלגוריתם שלנו ולבדוק אותו רובוט המותאם ל- ROS או בסימולטורים של רובוטים כגון Gazebo ו- V-REP.

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

שלב 4: קבלת כתובת ה- IP

קבלת כתובת ה- IP
קבלת כתובת ה- IP
קבלת כתובת ה- IP
קבלת כתובת ה- IP

כדי שהבקר יפעל, עליך לדעת את כתובת ה- ip של הרובוט/מחשב ה- ROS שלך ושל המחשב המפעיל את הבקר ב- MATLAB.

כדי לקבל את ה- ip של המחשב האישי שלך:

ב- Windows:

פתח את שורת הפקודה והקלד את הפקודה ipconfig ורשום את כתובת ה- IPv4

עבור לינוקס:

הקלד פקודה ifconfig ורשום את כתובת inet. עכשיו כשיש לך את כתובת ה- ip, הגיע הזמן לבנות את GUI …

שלב 5: צור GUI לבקר

צור GUI לבקר
צור GUI לבקר
צור GUI לבקר
צור GUI לבקר
צור ממשק משתמש עבור הבקר
צור ממשק משתמש עבור הבקר

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

ניצור 9 כפתורים בסך הכל (כפי שמוצג באיור):

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

3 כפתורים הניתנים לעריכה: ip pc, יציאה ושם הנושא.

הלחצנים הניתנים לעריכה הם הלחצנים שייקחו את ה- ip של מחשב ה- ROS, היציאה שלו ושם הנושא כקלט. שם הנושא הוא מה שבקר MATLAB ורובוט/מחשב ה- ROS מתקשרים באמצעותו. כדי לערוך את המחרוזת בכפתור העריכה, לחץ באמצעות לחצן העכבר הימני על הלחצן >> עבור אל מאפייני מפקח >> מחרוזת וערוך את טקסט הכפתור.

לאחר השלמת GUI שלך, תוכל לתכנת את הכפתורים. כאן מתחיל הכיף האמיתי…

שלב 6: תכנות כפתורי העריכה של GUI

תכנות כפתורי העריכה של GUI
תכנות כפתורי העריכה של GUI
תכנות כפתורי העריכה של GUI
תכנות כפתורי העריכה של GUI
תכנות כפתורי העריכה של GUI
תכנות כפתורי העריכה של GUI
תכנות כפתורי העריכה של GUI
תכנות כפתורי העריכה של GUI

ה- GUI נשמר כקובץ.fig אך פונקציות הקוד/החזרה חוזרות נשמרות בפורמט m. קובץ ה- m מכיל את הקוד לכל הלחצנים שלך. כדי להוסיף פונקציות להתקשרות לחצנים, לחץ לחיצה ימנית על הכפתור> > הצג התקשרות חוזרות >> התקשרות חוזרת. פעולה זו תפתח את קובץ ה- m עבור ממשק המשתמש שלך למקום בו מוגדר הכפתור המסוים הזה.

החזרה הראשונה שאנו הולכים לקודד היא ללחצן העריכה של ROS IP. תחת פונקציה edit1_Callback כתוב את הקוד הבא:

עריכת פונקציה1_Callback (hObject, נתוני אירועים, ידיות)

עולמי ros_master_ip

ros_master_ip = get (hObject, 'String')

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

אז מתחת _OpeningFcn (hObject, eventdata, handles, varargin) הגדירו את הדברים הבאים (ראו איור):

עולמי ros_master_ip

עולמי ros_master_port

שם טלופי_טופיק גלובלי

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

אתה פשוט מקודד באופן גלובלי את ה- ros-pc ip (ros_master_ip), הפורט (ros_master_port) ואת שם הנושא Teleop. מה שזה עושה הוא שאם תשאיר את הכפתורים הניתנים לעריכה ריקים, הערכים שהוגדרו מראש ישמשו אותך כשאתה מתחבר.

החזרה הבאה שאנו הולכים לקודד היא לכפתור העריכה של Port.

תחת הפונקציה edit2_Callback כתוב את הקוד הבא:

function edit2_Callback (hObject, נתוני אירועים, ידיות)

עולמי ros_master_port

ros_master_port = get (hObject, 'String')

כאן הפונקציה מוגדרת כ- edit2_Callback, המתייחסת לכפתור העריכה השני. כאשר ניכנס ליציאת ה- ros pc/רובוט כאן מרשת ה- ROS בכפתור הניתן לעריכה, הוא יאחסן את היציאה כמחרוזת במשתנה עולמי הנקרא ros_master_port.

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

תחת הפונקציה edit3_Callback כתוב את הקוד הבא:

function edit3_Callback (hObject, נתוני אירועים, ידיות)

שם טלופי_טופיק גלובלי

teleop_topic_name = get (hObject, 'String')

בדומה ל- ros_master_port, גם זה מאוחסן כמחרוזת במשתנה גלובלי.

בשלב הבא נבחן את פונקציות החזרה להתקשרות ללחצני הלחיצה …

שלב 7: תכנות לחצני ה- Push של ה- GUI

תכנות כפתורי הדחיפה של GUI
תכנות כפתורי הדחיפה של GUI
תכנות כפתורי הדחיפה של GUI
תכנות כפתורי הדחיפה של GUI

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

לְמָשָׁל. פונקציה pushbutton6_Callback (hObject, נתוני אירועים, ידיות)

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

לכפתור התחבר לרובוט:

תחת הפונקציה pushbutton6_Callback (hObject, נתוני אירועים, ידיות):

function pushbutton6_Callback (hObject, eventdata, handles) global ros_master_ip

עולמי ros_master_port

שם טלופי_טופיק גלובלי

רובוט גלובלי

velmsg

ros_master_uri = strcat ('https://', ros_master_ip, ':', ros_master_port)

setenv ('ROS_MASTER_URI', ros_master_uri)

רוזינית

רובוט = rospublisher (teleop_topic_name, 'geometry_msgs/Twist');

velmsg = rosmessage (רובוט);

החזרה הזו תקבע את המשתנה ROS_MASTER_URI על ידי חיבור ros_master_ip והיציאה. ואז הפקודה rosinit תאתחל את החיבור. לאחר החיבור, הוא ייצור מוציא לאור של geometry_msgs/Twist, שישמש לשליחת מהירות הפקודה. שם הנושא הוא השם שאנו נותנים בתיבת העריכה. ברגע שהחיבור יצליח, נוכל להפעיל את לחצני הלחיצה קדימה, אחורה, שמאלה וימינה.

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

לכן להלן _OpeningFcn (hObject, eventdata, handles, varargin) מגדירים את הדברים הבאים (ראו איור):

global left_spinVelocity גלובלי right_spinVelocity

קדימה גלובלית קדימה

אחורית עולמית מהירות

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

הערה: כל המהירויות הן ברדיסים/שניות

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

ללחצן הלחיצה קדימה:

פונקציה pushbutton4_Callback (hObject, נתוני אירועים, ידיות) velmsg

רובוט גלובלי

שם טלופי_טופיק גלובלי

קדימה גלובלית קדימה

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

לשלוח (רובוט, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

באופן דומה ללחצן הלחץ לאחור:

לחץ על הפונקציה pushbutton5_Callback (hObject, נתוני אירועים, ידיות)

velmsg

רובוט גלובלי

אחורית עולמית מהירות

שם טלופי_טופיק גלובלי

velmsg. Angular. Z = 0;

velmsg. Linear. X = backwardVelocity;

לשלוח (רובוט, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

באופן דומה ללחצן הלחיצה השמאלי: function pushbutton3_Callback (hObject, eventdata, handles)

גלובס גלובלי גלובלי גלובאלי שמאל_ספין גלובלי

שם טלופי_טופיק גלובלי

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

לשלוח (רובוט, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

באופן דומה ללחצן הימני:

רובוט גלובלי גלובלי

גלובלי right_spinVelocity

שם טלופי_טופיק גלובלי

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

לשלוח (רובוט, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

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

שלב 8: הגדרת תצורת רשת במחשב ROS (Linux)

הגדרת תצורת רשת במחשב ROS (Linux)
הגדרת תצורת רשת במחשב ROS (Linux)
הגדרת תצורת רשת במחשב ROS (Linux)
הגדרת תצורת רשת במחשב ROS (Linux)

אנו נבדוק את הבקר במחשב ros (Linux), אשר ידרוש הגדרת תצורת הרשת. אם אתה מפעיל גם את הבקר במחשב לינוקס, יהיה עליך להגדיר את תצורת הרשת גם שם.

תצורת רשת:

פתח את חלון הטרמינל והקלד gedit.bashrc

לאחר הקובץ פתוח הוסף את הדברים הבאים:

#תצורת מכונת רובוט

ייצא ROS_MASTER_URI = https:// localhost: 11311

כתובת #IP של צומת המאסטר של ROS

ייצא ROS_HOSTNAME =

ייצוא ROS_IP =

הד "ROS_HOSTNAME:" $ ROS_HOSTNAME

הד "ROS_IP:" $ ROS_IP

הד "ROS_MASTER_URI:" $ ROS_MASTER_URI

עליך לבצע שלב זה בכל פעם בשל הקצאת IP דינאמית.

שלב 9: הפעל את הבקר

הפעל את הבקר
הפעל את הבקר

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

להתקנת Gazebo, עיין ב

להתקנת בוט הצב, עיין ב

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

לבדיקת סימולציית TurtleBot שלך:

פתח את הטרמינל ב- Ros pc והקלד: $ roslaunch turtlebot_gazebo turtlebot_world.launch. זה יפתח סימולציה של Turtlebot במחשב האישי הזה. שם הנושא של TurtleBot הוא/cmd_vel_mux/input/teleop, שכבר סיפקנו ביישום. הקלד את כתובת ה- Ip של ros pc, שם היציאה והנושא בכפתורים הניתנים לעריכה ולחץ על הלחצן. התחבר לרובוט. בוט הצבים שלך צריך להתחיל לנוע כאשר אתה לוחץ קדימה, אחורה וכו '.

לצפייה במהירויות הלינאריות והזוויתיות:

פתח מסוף חדש והקלד את הפקודה: $ rostopic echo/cmd_vel_mux/input/teleop

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

מוּמלָץ: