Hardware que codifica um fluxo de vídeo em uma câmera Logitech C920 e envia para ROS via wifi com um atraso de menos de 0,2 segundos


Nesta instrução, enviaremos um fluxo de vídeo h264 codificado por câmera Logitech C920 transmitido do BeagleBone Blue via rede wifi para um laptop, depois o levaremos ao nó ROS gscam e procuraremos e reconheceremos imagens de cartões de tarô e uma garrafa de ketchup ao longo do caminho do robô EduMIP.

Esta é a continuação de uma série de meus artigos, nos últimos focamos no fato de que, por meio do gstreamer, enviamos o vídeo para o laptop .

O ROS possui um pacote que pode receber vídeo do gstreamer, chamado gscam, aqui está a documentação e o código fonte .

Como precisamos da versĂŁo mais recente do gscam com suporte ao gstreamer-1.0, instalaremos a partir da versĂŁo mais recente do cĂłdigo-fonte.

cd catkin_ws/src git clone https://github.com/ros-drivers/gscam cd .. catkin_make -DGSTREAMER_VERSION_1_x=On 

Agora, precisamos criar um arquivo de inicialização e inserir o comando gstreamer, que enviará o vídeo para ffmpegcolorspace.

 -v udpsrc port=6666 ! application/x-rtp, encoding-name=H264 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! ffmpegcolorspace 

O arquivo resultante ~ / catkin_ws / src / gscam / examples / streamc920.launch terá a seguinte aparência:

 <launch> <!-- Set this to your camera's name --> <arg name="cam_name" value="creative_cam" /> <!-- Start the GSCAM node --> <env name="GSCAM_CONFIG" value="-v udpsrc port=6666 ! application/x-rtp, encoding-name=H264 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! ffmpegcolorspace" /> <node pkg="gscam" type="gscam" name="$(arg cam_name)"> <param name="camera_name" value="$(arg cam_name)" /> <param name="camera_info_url" value="package://localcam/calibrations/${NAME}.yaml" /> <remap from="camera/image_raw" to="$(arg cam_name)/image_raw" /> </node> <!-- Provide rectification --> <node pkg="image_proc" type="image_proc" name="creative_image_proc" ns="$(arg cam_name)" /> <!-- View the raw and rectified output --> <node pkg="image_view" type="image_view" name="creative_view" > <remap from="image" to="/$(arg cam_name)/image_raw" /> </node> </launch> 

Agora, se o executarmos:

 roslaunch gscam streamc920.launch 

Ele receberá um fluxo de vídeo da câmera, agora em ROS, temos este vídeo como tópico creative_cam / image_raw.

A partir de uma das lições anteriores, iniciaremos a pesquisa e o reconhecimento de imagens de mapas alterando o tópico:

 rosrun find_object_2d find_object_2d image:=/creative_cam/image_raw 

Você pode ver o resultado do teste do robô EduMIP em uma faixa improvisada no vídeo no início do artigo. Apesar do tremor devido ao equilíbrio do robô, a imagem ainda pode ser reconhecida, mas em um robô de três ou quatro rodas, acho que tudo ficará muito melhor.

Também conectei o laptop a um roteador de par trançado wifi e reduzi a taxa de bits para 1 Mbps com quadros-chave uma vez por segundo, o que reduziu o atraso da transmissão de vídeo para 0,2 segundos.

 gst-launch-1.0 uvch264src initial-bitrate=1000000 average-bitrate=1000000 iframe-period=1000 name=src auto-start=true src.vidsrc ! video/x-h264,width=160,height=120,framerate=30/1 ! h264parse ! rtph264pay ! udpsink host=192.168.1.196 port=6666 



Para quem quiser ver o robĂ´ ao vivo, no dia 7 de julho, falarei com o projeto EduMIP no DIYorDIE Meetup em Moscou.

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


All Articles