
Esta instrução é sobre como conectar uma câmera USB a um Raspberry Pi ou BeagleBone Blue e usá-la com o ROS (Robot Operating System) - para ler dados da câmera via ROS image_view e até mesmo transmitir o fluxo de vídeo para um navegador da web!
No final do vídeo, há uma demonstração no robô EduMip.
1) Como bônus, criaremos um sistema ROS distribuído.
2) O aplicativo Roscore e o aplicativo para visualizar imagens funcionarão no PC (mestre) e no nó da câmera no Raspberry Pi (escravo).
3) Para configurar o mestre e o escravo, precisamos atualizar as variáveis de ambiente nos dois dispositivos.
4) No assistente: encontre o endereço IP do dispositivo. Para ethernet, net_dev pode ser enpXXs0 ou ethX:
$ ifconfig {net_dev} ifconfig enp61s0 ifconfig
5) Use o endereço IP como o valor para a variável ROS_IP:
$ export ROS_IP="10.42.0.1"
6) E para ROS_MASTER_URI:
$ export ROS_MASTER_URI="http://10.42.0.1:11311"
7) Se você deseja usar esses valores para sessões futuras, salve os valores em um arquivo .bashrc no diretório inicial:
$ echo 'export ROS_IP="10.42.0.1"' >> ~/.bashrc $ echo 'export ROS_MASTER_URI="http://10.42.0.1:11311"' >> ~/.bashrc
8) Conecte-se ao Raspberry Pi via ssh:
$ ssh {user}@{raspberry_ip}
9) Para RPi, como escravo, adicione o endereço IP mestre para ROS_MASTER_URI
10) E o endereço IP do Raspberry Pi para ROS_IP
$ export ROS_IP="10.42.0.65" $ export ROS_MASTER_URI="http://10.42.0.1:11311" $ echo 'export ROS_IP="10.42.0.65"' >> ~/.bashrc $ echo 'export ROS_MASTER_URI="http://10.42.0.1:11311"' >> ~/.bashrc
11) Agora é hora de conectar a câmera USB.
12) Verifique se a câmera é reconhecida pelo sistema:
$ lsusb $ ls /dev | grep video*
13) Instale o nó usb_cam ROS com as dependências necessárias:
$ sudo apt install ros-kinetic-usb-cam
14) O host usb_cam já possui um arquivo de inicialização de teste:
$ cat /opt/ros/kinetic/share/usb_cam/launch/usb_cam-test.launch
15) Antes de iniciar este arquivo, vamos executar o kernel do ROS no master:
$ roscore
16) E agora execute o nó usb_cam no slave:
$ roslaunch usb_cam usb_cam-test.launch
17) Agora podemos ver os tópicos criados. Podemos verificá-los no mestre ou no escravo.
18) Mova o processo atual para o segundo plano usando CTRL + Z e execute o comando bg para continuar executando em segundo plano. (na versão Ubuntu não é desktop completo e sem tela, basta iniciar outro terminal)
19) Para ver os tópicos no terminal:
$ rostopic list
20) ... ou na interface gráfica:
$ rqt_graph
21) Lendo dados da câmera usando image_view:
$ rosrun image_view image_view image:=/usb_cam/image_raw

22) Ou usando rqt_image_view
23) Coloque a tarefa em segundo plano em primeiro plano:
$ fg
24) O experimento mais recente até o momento é o streaming na web
25) Instalando o servidor de vídeo da web host ROS:
$ sudo apt install ros-kinetic-web-video-server
26) Para fazer isso corretamente, crie uma área de trabalho para catkin para nosso arquivo de inicialização personalizado:
$ mkdir -p ~/rosvid_ws/src $ cd ~/rosvid_ws $ catkin_make $ source devel/setup.bash
27) Em seguida, crie o pacote ROS:
$ cd src $ catkin_create_pkg vidsrv std_msgs rospy roscpp
28) Crie um arquivo de inicialização usando o nano, vim, etc .:
$ mkdir -p vidsrv/launch $ nano vidsrv/launch/vidsrv.launch
publique o
código daquiNo Beaglebone Blue com uma câmera USB A4Tech, esse código funcionou para mim:
<launch> <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" > <param name="video_device" value="/dev/video0" /> <param name="image_width" value="352" /> <param name="image_height" value="288" /> <param name="pixel_format" value="mjpeg" /> <param name="camera_frame_id" value="usb_cam" /> <param name="io_method" value="mmap"/> </node> <node name="web_video_server" pkg="web_video_server" type="web_video_server" \ /> </launch>
29) Colete o pacote:
$ cd .. $ catkin_make
30) Execute o kernel do ROS no master novamente:
$ roscore
31) E execute o arquivo de inicialização criado:
$ roslaunch vidsrv vidsrv.launch
32) A porta padrão do servidor de vídeo na web é 8080
33) Abrir URL no navegador da web: {RPi_IP}: 8080
Links para documentação:
→
Nó do servidor de vídeo→
nó da câmera USB→
visualizador de imagens rqt→
Nó Módulo da câmera Raspberry PiAs câmeras USB podem ser usadas praticamente com drivers para Linux, você também pode usar o link do Raspberry Pi Camera Module da mesma forma acima.
Um exemplo de como isso funciona no BeagleBone Blue com uma câmera A4Tech:
Procure uma placa tripla em vídeo em uma câmera USB BealeBone Blue (o algoritmo de reconhecimento funciona em um laptop com ROS mestre).
