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

ROS MoveIt Robotic Arm الجزء 2: وحدة تحكم الروبوت: 6 خطوات
ROS MoveIt Robotic Arm الجزء 2: وحدة تحكم الروبوت: 6 خطوات

فيديو: ROS MoveIt Robotic Arm الجزء 2: وحدة تحكم الروبوت: 6 خطوات

فيديو: ROS MoveIt Robotic Arm الجزء 2: وحدة تحكم الروبوت: 6 خطوات
فيديو: Part 1 -ROS Tutorial -Simulation of Robotic Arm Using Gazebo ,MoveIt & RViz(Kinetic & Melodic)മലയാളം 2024, يوليو
Anonim
Image
Image

github.com/AIWintermuteAI/ros-moveit-arm.git

في الجزء السابق من المقالة ، أنشأنا ملفات URDF و XACRO لذراعنا الروبوتية وأطلقنا RVIZ للتحكم في ذراعنا الآلية في بيئة محاكاة.

هذه المرة سنفعل ذلك بالذراع الآلية الحقيقية! سنضيف القابض ، ونكتب وحدة تحكم روبوتية و (اختياريًا) نولد أداة حل الحركية العكسية IKfast.

جيرونيمو!

الخطوة 1: إضافة القابض

إضافة القابض
إضافة القابض
إضافة القابض
إضافة القابض
إضافة القابض
إضافة القابض

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

ستحتاج إلى تعديل ملف URDF لإضافة روابط ومفاصل القابض.

ملف URDF المعدل لروبوتي مرفق بهذه الخطوة. بشكل أساسي يتبع نفس منطق جزء الذراع ، لقد أضفت للتو ثلاثة روابط جديدة (claw_base و claw_r و claw_l) وثلاثة مفاصل جديدة (تم إصلاح المفصل 5 ، والمفصل 6 ، المفصل 7 عبارة عن مفاصل ثورية).

بعد تعديل ملف URDF الخاص بك ، ستحتاج أيضًا إلى تحديث حزمة MoveIt التي تم إنشاؤها وملف xacro باستخدام مساعد إعداد MoveIt.

قم بتشغيل مساعد الإعداد بالأمر التالي

بدء تشغيل moveit_setup_assistant setup_assistant. إطلاق

انقر فوق تحرير تكوين MoveIt الحالي واختر المجلد الذي يحتوي على حزمة MoveIt الخاصة بك.

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

يركض

صنع كاتكين

القيادة في مساحة عمل catkin الخاصة بك.

حسنًا ، لدينا الآن ذراع مع القابض!

الخطوة الثانية: بناء الذراع

بناء الذراع
بناء الذراع
بناء الذراع
بناء الذراع
بناء الذراع
بناء الذراع
بناء الذراع
بناء الذراع

كما ذكرت من قبل ، تم تصميم نموذج الذراع ثلاثي الأبعاد بواسطة Juergenlessner ، شكرًا لك على العمل الرائع. يمكن العثور على تعليمات التجميع التفصيلية إذا اتبعت الرابط.

كان علي تعديل نظام التحكم بالرغم من ذلك. أستخدم Arduino Uno مع درع المستشعر للتحكم في الماكينات. يساعد درع المستشعر كثيرًا في تبسيط الأسلاك ويجعل من السهل أيضًا توفير الطاقة الخارجية للوحدات المؤازرة. أستخدم محول طاقة 12 فولت 6 أمبير سلكيًا من خلال وحدة تنحي (6 فولت) إلى Sensor Shield.

ملاحظة على الماكينات. أستخدم الماكينات MG 996 HR المشتراة من Taobao ، لكن الجودة سيئة حقًا. إنها بالتأكيد نسخة مقلدة صينية رخيصة. لم يوفر مفصل الكوع عزمًا كافيًا حتى أنه بدأ في التبخير تحت حمولة ثقيلة. اضطررت إلى استبدال مؤازرة مفصل الكوع بـ MG 946 HR من شركة تصنيع ذات جودة أفضل.

