Длинное вступление
![](https://habrastorage.org/getpro/habr/post_images/bd6/10b/518/bd610b518ccab285f98a15c141b6bd27.jpg)
В прошлом топике мы тестировали HD FPV с нашей любимой Виртурилкой в качестве источника видео. Тогда испытания показали что всё отлично, вид от первого лица при управлении моделями вполне реальное дело. Главное — был бы нормальный канал связи. Пока HDMI вход для Виртурилки в процессе производства (кстати, уже есть первый тестовый образец, но драйвер ещё не готов), решили поискать ещё варианты организации канала связи. В комментах много юмора было на тему 4G, вот мы и подумали — а почему бы и нет?
В общем, Виртурилка была установлена на машинку (тихоходный, зато всепролазный китайский краулер), подключена вместо штатного RC-приёмника. В Виртурилку воткнут модем от неназванной компании (но всем понятно что это Yota
![](https://habrastorage.org/getpro/habr/post_images/8b8/169/d47/8b8169d4770c3aaff25b8127681018c1.gif)
На управляющей стороне — приложение, которое берёт сигнал с любого виндового джойстика. Так как большинство 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. Если честно, я не ожидал что так классно всё получится. Йота оказалась лучше чем я о ней думал, во всяком случае, в Питере :-) Уж на что я привычный к рулению разными штуками, но покататься по Дворцовой площади и по Невскому, сидя дома в Москве — очень здорово было. А главное — всё на базе нашего детища — Виртурилки :-)
UPD> получилось неожиданное продолжение. На этот раз, на самолётике.