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