قصة طويلة قصيرة - شراء خدمات عالية الجودة. إذا خرج الدخان السحري من الماكينات الخاصة بك ، فاستخدم أجهزة أفضل. 6V هو جهد آمن للغاية ، لا تزيده. لن يزيد من عزم الدوران ، لكن يمكن أن يتلف الماكينات.

الأسلاك لأجهزة الماكينة على النحو التالي:

القاعدة 2

الكتف 2 4 الكتف 1 3

الكوع 6

القابض 8

المعصم 11

لا تتردد في تغييره طالما أنك تتذكر أيضًا تغيير مخطط Arduino.

بعد الانتهاء من الأجهزة ، دعنا نلقي نظرة على الصورة الأكبر!

الخطوة 3: واجهة MoveIt RobotCommander

MoveIt RobotCommander Interface
MoveIt RobotCommander Interface

إذن ، ماذا الآن؟ لماذا تحتاج إلى MoveIt و ROS على أي حال؟ ألا يمكنك فقط التحكم في الذراع من خلال كود Arduino مباشرة؟

نعم تستطيع.

حسنًا ، الآن ماذا عن استخدام واجهة المستخدم الرسومية أو كود Python / C ++ لتوفير وضع الروبوت للذهاب إليه؟ هل يستطيع Arduino فعل ذلك؟

نوعا ما. لذلك ، ستحتاج إلى كتابة محلل حركي معكوس والذي سيأخذ وضع الروبوت (إحداثيات الترجمة والدوران في مساحة ثلاثية الأبعاد) وتحويله إلى رسائل زاوية مشتركة من أجل الماكينات.

على الرغم من قدرتك على القيام بذلك بنفسك ، إلا أنه يتطلب الكثير من العمل. لذلك ، يوفر MoveIt و ROS واجهة رائعة لحلول IK (الحركية العكسية) للقيام بكل الرفع المثلثي الثقيل نيابة عنك.

إجابة مختصرة: نعم ، يمكنك عمل ذراع آلي بسيط يقوم بتنفيذ مخطط Arduino ذي الترميز الثابت للانتقال من وضع إلى آخر. ولكن إذا كنت ترغب في جعل الروبوت الخاص بك أكثر ذكاءً وإضافة قدرات رؤية الكمبيوتر ، فإن MoveIt و ROS هما السبيل للذهاب.

لقد قمت بعمل رسم تخطيطي مبسط للغاية يشرح كيفية عمل إطار عمل MoveIt. في حالتنا ، سيكون الأمر أكثر بساطة ، نظرًا لأنه ليس لدينا تعليقات من الماكينات الخاصة بنا وسنستخدم موضوع / Joint_states لتزويد وحدة تحكم الروبوت بزوايا الماكينات. نحن نفتقر إلى مكون واحد فقط وهو وحدة التحكم في الروبوت.

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

الخطوة 4: كود اردوينو لوحدة تحكم الروبوت

كود اردوينو لوحدة تحكم الروبوت
كود اردوينو لوحدة تحكم الروبوت
كود اردوينو لوحدة تحكم الروبوت
كود اردوينو لوحدة تحكم الروبوت
كود اردوينو لوحدة تحكم الروبوت
كود اردوينو لوحدة تحكم الروبوت

في حالتنا ، سيكون Arduino Uno الذي يقوم بتشغيل عقدة ROS باستخدام rosserial هو جهاز التحكم في الروبوت. يتم إرفاق كود رسم Arduino بهذه الخطوة وهو متاح أيضًا على GitHub.

تشترك عقدة ROS التي تعمل على Arduino Uno بشكل أساسي في / JointState الموضوع المنشور على الكمبيوتر الذي يقوم بتشغيل MoveIt ثم تقوم بتحويل زوايا المفصل من المصفوفة من راديان إلى درجات وتمريرها إلى الماكينات باستخدام مكتبة Servo.h القياسية.

