Boa tarde, queridos leitores de Habr. Alguns anos atrás,
escrevi sobre o uso da placa da câmera Raspberry Pi no Raspberry Pi em conjunto com o ROS. Neste e no próximo artigo, gostaria de falar sobre o uso de uma câmera grande angular, como olho de peixe, no Raspberry Pi 3 com o Ubuntu 16.04 instalado. Para quem é interessante, pergunto sob kat.
Para iniciantes, por que câmera de olho de peixe? Eu já vi muitos artigos sobre o uso de câmeras de grande angular para odometria visual e SLAM. Graças ao maior ângulo de visão do olho de peixe, a câmera melhora a precisão da odometria visual. Então, eu queria experimentar uma dessas câmeras com Raspberry Pi com suporte a ROS. Comprei uma câmera com um ângulo de 160 graus no
dx.com por US $ 28. O kit da câmera também inclui duas lâmpadas IR para visão noturna:

No primeiro artigo, falarei sobre a instalação dos drivers necessários, OpenCV 3 e pacotes para dar suporte à placa de câmera Raspberry Pi no ROS.
Instalando o driver da câmera olho de peixe no Raspberry Pi 3
Então, vamos começar. Conecte-se ao RPi 3 via SSH:
ssh -Y <user>@<ip>
O parâmetro -Y resolve o problema de obter o erro “NĂŁo foi possĂvel conectar Ă exibição” ao iniciar alguns aplicativos da GUI (Qt, janela com a imagem do programa OpenCV). Saiba mais
aqui .
Primeiro, precisamos ativar o suporte ao driver da câmera nas configurações raspi-config do Raspberry Pi. No Raspbian, este serviço já está ativado, no Ubuntu você precisa instalá-lo:
sudo apt-get install raspi-config
Execute raspi-config:
sudo raspi-config
Selecione a opção Interface, depois a Câmera Pi e clique em Sim. E finalmente terminar.
Verifique se o suporte à câmera está ativado usando o utilitário raspistill:
raspistill -o mypicture.jpg
Se você receber o erro “A câmera não foi detectada. Verifique cuidadosamente se o módulo da câmera está instalado corretamente ”verifique se você conectou a câmera corretamente ao Raspberry Pi. Você também pode reiniciar o sistema (isso me ajudou).
Vamos tentar gravar um vĂdeo:
raspivid -o myvideo.h264
Eu tenho uma imagem em um monitor conectado a um Raspberry Pi. NĂŁo consegui obter um pop-up no meu computador ao conectar via ssh.

Usando o OpenCV 3 com uma câmera olho de peixe em um Raspberry Pi
Instale a biblioteca picamera [array]:
pip install "picamera[array]"
Instale as dependências necessárias para o OpenCV. Primeiro, atualize o gerenciador de pacotes apt e atualize os pacotes pré-instalados:
sudo apt-get update sudo apt-get upgrade
Instale algumas bibliotecas:
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
Vamos instalar o OpenCV 3 a partir da fonte.
cd ~ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip unzip opencv.zip
Também precisamos fazer o download do repositório opencv_contrib:
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip unzip opencv_contrib.zip
O fato é que nos pacotes OpenCV 3 com descritores de recursos (como SIFT e SURF) foram movidos para um repositório de contribuição separado. Agora, para usar os descritores de tags, precisamos fazer o download do repositório contrib separadamente.
Agora estamos finalmente prontos para instalar o OpenCV. Podemos executar o cmake para compilar o OpenCV com os parâmetros necessários:
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 ..
Se o cmake teve ĂŞxito sem erros, execute make:
make -j4
Ao compilar, recebi o erro "Falha na segmentação". Se você receber o mesmo erro, faça clean para remover os resultados da compilação e faça com um kernel:
make clean make
Levei 3 horas para compilar. Por fim, instale o OpenCV 3:
sudo make install sudo ldconfig
Há uma nuance interessante relacionada ao ROS Kinetic. Se você instalar o Rin Kinetic, o ROS adicionará o caminho às bibliotecas Python (/opt/ros/kinetic/lib/python2.7/dist-packages) ao caminho do sistema ao executar a fonte de comando /opt/ros/kinetic/setup.bash. Isso leva a alguns problemas durante a instalação subsequente do OpenCV da fonte (mais sobre isso está escrito
aqui ). Para resolver o problema, remova a linha 'source /opt/ros/kinetic/setup.bash' do arquivo .bashrc. Não se esqueça de executar:
source ~/.bashrc
Vamos verificar se o OpenCV agora está corretamente vinculado a partir do Python.
Crie uma pasta para o projeto e um script de teste simples:
mkdir PiCamera && cd PiCamera vim test_cam.py
Adicione o seguinte cĂłdigo ao arquivo:
from picamera.array import PiRGBArray from picamera import PiCamera import time import cv2
Execute o script:
python test_cam.py
Se for bem-sucedido, obtemos algo assim:

Vamos agora tentar gravar o vĂdeo da câmera.
vim test_videom.py
Adicione o seguinte cĂłdigo ao arquivo:
Vamos tentar algo mais interessante, por exemplo, adicionar detecção de borda. Estou usando o detector de Kenny aqui (código retirado
daqui ):
from picamera.array import PiRGBArray from picamera import PiCamera import time import cv2 import numpy as np
Aqui está o resultado da execução do programa:

Adicionando suporte à câmera Raspberry Pi no ROS
Agora vamos adicionar a capacidade de trabalhar com uma câmera olho de peixe para o Raspberry Pi da ROS. Primeiro, instale o driver V4L2 necessário para a câmera Raspberry Pi (você pode ler mais
aqui ). Execute o comando:
sudo rpi-update
e reinicie o sistema. Agora adicione o driver:
sudo modprobe bcm2835-v4l2
Verifique se o dispositivo / dev / video0 está disponĂvel:
ll /dev/video0
A saĂda será assim:
crw-rw----+ 1 root video 81, 0 Mar 17 15:47 /dev/video0
Faça o download do pacote usb_cam:
sudo apt-get install ros-kinetic-usb-cam source /opt/ros/kinetic/setup.bash
Execute o mestre do ROS e rqt_image_view:
roscore roslaunch usb_cam usb_cam-test.launch rosrun rqt_image_view rqt_image_view
Selecione o tĂłpico / usb_cam / image_raw. Temos a seguinte imagem:

Agora a câmera olho de peixe pode ser usada com qualquer pacote de visão computacional no ROS. Da próxima vez, tentaremos detectar objetos. Boa sorte a todos nos experimentos e até breve!