Машинка в Питере — оператор в Москве

    Длинное вступление





    В прошлом топике мы тестировали 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. Если честно, я не ожидал что так классно всё получится. Йота оказалась лучше чем я о ней думал, во всяком случае, в Питере :-) Уж на что я привычный к рулению разными штуками, но покататься по Дворцовой площади и по Невскому, сидя дома в Москве — очень здорово было. А главное — всё на базе нашего детища — Виртурилки :-)

    UPD> получилось неожиданное продолжение. На этот раз, на самолётике.

    Virt2real

    66,00

    Компания

    Поделиться публикацией

    Похожие публикации

    Комментарии 36
      +5
      Не перестаю вами восхищаться. И штукенцию делаете просто улетную и статьи пишите, читать приятно и легко. Спасибо. Жду с нетерпением продолжения.
        +1
        Следующим шагом должен быть полноценный «автомобиль Бонда», управляемый откуда угодно, где есть доступ к интернету.
        Еще неплохо бы добавить автопилот по точкам GPS. И режимы патрулирования и возврата на исходную точку в случае потери связи на определенный период.
          0
          Ну, тачка бонда управлялась через инет, но на публичных испытаниях йота подвела. А потом с машиной проблемы начались по механике так что забили на неё.
          0
          Задержка вообще не ощущается

          Были бы интересны цифры.
            0
            На домашних испытаниях при битрейте 4 мегабита задержка была 100-150 мс при связь через обычный вайфай. Так что про наше железо точные цифры знаем. А задержка по 4G — штука очень непостоянная, так что замеры в одном месте ничего не скажут. Но субъективно — на выставке (там именно wi-fi был) было ездить чуток похуже.
              0
              Видео вы аппаратно кодируете, если не ошибаюсь? Если нет, то у вас tune на zerolatency стоит? Профиль main? Видео тоже по UDP?
                0
                Проц TI DM365, аппаратный энкод, профиль High, 5.1. Видео по RTP (UDP). Битрейт низкий (1 мегабит), но оказалось что запас канала большой так что битрейт можно и повыше задрать.
                  0
                  А какое разрешение видео и частота кадров?
                  При High 5.1 с включенным CABAC 640х480 25 fps умещается в поток 400-600 kbps с качеством близким к DVD, а то качество что у вас на видео можно получить при 200-300 kbps.
                  Я экспериментировал со сверх низкими битрейтами (правда на x264 кодере) и внятная картинка без рассыпаний держалась вплоть до 100-150 kbps. Аппаратный енкодер, конечно имеет гораздо меньше возможностей…
                    0
                    1280x720, 30fps. Поток 1 мегабит выставлен. Когда картинка статичная (в кадре мало движения) — поток очень маленький идёт. А вот при постоянном изменении всего кадра (а при езде так оно и выходит) — поток максимальный прёт.

                    У нашего енкодера как раз дофига фич по тюнингу, проц заточен под IP камеры. Но просто ещё не все возможности опробовали на практике.
                      0
                      А, ну если 720p@30fps тогда мегабит — очень адекватно.
                      Вы этим постом побудили во мне интерес пощупать аппаратное сжатие видео на ARM и его передачу через мобильный инет.
                        0
                        Не, раньше мы катались при 3-4 мегабитах, там всё ништяг. 1 мегабит маловато когда постоянное изменение картинки. Но на йоте оказался большой запас по каналу, так что можно битрейт повышать. Но пока не до красот, тестим как есть.
                    –1
                    Так это, у вас же там b-фреймы. Вы бы если на main перешли (ну или отключили b-фреймы на high), то latency бы заметно уменьшилось (по крайней мере, должно). Но и битрейт поднимется.
                    А процессор не выдерживает программного энкода?
              +8
              Я кажется знаю, кому нужно заказывать разработку нового российского лунохода
                +1
                На Луну я, конеш, собираюсь, но сначала надо хотя бы на орбиту слетать :-)
              • НЛО прилетело и опубликовало эту надпись здесь
                  0
                  Это хорошая либа, но не для армовского ядра. Наш встроенный дсп, к сожалению, под такие задачи не заточен.
                  +1
                  У контроллера хорошие перспективы в плане робототехники и управляемых РУ. Слежу за ним с самого начала проекта. Как контроллер будет доведен до ума прикупим экземплярчик для нашей небольшой лаборатории. Молодцы!
                    +2
                    Ребята, это очень клево.

                    Главный вопрос: а в чем отличие от Raspbery, Cubie и т.п.?
                      0
                      Ну вроде много раз отвечали уже. Мы специально затачивали виртурилку под задачу удаленного управления и передачу видео. Если по пунктам перечислить то основные наверное будут выглядеть так:
                      — специализированный проц DaVinci для сжатия видео на лету
                      — малые размеры и вес (на этой машинке суммарный вес с камерой 30 грамм)
                      — малое энергопотребление
                      — питание от 3 до 18 вольт
                      — много gpio
                      А малинка и куби это платы нацеленные на решение других задач — мощнее проц общего назначения, не ставилась задача миниатюризации и всеядности по питанию и т.д.
                        0
                        На малинке ведь тоже вроде есть аппаратный энкодер. Он хуже?
                          +1
                          На малинке кодер h264 сначала не был доступен, появился только недавно. В принципе, то же самое, но у нашего больше настроек :-) DM365/368 изначально для IP камер оптимизированы.
                        +2
                        Имхо, малина и куби — для «десктопного» применения. А наша виртурилка задумывалась для «бортового» применения. Можно, конечно, и малину на борт (многие так и делают), но эт всё-таки костыли (питание надо городить, пинов мало, pwm аппаратных нет, ADC нет и т.д.). Ещё — у той же малины видеовход напрямую в GPU, так что нет возможности что-то поменять. Есть одна камера, больше ничего не подключишь. А у нас и камера (любая с параллельной шиной 8-10 бит), и HDMI вход, и аналоговый вход. И вообще что угодно :-)
                        +1
                        Ждём сервер и рулилку. Кстати, под андроид клиент планируется?
                          +1
                          Уже готов купить в любое время
                            +1
                            Под андроид я не умею, так что этим занимается человек с нашего форума. Я когда перед публикацией ему описание протокола скину, так что клиент как раз будет готов. Под иось другой чел пишет, так что может и он поможет сделать рулилку под айфончик/айпадик.
                            0
                            А у вас протектор задом наперед одет специально? :)
                              +6
                              А я внимания не обратил — процедура прикручивания колес была дочке поручена, а детское понимание эстетики и правильности оно иное (:
                              0
                              было бы неплохо еще добавить деталей в статью по поводу того как осуществялась передача видео т.е как кодировалось, отправлялось, отображалось
                                0
                                Эт отдельный топик буду писать когда косяки исправлю. А то большинству неохота самим собирать, нужно всё готовое универсальное. Сейчас уже практически всё готово но мелочи таки надо поправить.
                                +1
                                можно еще усовершенствовать закрепив перед камерой небольшое зеркальцо
                                  +1
                                  Ага, самострелы, пардон, селфи фигачить :-D
                                  0
                                  А вот бы коптер/планер заделать, чтоб нажал кнопочку и прилетел он сам в Москву. И обратно.
                                    +9
                                    Свежая новость. Буквально 10 минут назад успешно взлетел, сделал несколько кругов над полем и без повреждений приземлил самолёт (Бикслер). Над Питером. Из Москвы. Принимаем поздравления :-D

                                    Адреналин зашкаливает, аж потрясывает чуток. Коллега щас домой приедет, сольёт мне видео, тогда смонтирую в новый ролик и выложу.
                                    +1
                                    Очень интересно узнать подробности реализации UDP Hole Punching.
                                      0
                                      Это пока в упрощённом виде (на земле пока требуется белый ip). Попробую полноценно реализовать и может даже на отдельный топик потянет.

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

                                    Самое читаемое