هذا الحل صعب بعض الشيء وليس كيف يتم ذلك باستخدام الروبوتات الصناعية. من الناحية المثالية ، من المفترض أن تنشر مسار الحركة على موضوع / FollowJointState ثم تتلقى التعليقات على موضوع / JointState. ولكن في ذراعنا لا تستطيع أجهزة الهواية تقديم التعليقات ، لذلك سنقوم بالاشتراك مباشرة في موضوع / JointState ، الذي تنشره عقدة FakeRobotController. في الأساس ، سنفترض أنه مهما كانت الزوايا التي مررناها إلى الماكينات يتم تنفيذها بشكل مثالي.

لمزيد من المعلومات حول كيفية عمل rosserial ، يمكنك الرجوع إلى الدروس التالية

wiki.ros.org/rosserial_arduino/Tutorials

بعد تحميل المخطط على Arduino Uno ، ستحتاج إلى توصيله بالكابل التسلسلي بالكمبيوتر الذي يقوم بتشغيل تثبيت ROS.

لإحضار النظام بأكمله ، قم بتنفيذ الأوامر التالية

roslaunch my_arm_xacro demo.la تشغيل rviz_tutorial: = صحيح

سودو chmod -R 777 / dev / ttyUSB0

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

يمكنك الآن استخدام علامات تفاعلية في RVIZ لتحريك ذراع الروبوت إلى وضع ما ثم الضغط على "التخطيط" و "التنفيذ" حتى ينتقل فعليًا إلى الموضع.

سحر!

نحن الآن جاهزون لكتابة كود Python لاختبار المنحدر الخاص بنا. حسنًا ، تقريبًا…

الخطوة 5: (اختياري) توليد IKfast Plug-in

بشكل افتراضي ، يقترح MoveIt استخدام KDL kinematics solver ، والذي لا يعمل حقًا مع أقل من 6 أذرع DOF. إذا اتبعت هذا البرنامج التعليمي عن كثب ، فستلاحظ أن نموذج الذراع في RVIZ لا يمكنه الانتقال إلى بعض الأوضاع التي يجب أن يدعمها تكوين الذراع.

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

الإجراء موثق جيدًا في هذا البرنامج التعليمي. تم التأكيد على العمل على VM الذي يعمل بنظام التشغيل Ubuntu 16.04 و ROS Kinetic.

لقد استخدمت الأمر التالي لإنشاء الحل

openrave.py - انعكاس قاعدة البيانات - robot = arm.xml --iktype = translation3d --iktests = 1000

ثم ركض

rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot arm my_arm_xacro ikfast0x1000004a. Translation3D.0_1_2_f3.cpp

لإنشاء المكون الإضافي MoveIt IKfast.

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

الخطوة السادسة: اختبار المنحدر

اختبار المنحدر!
اختبار المنحدر!
اختبار المنحدر!
اختبار المنحدر!

نحن الآن جاهزون لتجربة اختبار المنحدر ، والذي سنقوم بتنفيذه باستخدام ROS MoveIt Python API.

يتم إرفاق كود Python بهذه الخطوة وهو متاح أيضًا في مستودع جيثب. إذا لم يكن لديك منحدر أو تريد تجربة اختبار آخر ، فستحتاج إلى تغيير وضع الروبوت في الكود. لذلك أولا تنفيذ

صدى rostopic / rviz_moveit_motion_planning_display / robot_interaction_interactive_marker_topic / feedback

في المحطة عند تشغيل RVIZ و MoveIt بالفعل. ثم انقل الروبوت بعلامات تفاعلية إلى الموضع المطلوب. سيتم عرض قيم الموضع والاتجاه في المحطة. ما عليك سوى نسخها إلى كود Python.

لتنفيذ تشغيل اختبار المنحدر

rosrun my_arm_xacro pick / pick_2.py

مع RVIZ والعقدة rosserial قيد التشغيل بالفعل.

ترقبوا الجزء الثالث من المقالة ، حيث سأستخدم كاميرا ستريو لاكتشاف الأشياء وتنفيذ اختيار ووضع خط أنابيب لأشياء بسيطة!

موصى به: