استخدام عين السمكة على Raspberry Pi 3 مع ROS - الجزء الأول

مساء الخير عزيزي هبر. قبل بضع سنوات كتبت عن استخدام لوحة الكاميرا Raspberry Pi على Raspberry Pi بالتعاون مع ROS. في هذه المقالة والمقال التالي ، أود أن أتحدث عن استخدام كاميرا واسعة الزاوية مثل عين السمكة على Raspberry Pi 3 مع تثبيت Ubuntu 16.04. لمن المثير للاهتمام أسأل تحت القات.

بالنسبة للمبتدئين ، لماذا كاميرا عين السمكة؟ لقد رأيت العديد من المقالات حول استخدام الكاميرات ذات الزاوية العريضة لقياس الطول البصري و SLAM. بفضل زاوية الرؤية الأكبر لعين السمكة ، تعمل الكاميرا على تحسين دقة قياس الضوء البصري. لذلك أردت تجربة واحدة من هذه الكاميرات مع Raspberry Pi مع دعم ROS. اشتريت كاميرا بزاوية 160 درجة على dx.com مقابل 28 دولارًا. تحتوي مجموعة الكاميرا أيضًا على مصباحين للأشعة تحت الحمراء للرؤية الليلية:

الصورة

في المقالة الأولى سأتحدث عن تثبيت برامج التشغيل الضرورية ، OpenCV 3 والحزم لدعم لوحة الكاميرا Raspberry Pi في ROS.

تثبيت مشغل كاميرا عين السمكة على Raspberry Pi 3


لذلك دعونا نبدأ. الاتصال بـ RPi 3 عبر SSH:

ssh -Y <user>@<ip> 

تحل المعلمة -Y مشكلة الحصول على الخطأ "تعذر الاتصال للعرض" عند بدء تشغيل بعض تطبيقات واجهة المستخدم الرسومية (نافذة Qt مع الصورة من برنامج OpenCV). تعرف على المزيد هنا .

أولاً ، نحتاج إلى تمكين دعم برنامج تشغيل الكاميرا في إعدادات Raspberry Pi raspi-config. في Raspbian ، تم تمكين هذه الخدمة بالفعل ، في Ubuntu تحتاج إلى تثبيتها:

 sudo apt-get install raspi-config 

قم بتشغيل raspi-config:

 sudo raspi-config 

حدد خيار Interfacing ، ثم كاميرا Pi وانقر فوق Yes. وأخيرا النهاية.
تحقق من تمكين دعم الكاميرا باستخدام الأداة المساعدة raspistill:

 raspistill -o mypicture.jpg 

إذا ظهر لك الخطأ "لم يتم الكشف عن الكاميرا. يرجى التحقق بعناية من تثبيت وحدة الكاميرا بشكل صحيح "تحقق مما إذا قمت بتوصيل الكاميرا بجهاز Raspberry Pi بشكل صحيح. يمكنك أيضًا إعادة تشغيل النظام (ساعدني).

لنحاول تسجيل مقطع فيديو:

 raspivid -o myvideo.h264 

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

الصورة

باستخدام OpenCV 3 مع كاميرا عين السمكة على راسبيري باي


قم بتثبيت مكتبة picamera [المصفوفة]:

 pip install "picamera[array]" 

قم بتثبيت التبعيات اللازمة لـ OpenCV. أولاً ، قم بتحديث apt package manager وترقية الحزم المثبتة مسبقًا:

 sudo apt-get update sudo apt-get upgrade 

تثبيت بعض المكتبات:

 sudo apt-get install build-essential cmake pkg-config sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev sudo apt-get install libxvidcore-dev libx264-dev sudo apt-get install libgtk-3-dev sudo apt-get install libatlas-base-dev gfortran sudo apt-get install python2.7-dev python3.5-dev 

سنقوم بتثبيت OpenCV 3 من المصدر.

 cd ~ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip unzip opencv.zip 

نحتاج أيضًا إلى تنزيل مستودع opencv_contrib:

 wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip unzip opencv_contrib.zip 

والحقيقة هي أنه في حزم OpenCV 3 مع واصفات الميزات (مثل SIFT و SURF) تم نقلها إلى مستودع مساهمة منفصل. الآن ، لاستخدام واصفات العلامات ، نحتاج إلى تنزيل مستودع المساهمة بشكل منفصل.

الآن نحن جاهزون أخيرًا لتثبيت OpenCV. يمكننا تنفيذ cmake لتجميع OpenCV مع المعلمات الضرورية:

 cd ~/opencv-3.1.0/ mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D INSTALL_C_EXAMPLES=OFF \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \ -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \ -D BUILD_EXAMPLES=ON .. 

إذا نجح cmake بدون أخطاء ، فقم بتنفيذ:

 make -j4 

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

 make clean make 

