Hardware-Codierung eines Videostreams auf einer Logitech C920-Kamera und Senden an ROS über WLAN mit einer Verzögerung von weniger als 0,2 Sekunden


In dieser Anleitung senden wir einen von der Kamera codierten h264-Videostream Logitech C920, der von BeagleBone Blue über ein WLAN-Netzwerk an einen Laptop übertragen wird. Anschließend bringen wir ihn zum ROS-gscam-Knoten und suchen und erkennen Bilder von Tarotkarten und einer Ketchup-Flasche auf dem Weg des EduMIP-Roboters.

Dies ist eine Fortsetzung einer Reihe meiner Artikel. Im letzten haben wir uns darauf konzentriert, dass wir das Video über gstreamer an den Laptop gesendet haben .

ROS hat ein Paket, das Videos von gstreamer empfangen kann. Es heißt gscam. Hier finden Sie die Dokumentation dazu und den Quellcode .

Wir benötigen die neueste Version von gscam mit Unterstützung für gstreamer-1.0, daher werden wir von der neuesten Version des Quellcodes installieren.

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

Jetzt müssen wir eine Startdatei erstellen und dort den Befehl gstreamer eingeben, der das Video an ffmpegcolorspace sendet.

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

Die resultierende Datei ~ / catkin_ws / src / gscam / examples / streamc920.launch sieht folgendermaßen aus:

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

Nun, wenn wir es ausführen:

 roslaunch gscam streamc920.launch 

Es wird ein Videostream von der Kamera empfangen, jetzt haben wir in ROS dieses Video als Thema creative_cam / image_raw.

Aus einer der vorherigen Lektionen werden wir die Suche und Erkennung von Kartenbildern starten, indem wir das Thema ändern:

 rosrun find_object_2d find_object_2d image:=/creative_cam/image_raw 

Das Ergebnis des Testens des EduMIP-Roboters auf einer improvisierten Spur sehen Sie im Video am Anfang des Artikels. Trotz des Verwackelns aufgrund des Auswuchtens des Roboters kann das Bild immer noch erkannt werden, aber bei einem dreirädrigen oder vierrädrigen Roboter denke ich, dass alles viel besser sein wird.

Ich habe den Laptop auch an einen WLAN-Twisted-Pair-Router angeschlossen und die Bitrate mit Keyframes einmal pro Sekunde auf 1 Mbit / s gesenkt, wodurch sich die Verzögerung der Videoübertragung auf 0,2 Sekunden verringerte.

 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 



Für diejenigen, die den Roboter live sehen wollen, werde ich am 7. Juli mit dem EduMIP-Projekt beim DIYorDIE Meetup in Moskau sprechen.

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


All Articles