مساء الخير عزيزي هبر. قبل بضع سنوات
كتبت عن استخدام لوحة الكاميرا 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
قم بتشغيل البرنامج النصي:
python test_cam.py
إذا نجحت ، نحصل على شيء مثل هذا:

دعنا الآن نحاول تسجيل فيديو من الكاميرا.
vim test_videom.py
أضف الكود التالي إلى الملف:
دعنا نجرب شيئًا أكثر إثارة للاهتمام ، على سبيل المثال ، أضف اكتشاف الحواف. أنا أستخدم كاشف كيني هنا (الرمز مأخوذ
من هنا ):
from picamera.array import PiRGBArray from picamera import PiCamera import time import cv2 import numpy as np
هنا نتيجة تشغيل البرنامج:

إضافة دعم 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. في المرة القادمة سنحاول الكشف عن الأشياء. حظاً طيباً للجميع في التجارب ونراكم قريباً!