التحكم في روبوت EduMip ذاتي التوازن باستخدام عصا التحكم PS4 Dualshock 4 عبر ROS


هذا مثال بسيط على كيفية استخدام ROS يمكنك توصيل العديد من الأجهزة عبر الشبكة وإرسال بيانات التحكم.

تحت القطع في النهاية هو عرض فيديو للتحكم في الروبوت من عصا التحكم.

نحتاج إلى عصا التحكم نفسها ، يمكنك أخذه من جهاز PS4 أو شرائه من المتجر. اشتريت Dualshock 4 v2 ، يجب أن تعمل النسخة الأولى أيضًا.

تحتاج أيضًا إلى بلوتوث على جهاز الكمبيوتر الخاص بك مع ROS ، في وثائق برنامج التشغيل ، أوصي بمحول USB blutooth الإصدار 2.1+. لقد عملت بشكل مثالي مع المحول المدمج في الكمبيوتر المحمول. يمكنك أيضًا توصيل عصا التحكم وكابل USB فقط.

ثم في Ubuntu مع ROS ، تحتاج إلى تثبيت برنامج التشغيل وفقًا للتعليمات .

بعد تثبيت برامج التشغيل وتوصيل عصا التحكم عبر البلوتوث ، أطلقنا الأداة الرسومية jstest-gtk ونرى أن لدينا اثنين من عصي التحكم ، ونحتاج إلى عصا تحكم أخرى ، حيث تحتوي على جميع الأزرار والعصي.



نظرًا لأن ROS يعمل مع joy0 افتراضيًا ، نحتاج إلى إعادة تعريفه على joy1:

sudo chmod a+rw /dev/input/js1 rosparam set joy_node/dev "/dev/input/js1" 

الآن نحن بحاجة إلى توصيل كل شيء في شبكة واحدة. سيكون الكمبيوتر المحمول مع ROS هو سيد ، وسوف يتصل EduMip مع BeagleBone Blue ROS عبر wifi بالكمبيوتر المحمول. كلا الجهازين في الشبكة المحلية لجهاز توجيه wifi.

على جهاز الكمبيوتر لديك ، قم بتعيين متغيرات بيئة ROS للبحث عن معالج ros (roscore) على جهاز الكمبيوتر باستخدام أوامر .bashrc (قم بإضافة هذه الأوامر إلى نهاية ملف .bashrc):

 export ROS_MASTER_URI=http://192.168.10.101:11311” <-   ROS IP- ,     ros (roscore). “export ROS_IP=192.168.10.101” <-   ROS IP-   ( ). 

في EduMIP ، قم بتعيين متغيرات بيئة ROS بحيث تعثر على معالج ros (roscore) على جهاز الكمبيوتر باستخدام أوامر .bashrc (أضف هذه الأوامر إلى نهاية ملف .bashrc):

 export ROS_MASTER_URI=http://192.168.10.101:11311” <-   ROS IP- ,     ros (roscore). “export ROS_IP=192.168.10.102” <-   ROS IP-   ( EduMIP). 

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

 // Callback function for joystick pessaged void joyCallback(const sensor_msgs::Joy::ConstPtr& joy) { // X vel driven by left joystick for and aft command_velocity_twist.linear.x = joy->axes[1]; // heading driven by left joysticj left and right command_velocity_twist.angular.z = joy->axes[0]; } // this function gets called at 10Hz to publish the command_velocity array of 2 floats void timerCallback(const ros::TimerEvent& event) { cmd_vel_publisher.publish(command_velocity_twist); } 

على جهاز الكمبيوتر ، يمكنك إلقاء نظرة مرئية على العقد والموضوعات عن طريق تشغيل rqt_graph:



إظهار التحكم في الروبوت باستخدام عصا التحكم:


ملخص: باستخدام ROS ، يمكنك بناء نظام للعمل الموزع عبر عدة أجهزة ، على سبيل المثال ، إجراء حسابات كبيرة على الكمبيوتر الرئيسي ، تاركًا فقط ما هو مطلوب للاستجابة السريعة على الروبوت نفسه. يحتوي BeagleBone Blue على نظام فرعي قابل للبرمجة في الوقت الفعلي (PRU - ICSS).

يتكون PRU-ICSS من معالج دقيق يعتمد على نوى 32 بت مع بنية RISC ويعمل بتردد 200 MHz. يحتوي كل قلب على منطقة ذاكرة خاصة به ، بالإضافة إلى منطقة ذاكرة متوافقة مع Linux ، ويمكن استخدام دبابيس للأغراض العامة الموجودة على موصلات P8-P9 وتوليد مقاطعات.

بالإضافة إلى ذلك ، يمكن لمستشعر MPU9250 المثبت على BeagleBone Blue عند تغيير الوضع أن يشكل مقاطعة يمكنك تعليق وظيفتك عليها ، وهو بالضبط ما تم القيام به في EduMip.

إذا تحدثنا عن الخطوة التطورية التالية ، فهذا هو ROS2 ، حيث أن أحد الاختلافات هو DDS (خدمة توزيع البيانات) ، والتي تسمح لك ببناء شبكة من الروبوتات والأجهزة المتفاعلة المختلفة التي لا تعمل ROS عليها.

Source: https://habr.com/ru/post/ar413901/


All Articles