استغرق الأمر مني 3 ساعات للترجمة. أخيرًا ، قم بتثبيت OpenCV 3:

 sudo make install sudo ldconfig 

هناك فارق بسيط مثير للاهتمام يتعلق بحركة ROS. إذا قمت بتثبيت Rin Kinetic ، فإن ROS يضيف المسار إلى مكتبات Python (/opt/ros/kinetic/lib/python2.7/dist-packages) إلى مسار النظام عند تشغيل مصدر الأوامر /opt/ros/kinetic/setup.bash. هذا يؤدي إلى بعض المشاكل أثناء التثبيت اللاحق لـ OpenCV من المصدر (المزيد عن هذا مكتوب هنا ). لحل المشكلة ، قم بإزالة السطر "source /opt/ros/kinetic/setup.bash" من ملف .bashrc. لا تنسى الجري:

 source ~/.bashrc 

دعونا نتحقق من أن روابط OpenCV الآن صحيحة من Python.
قم بإنشاء مجلد للمشروع ونص اختبار بسيط:

 mkdir PiCamera && cd PiCamera vim test_cam.py 

أضف الكود التالي إلى الملف:

 from picamera.array import PiRGBArray from picamera import PiCamera import time import cv2 # initialize the camera and reference the raw camera capture camera = PiCamera() rawCapture = PiRGBArray(camera) # allow camera to warmup time.sleep(0.1) # grab an image camera.capture(rawCapture, format="bgr") image = rawCapture.array cv2.imshow("Capture", image) cv2.waitKey(0) 

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

 python test_cam.py 

إذا نجحت ، نحصل على شيء مثل هذا:

الصورة

دعنا الآن نحاول تسجيل فيديو من الكاميرا.

 vim test_videom.py 

أضف الكود التالي إلى الملف:

 # import the necessary packages from picamera.array import PiRGBArray from picamera import PiCamera import time import cv2 # initialize the camera and grab a reference to the raw camera capture camera = PiCamera() camera.resolution = (640, 480) camera.framerate = 32 rawCapture = PiRGBArray(camera, size=(640, 480)) # allow the camera to warmup time.sleep(0.1) # capture frames from the camera for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): # grab the raw NumPy array representing the image, then initialize the timestamp # and occupied/unoccupied text image = frame.array # show the frame cv2.imshow("Frame", image) key = cv2.waitKey(1) & 0xFF # clear the stream in preparation for the next frame rawCapture.truncate(0) # if the `q` key was pressed, break from the loop if key == ord("q"): break 

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

 from picamera.array import PiRGBArray from picamera import PiCamera import time import cv2 import numpy as np # initialize the camera and grab a reference to the raw camera capture camera = PiCamera() camera.resolution = (640, 480) camera.framerate = 32 rawCapture = PiRGBArray(camera, size=(640, 480)) # allow the camera to warmup time.sleep(0.1) # capture frames from the camera for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): # grab the raw NumPy array representing the image, then initialize the timestamp # and occupied/unoccupied text image = frame.array hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) lower_red = np.array([30,150,50]) upper_red = np.array([255,255,180]) mask = cv2.inRange(hsv, lower_red, upper_red) res = cv2.bitwise_and(image,image, mask= mask) edges = cv2.Canny(res,100,200) # show the frame cv2.imshow("Frame", image) cv2.imshow("Edges", edges) key = cv2.waitKey(1) & 0xFF # clear the stream in preparation for the next frame rawCapture.truncate(0) # if the `q` key was pressed, break from the loop if key == ord("q"): break 

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

الصورة

إضافة دعم Raspberry Pi Camera إلى ROS


الآن دعنا نضيف القدرة على العمل مع كاميرا عين السمكة لـ Raspberry Pi من ROS. أولاً ، قم بتثبيت برنامج تشغيل V4L2 اللازم لكاميرا Raspberry Pi (يمكنك قراءة المزيد هنا ). قم بتشغيل الأمر:

 sudo rpi-update 

وإعادة تشغيل النظام. الآن أضف السائق:

 sudo modprobe bcm2835-v4l2 

تحقق من أن الجهاز / dev / video0 متاح:

 ll /dev/video0 

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

 crw-rw----+ 1 root video 81, 0 Mar 17 15:47 /dev/video0 

قم بتنزيل حزمة usb_cam:

 sudo apt-get install ros-kinetic-usb-cam source /opt/ros/kinetic/setup.bash 

قم بتشغيل ROS الرئيسي و rqt_image_view:

 roscore roslaunch usb_cam usb_cam-test.launch rosrun rqt_image_view rqt_image_view 

حدد الموضوع / usb_cam / image_raw. نحصل على الصورة التالية:

الصورة

الآن يمكن استخدام كاميرا عين السمكة مع أي حزم رؤية الكمبيوتر في ROS. في المرة القادمة سنحاول الكشف عن الأشياء. حظاً طيباً للجميع في التجارب ونراكم قريباً!

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


All Articles