Como usar uma câmera USB com ROS em um Raspberry Pi ou BeagleBone Blue - para transmitir vídeo para um computador grande



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 daqui

No Beaglebone Blue com uma câmera USB A4Tech, esse código funcionou para mim:

 <launch> <!-- This node description you can take from usb_cam-test.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> <!-- This node will launch web video server --> <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 Pi

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

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


All Articles