Использование Камеры «Рыбий Глаз» На Raspberry Pi 3 С Ros. Часть 1

Добрый день, уважаемые читатели Хабра.

Несколько лет назад я написал об использовании платы камеры Raspberry Pi на Raspberry Pi в сочетании с ROS. В этой и следующей статье я хотел бы поговорить об использовании широкоугольной камеры типа «рыбий глаз» на Raspberry Pi 3 с установленной Ubuntu 16.04. Кому интересно, смотрите кат. Прежде всего, почему камера «рыбий глаз»? Я видел много статей об использовании широкоугольных камер для визуальной одометрии и SLAM. Благодаря большему углу обзора камера «рыбий глаз» повышает точность визуальной одометрии.

Поэтому я хотел попробовать одну такую камеру с Raspberry Pi с поддержкой ROS. Я купил камеру с углом обзора 160 градусов.

dx.com за 28 долларов.

В комплект камеры также входят две ИК-лампы для ночного видения:

Использование камеры «рыбий глаз» на Raspberry Pi 3 с ROS. Часть 1

В первой статье я расскажу об установке необходимых драйверов OpenCV 3 и пакетов для поддержки Raspberry Pi Camera Board в ROS.



Установка драйвера камеры «рыбий глаз» на Raspberry Pi 3

Итак, начнем.

Подключимся к RPi 3 через SSH:

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
   

ssh -Y <user>@<ip>

Параметр -Y позволяет решить проблему получения ошибки «Не удалось подключиться к дисплею» при запуске некоторых графических приложений (Qt, окна с изображением из программы OpenCV).

Вы можете узнать больше Здесь .

Во-первых, нам нужно включить поддержку драйвера камеры в настройках 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.

Использование камеры «рыбий глаз» на Raspberry Pi 3 с ROS. Часть 1



Использование 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

В случае успеха мы получим что-то вроде этого:

Использование камеры «рыбий глаз» на Raspberry Pi 3 с ROS. Часть 1

Давайте теперь попробуем записать видео с камеры.



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 3 с ROS. Часть 1



Добавление поддержки камеры 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. Мы получим вот такую картинку:

Использование камеры «рыбий глаз» на Raspberry Pi 3 с ROS. Часть 1

Теперь камеру «рыбий глаз» можно использовать с любым пакетом компьютерного зрения в ROS. В следующий раз мы попробуем обнаружение объектов.

Удачи всем в экспериментах и до новых встреч! Теги: #Raspberry Pi #Робототехника #компьютерное зрение #рыбий глаз

Вместе с данным постом часто просматривают: