Добрый день, уважаемые читатели Хабра.
Несколько лет назад я написал об использовании платы камеры Raspberry Pi на Raspberry Pi в сочетании с ROS. В этой и следующей статье я хотел бы поговорить об использовании широкоугольной камеры типа «рыбий глаз» на Raspberry Pi 3 с установленной Ubuntu 16.04. Кому интересно, смотрите кат. Прежде всего, почему камера «рыбий глаз»? Я видел много статей об использовании широкоугольных камер для визуальной одометрии и SLAM. Благодаря большему углу обзора камера «рыбий глаз» повышает точность визуальной одометрии.
Поэтому я хотел попробовать одну такую камеру с Raspberry Pi с поддержкой ROS. Я купил камеру с углом обзора 160 градусов.
dx.com за 28 долларов.
В комплект камеры также входят две ИК-лампы для ночного видения:
В первой статье я расскажу об установке необходимых драйверов OpenCV 3 и пакетов для поддержки Raspberry Pi Camera Board в ROS.
Установка драйвера камеры «рыбий глаз» на Raspberry Pi 3
Итак, начнем.Подключимся к RPi 3 через SSH:
Параметр -Y позволяет решить проблему получения ошибки «Не удалось подключиться к дисплею» при запуске некоторых графических приложений (Qt, окна с изображением из программы OpenCV).ssh -Y <user>@<ip>
Вы можете узнать больше Здесь .
Во-первых, нам нужно включить поддержку драйвера камеры в настройках raspi-config Raspberry Pi. В Raspbian эта служба уже включена, в Ubuntu ее необходимо установить: sudo apt-get install raspi-config
Давайте запустим raspi-config: sudo raspi-config
Выберите опцию «Интерфейс», затем Pi Camera и нажмите «Да».
И, наконец, Финиш.
Проверим, что поддержка камеры включена с помощью утилиты raspistill: raspistill -o mypicture.jpg
Если вы получаете сообщение об ошибке «Камера не обнаружена.
Пожалуйста, внимательно проверьте, правильно ли установлен модуль камеры».
Проверьте, правильно ли вы подключили камеру к Raspberry Pi. Также можно перезагрузить систему (мне это помогло).
Попробуем записать видео: raspivid -o myvideo.h264
Я получил изображение на мониторе, подключенном к Raspberry Pi. Мне не удалось заставить всплывающее окно появиться на моем компьютере при подключении через ssh.
Использование OpenCV 3 с камерой «рыбий глаз» на Raspberry Pi
Установите библиотеку picamera[array]: pip install "picamera[array]"
Давайте установим необходимые зависимости для OpenCV. Сначала давайте обновим менеджер пакетов apt и обновим предустановленные пакеты:
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) были вынесены в отдельный репозиторий contrib. Теперь, чтобы использовать дескрипторы функций, нам нужно отдельно загрузить репозиторий contrib.
Теперь мы наконец готовы установить 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: make -j4
При компиляции я получил ошибку «Ошибка сегментации».
Если вы получили ту же ошибку, запустите make clean, чтобы удалить результаты компиляции, и запустите make с одним ядром: make clean
make
Процедура компиляции заняла у меня 3 часа.
Наконец, давайте установим OpenCV 3: sudo make install
sudo ldconfig
Здесь есть интересный нюанс, связанный с ROS Kinetic. Если вы устанавливаете ROS Kinetic, ROS добавляет путь к библиотекам Python (/opt/ros/kinetic/lib/python2.7/dist-packages) к системному пути при запуске исходного файла /opt/ros/kinetic/setup. Баш-команда.
Это приводит к некоторым проблемам при последующей установке 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 в 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. В следующий раз мы попробуем обнаружение объектов.
Удачи всем в экспериментах и до новых встреч! Теги: #Raspberry Pi #Робототехника #компьютерное зрение #рыбий глаз
-
Microsoft Наносит Удар По Шпионскому По!
19 Oct, 24 -
Информационная Война С Блогерами
19 Oct, 24 -
Космический Наблюдательный Аппарат, Часть 2
19 Oct, 24 -
Обзор Guruplug Server Plus
19 Oct, 24 -
Зачем Нужен Интернет На Кпк?
19 Oct, 24