Длинное вступление
В прошлом топике мы тестировали HD FPV с нашей любимой Виртурилкой в качестве источника видео. Тогда испытания показали что всё отлично, вид от первого лица при управлении моделями вполне реальное дело. Главное — был бы нормальный канал связи. Пока HDMI вход для Виртурилки в процессе производства (кстати, уже есть первый тестовый образец, но драйвер ещё не готов), решили поискать ещё варианты организации канала связи. В комментах много юмора было на тему 4G, вот мы и подумали — а почему бы и нет?
В общем, Виртурилка была установлена на машинку (тихоходный, зато всепролазный китайский краулер), подключена вместо штатного RC-приёмника. В Виртурилку воткнут модем от неназванной компании (но всем понятно что это Yota ). На борту Виртурилки есть штатные четыре канала PWM, так что она сразу «из коробки» может функционировать как бортовой RC-приёмник на четыре канала. Для управления машинкой обычно нужно всего два канала, так что даже перебор получается. На Виртурилке запущен коммандный сервер с гордым именем rcboard, который я делал прошлые несколько дней. Софтинка получилась довольно клёвая, но публиковать не буду пока не вычищу некоторые косяки (как же без них).
На управляющей стороне — приложение, которое берёт сигнал с любого виндового джойстика. Так как большинство RC апп (аппаратура управления, пульт, короче говоря) имеет тренерский разъём, то можно эту самую аппу подключить к компу с помощью USB-переходника. В итоге аппа видится операционной системой как обычный джойстик. Кстати, под линуксом всё намного проще в плане программирования, а вот под винду пришлось изучать неведомый C#. Короче, на управляющей стороне запускается приложение .Net, которое обрабатывает указанный джойстик и шлёт пакеты на Виртурилку.
Так как в нашем случае Виртурилка выходит в инет через Йоту — встал вопрос как на неё слать команды. Команды идут по UDP (всем советую — только UDP, никаких тормозных TCP), а у Йоты не белый ip. Белый ip можно подключить для юрлица (400 руб в месяц). Мы-то можем подключить, так как юрлицо имеется, но это совсем некошерно. Так что был реализован способ слать команды на борт и без белого айпишника. Способ, известный как UDP Hole Punching. Точнее, упрощённый вариант этого метода. Так как в данном топике я хочу только показать результаты испытаний, так сказать, для затравки, давайте подробности реализации чуть-чуть отложим, ибо я хочу добавить полноценный юдп хоул панчинг для вообще любого способа управления, а то сейчас требуется белый ip на управляющей стороне.
Ещё хотел бы высказаться насчёт типа управления. Тот же Parrot ArDrone управляется с планшета/смартфона. Наши девайсы (которые на базе Виртурилки) многие управляются с планшета/смартфона. Но это не значит что такой вид управления хорош. Честно говоря, это самый паршивый вид управления. При управлении чем либо надо чувствовать элементы управления, чтобы смотреть только на картинку с камеры и не думать «а попал ли я пальцем на виртуальный джойстик». Так что лучше обычных рцшных апп ещё ничего не придумано. Разве что USB руль/педали, они моей софтинкой тоже поддерживаются (само собой, это ж просто обычный джойстик). Для машинки именно руль и педали — самый ништяг.
Как это сделано
А теперь по делу. Вчера утром дописал я этот самый сервер команд (который на Виртурилке запускается), опробовал, удивился что работает. Сообщил коллегам и собрался уже идти спать. Однако один коллега оказался на связи и вызвался выступить первым тестером. Так что уйти спать не удалось, пришлось одеться и двинуть с машинкой на улицу. Я следил за машинкой а коллега управлял ею из Питера. Сигнал Йоты у меня тут не очень, так что коллега сообщал (на мобиле по скайпу) что видео идёт, но часто рассыпается. Телеметрия с борта (по каналу телеметрии рулящему отдаются вольтаж аккумулятора и параметры сигнала Йоты) показала что сигнал реально паршивый. Но машинка ехала, видео худо-бедно шло.
Кстати, про видео. После испытаний HD видео в разрешении 1280х720 уже никакого желания нет возвращаться к обычным 640x480, так что все тестирования проводим именно в HD. Для Йоты битрейт понизили до одного мегабита, но даже с одним мегабитом 720p лучше смотрится чем 640x480.
Воодушевившись результатом, коллега побежал в ближайший хоббийный магазинчик и приобрёл там точно такой же краулер. Подключить к нему Виртурилку с тестовой прошивкой — дело пяти минут. Так что спустя пол-часа уже realizator пошёл на улицу, а я подключил аппу к компу и попробовал порулить.
Оказалось что в Питере, во всяком случае, в одном спальном районе (это в видеоролик не вошло) и в центре Йота намного лучше работает чем у меня около дома в Москве. Так что я без проблем погонял на машинке, сидя в кресле в шестистах километрах от неё :-) Задержка вообще не ощущается, видео не рассыпается, просто всё идеально.
Так что Реализатор поехал с краулером на дворцовую площадь. Уж если проводить испытания — так в интересном месте :-) Увеличить битрейт видео как-то не подумали, хотя там явно запас немалый. Так что все покатушки прошли именно с потоком 1 mb/s. Поначалу я опасался быстро ехать, но вскоре освоился и стало очень нехватать скорости краулера. Реально, при таком отличном видео можно и намного быстрее гонять. Но других машинок под рукой пока нету, так что пусть хоть что-то.
В общем, вот что получилось в результате. Испытания оказались случайные, так что снимали чем придётся. Даже запись потока, которая под линухом нормально работает, под виндой, как оказалось, не пашет, надо по другому делать. Так что с экрана пришлось записывать обычной вебкой, плюс вид со стороны у меня гопроха записывала.
Ну и само видео
Как я уже писал выше, сервер команд и виндовое приложение-рулилку опубликую на днях, когда пофиксю мелкие глюки. Заходите к нам на форум, всё там будет. А вот описание сервера команд, возможно, и на отдельный топик на Хабре потянет.
P.S. Если честно, я не ожидал что так классно всё получится. Йота оказалась лучше чем я о ней думал, во всяком случае, в Питере :-) Уж на что я привычный к рулению разными штуками, но покататься по Дворцовой площади и по Невскому, сидя дома в Москве — очень здорово было. А главное — всё на базе нашего детища — Виртурилки :-)
Автор: Gol