telegamochka: (Default)
[personal profile] telegamochka
Новая копипаста в справочник.

Передача видео для дистанционного управления может использоваться во многих проектах связанных с управление различными устройствами. То есть это можно прикрутить к колесной базе, к квадрокоптеру, к телу гуманоидного робота и тд. 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х минутной задержкой.

Подключение 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 аккумуляторы для таких целей лучше не использовать так как в случае разряда ниже допустимого уровня они необратимо выходит из строя, а этот момент здесь ни как не ловится. То есть устройство работает, работает, а когда перестает аккумулятор уже умер. Если под рукой есть другой тип аккумуляторов то лучше их использовать.

П.С.
Далее как цель поставить это все на какую то платформу и использовать уже дальше.

Оригинал: http://habrahabr.ru/post/153611/

Date: 2012-10-06 04:19 am (UTC)
From: [identity profile] 0x8.livejournal.com

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


Эта камера аппаратно поддерживает MJPEG, на сколько я в курсе. А он подключил ее в режиме YUV.
Надо немного поправить инициализацию gstreamer'а и траффик будет намного меньше.

А вот задержка тут не нормированная. Т.к. камера меняет frame rate в зависимости от освещенности. Чем темнее, тем больше выдержка на один кадр и ниже frame rate.

Date: 2012-10-06 09:05 am (UTC)
From: [identity profile] telegamochka.livejournal.com
Спасибо :) Нужно будет поэкспериментировать. На Raspberry Pi можно будет попробовать собрать блок для работы с наголовной камерой и сенсорами, отсутствующими у очков Epson Moverio.

Date: 2012-10-06 06:15 pm (UTC)
From: [identity profile] 0x8.livejournal.com
http://roboforum.ru/forum88/topic9793.html - здесь много пишут про грабли web камер на Линуксе.
Главное камера должна быть UVC совместимая, и поддерживающая аппаратно MJPEG.
Из тех что рекомендуют есть недорогая Logitech C270. У Logitech'а, на удивление много камер поддерживающих эти стандарты.

Date: 2012-10-07 12:33 am (UTC)
From: [identity profile] telegamochka.livejournal.com
У меня Logitech C300. Выбиралась в первую очередь как линукс-совместимая.

Date: 2012-10-07 12:48 am (UTC)
From: [identity profile] telegamochka.livejournal.com
Вот тут рекомендуют брать с аппаратным h264:

http://habrahabr.ru/post/153611/#comment_5239053
По поводу аппаратного сжатия — нужно поставить спец плагины для gstreamer, использующие аппаратный DSP от BCM2835. Их нужно искать на профильных сайтах/форумах, в стандартный убунтовский пакет их по понятным причинам не включают.
По поводу веб-камеры, один из наиболее простых (но не дешевых) вариантов решения этой проблемы — обзавестись Logitech C920 или другой камерой со сжатием в h264 внутри. Youness Alaoui как раз закончил пилить плагин для таких камер (см. здесь), и он отлично работает в 0.10 ветке (замечу что в LTS 10.04 gstreamer стоит немного старше чем нужно для сборки, его надо руками обновить/пересобрать). Этот трюк с камерой спасает в случае борды без hardware DSP, например beaglebone. Или с говно-DSP с убогим h264 кодировщиком.
Все бюджетные камеры должны уметь выдавать mjpeg поток, который врубается в капсах. Чтобы это проверить, v4l2-ctl в помощь. Дерзайте :)

Profile

telegamochka: (Default)
telegamochka

April 2017

S M T W T F S
      1
234 567 8
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 20th, 2017 01:23 am
Powered by Dreamwidth Studios