اكتشاف والتعرف على الأشياء من الكاميرا في ROS باستخدام حزمة find_object_2d



من مزايا نظام تشغيل الروبوت (ROS) أنه يحتوي على العديد من الحزم التي يمكن إعادة استخدامها في تطبيقاتنا. في حالتنا ، نريد إدخال نظام للتعرف على الأشياء والكشف عنها. تنفذ الحزمة find_object_2d كواشف واصف وظائف SURF و SIFT و ORB و FAST و BRIEF للكشف عن الكائنات . باستخدام الواجهة الرسومية التي توفرها هذه الحزمة ، يمكننا وضع علامة على الكائنات التي نريد اكتشافها وحفظها للكشف عنها في المستقبل. ستكتشف عقدة الكاشف الأشياء في صور الكاميرا وتنشر تفاصيل الكائن من خلال الموضوع. باستخدام مستشعر ثلاثي الأبعاد ، يمكنه تقييم عمق واتجاه كائن ما.

في نهاية المقال ، اختبار الفيديو على مثال خوارزميات ORB و SIFT.

تحديد find_object_2d


تثبيت هذه الحزمة بسيط للغاية. هذا هو الأمر لتثبيته على Ubuntu 16.04 و ROS Kinetic:

$ sudo apt-get install ros-kinetic-find-object-2d 

التثبيت من المصدر


قم بالتبديل إلى مساحة عمل ROS:

 $ cd ~/catkin_ws/src 

انسخ كود المصدر إلى مجلد src:

 $ git clone https://github.com/introlab/find-object.git src/find_object_2d 

إنشاء مساحة عمل:

 $ catkin_make 

تشغيل العقد find_object_2d باستخدام كاميرات الويب


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

1. إطلاق roscore:

 $ roscore 

2.1 قم بتوصيل كاميرا USB بالكمبيوتر وتشغيل برنامج تشغيل usb_cam ROS:

 $ roslaunch usb_cam usb_cam-test.launch 

سيؤدي ذلك إلى تشغيل برنامج تشغيل ROS لكاميرات الويب عبر USB ، ويمكنك رؤية الموضوعات في برنامج التشغيل هذا باستخدام الأمر list rostopic. تظهر قائمة الموضوعات في برنامج التشغيل هنا:


الموضوعات المنشورة من برنامج تشغيل الكاميرا

2.2 طريقة بديلة لبث الفيديو من الكاميرا عبر uvc_camera:

 $ rosrun uvc_camera uvc_camera_node 

3. من قائمة المواضيع ، سنستخدم موضوع الصورة الخام من الكاميرا ، والذي تم نشره في الموضوع / usb_cam / image_raw. إذا حصلت على هذا الموضوع ، فإن الخطوة التالية هي تشغيل عقدة اكتشاف الكائنات. سيبدأ الأمر التالي عقدة اكتشاف الكائن:

 $ rosrun find_object_2d find_object_2d image:=/usb_cam/image_raw 

سيفتح هذا الأمر نافذة الكشف عن الكائنات التي نرى فيها قناة الكاميرا وميزات الكائنات.

4. لذا ، كيف يمكننا استخدامه للكشف عن كائن؟ فيما يلي إجراءات تنفيذ الاكتشاف الأساسي باستخدام هذه الأداة:


نافذة الكشف عن الكائن

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

6. بعد محاذاة الكائن نحو الكاميرا ، انقر فوق الزر "التقاط صورة" للنقر فوق الكائن:


إضافة معالج كائن لالتقاط كائن

7. النافذة التالية هي لوضع علامة على كائن من الربط الحالي. يوضح الشكل التالي هذا. يمكننا استخدام مؤشر الماوس لوضع علامة على كائن. انقر فوق الزر "التالي" لاقتصاص الكائن ، ويمكنك المتابعة إلى الخطوة التالية:


إضافة معالج كائن لتسمية كائن

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


الخطوة الأخيرة في معالج إضافة الميزات

9. مبروك! لقد قمت بإضافة كائن لاكتشافه. يمكنك الآن رؤية الكشف الموضح في اللقطة التالية. يمكنك رؤية المربع المحيط حول الكائن المكتشف:


معالج البحث عن كائن يشغّل الاكتشاف

10. هل هذا يكفي؟ ماذا عن موقع الشيء؟ يمكننا الحصول عليها
موضع الكائن باستخدام الأمر التالي:

 $ rosrun find_object_2d print_objects_detected 


تفاصيل العقار

11. يمكنك أيضًا الحصول على معلومات كاملة حول الكائن المكتشف منه
/ موضوع الموضوع. ينشر هذا الموضوع مصفوفة بث متعدد تتكون من عرض وارتفاع الكائن ومصفوفة التماثل لحساب موضع الكائن واتجاهه وقيم المقياس والإزاحة. يمكنك الحصول على موضوع الصدى / كائنات مثل هذا:


قيم السمة / الكائن

12. يمكننا حساب الموقع الجديد والتوجه من المعادلات التالية:


معادلة حساب موضع الكائن

هنا H هو تجانس مصفوفة 3 × 3 ، (x1 ، y1) هو موضع الكائن في الصورة المخزنة ، و (x2 ، y2) هو الموضع المحسوب للكائن في الإطار الحالي.
يمكنك التحقق من التعليمات البرمجية المصدر لعقدة print_objected_src للحصول على نسخة باستخدام مصفوفة homography.

هنا هو كود المصدر لهذه العقدة.

اختبار فيديو لحزمة find_object_2d باستخدام مثال خوارزميات ORB و SIFT



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

أسئلة يجب حلها بواسطة الروبوت EduMIP :

  1. استلم من كاميرا Logitech C920 على BeagleBone Blue فيديو مرمّز بالفعل بالأجهزة وقم بنقله في هذا النموذج إلى كمبيوتر كبير في ROS.
  2. قم بتوصيل أجهزة استشعار المسافة VL6180X و Vl53l0x والمصد لإنشاء خريطة في ROS. (تم طلب الملحقات بالفعل)
  3. اكتب خوارزمية في ROS تعالج بيانات الخريطة وتكتشف أشياء من الكاميرا وتبني مسارًا للحركة بناءً عليها.

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

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


All Articles