Аппаратное кодирование видео потока на камере Logitech C920 и отправка его в ROS по wifi с задержкой менее 0.2 секунды

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


В этой инструкции мы отправим аппаратно закодированный h264 видео поток камеры Logitech C920 переданный c BeagleBone Blue по wifi сети на ноутбук, а затем примем его в узел ROS gscam и произведем поиск и распознавание изображений карт таро и бутылки кетчупа по пути движения робота EduMIP. Это продолжение серии моих статей, в последней мы остановились на том что через gstreamer отправили видео на ноутбук. В ROS есть пакет который умеет принимать видео от gstreamer, который называется gscam, вот документация по нему и исходный код. Нам нужна последняя версия gscam c поддержкой gstreamer-1.0, поэтому будем устанавливать из последней версии исходного кода.
cd catkin_ws/src git clone https://github.com/ros-drivers/gscam cd .. catkin_make -DGSTREAMER_VERSION_1_x=On

Теперь нам нужно создать launch файл и вписать туда команду gstreamer которая отправит видео в ffmpegcolorspace.

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

Итоговый файл ~/catkin_ws/src/gscam/examples/streamc920.launch будет выглядеть так:

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

Теперь если мы его запустим:

roslaunch gscam streamc920.launch

Появится оно видео потока с камеры, теперь мы в ROS имеем это видео как topic creative_cam/image_raw.

Из одного из прошлых уроков запустим поиск и распознавание изображений карт изменив топик:
rosrun find_object_2d find_object_2d image:=/creative_cam/image_raw

Результат испытаний робота EduMIP на импровизированной трассе вы можете видеть в видео в начале статьи. Не смотря на тряску из-за балансировки робота, изображение все равно удается распознавать, но на трехколесном или четырех колесном роботе я думаю все будет гораздо лучше.

Также я соединил ноутбук с wifi роутером витой парой и понизил битрейт до 1 Мбит/с с ключевыми кадрами раз в секунду, что уменьшило задержку передачи видео до 0.2 секунды.

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

Для тех кто хочет в живую посмотреть на робота буду 7 июля выступать с проектом EduMIP на DIYorDIE Meetup в Москве.

Источник: habr.com

Комментарии: