Hardware que codifica una transmisión de video en una cámara Logitech C920 y la envía a ROS a través de wifi con un retraso de menos de 0.2 segundos


En esta instrucción, enviaremos un flujo de video h264 codificado por cámara Logitech C920 transmitido desde BeagleBone Blue a través de una red wifi a una computadora portátil, luego lo llevaremos al nodo gscam ROS y buscaremos y reconoceremos imágenes de cartas de tarot y una botella de salsa de tomate a lo largo del camino del robot EduMIP.

Esta es una continuación de una serie de mis artículos, en el último nos centramos en el hecho de que a través de gstreamer enviamos el video a la computadora portátil .

ROS tiene un paquete que puede recibir video de gstreamer, que se llama gscam, aquí está la documentación y el código fuente .

Necesitamos la última versión de gscam con soporte para gstreamer-1.0, por lo que instalaremos desde la última versión del código fuente.

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

Ahora necesitamos crear un archivo de inicio e ingresar el comando gstreamer allí que enviará el video a ffmpegcolorspace.

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

El archivo resultante ~ / catkin_ws / src / gscam / examples / streamc920.launch se verá así:

 <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> 

Ahora si lo ejecutamos:

 roslaunch gscam streamc920.launch 

Recibirá una transmisión de video de la cámara, ahora en ROS tenemos este video como tema creative_cam / image_raw.

A partir de una de las lecciones anteriores, comenzaremos la búsqueda y el reconocimiento de las imágenes del mapa cambiando el tema:

 rosrun find_object_2d find_object_2d image:=/creative_cam/image_raw 

Puede ver el resultado de probar el robot EduMIP en una pista improvisada en el video al comienzo del artículo. A pesar del temblor debido al equilibrio del robot, la imagen aún se puede reconocer, pero en un robot de tres ruedas o de cuatro ruedas, creo que todo será mucho mejor.

También conecté la computadora portátil a un enrutador wifi de par trenzado y bajé la velocidad de bits a 1 Mbps con fotogramas clave una vez por segundo, lo que redujo el retraso de transmisión de video a 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 aquellos que quieran ver el robot en vivo, el 7 de julio hablaré con el proyecto EduMIP en DIYorDIE Meetup en Moscú.

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


All Articles