Menggunakan mata Ikan pada Raspberry Pi 3 dengan ROS - Bagian 1

Selamat siang, para pembaca Habr. Beberapa tahun yang lalu saya menulis tentang menggunakan Papan Kamera Raspberry Pi pada Raspberry Pi bersama dengan ROS. Dalam artikel ini dan selanjutnya, saya ingin berbicara tentang menggunakan kamera sudut lebar seperti fish eye pada Raspberry Pi 3 dengan Ubuntu 16.04 diinstal. Kepada siapa itu menarik saya bertanya di bawah kat.

Sebagai permulaan, mengapa kamera mata ikan? Saya telah melihat banyak artikel tentang penggunaan kamera sudut lebar untuk odometri visual dan SLAM. Berkat sudut pandang mata ikan yang lebih besar, kamera ini meningkatkan akurasi odometri visual. Jadi saya ingin mencoba satu kamera dengan Raspberry Pi dengan dukungan ROS. Saya membeli kamera dengan sudut 160 derajat di dx.com dengan harga $ 28. Kit kamera juga mencakup dua lampu IR untuk penglihatan malam:

gambar

Pada artikel pertama saya akan berbicara tentang menginstal driver yang diperlukan, OpenCV 3 dan paket untuk mendukung Dewan Kamera Raspberry Pi di ROS.

Menginstal driver kamera mata ikan pada Raspberry Pi 3


Jadi mari kita mulai. Terhubung ke RPi 3 melalui SSH:

ssh -Y <user>@<ip> 

Parameter -Y memecahkan masalah mendapatkan kesalahan "Tidak dapat terhubung untuk menampilkan" ketika memulai beberapa aplikasi GUI (Qt, jendela dengan gambar dari program OpenCV). Pelajari lebih lanjut di sini .

Pertama, kita perlu mengaktifkan dukungan driver kamera di pengaturan Raspberry Pi raspi-config. Di Raspbian, layanan ini sudah diaktifkan, di Ubuntu Anda harus menginstalnya:

 sudo apt-get install raspi-config 

Jalankan raspi-config:

 sudo raspi-config 

Pilih opsi Antarmuka, lalu Kamera Pi dan klik Ya. Dan akhirnya Selesai.
Periksa apakah dukungan kamera diaktifkan menggunakan utilitas raspistill:

 raspistill -o mypicture.jpg 

Jika Anda mendapatkan kesalahan "Kamera tidak terdeteksi. Silakan periksa dengan seksama modul kamera dipasang dengan benar ”periksa apakah Anda menghubungkan kamera ke Raspberry Pi dengan benar. Anda juga dapat reboot sistem (itu membantu saya).

Mari kita coba merekam video:

 raspivid -o myvideo.h264 

Saya mendapat gambar di monitor yang terhubung ke Raspberry Pi. Saya tidak bisa mendapatkan popup di komputer saya ketika terhubung melalui ssh.

gambar

Menggunakan OpenCV 3 dengan kamera mata ikan pada Raspberry Pi


Instal pustaka picamera [array]:

 pip install "picamera[array]" 

Instal dependensi yang diperlukan untuk OpenCV. Pertama, perbarui manajer paket yang tepat dan perbarui paket yang sudah diinstal:

 sudo apt-get update sudo apt-get upgrade 

Instal beberapa perpustakaan:

 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 

Kami akan menginstal OpenCV 3 dari sumber.

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

Kita juga perlu mengunduh repositori opencv_contrib:

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

Faktanya adalah bahwa dalam paket-paket OpenCV 3 dengan deskriptor fitur (seperti SIFT dan SURF) dipindahkan ke repositori contrib yang terpisah. Sekarang, untuk menggunakan deskriptor tag, kita perlu mengunduh repositori contrib secara terpisah.

Sekarang kita akhirnya siap untuk menginstal OpenCV. Kita dapat menjalankan cmake untuk mengkompilasi OpenCV dengan parameter yang diperlukan:

 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 .. 

Jika cmake berhasil tanpa kesalahan, jalankan make:

 make -j4 

Saat mengkompilasi, saya mendapat kesalahan "Segmentasi kesalahan". Jika Anda mendapatkan kesalahan yang sama, lakukan clean untuk menghapus hasil kompilasi dan lakukan dengan satu kernel:

 make clean make 

Butuh waktu 3 jam untuk mengkompilasi. Akhirnya, instal OpenCV 3:

 sudo make install sudo ldconfig 

Ada nuansa menarik terkait dengan ROS Kinetic. Jika Anda menginstal Rin Kinetic, maka ROS menambahkan path ke pustaka Python (/opt/ros/kinetic/lib/python2.7/dist-packages) ke jalur sistem ketika menjalankan sumber perintah /opt/ros/kinetic/setup.bash. Hal ini menyebabkan beberapa masalah selama instalasi OpenCV berikutnya dari sumber (lebih lanjut tentang ini ditulis di sini ). Untuk mengatasi masalah tersebut, hapus baris 'source /opt/ros/kinetic/setup.bash' dari file .bashrc. Jangan lupa untuk menjalankan:

 source ~/.bashrc 

Mari kita verifikasi bahwa OpenCV sekarang dengan benar menghubungkan dari Python.
Buat folder untuk proyek dan skrip pengujian sederhana:

 mkdir PiCamera && cd PiCamera vim test_cam.py 

Tambahkan kode berikut ke file:

 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) 

Jalankan skrip:

 python test_cam.py 

Jika berhasil, kami mendapatkan sesuatu seperti ini:

gambar

Sekarang mari kita coba merekam video dari kamera.

 vim test_videom.py 

Tambahkan kode berikut ke file:

 # 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 

Mari kita coba sesuatu yang lebih menarik, misalnya, tambahkan deteksi tepi. Saya menggunakan detektor Kenny di sini (kode diambil dari sini ):

 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 

Ini adalah hasil dari menjalankan program:

gambar

Menambahkan dukungan Raspberry Pi Camera ke ROS


Sekarang mari kita tambahkan kemampuan untuk bekerja dengan kamera mata ikan untuk Raspberry Pi dari ROS. Pertama, instal driver V4L2 yang diperlukan untuk kamera Raspberry Pi (Anda dapat membaca lebih lanjut di sini ). Jalankan perintah:

 sudo rpi-update 

dan reboot sistem. Sekarang tambahkan driver:

 sudo modprobe bcm2835-v4l2 

Pastikan perangkat / dev / video0 tersedia:

 ll /dev/video0 

Outputnya akan seperti ini:

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

Unduh paket usb_cam:

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

Jalankan master ROS dan rqt_image_view:

 roscore roslaunch usb_cam usb_cam-test.launch rosrun rqt_image_view rqt_image_view 

Pilih topik / usb_cam / image_raw. Kami mendapatkan gambar berikut:

gambar

Sekarang kamera mata ikan dapat digunakan dengan paket visi komputer di ROS. Lain kali kita akan mencoba deteksi objek. Semoga sukses untuk semua orang dalam percobaan dan sampai jumpa lagi!

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


All Articles