جدول المحتويات:

وحدة التحكم الروبوتية ROS المستندة إلى Matlab: 9 خطوات
وحدة التحكم الروبوتية ROS المستندة إلى Matlab: 9 خطوات

فيديو: وحدة التحكم الروبوتية ROS المستندة إلى Matlab: 9 خطوات

فيديو: وحدة التحكم الروبوتية ROS المستندة إلى Matlab: 9 خطوات
فيديو: Lesson 10: Use Moveit Setup Assistant to Create Package to Control URDF Imported from SOLIDWORKS 2024, شهر نوفمبر
Anonim
Image
Image
وحدة تحكم ROS الروبوتية القائمة على Matlab
وحدة تحكم ROS الروبوتية القائمة على Matlab

منذ أن كنت طفلاً ، كنت أحلم دائمًا بأن أكون رجلًا حديديًا وما زلت أفعل ذلك. الرجل الحديدي هو واحد من تلك الشخصيات التي يمكن تحقيقها من الناحية الواقعية وببساطة أطمح لأن أصبح الرجل الحديدي يومًا ما حتى لو سخر مني الناس أو قالوا إنه مستحيل لأنه "من المستحيل إلا أن يفعله شخص ما" - أرنولد شوارزنيجر.

ROS هو إطار عمل ناشئ يستخدم لتطوير أنظمة الروبوتات المعقدة. تشمل تطبيقاته: نظام التجميع الآلي ، والتشغيل عن بعد ، والأسلحة التعويضية والآلات الثقيلة للقطاع الصناعي.

يستفيد الباحثون والمهندسون من نظام ROS لتطوير النماذج الأولية ، بينما يستخدمه بائعون مختلفون لإنشاء منتجاتهم ، فهو يتميز بهندسة معمارية معقدة تجعل من الصعب إدارتها من قبل رجل أعرج. يعد استخدام MATLAB لإنشاء رابط الواجهة مع ROS أسلوبًا جديدًا يمكن أن يساعد الباحثين والمهندسين والبائعين في تطوير حلول أكثر قوة.

لذا فإن هذا التوجيه يدور حول كيفية إنشاء وحدة تحكم ROS Robotic Controller على أساس Matlab ، وسيكون هذا أحد البرامج التعليمية القليلة جدًا حول هذا الأمر ومن بين عدد قليل من تعليمات ROS. الهدف من هذا المشروع هو تصميم وحدة تحكم يمكنها التحكم في أي روبوت ROS متصل بشبكتك. لذلك دعونا نبدأ!

اعتمادات تحرير الفيديو: عمار آخر في [email protected]

اللوازم

المكونات التالية مطلوبة للمشروع:

(1) ROS PC / روبوت

(2) جهاز التوجيه

(3) كمبيوتر شخصي مع MATLAB (الإصدار: 2014 أو أعلى)

الخطوة 1: إعداد كل شيء

الحصول على كل شيء الإعداد
الحصول على كل شيء الإعداد

بالنسبة إلى هذه التعليمات ، أنا أستخدم Ubuntu 16.04 لجهاز الكمبيوتر الخاص بي بنظام Linux و ros-kinetic ، لذا لتجنب الارتباك ، أوصي باستخدام ros kinetic و ubuntu 16.04 نظرًا لأنه يتمتع بأفضل دعم لـ ros-kinetic. لمزيد من المعلومات حول كيفية تثبيت ros kinetic ، انتقل إلى https://wiki.ros.org/kinetic/Installation/Ubuntu. بالنسبة إلى MATLAB ، يمكنك إما شراء ترخيص أو تنزيل إصدار تجريبي من هنا.

الخطوة 2: فهم كيفية عمل وحدة التحكم

فهم كيفية عمل وحدة التحكم
فهم كيفية عمل وحدة التحكم

يقوم الكمبيوتر بتشغيل وحدة التحكم الروبوتية على MATLAB. تأخذ وحدة التحكم عنوان IP ومنفذ الكمبيوتر / الروبوت ros.

