Пользователь
0,0
рейтинг
5 октября 2012 в 23:34

Администрирование → Raspberry Pi. Передача видео для дистанционного управления из песочницы

Передача видео для дистанционного управления может использоваться во многих проектах связанных с управление различными устройствами. То есть это можно прикрутить к колесной базе, к квадрокоптеру, к телу гуманоидного робота и тд. Raspberry Pi(далее малина) в данном смысле удобна тем что позволяет использовать для этого не какие то специализированные устройства типа FPV, а обычные устройства которые у многих уже имеются в наличии, а так же упрощает и схемы их включения и сложность написания программ для них, не говоря уже о стоимости проектов.




Удаленный контроль

Недавно заполучил малину, в Питере их уже в магазинах продают так что ни ждать, ни заказывать не надо, хотя чуть дороже получается. Поскольку монитора с HDMI у меня нет, а роутер есть, то как вариант управления был выбран remote controle через ssh порт. Это позволяет с любого компа, включенного в локальную сеть (как вариант, но более сложный — глобальную) управлять малиной.

Примечание. На компьютере, с которого я управляют малиной, стоит Ubuntu. Хотя для Windows’а все это также остается в силе.

Наладить подключение достаточно просто. В Debian образе, скачиваемом с офсайта, эта функция по умолчанию включена. И единственное что остается — узнать ip адрес и ввести команду подключения. Для того, что бы узнать адрес, можно либо зайти в настройки роутера(обычно ip 192.168.0.1), либо в консоли вести команду
$ nmap -p 22 --open -sV 192.168.0.1/24
которая выдаст кучу текста, среди которой будут указанны адреса подключенных в сеть устройств и состояния их SSH порта.
Далее для открытия удаленного доступа
$ ssh -p 22 pi@192.168.0.17
где pi — это имя учетной записи, а после @ адрес малины.

Потом попросят ввести пароль и если он правильный то консоль начнет общаться с вами от лица малины.


Более подробно о настройке удаленного доступа можно почитать на
http://www.penguintutor.com/linux/raspberrypi-headless
http://www.penguintutor.com/linux/tightvnc

На второй ссылке описывается как получить удаленный доступ к графическому интерфейсу. Это выглядит интересно — на экране своего монитора видишь рабочий стол малины. Но из-за того что сигнал идет по сетке то появляется задержка и мышка и прочее управление идет с запаздыванием. Так что в предустановленную там «змейку» не поиграть.

Как имхо, малину в качестве десктопа использовать и нет смысла, все её плюсы теряются. Маловероятно, что у кого то настолько маленькая комната что в ней рядом с монитором некуда поставить системный блок, напряжения в розетке хватает только что бы заряжать сотовый телефон или денег не хватает даже на подержанный персональный компьютер. А минусы наоборот становятся очевидными — малая относительно настольных компьютеров производительность и недружелюбная операционная система.

Подключение Веб камеры и передача картинки

Используемая камера Logitech c270 встала без проблем. Однако дальше ждало разочарование так как заявленное на малине аппаратное ускорения кодирования видео отсутствовало. То есть оно есть, но кодеки для него отсутствует. А без него, программно, сжатие идет со скорость 2-5 fps и дает 100% загрузку машины. В итоге без подвешивания системы идет только необработанный(raw) поток. То есть для записи (по прикидкам) при разрешение 640х480 на одну минуту уйдут 100-200 мб. Но пропускной способности локальной сети и wi-fi хватает так что пока что можно и так его гнать, надеясь что в ближайшее время кодеки все таки появятся. Так что идем дальше.

Долгих экспериментов и поиска нужных заклинаний описывать не буду. В итоге все свелось к использованию gstreamer’а. Вкратце, это мультимедийный фреймворк с интерфейсом в виде командной строки. Так же есть библиотека которая дает возможность программно использовать его компоненты, что можно использовать в дальнейшем для интеграции в собственные программы.

Для его установки на малине надо ввести
$sudo apt-get install gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-tools

(если их не будет, возможно номер версии сменился или другое, то удобно воспользоваться командой «$apt-cache search gstreamer» и установить что-то с похожими именами)

Далее на малине вводится
$sudo gst-launch-0.10 v4l2src device=/dev/video0 ! 'video/x-raw-yuv,width=640,height=480, framerate=20/1'! ffmpegcolorspace ! rtpvrawpay ! udpsink host=192.168.0.50 port=4000 sync=false

где
device=/dev/video0 — источник картинки
'video/x-raw-yuv,width=640,height=480, framerate=20/1' — формат
udpsink host=192.168.0.50 port=4000 sync=false — адрес куда посылаем

Видео передается по протоколу rtp. Этот протокол работает на транспортном уровне и используется при передачи трафика реального времени. Он может использовать как TCP, так и UDP, но так как TCP повторяет не дошедшие сообщения, которые уже не нужны то в данном случае используется UDP.
На стороне приемника надо ввести
$ gst-launch udpsrc caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:0, depth=(string)8, width=(string)640, height=(string)480, ssrc=(uint)1825678493, payload=(int)96, clock-base=(uint)4068866987, seqnum-base=(uint)24582" port=4000 ! queue ! rtpvrawdepay ! queue ! ffmpegcolorspace ! autovideosink

В итоге на стороне приемника появится картинка.

Для любителей рекурсии: эта скриншот рабочего стола нетбука, который принимает картинку от малины, которая берет её от веб камеры, которая направлена на малину лежащею на нетбуке на экране которого …

Картинка, полученная таким образом, по качеству идентична полученной напрямую без сети от веб камеры, так как никаких сжатий или трансформаций не применялось.
На следующем скриншоте показана загрузка канала, слева при передачи картинки 640х480, затем пауза и 320х240.

Однако, поскольку картинка идет не напрямую, а через сеть, то появляется задержка сигнала. Далее была проведена серия нехитрых экспериментов, по которым можно оценить задержку сигнала.



Для конфигурации малина->LAN кабель->роутер Dlink-300->wi-fi->нетбук задержки составили
для разрешения 640х480 0.5 секунд
для разрешения 320х240 0.2 секунды

Много это или мало зависит от целей использования. Для прямого управления квадракоптера (без дополнительной стабилизации) или других систем испытывающих какие то возмущения выводящие их из равновесия — это много. Но тем не менее многие вещами при такой задержки управлять можно, как пример — луноходы, которые управлялись вообще с 2х минутной задержкой.

UPD 09.10.2012
В комментариях к данному посту было предложено воспользоваться встроенным в саму камеру аппаратным сжатием и передавть картинку в формате mjpeg.
После некоторого поиска нужных заклинаний, команда на малине выглядит
gst-launch-0.10 v4l2src device=/dev/video0 ! 'image/jpeg,width=320,height=240, framerate=10/1' ! rtpjpegpay ! udpsink host=192.168.0.50 port=4000 sync=false

а на компьютере принимающем картинку
gst-launch udpsrc caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG, ssrc=(guint)469657143, payload=(int)96, clock-base=(guint)2841649723, seqnum-base=(guint)39869" port=4000 ! rtpjpegdepay ! jpegdec ! autovideosink

В результате при разрешении 640х480 трафик составил порядка 300 — 800 кбайт/сек, а задержка 0.2-0.3 секунды.

Подключение wi-fi адаптера

Адаптер TP-Link WN722N. В целом установка адаптера не представляет ничего сложного, процесс хорошо описан здесь
http://elinux.org/RPi_Peripherals
за маленьким исключением исключение, что бы найти которое ушло некоторое время. Пароль надо вводить в уже зашифрованном виде. Спасибо Ubuntu
http://help.ubuntu.ru/wiki/настройка_сети_вручную
Для этого надо ввести
$ wpa_passphrase <имя_точки_доступа> <ascii_ключ>

В итоге после всех выяснений файл /etc/network/interfaces у меня сейчас выглядит так. Эти настройки верны wpa-psk, если использовать wpa2 то настройки будут другие, описание которых можно найти в ссылке на Ubuntu.
auto lo

iface lo inet loopback
iface eth0 inet dhcp

# The wireless interface
iface wlan0 inet static

address 192.168.0.40
gateway 192.168.0.1
netmask 255.255.255.0
wpa-ap-scan 1
wpa-proto WPA
wpa-pairwise TKIP
wpa-group TKIP
wpa-key-mgmt WPA-PSK
wpa-ssid name
wpa-psk 7d7cf754caЦензураf04b1b0ef6f15e21ed1292168950d20
wpa-driver wext

auto wlan0

После настройки беспроводного соединения на стороне компьютера надо сменить ip адрес и общение будет происходить так же как и при проводном соединение.

Далее были проведены тесты на время задержки для конфигурации:
малина->адаптер->wi-fi->роутер Dlink-300->wi-fi->нетбук
(а так же для малина->адаптер->wi-fi->роутер Dlink-300-> LAN кабель ->нетбук )
для разрешения 640х480 0.8 секунд
для разрешения 320х240 0.2-0.3 секунды

По тому что время задержке увеличилось можно сделать предположение что либо адаптер, либо юсб соединение, либо драйвер вносят задержки, которых нет при соединение через LAN. Так что там где габариты позволяют лучше вместо адаптера соединять малину через LAN c роутером.

LiPo


Как довесок, что бы отвязать систему от сети питания собрал преобразователь для подключения к LiPo аккумулятору. Дело в том что малина запитывается от 5В плюс-минус 25%, так что напрямую подключать аккумуляторы с другим напряжением нельзя, однако при помощи небольшого девайса это можно исправить.
Схема у него очень простая и нашел я её здесь
http://spydamonky.hackhut.com/2012/07/05/lipo-raspberry-pi-power-adapter/
Детали схемы я нашел в ближайшем специализированном магазине, а microUSB штекер в компьютерном магазине – купил самый дешевый кабель и вырезал из него.

В первом варианте как и на схеме был один регулятор напряжения, но он сильно грелся, так как максимальный ток там 1А, а через него шло минимум 700мА, то я решил ему в параллель поставить второй, что должно в вдвое увеличить максимальный ток. Однако все равно греется сильно. Видимо надо будет какой то радиатор еще прикрутить.
Вообще, LIPo аккумуляторы для таких целей лучше не использовать так как в случае разряда ниже допустимого уровня они необратимо выходит из строя, а этот момент здесь ни как не ловится. То есть устройство работает, работает, а когда перестает аккумулятор уже умер. Если под рукой есть другой тип аккумуляторов то лучше их использовать.


П.С.
Далее как цель поставить это все на какую то платформу и использовать уже дальше.
Хуобонен Алексей @ajhhh
карма
7,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (39)

  • +3
    radikal %)
    • 0
      Давно посты ни куда не писал, так что первое что пришло на ум.
      • +3
        Отредактировано. Как подсказали тут, фотографии перезалиты с radikal на habrastorage.org/
  • 0
    Честно говоря, не вижу профита по сравнению с аналоговым передатчиком. У аналоговых и сигнал помощнее, и к помехам они намного более лояльно относятся.
    • +1
      Профит в том что можно у многих веб камера и wi-fi устройства уже есть в наличии. То есть не надо тратиться дополнительно. Если рассматривать аналоговое решение, то надо было бы дополнительно купить: камеру, передатчик, приемник, плату видео захвата.
  • +1
    А в ем разница между подключениями этого железа не к рапсбери, а к другому компьютеру? Почему многие описывают как что-то подключить к нему
    • +1
      Raspberry Pi дешевая (~1000 руб.) компактная и легкая — квадрокоптеру ее проще поднять, чем, к примеру, нетбук.
    • 0
      На второй вопрос, это как тема «почему столько шума вокруг arduino — это ведь простой AVR микроконтроллер, припаянный к плате».

      А первый, согласен, с точке зрения ПО это обычный компьютер — это одно из его преимуществ. Но тут есть нюанс — то что на этом компьютере стоит Linux, при том не самый дружелюбный и распространенный дистрибутив. Так что настройку во многом можно назвать не «Настройка Raspberry pi», а «Настройка Raspbian».
      • 0
        не самый дрюжелюбный? Это же на дебиан основано.
        • 0
          Все относительно. Имелось в виду что там не Ubuntu или Mint.
          То что она основана на Debian это действительно очень существенный плюс. Но я не думаю, что эта платформа интересна только поклонникам Linux, а для всех остальных ось стоящая там, хотя бы поначалу, но будет очень недружелюбна.
          • 0
            потому и надо с базы изнутри систему учить, чтоб потом не было вообще таких понятий как дружелюбный или нет. А было понятие системы для работы, а не свистюлек
  • 0
    Спасибо! Попробую повторить :) Кстати, Вы не пробовали поднимать на RPi вайфайную точку доступа?
    • 0
      Не, не пробовал. Я больше смотрю на 3G USB модемы, тогда понятия «дальности» не будет, связаться можно на любом расстоянии, если там есть сеть, а большая часть России, хотя бы GPRS но имеет. (Как область применения, пример — любительский метеозонд)
      • 0
        Моя задача — подключение Raspberry Pi к очкам Epson Moverio. Эти очки _были_бы_ неплохим девайсом для дополненной реальности — отличные прозрачные дисплеи, 6 часов от аккумуляторов. Но у них нет сенсоров, без котоорых эту самую доп.реальность не реализуешь — нету камеры, акселерометра, гироскопа, компаса. Нету даже bluetooth. Есть только возможность подключиться по WiFi (причем AdHoc-точек очки не видят как класс).

        Поэтому рассматриваю RPi как своеобразный хаб для подключения периферии к очкам.
        • 0
          Проект на самом деле интересный. Примеры вроде поднятия wifi точек доступа на схожих ОС есть
          habrahabr.ru/post/116297/
          help.ubuntu.ru/wiki/wifi_ap
          но это без плясок с бубном на вряд ли обойдется.

          Как способ обойти(если условия позволяют) можно их через обычный роутер между собой соединить, который где ни будь в сторонке будет лежать. Или вообще есть стационарный мощный комп, который и картинку и всю логику формирует, а на самом человеке уже очки и raspmberry (или вообще ардуина с XBee Wi-Fi).
          Но если это хочется мобильным сделать, то тогда лучше с точкой доступа помучатся.
          • 0
            Нужен именно мобильный вариант — так что куплю бубен и буду плясать :)
            Спасибо за ссылки!
  • 0
    Проблема с нагревающимися регуляторами напряжения не в том, что он греется и надо ставить радиатор, а в том, что это тепло — энергия аккумулятора, потраченная впустую.
  • 0
    А где в Питере малину продают?
    • 0
      МегаЭлектроника (каталог: товары для дома, хобби/ робототехника / контроллеры) www.megachip.ru/item.php?item_id=3626275
      Стоит на 600 рублей дороже чем если по почте заказывать.
  • 0
    Стабилизаторы греются потому что линейные, они не просто греются а жрут все что свыше 5В, так что даже если у вас 7.4В аккумулятор, то 2.4В х 0.7А, то есть, почти 1.7 ватта потреблю со из аккумулятора чтобы погореть атмосферу. Это очень печально, так что не радиаторами надо спасаться, а импульсными конвертерами, иначе долго не поживете от аккума.
    • 0
      *1.7 ватта потребляются
      *погреть атмосферу
      *долго не проживете

      Автокоррекция…
      • 0
        При 7.4В, получается, время работы от аккумулятора где то на треть меньше чем могло бы быть. Исправить это было бы конечно неплохо.

        А какие то конкретные микросхемы, со схемами их включения, есть на примете?
        • 0
          Промахнулся с ответом, чуть ниже оставил комментарий.
    • 0
      Кстати, на самой raspberry тоже стоит линейный регулятор, и её потребление можно значительно снизить заменив его на нормальный.
  • 0
    Да куча этих конвертеров у разных производителей, и куча готовых модулей на е-бее и иже с ним, вот, например.

    У любого производеля посмотрите в каталога по параметрам, это называется dc-dc buck converter.
    • 0
      Спасибо за наводку. Я с заказами по интернету не люблю связываться так что искал в каталогах Питерских магазинов нечто подобное. Но цена там очень привлекательная так что можно попробовать заказать.

      Или если с ними не срастется — то на той же микросхеме что то вроде этого спаять radio-hobby.org/modules/news/article.php?storyid=445
  • +1
    По поводу аппаратного сжатия — нужно поставить спец плагины для gstreamer, использующие аппаратный DSP от BCM2835. Их нужно искать на профильных сайтах/форумах, в стандартный убунтовский пакет их по понятным причинам не включают.
    По поводу веб-камеры, один из наиболее простых (но не дешевых) вариантов решения этой проблемы — обзавестись Logitech C920 или другой камерой со сжатием в h264 внутри. Youness Alaoui как раз закончил пилить плагин для таких камер (см. здесь), и он отлично работает в 0.10 ветке (замечу что в LTS 10.04 gstreamer стоит немного старше чем нужно для сборки, его надо руками обновить/пересобрать). Этот трюк с камерой спасает в случае борды без hardware DSP, например beaglebone. Или с говно-DSP с убогим h264 кодировщиком.
    Все бюджетные камеры должны уметь выдавать mjpeg поток, который врубается в капсах. Чтобы это проверить, v4l2-ctl в помощь. Дерзайте :)
    • 0
      Ох, зря я написал про mjpeg, достаточно было обновить комментарии.
    • 0
      Спасибо за идеи.
      Про mjpeg, не знал о такой вещи доберусь до дома попробую поэкспериментировать.

      Про плагин для gstremera, сейчас покапал, он вроде бы даже прямо в пакете идет (у распемберри вроде как свой репозиторий ), но его надо явно указать omxh264dec. (тоже доеду попробую)
      cgit.freedesktop.org/gstreamer/gst-omx/
  • 0
    Многие вебкамеры умеют отдавать jpeg/mjpeg, и судя по archlinuxarm.org/forum/viewtopic.php?f=31&t=3149 — камера автора его умеет. Она вообще хипсторская:
    image

    Так как используется модуль uvcvideo, то можно извращаться с камерой в достаточно широких диапазонах. А теперь главный вопрос — нафига использовать несжатый YUV, когда есть такая малина (mjpeg)?

    Gstreamer всегда считал адовым тормозом, удивлен что оно хоть как-то ворочается, а вы еще и кодирование ему поручили. Достаточно просто отдать стрим на сервер вещания и хоть в интернет в публичный доступ выкладывайте.

    надеясь что в ближайшее время кодеки все таки появятся. Так что идем дальше.
    Не надейтесь, на форумах про Малину тоже все надеялись и уже настроили кучу девайсов для медиапроцессинга, а вот с кодеками у всех облом, причем если почитать треды внимательно можно понять почему.

    или денег не хватает даже на подержанный персональный компьютер. А минусы наоборот становятся очевидными — малая относительно настольных компьютеров производительность и недружелюбная операционная система.
    Да, персональный компьютер могут позволить себе далеко не все. А производительность Малины примерно раз 100 выше моего первого PC, которого для всего хватало. Да, в те времена про WindoWz SeveN SpeRMa ULTiMATE Zver EditiON никто не знал и всем всего хватало. Аналогично и про дружелюбность системы, достаточно палец от мышки оторвать.
    • 0
      Про фото камеры, это один из её внешних видов, у меня расцветка другая — обычная серая.

      Почему не использовал YUV вместо mjpeg — не знал про то что есть такая возможность. Сейчас доберусь до дома попробую с ним.

      Про Gstreamer не знаю откуда у вас такое мнение что он тормозной. Его и GNOME использует, и Nokia в Maemo. Основная причина его выбора была в том что у него cli интерфейс что удобно при удаленном управлении через консоль. «отдать стрим на сервер вещания» это я так понимаю что то вроде VLC, но это скорее всего графический интерфейс и удаленно будет сложно запустить.

      Про кодеки, я то же свое мнение на основе форумов составил. Но там нюанс, есть что эти мнения до 24 августа были. А после вроде поддержка части кодеков появилась.
      www.raspberrypi.org/archives/1839

      Про то что не у всех на стационарный компьютер не хватает и интерфейс дружелюбный если от мышки оторвать палец. Это все конечно оценочные суждения и о них трудно спорить, но если действительно денег не хватает то советую volzhskiy.vgg.slando.ru/obyavlenie/prodam-sistemnyy-blok-i-monitor-ID6Citb.html#b5aeede0;r:;s:
      А на счет дружелюбности, насколько я знаю, raspbian до сих пор не поддерживает flash плеер.
      • 0
        Упс, ответил ниже, промахнушись с ответом
  • 0
    Gstreamer — это калька с DirectShow со всеми его архитектурными косяками. И да, гном тоже является адовым тормозом и всегда им являлся. В качестве альтернативы можно поюзать ffmpeg c опцией -acodec copy, подав все это скажем на ffserver (который будет уже на десктопном компьютере), хотя лично я бы просто вытаскивал бы кадры с камеры и дальше их отсылал сам скажем на Icecast (немного допилив его, благо опыт есть, примерная схема habrahabr.ru/post/153817/ — для видео все аналогично). Такое решение практически не использует cpu и все должно бегать шустро. И никакого гуя уж точно.

    Что касается кодеков, то как я понял кодировать опять же нечем (по данным из поста, может уже написали?). Надо будет погуглить, а то я хотел сделать переносную радиостудию на Малине, дабы вещать радио отовсюду, но обломался с енкодингом (хотя руки до оптимизированных кодеков так и не дошли).

    Что же до компьютеров, то ПК, с которого я сейчас пишу, не сильно превосходит Распберри, и что самое интересное — хватает для всего. Конечно же, флеша у меня нет, я его отключил.
    • 0
      , хотя лично я бы просто вытаскивал бы кадры с камеры и дальше их отсылал сам скажем на Icecast (немного допилив его, благо опыт есть, примерная схема habrahabr.ru/post/153817/ — для видео все аналогично). Такое решение практически не использует cpu и все должно бегать шустро


      Вариантов всегда много, но это не сильно отличается от того что здесь
      sudo gst-launch-0.10 v4l2src device=/dev/video0 ! 'video/x-raw-yuv,width=640,height=480, framerate=20/1'! ffmpegcolorspace ! rtpvrawpay ! udpsink host=192.168.0.50 port=4000 sync=false
      происходит захват видео и отправка его дальше по сети. Здесь из трансформации только «rtpvrawpay» который добавляет заголовок о формате передачи, что бы можно было по RTP гнать, зато позволяет использовать транспортный уровень.
      • 0
        Гоняйте свои гигабайты, я не против.
        • 0
          Не, ну против гигабайтов я не возражаю. Их действительно в идеале хотелось бы сжать.
  • 0
    А почему не реализовать сие через ffmpeg & ffserver? Та же потоковая передача с камеры
  • 0
    Господа, а кто-нибудь интересовался как потом передать FPV-видео на дальние расстояния? Используя тот-же модулятор DVB-T/COFDM можно отдать full-hd с задержкой порядка 250мс?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.