شاحنة عربة روس

المشاركات في السلسلة:
8. نحن نتحكم من الهاتف ROS Control ، GPS العقدة
7. توطين الروبوت: gmapping ، AMCL ، النقاط المرجعية على خريطة الغرفة
6. المسافات مع ترميز عجلة ، خريطة الغرفة ، ليدار
5. نحن نعمل في rviz وشرفة المراقبة: xacro ، أجهزة استشعار جديدة.
4. قم بإنشاء محاكاة روبوت باستخدام محرري rviz و gazebo.
3. تسريع ، تغيير الكاميرا ، إصلاح المشية
2. البرمجيات
1. الحديد

الانتقال إلى الابتسامة


بعد تجميع "burger" وفقًا للمخطط من آخر مشاركة ، ننتقل إلى محتوى البرنامج.

نظرًا لأننا نجمع لمشروع مكتمل بالفعل ، فمن المنطقي إعطاء الإرشادات الموضحة فيه. هم هنا .

كل شيء مريح للغاية ، وفي نفس المكان يمكنك تنزيل صورة جاهزة من Raspbian Stretch + ROS + OpenCV ، اكتبها على بطاقة sd للتوت. (ROS Kinetic، OpenCV 3.4.1. نعم ، هناك إصدار أحدث ، ولكن في بعض الأحيان يكون من الأفضل أن تأخذ وتذهب من جمع كل شيء من المصدر).

ومع ذلك ، على الرغم من الراحة ، لا يزال يتعين علي تصحيح الصورة قليلاً. نظرًا لأنه تبين بعض التفاصيل غير المريحة للصورة الأصلية:

  • لا واجهة المستخدم الرسومية (واجهة رسومية). هذا ليس بالأمر الهام ، خاصة بالنسبة لـ ROS ، ولكن للركوب على خط ما تحتاج إلى معايرة الكاميرا على التوت نفسه ، ومعرفة كيف تنقل (الكاميرا) الألوان (أكثر على ذلك أدناه) ؛
  • لا يعرض تجميع OpenCV الصورة على الشاشة ، حتى إذا قمت بتثبيت واجهة المستخدم الرسومية بنفسك. من الواضح ، في مشروع rosbots ، تم بناء opencv بدون هذا الخيار.
  • لا العكازات الصغيرة (VNC ، محرر النص للملاحظات ، مولودية).
  • لذلك ، تم إعادة بناء OpenCV بدعم من إخراج الصور في واجهة المستخدم الرسومية (جمعت بواسطة openCV 3.4.3) ، تم تثبيت واجهة المستخدم الرسومية ، عكازات صغيرة.

الصورة النهائية هنا ، وسيتم بناء المزيد من العمل على أساسها.

قم بتكوين الشبكة (wi-fi) و ROS-master على التوت pi

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

بعد تحميل الصورة على بطاقة sd raspberry ، قم بتكوين الشبكة. إعدادات الشبكة الأولية كالتالي:

interface wlan0 static ip_address=192.168.43.174/24 static routers=192.168.43.1 static domain_name_servers=192.168.43.1 

موجود في /etc/dhcpcd.conf

لذلك ، لا يمكنك توصيل الخراطيم بتوت العليق لتغيير كل شيء ، ولكن ببساطة إنشاء نقطة وصول مع رئيس اسم pathos وكلمة المرور 1234554321. سيكون عنوان التوت هو 192.168.43.174. بالإضافة إلى ssh ، يمكنك أيضًا الوصول إلى هذا العنوان عبر VNC: login - pi ، password - 123qweasdzxcV.

دعونا تكوين سيد ROS

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

في نظام ROS الخاص بنا ، يبدأ المعالج تلقائيًا في تحميل نظام التشغيل وكل ما هو مطلوب منا هو تحديد عنوان IP لمعالج ROS في ملف النظام المقابل.

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

خلاف ذلك ، قم بتحرير bashrc:

 nano ~/.bashrc 

في نهاية الملف ، قم بتصحيح عناوين IP (كلاهما) لحالتك:

 export ROS_MASTER_URI=http://192.168.43.174:11311 export ROS_HOSTNAME=192.168.43.174 

إعادة تشغيل الكمبيوتر.

الآن ، عند بدء تشغيل المحطة على العربة ، سيكون الإخراج مثل هذا (أو ما حددته في الإعدادات):

 For all slaves, "export ROS_MASTER_URI=http://192.168.43.174:11311" 

هذا يعني أن سيد ROS يعمل على عنوان IP المحدد.

نحن نتحكم في العربة على شبكة wi-fi


سنتحقق من البداية من أن العقد تعمل من أجلنا.

في المحطة:

 rosnode list 

الإخراج سيكون مثل هذا:

/ rosout
/ uno_serial_node

في حالة عدم ظهور أي شيء ، تحقق مما إذا كنت قد سجلت ROS-master في الإعدادات كما هو موضح أعلاه ، ما إذا كنت قد قمت بتوصيل خرطوم USB بـ arduino ، أم لا.

بعد التحقق ، قم بتشغيل العقدة الأولى المسؤولة عن الحركة:

 rosrun rosbots_driver part2_cmr.py 

* قيادة روس الخاصة تطلق ملف part2_cmr.py من حزمة بيثون rosbots_driver

سيعلم النظام أن العقدة تعمل:



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

 /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/examples/coursera_control_of_mobile_robots/part2/full/controller 

منذ part2_cmr.py نفسها لا تملك هذه المعلمات. افتح المحطة الثانية وأدخل القائمة المنقحة:



هنا يمكنك أن ترى أن الموضوع / part2_cmr / cmd_vel قد ظهر. في هذا الموضوع ، / part2_cmr "يستمع" إلى ما ستقوله العقد الأخرى ، ووفقًا لما يقولون ، سوف يتحكم في الحركة. بالضبط ما "يستمع" ، ولكن لا "يتحدث" يمكن فهمه باستخدام الأمر.

 rostopic info /part2_cmr/cmd_vel 



هنا يمكنك أن ترى / part2_cmr المشترك (مشترك) في الموضوع ويستمع.

* يمكنك "قول" شيء عن الموضوع بنفسك ، دون عقد.

على سبيل المثال:

 rostopic pub -1 /wheel_power_left std_msgs/Float32 '{data: 1.0}' 

بدوره إلى الأمام مع عجلة اليسار

 rostopic pub -1 /wheel_power_left std_msgs/Float32 '{data: 0.0}' 

وقف عجلة اليسار

 rostopic pub -1 /wheel_power_left std_msgs/Float32 '{data: -1.0}' 

العودة إلى الوراء مع عجلة

 rostopic pub -1 /wheel_power_left std_msgs/Float32 '{data: -0.5}' 

العودة إلى الوراء مع أبطأ عجلة اليسار.

بناء الجملة هو: rostopic pub - الرغبة في التحدث في الموضوع ، -1 - الرغبة لمرة واحدة ، / wheel_power_left - الموضوع الذي نقول ، std_msgs / Float32 - اللغة (تنسيق الرسالة) ، '{البيانات: -0.5}' - ما نقوله.

قم الآن بتشغيل الشخص الذي سيتحدث في الموضوع / part2_cmr / cmd_vel. سيكون هذا الأمر أمر إرسال لوحة المفاتيح.

بدون إغلاق المحطة السابقة مع عقدة عمل ، قم بتشغيل واحدة أخرى وأدخل:

 rosrun teleop_twist_keyboard teleop_twist_keyboard.py /cmd_vel:=/part2_cmr/cmd_vel 

* نظرًا لأن النشر افتراضيًا في الموضوع / cmd_vel ، فإننا نعيد توجيهه باستخدام
/ cmd_vel: = / part2_cmr / cmd_vel بحيث يتم سكب الرسائل في / part2_cmr / cmd_vel.

بدأت عقدة التحكم ويمكنك الركوب عن طريق الضغط على المفاتيح الموجودة على لوحة المفاتيح:



إذا كان من المستحيل القيادة ، أو كان هناك صرير خفي من أسفل العجلات ، فستحتاج إلى زيادة السرعة بالنقر فوق "w" في المحطة الطرفية مع تشغيل العقدة. يمكن القيام بنفس الشيء (الزيادة أو النقص) مع سرعة الدوران - الزر "e". من المهم أيضًا أن تكون في محطة مع عقدة تشغيل إذا لم تعمل أزرار التحكم إذا قمت بالتبديل إلى محطة أخرى. زر "k" في محطة التحكم هو توقف.

في محطة منفصلة ، انظر إلى الموضوع / part2_cmr / cmd_vel:



الآن في الموضوع / part2_cmr / cmd_vel يوجد متكلم ومستمع.

ركوب الخط على OpenCV


قبل أن تذهب إلى مكان ما ، تحتاج إلى التأكد من أن الروبوت يسافر مع التحكم في لوحة المفاتيح. هناك حاجة إلى ملاحظة مهمة هنا. عند التحكم من لوحة المفاتيح في المثال أعلاه ، يجب أن يتوافق الاتجاه إلى اليسار مع الضغط على المفتاح j واليمين l (اللاتيني l) ، إعادة التوجيه i ، الخلف ، (فاصلة). إذا لم يكن الأمر كذلك في حالتك ، فقد تكون هناك مشاكل في الرحلة. لإعادة كل شيء إلى طبيعته ، من الضروري تغيير أزواج الأسلاك القادمة من سائق المحرك إلى الأرجل على اردوينو في برجر 4،5،6،7 اردوينو: 4،5 للتبادل مع 6،7 أو 4 و 5،6 و 7 مع كل آخر اعتمادا على المكان الذي سوف تدور العجلات. يمكنك أيضًا القيام بذلك برمجيًا عن طريق ضبط التعليمات البرمجية لاردوينو على طول المسار - /home/pi/gitspace/rosbots_driver/platformio/rosbots_firmware/examples/motor_driver/src/main.cpp

 #define M_LEFT_PWM 6 #define M_LEFT_FR 7 #define M_RIGHT_PWM 5 #define M_RIGHT_FR 4 

وإعادة تحميله على اردوينو مع الأمر:

 upload_firmware ~/gitspace/rosbots_driver/platformio/rosbots_firmware/examples/motor_driver 

دعونا نعمل مع الزهور

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

دعنا نذهب إلى المجلد وتشغيل البرنامج النصي:

 cd /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/rosbots_driver python bgr-to-hsv.py 

* الاهتمام! إذا كنت تستخدم الصورة الأصلية من rosbots ، وليس صورتي ، فهذا البرنامج غير موجود.

سيتم فتح نافذتين:



فيما يلي نطاقات الألوان في HSV. ما هو hsv ولماذا لا rgb ، يرجى جوجل ذلك بنفسك.

h1 ، s1 ، v1 - أقل و h2 ، s2 ، v2 - على التوالي ، النطاق العلوي.

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



خط الشريط الكهربائي أبيض بشكل غير عادي ، كل شيء آخر أسود. هذه النتيجة ضرورية.
سجل ، تذكر أرقام النطاقات HSV. حالتي هي 5615540 و 13625525. ستكون نطاقات HSV مختلفة في ظل ظروف الإضاءة المختلفة بالقرب من كاميرا الروبوت.

أغلق النوافذ عن طريق إدخال ctrl + c في الجهاز وإضافة نطاقات HSV إلى ملف follow_line_step_hsv.py:

 cd /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/rosbots_driver nano follow_line_step_hsv.py 

في السطور:

 lower_yellow = np.array([21,80,160]) upper_yellow = np.array([255,255,255]) 

نضع أرقام نطاقات HSV لدينا.

الوقت لركوب الخط

نبدأ العقدة الحركية في المحطة 1:

 rosrun rosbots_driver part2_cmr.py 

قم بتشغيل عقدة الكاميرا في المحطة الثانية:

 sudo modprobe bcm2835-v4l2 roslaunch usb_cam usb_cam-test.launch 

تشغيل العقدة opencv في المحطة الثالثة:

 cd /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/rosbots_driver python follow_line_step_hsv.py 

إذا سارت الأمور على ما يرام ، فسيذهب الروبوت على طول الخط ، وستظهر نافذة إضافية:



في هذه النافذة ، سيتم وضع علامة على الشريط الكهربائي بدائرة حمراء.

المعنى العام للرمز هو تسليط الضوء على قطعة اللون على مسافة معينة من الكاميرا ، ورسم دائرة حمراء والانتقال إلى هذه الدائرة ، في محاولة لإبقائها في الوسط.

وأخيرا ، حول المهم - عن القطط والابتسامات


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

للتجارب ، صور القطط في الوجه مناسبة.

قم بتشغيل عقدة الكاميرا في الجهاز الأول:

 cd /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/rosbots_driver python pi_camera_driver.py 

في الطرف الثاني ، العقدة الحركية:

 rosrun rosbots_driver part2_cmr.py 

في الطرف الثالث من عقدة البحث عن القط:

 cd /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/rosbots_driver python follow_cat2.py 

ستنتقل العربة تدريجياً إلى القط:



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

في الطرف الثالث من عقدة البحث الخاصة بالقط ، يمكنك إغلاق - ctrl + c وبدلاً من ذلك ، يمكنك البحث عن ابتسامة على وجه شخص عام غير معروف:

 python follow_smile.py 

سيتعين على العربة القيادة ببطء وببطء إلى ابتسامة شخص غير معروف:



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

لسوء الحظ ، فإن الأداء على التوت 3 ب يترك الكثير مما هو مرغوب فيه ، على الرغم من إعدادات الكاميرا 320 × 240 و 15 إطارًا في الثانية. التأخير ملحوظ مع زيادة الوقت. ليس كل القط يمكن أن يقف عليه.

كيف يمكن تحسين هذا؟

حاول إعادة إنشاء opencv الأمثل ، كما يوصي أدريان (https://www.pyimagesearch.com/2017/10/09/optimizing-opencv-on-the-raspberry-pi/)؟ استخدام موارد الكمبيوتر الخارجية لمعالجة الصور؟ ليس محاولة لضغط الصور في JPEG التي تطير إلى معالج هار؟ واحد أكبر ناقص - القطط يجب أن تكون كبيرة وأمام. 15 سم المسافة على ورقة A4. عند الابتعاد عن الكاميرا ، يكون القط غير قابل للتعريف بالفعل ولا يمكن تجاهله. وضع أحادي التوت على الكاميرا مع التكبير 8X؟

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

 python follow_fullbody.py python follow_upperbody.py python follow_lowerbody.py 

الوجه أو العين:

 python follow_face.py python follow_right_eye.py 

إذا كنت مهتمًا بكيفية التحرك بسلاسة حتى لا يسقط الروبوت الشاي ، وكذلك كيفية تشغيله ليس باستخدام التوت نفسه ، فاكتب.

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


All Articles