يتم استخدام موضوع ros للتواصل بين وحدة التحكم وجهاز الكمبيوتر / الروبوت ros ، والذي يتم أخذه أيضًا كمدخل بواسطة وحدة التحكم. المودم مطلوب لإنشاء شبكة محلية (LAN) وهو ما يعين عناوين IP لجميع الأجهزة المتصلة بشبكته. لذلك يجب توصيل كل من جهاز الكمبيوتر / الروبوت ros وجهاز الكمبيوتر الذي يقوم بتشغيل وحدة التحكم بنفس الشبكة (أي شبكة المودم). والآن بعد أن عرفت "كيف تعمل" ، دعنا ننتقل إلى "كيف يتم بناؤها" …

الخطوة 3: إنشاء واجهة ROS-MATLAB

إنشاء واجهة ROS-MATLAB
إنشاء واجهة ROS-MATLAB
إنشاء واجهة ROS-MATLAB
إنشاء واجهة ROS-MATLAB
إنشاء واجهة ROS-MATLAB
إنشاء واجهة ROS-MATLAB

واجهة ROS-MATLAB هي واجهة مفيدة للباحثين والطلاب لنمذجة خوارزميات الروبوت الخاصة بهم في MATLAB واختبارها على الروبوتات المتوافقة مع ROS. روبوت يدعم ROS أو في محاكيات الروبوت مثل Gazebo و V-REP.

لتثبيت مربع أدوات نظام الروبوتات على MATLAB الخاص بك ، ما عليك سوى الانتقال إلى خيار الوظيفة الإضافية على شريط الأدوات والبحث عن مربع أدوات الروبوت في مستكشف الوظائف الإضافية. باستخدام صندوق الأدوات الروبوتية ، يمكننا نشر موضوع أو الاشتراك فيه ، مثل عقدة ROS ، ويمكننا جعله سيد ROS. تحتوي واجهة MATLAB-ROS على معظم وظائف ROS التي قد تحتاجها لمشاريعك.

الخطوة 4: الحصول على عنوان IP

الحصول على عنوان IP
الحصول على عنوان IP
الحصول على عنوان IP
الحصول على عنوان IP

لكي تعمل وحدة التحكم ، من الضروري أن تعرف عنوان IP لروبوت ROS / جهاز الكمبيوتر الخاص بك والكمبيوتر الذي يقوم بتشغيل وحدة التحكم على MATLAB.

للحصول على عنوان IP لجهاز الكمبيوتر الخاص بك:

على نظام Windows:

افتح موجه الأوامر واكتب الأمر ipconfig وقم بتدوين عنوان IPv4

بالنسبة إلى Linux:

اكتب الأمر ifconfig وقم بتدوين عنوان inet. الآن بعد أن أصبح لديك عنوان IP ، حان الوقت لإنشاء واجهة المستخدم الرسومية …

الخطوة 5: إنشاء واجهة مستخدم رسومية لوحدة التحكم

قم بإنشاء واجهة مستخدم رسومية لوحدة التحكم
قم بإنشاء واجهة مستخدم رسومية لوحدة التحكم
قم بإنشاء واجهة مستخدم رسومية لوحدة التحكم
قم بإنشاء واجهة مستخدم رسومية لوحدة التحكم
قم بإنشاء واجهة مستخدم رسومية لوحدة التحكم
قم بإنشاء واجهة مستخدم رسومية لوحدة التحكم

لإنشاء واجهة المستخدم الرسومية ، افتح MATLAB واكتب الدليل في نافذة الأوامر. سيؤدي هذا إلى فتح تطبيق الدليل الذي من خلاله سننشئ واجهة المستخدم الرسومية الخاصة بنا. يمكنك أيضًا استخدام مصمم التطبيق على MATLAB لتصميم واجهة المستخدم الرسومية الخاصة بك.

