استخدام عين السمكة على راسبيري باي 3 مع روس - الجزء 2

مساء الخير عزيزي هبر! هذا هو الجزء الثاني من القصة حول استخدام كاميرا عين السمكة على Raspberry Pi 3. يمكن العثور على الجزء الأول هنا . في هذه المقالة ، سأتحدث عن معايرة كاميرا عين السمكة واستخدام الكاميرا للكشف عن الأشياء باستخدام حزمة find_object_2d. من يهتم ، من فضلك ، تحت القطة.

معايرة كاميرا عين السمكة باستخدام camera_calibration


هنا أصف إجراء المعايرة بناءً على الدليل الرسمي على بوابة ros.org.

لإجراء المعايرة ، نحتاج إلى حزمة معايرة الكاميرا. يمكننا تثبيته مع apt:

sudo apt-get install ros-kinetic-camera-calibration 

سنحتاج إلى قالب رقعة الداما. قم بتنزيل النموذج من الدليل الرسمي على ros.org واطبعه. للراحة ، قمت بلصقه على لوح من الخشب الرقائقي:

الصورة

لنقم بتشغيل برنامج المعايرة:

 rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/usb_cam/image_raw camera:=/usb_cam 

سنحصل على صورة:

الصورة

انقل القالب قليلاً وانتظر حتى يتم تحديد القالب في الإطار (لن تظهر خطوط ملونة بنقاط على القالب).

الصورة

الصورة

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

  • يلتقط X حركة النمط في الاتجاه الأيسر / الأيمن (أفقيًا) في مجال رؤية الكاميرا
  • يلتقط Y حركة النمط في الاتجاه العلوي / السفلي (الأفقي) في مجال رؤية الكاميرا
  • يلتقط الحجم نهج / إزالة النموذج من الكاميرا ويميل فيما يتعلق بالكاميرا.
  • يقوم Skew بإصلاح منحدر القالب إلى اليسار واليمين ولأعلى ولأسفل (مائل).

وبالتالي ، من أجل المعايرة الناجحة ، من المهم أن يظهر القالب في زوايا مختلفة من الإطار ، ويحتل الإطار بأكمله ويميل أيضًا إلى اليسار واليمين وأعلى وأسفل.

يمكن أن تستغرق معايرة كاميرا عين السمكة على Raspberry Pi بعض الوقت ، لذا كن صبورًا. استغرق إجراء المعايرة الخاص بي 20 دقيقة.

عند اكتمال المعايرة ، يجب تنشيط زر المعايرة (مظلل باللون):

الصورة

يمكننا أيضًا رؤية نتائج المعايرة في المحطة:

الصورة

إذا كنت راضيًا عن النتيجة ، فاضغط على الزر COMMIT. سيتم إغلاق نافذة البرنامج وسترى رسالة "كتابة بيانات المعايرة إلى ..." في الوحدة الطرفية.

تحقق من إنشاء الملف المحدد:

 ll ~/.ros/camera_info/head_camera.yaml -rw-rw-r-- 1 vladimir vladimir 592 Apr 14 14:02 /home/vladimir/.ros/camera_info/head_camera.yaml 

اكتملت المعايرة. الآن يمكن استخدام بيانات المعايرة التي تم الحصول عليها في التعريب البصري وخوارزميات SLAM في ROS.

الكشف عن الكائنات باستخدام find_object_2d


تثبيت الحزمة بسيط للغاية. قم بتثبيته من مستودع apt في Ubuntu 16.04 لـ ROS Kinetic:

 sudo apt-get install ros-kinetic-find-object-2d source /opt/ros/kinetic/setup.bash 

قم بتشغيل ROS master و rqt_image_view:

 roscore roslaunch usb_cam usb_cam-test.launch 

باستخدام الأمر التالي ، ابدأ عقدة الكاشف:

 rosrun find_object_2d find_object_2d image:=/usb_cam/image_raw 

تفتح نافذة برنامج الكشف:

الصورة

هنا سنرى الدفق من الكاميرا ونتيجة الكشف عن الميزات المميزة على الأشياء.
بادئ ذي بدء ، سنقوم بإجراء تدريب على الكشف في منشآتنا. ضع الكائن الأول أمام الكاميرا:

الصورة

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

الصورة

بعد اختيار أفضل موضع للكائن ، انقر فوق الزر التقاط صورة لالتقاط صورة للكائن:

الصورة

نحتاج إلى تحديد الكائن في الصورة. استخدم مؤشر الماوس لتحديد الكائن:

الصورة

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

الصورة

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

الصورة

لنرسم موضع الكائن المكتشف إلى النهاية الطرفية:

 rosrun find_object_2d print_objects_detected 

سيكون الإخراج على النحو التالي:

 Object 1 detected, Qt corners at (259.387238,103.530960) (448.684052,79.495495) (282.419050,240.049667) (458.438938,199.656717) --- Object 1 detected, Qt corners at (255.340408,104.615120) (451.348079,75.302353) (284.672425,230.382223) (452.696585,197.625600) --- Object 1 detected, Qt corners at (253.440521,102.973320) (447.226440,76.793541) (278.530854,238.918013) (454.377219,197.526599) --- 

دعونا نذكر الموضوعات:

 rostopic list 

ظهر موضوعان جديدان في القائمة: / كائنات و / كائنات Stamped.

نعرض معلومات حول الكائنات المكتشفة:

 rostopic echo /objects 

 layout: dim: [] data_offset: 0 data: [1.0, 266.0, 177.0, 0.7527905702590942, 0.060980819165706635, 0.00022385441116057336, 0.3012462854385376, 0.8929792046546936, 0.0008534671505913138, 334.9065856933594, 182.55294799804688, 1.0] --- 

هنا ، تمثل القيمتان الثانية والثالثة (266.0 ، 177.0) عرض الجسم وارتفاعه. تمثل جميع القيم الأخرى في مجال البيانات مصفوفة تجانس 3x3 (تستخدم لحساب موضع الكائن واتجاهه ، وكذلك قيم المقياس والتحويل).

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

الصورة

بعد الانتهاء من العمل مع الكاشف ، سيعرض علينا find_object_2d حفظ الكائنات المضافة إلى القرص.

هذا كل شيء الآن. حظاً طيباً للجميع وأراكم قريباً!

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


All Articles