سنقوم بإنشاء 9 أزرار إجمالاً (كما هو موضح في الشكل):

6 أزرار انضغاطية: للأمام ، للخلف ، لليسار ، لليمين ، الاتصال بالروبوت ، افصل

3 أزرار قابلة للتحرير: Ros pc ip، port واسم الموضوع.

الأزرار القابلة للتحرير هي الأزرار التي ستأخذ عنوان IP الخاص بجهاز ROS ، ومنفذها واسم الموضوع كمدخلات. اسم الموضوع هو ما تتواصل من خلاله وحدة تحكم MATLAB وروبوت / كمبيوتر ROS. لتحرير السلسلة على الزر القابل للتحرير ، انقر بزر الماوس الأيمن على الزر >> انتقل إلى خصائص المفتش >> سلسلة وتحرير نص الزر.

بمجرد اكتمال واجهة المستخدم الرسومية ، يمكنك برمجة الأزرار. هذا هو المكان الذي تبدأ المتعة الحقيقية…

الخطوة 6: برمجة أزرار واجهة المستخدم الرسومية القابلة للتحرير

برمجة أزرار واجهة المستخدم الرسومية القابلة للتحرير
برمجة أزرار واجهة المستخدم الرسومية القابلة للتحرير
برمجة أزرار واجهة المستخدم الرسومية القابلة للتحرير
برمجة أزرار واجهة المستخدم الرسومية القابلة للتحرير
برمجة أزرار واجهة المستخدم الرسومية القابلة للتحرير
برمجة أزرار واجهة المستخدم الرسومية القابلة للتحرير
برمجة أزرار واجهة المستخدم الرسومية القابلة للتحرير
برمجة أزرار واجهة المستخدم الرسومية القابلة للتحرير

يتم حفظ واجهة المستخدم الرسومية كملف.fig ولكن يتم حفظ وظائف الرمز / رد الاتصال بتنسيق.m ، ويحتوي ملف.m على رمز لجميع الأزرار الخاصة بك. لإضافة وظائف معاودة الاتصال إلى الأزرار ، انقر بزر الماوس الأيمن فوق الزر> > عرض عمليات الاسترجاعات >> رد الاتصال. سيؤدي هذا إلى فتح ملف.m لواجهة المستخدم الرسومية الخاصة بك إلى حيث يتم تحديد هذا الزر المحدد.

رد الاتصال الأول الذي سنقوم برمزه هو زر ROS IP القابل للتحرير. تحت الوظيفة edit1_Callback اكتب الكود التالي:

الوظيفة edit1_Callback (hObject ، eventdata ، handles)

ros_master_ip العالمية

ros_master_ip = الحصول على (hObject، 'String')

هنا يتم تعريف الوظيفة على أنها edit1_Callback ، والتي تشير إلى أول زر قابل للتحرير. عندما ندخل عنوان IP من شبكة ROS في هذا الزر القابل للتحرير ، فإنه سيخزن عنوان IP كسلسلة في متغير عالمي يسمى ros_master_ip.

ثم أسفل _OpeningFcn (hObject و eventdata و handles و varargin) حدد ما يلي (انظر الشكل):

ros_master_ip العالمية

ros_master_port العالمية

teleop_topic_name العالمي

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 Topic. ما يفعله هذا هو أنه إذا تركت الأزرار القابلة للتحرير فارغة ، فسيتم استخدام هذه القيم المحددة مسبقًا عند الاتصال.

رد الاتصال التالي الذي سنقوم برمزه هو زر المنفذ القابل للتحرير.

تحت الوظيفة edit2_Callback اكتب الكود التالي:

الوظيفة edit2_Callback (hObject ، eventdata ، handles)

ros_master_port العالمية

ros_master_port = الحصول على (hObject، 'String')

هنا يتم تعريف الوظيفة على أنها edit2_Callback ، والتي تشير إلى الزر الثاني القابل للتعديل. عندما ندخل منفذ ros pc / robot هنا من شبكة ROS في هذا الزر القابل للتحرير ، فإنه سيخزن المنفذ كسلسلة في متغير عالمي يسمى ros_master_port.

وبالمثل ، فإن رد الاتصال التالي الذي سنقوم برمزه هو الزر القابل للتعديل لاسم الموضوع.

تحت الوظيفة edit3_Callback اكتب الكود التالي:

الوظيفة edit3_Callback (hObject ، eventdata ، handles)

teleop_topic_name العالمي

teleop_topic_name = get (hObject، 'String')

على غرار ros_master_port ، يتم تخزين هذا أيضًا كسلسلة في متغير عالمي.

بعد ذلك ، سنلقي نظرة على وظائف معاودة الاتصال لأزرار الضغط …

الخطوة 7: برمجة أزرار دفع واجهة المستخدم الرسومية

برمجة أزرار دفع واجهة المستخدم الرسومية
برمجة أزرار دفع واجهة المستخدم الرسومية
برمجة أزرار دفع واجهة المستخدم الرسومية
برمجة أزرار دفع واجهة المستخدم الرسومية

الأزرار الانضغاطية التي أنشأناها مسبقًا هي الأزرار التي سنستخدمها لتحريك الروبوت وتوصيله وفصله عن وحدة التحكم. يتم تعريف عمليات الاسترجاعات عبر زر الضغط على النحو التالي:

على سبيل المثال الوظيفة pushbutton6_Callback (hObject ، eventdata ، handles)

ملاحظة: بناءً على الترتيب الذي أنشأت به أزرار الضغط ، سيتم ترقيمها وفقًا لذلك. لذلك فإن الوظيفة pushbutton6 في ملف m الخاص بي يمكن أن تكون للأمام بينما في ملف m. الخاص بك يمكن أن تكون للخلف لذا ضع ذلك في الاعتبار. لمعرفة الوظيفة الدقيقة لزر الضغط الخاص بك ، ما عليك سوى النقر بزر الماوس الأيمن >> عرض عمليات الاسترجاعات >> عمليات الاسترجاعات وسوف تفتح الوظيفة لزر الضغط الخاص بك ولكن بالنسبة إلى هذا التوجيه ، أفترض أنها نفس الوظيفة الخاصة بي.

بالنسبة لزر الاتصال بالروبوت:

تحت الوظيفة pushbutton6_Callback (hObject ، eventdata ، handles):

الوظيفة pushbutton6_Callback (hObject ، eventdata ، handles) global ros_master_ip

ros_master_port العالمية

teleop_topic_name العالمي

روبوت عالمي

المخمل العالمي

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

سيتينف ('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) حدد ما يلي (انظر الشكل):

عمومي left_spinVelocity عمومي right_spinVelocity

إلى الأمام العالمية

العالمية للخلف

left_spinVelocity = 2 ،

right_spinVelocity = -2 ؛

forwardVelocity = 3 ؛

backwardVelocity = -3 ؛

ملاحظة: جميع السرعات في راديان / ثانية

الآن بعد أن تم تحديد المتغيرات العامة ، فلنبرمج الأزرار الانضغاطية للحركة.

للزر الأمامي:

الوظيفة pushbutton4_Callback (hObject ، و eventdata ، و handles) والمخرجات العامة

روبوت عالمي

teleop_topic_name العالمي

إلى الأمام العالمية

velmsg. Angular. Z = 0 ؛

velmsg. Linear. X = forwardVelocity ؛

إرسال (روبوت ، velmsg) ؛

latchpub = rospublisher (teleop_topic_name، 'IsLatching'، true) ؛

وبالمثل بالنسبة للزر الضغطي الخلفي:

الوظيفة pushbutton5_Callback (hObject ، eventdata ، handles)

المخمل العالمي

روبوت عالمي

العالمية للخلف

teleop_topic_name العالمي

velmsg. Angular. Z = 0 ؛

velmsg. Linear. X = backwardVelocity ؛

إرسال (روبوت ، velmsg) ؛

latchpub = rospublisher (teleop_topic_name، 'IsLatching'، true) ؛

وبالمثل بالنسبة للزر الانضغاطي الأيسر: الوظيفة pushbutton3_Callback (hObject ، و eventdata ، والمقابض)

عالم الروبوتات العالمية left_spinVelocity

teleop_topic_name العالمي

velmsg. Angular. Z = left_spinVelocity ،

velmsg. Linear. X = 0 ؛

إرسال (روبوت ، velmsg) ؛

latchpub = rospublisher (teleop_topic_name، 'IsLatching'، true) ؛

وبالمثل بالنسبة إلى الزر الأيمن:

الروبوت العالمي velmsgglobal

عالمية right_spinVelocity

teleop_topic_name العالمي

velmsg. Angular. Z = right_spinVelocity ،

velmsg. Linear. X = 0 ؛

إرسال (روبوت ، velmsg) ؛

latchpub = rospublisher (teleop_topic_name، 'IsLatching'، true) ؛

بمجرد إضافة جميع وظائف رد الاتصال وحفظ الملفات ، يمكننا اختبار وحدة التحكم الخاصة بنا.

الخطوة 8: إعداد Network Configuration على ROS PC (Linux)

إعداد Network Configuration على ROS PC (Linux)
إعداد Network Configuration على ROS PC (Linux)
إعداد Network Configuration على ROS PC (Linux)
إعداد Network Configuration على ROS PC (Linux)

سنقوم باختبار وحدة التحكم على كمبيوتر روسي (Linux) ، الأمر الذي سيتطلب إعداد تهيئة الشبكة ، إذا كنت تقوم أيضًا بتشغيل وحدة التحكم على كمبيوتر يعمل بنظام التشغيل Linux ، فسيتعين عليك إعداد تهيئة الشبكة هناك أيضًا.

تكوين شبكة:

افتح نافذة Terminal واكتب 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: قم بتشغيل وحدة التحكم

قم بتشغيل وحدة التحكم
قم بتشغيل وحدة التحكم

سنقوم باختبار وحدة التحكم الخاصة بنا على روبوت Turtle في Gazebo.

لتثبيت الجازيبو ، يرجى الرجوع إلى

لتثبيت برنامج Turtle bot ، يرجى الرجوع إلى

افتح المجلد الذي حفظت فيه ملفات.fig و.m على MATLAB واضغط على تشغيل (كما هو موضح في الصورة) ، سيؤدي ذلك إلى فتح وحدة التحكم على جهاز الكمبيوتر. قبل الضغط على "اتصال" ، تأكد من أن محاكي روبوت السلاحف يعمل.

لاختبار محاكاة TurtleBot الخاصة بك:

افتح Terminal على جهاز كمبيوتر Ros واكتب: $ roslaunch turtlebot_gazebo turtlebot_world.launch. سيؤدي هذا إلى فتح محاكاة لـ Turtlebot على هذا الكمبيوتر. اسم موضوع TurtleBot هو / cmd_vel_mux / input / teleop ، والذي قدمناه بالفعل في التطبيق. اكتب في ros pc عنوان IP والمنفذ واسم الموضوع في الأزرار القابلة للتحرير واضغط على زر Connect to Robot. يجب أن يبدأ روبوت السلحفاة في التحرك عند الضغط على "للأمام" و "الخلف" وما إلى ذلك.

لعرض السرعات الخطية والزاوية:

افتح محطة طرفية جديدة واكتب الأمر: $ rostopic echo / cmd_vel_mux / input / teleop

وهناك لديك ، وحدة التحكم الروبوتية ROS القائمة على Matlab. إذا أعجبك التوجيه الخاص بي ، فيرجى التصويت عليه في مسابقة المؤلف لأول مرة ومشاركتها مع أكبر عدد ممكن من الأشخاص. شكرا لك.

موصى به: