Рцборда, или Как Сделать Управляемую через Интернет Машинку

в 10:09, , рубрики: diy или сделай сам, p2p, Peer-to-Peer, rcboard, virt2real, Виртурилка, краулер, машинка, рцборда, рцборда рулит!, управление по сети

За последние несколько лет мне довелось сделать немало дистанционно управляемых устройств. Некоторые управлялись локально, с обычного ПК или со смартфона. Некоторые — через Интернет. Все устройства объединяет общий принцип — управляет ими человек, ориентируясь по картинке с видеокамеры на борту устройства. А само управление, в итоге, сводится к выдаче управляющих сигналов на сервомоторы или регуляторы (драйверы) моторов.

Так что, набравшись опыта в данном деле, решил попробовать более-менее систематизировать различные типы управления устройствами, чтоб при создании нового девайса не приходилось кучу всего переписывать, а достаточно было лишь изменить некоторые параметры конфигурации. В результате родился программный комплекс RCboard, или РЦборда. Т.к. все управляемые штуки я делаю с контролером Virt2real (Виртурилка) в качестве главного бортового мозга, то и рцборда изначально писалась именно под неё. Так что всю связку можно пафосно называть «Программно-аппаратный комплекс РЦборда».

В общем, в продолжении топика попробую написать рецепт про то как с помощью Виртурилки и РЦборды из обычной радиоуправляемой машинки сделать машинку, управляемую через Интернет (ну и локально она тоже будет управляться). Каналом связи будет обычный Wi-Fi (выход в инет через домашний роутер) или 4G связь через свисток Yota.

Краулер BSD Racing 4WD RTR 2.4Ghz 1:10
Рцборда, или Как Сделать Управляемую через Интернет Машинку - 1

Сразу уточню — под термином «радиоуправляемая машинка» я подразумеваю не дешёвые китайские машинки, в которых вся электроника реализована на одной плате, а более-менее приличные машинки, построенные по модульной схеме — которые имеют регулятор оборотов двигателя (коллекторного, бесколлекторного — неважно) и сервомашинку для управления поворотом передних колёс.

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

Что понадобится для сборки

  • Машинка c регулятором двигателя, двигателем и сервой
  • Аккумулятор (любой с подходящим для регулятора напряжением)
  • Контролер Virt2real (Виртурилка) с камерой, переходник USB-OTG, флешка micro-SD
  • Свисток Wi-Fi или Yota (можно и любой другой 4G модем)
  • Руки умеренной линейности

Но сначала, чтобы продемонстрировать некоторые варианты использования

Где это уже было использовано

Как я уже писал, рцборду мы уже много где использовали, но из задокументированных случаев нашёл только вот эти:

Испытания рцборды на багги в Шеньчжене, управление из Москвы

Испытания рцборды на краулере в Питере, управление из Москвы


habrahabr.ru/company/virt2real/blog/223145/

Испытания рцборды на самолёте над Питером, управление из Москвы


habrahabr.ru/company/virt2real/blog/223183/

Клёвый снегоуборщик под управлением рцборды


Кстати, сам снегоуборщик — разработка пермских ребят http://omiplow.ru

Самый тяжёлый девайс под управлением рцборды

Совместный проект с ООО «Снег»

Итак, подопытный кролик

Краулер для дистанционного управления хорош тем что он обладает очень высокой проходимостью.

К слову, он даже умеет делать вот так

Рцборда, или Как Сделать Управляемую через Интернет Машинку - 2

У краулера полный привод, постоянная блокировка дифференциалов (все колёса крутятся одновременно) и постоянная «пониженная передача». Т.е. он ездит сравнительно медленно, но мощно и проходимо.

Настройка Виртурилки

Перед тем как собирать машинку, надо настроить Виртурилку. Сначала рассмотрим вариант с подключением по Wi-Fi.

Итак, по пунктам:

  • Скачиваем свежую прошивку, специально для рцборды files.virt2real.ru/firmware/virt2real-board/1.1/rcboard-0.01.002.zip
  • Подключаем micro-USB — USB кабель к Виртурилке, второй конец втыкаем в комп. На компе появится новый сетевой интерфейс, подсеть 192.168.3.0/24. Для Windows, возможно, потребуется установить драйвер
  • Открываем базовую админку (вебпанель управления Виртурилкой) по адресу http://192.168.3.1/admin
  • Идём в раздел «Настройки» -> «Сеть» и задаём ip для интерфейса wlan0 (или указываем dhcp, если не нужен статичный ip)
  • Идём в раздел «Настройки» -> «Wi-Fi» -> «Настройка Wi-Fi» и задаём параметры беспроводной сети (меняем поля ssid и psk) для первой сети
  • Идём в раздел «Настройки» -> «Автозапуск» — перемещаем скрипт S80dhcp-server в неактивные (если начальная настройка по USB больше не потребуется)
  • Идём в раздел «Администрирование» -> «Перезагрузка» и ребутим Виртурилку
  • Отключаем USB кабель от Виртурилки, подключаем к micro-USB вайфай свисток. Из проверенных рекомендую ASUS N10, N13, TP-link TL-WM722N но лучше всего пятигигагерцовые, например ASUS N53 или Dlink DWA-160 rev.B2

Проверка подключения Виртурилки к сети

  • В процессе загрузки Виртурилки на ней будут загораться светодиоды. При включении питания, если загрузочная флешка успешно прочиталась, загорится зелёный светодиод. Затем, в процессе загрузке ядра загорится синий светодиод. После полной загрузки если подключение к Wi-Fi сети прошло удачно — загорится красный светодиод. А когда запустится рцборда (она прописана в автозапуске) все светодиоды погаснут красный светодиод начнёт моргать).
  • Устанавливаем приложение для управления. Оно называется Virt2real Player и есть для Windows (дистрибутив или zip-архив), для Android, для IOS. Приложение для IOS в аппсторе ещё старой версии, новая проходит аппрув, так что пока ставить его бестолку — управление работать будет коряво.
  • Открываем Проводник (если на компе винда), если Виртурилка успешно подключилась к локальной сети по вайфаю — в разделе «Сеть» должно появиться устройство «RCboard (Virt2real)». В админку можно попасть, нажав правой кнопкой мыши на этом устройстве и выбрав пункт меню «Просмотр веб-страницы устройства»
    Выглядит примерно так

    Рцборда, или Как Сделать Управляемую через Интернет Машинку - 3

  • Запускаем Virt2real Player для Windows или для Android, должен обнаружиться сервер RCboard. Обнаружение сервера в приложении под IOS пока не реализовано.
    Скриншот Virt2real Player для Windows

    Рцборда, или Как Сделать Управляемую через Интернет Машинку - 4
    Скриншот Virt2real Player для Android

    Рцборда, или Как Сделать Управляемую через Интернет Машинку - 5

Общий принцип подключения моторов машинки

Обычно у RC машинки два мотора. Один обычный, коллекторный — крутит колёса. Второй — сервомотор, поворачивает передние колёса в нужную сторону. Т.е. получается что требуется всего два канала управления — газ и руль. Изначально (если машинка куплена в собранном виде) все каналы подключены к штатному радиоприёмнику трёхпиновыми разъёмами типа JR (стандартный серворазъём). Чёрный (или коричневый) провод — земля, красный — питание (5-6В), жёлтый (или белый, или оранжевый) — сигнальный провод.

Именно по сигнальному проводу мы и будем управлять моторами, но сначала надо подать питание на серву, которая рулит колёсами. Тут общий принцип такой — с бортового аккумулятора силовое питание с напряжением, равным напряжению аккумулятора, идёт по толстым проводам на мощный регулятор коллекторного (или бесколлекторного) мотора. Внутри этого регулятора есть так называемый BEC — преобразователь напряжения, делающий из различного аккумуляторного напряжения стабильные 5 Вольт (иногда 6В, можно выбирать перемычкой на регуляторе), требуемые для питания бортовых сервомашинок, приёмника и различной другой электроники. Это стабилизированное питание обычно рассчитано на нагрузку не более чем 2-3А, хотя это тоже зависит от модели регулятора.

Выходное напряжение BEC по чёрному и красному проводам тонкого трёхжильного шлейфа от регулятора подаётся на приёмник. Здесь таится главный нюанс, который не все сразу осмысливают. Повторюсь — от регулятора идёт кабель с тремя жилами. Из них две жилы это питание, которое выдаётся с регулятора, т.е. это выход. А третий провод (белый, жёлтый или оранжевый) — это провод управления, т.е. вход. Вроде мелочь, а почему-то многие путаются.

В приёмнике есть несколько групп трёхпиновых контактов. Их количество зависит от количества каналов, на которое приёмник рассчитан. У машинок обычно 2 или 3 канала, так что групп, соответственно, 3 или 4 (одна группа для установки перемычки Pair (сигнал на спаривание приёмника и передатчика). У этих групп контактов все пины питания замкнуты между собой, т.е. земля и питание приходят с регулятора и подаётся сразу на все группы контактов. А вот сигнальные пины все независимые, на них выдаётся сигнал, принятый приёмником с радиоаппаратуры управления.

Обычная схема подключения с коллекторным двигателем

Рцборда, или Как Сделать Управляемую через Интернет Машинку - 6
Обычная схема подключения с бесколлекторным двигателем

Рцборда, или Как Сделать Управляемую через Интернет Машинку - 7

Так как управлять мы будем с помощью независимого контроллера, родной приёмник машинки нам не нужен, убираем его вообще. А трёхжильные шлейфы от регулятора и от сервомашинки нам необходимо соединить хитрым образом — чёрный провод соединить с чёрным, красный — с красным. А оставшиеся белые (жёлтые или оранжевые) два проводка надо подключить к Виртурилке, а именно к пинам CON44 и CON43, см. схему . Какой именно провод к какому пину особо значения не имеет, так как каналы можно настроить потом в конфиге рцборды.

Должно получиться примерно такое подключение

Схема подключения Виртурилки к кишочкам машинки

Рцборда, или Как Сделать Управляемую через Интернет Машинку - 8

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

И да, самое главное — питание на Виртурилку подаём прямо с контактов аккумулятора. Ей нестрашно напряжение вплоть до 20В, так что чем выше напряжение — тем лучше, ток меньший будет потреблять. КПД преобразователя питания (SEPIC, установлен на самой Виртурилке) падает только после 15В, так что идеальное питание — от 12 до 15 В, при этом в полной нагрузке (с вифи) Виртурилка будет потреблять около 150-300 мА. Хотя это тоже зависит от свистка (свисток Yota шибко прожорливый, с ним будет поболее).

Сборка машинки

Я попробовал заснять видео процесса сборки моего краулера. Не знаю, насколько там всё понятно, но лишним, думаю, не будет. Вот видеоролик про сборку:

Настройка сервера рцборды

Все настройки рцборды можно редактировать в специальной панели управления рцбордой (не путать с админкой Виртурилки). Вот так сейчас выглядит панель управления рцборды (первая версия)

Рцборда, или Как Сделать Управляемую через Интернет Машинку - 9

Во вкладке «Общие настройки» можно задать имя устройства (отображается при обнаружении девайса в приложениях), указать надо ли запускать сервер рцборды автоматически при загрузке Виртурилки, задать тип конфигурации.

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

Сервер удалённых конфигов, по дефолту, http://rc.virt2real.ru/getconfig, создавать и редактировать конфигурации там разрешено только зарегистрированным пользователям форума forum.virt2real.ru

В топике я расскажу лишь про локальную конфигурацию, удалённую сами можете попробовать, если кому интересно. К слову, когда я катался на машинке по Шеньчженю (видео в конце топика), то как раз удалённый конфиг использовал, чтобы можно было менять настройки. Изменение настроек из приложения есть пока в виде набросков, толком ещё не работает, но даже когда и доделаю — удалённый конфиг всё равно пригодится.

Итак, больше всего нас сейчас интересует вкладка «Локальная конфигурация». Вообще, дефолтный конфиг уже настраивает рцборду в режим сервера, можно подключать машинку и управлять локально (в локальной сети, с виндового приложения, с андроидного или с айфонно-айпадного). Разве что может потребоваться каналы поменять местами. А вот для режима P2P (peer-to-peer), для управления через Интернет, настройки придётся менять.

По умолчанию за всё управление отвечает библиотека universal.so, параметры для которой находятся в конце конфига, в разделе "[universal]".

Соответствие каналов управления и каналов PWM/PPM задаётся параметром axis.

axis=0,1,2,3

По дефолту настроено 4 канала PPM, которые находятся на пинах CON43, CON44, CON19, CON42. За это отвечают вот эти строчки конфига

ch0=43,ppm,500,1500,2500,127,0
ch1=44,ppm,500,1500,2500,127,0
ch2=19,ppm,500,1500,2500,127,1
ch3=42,ppm,500,1500,2500,127,1

Формат настройки канала такой:
chX=CON,TYPE,MIN,CENTER,MAX,NEUTRAL,NOAUTOCENTER

Где
X — номер канала PWM/PPM, от 0 до 3
CON — номер пина (не GPIO, а именно пина, см. схему)
TYPE — тип сигнала, ppm или pwm. Для машинки нужно ppm, для типа pwm другой формат строки конфига.
MIN — минимальное положение PPM сигнала, в миллисекундах.
MAX — максимальное положение PPM сигнала, в миллисекундах.
CENTER — центральное положение PPM сигнала, в миллисекундах.
NEUTRAL — относительное значение нейтрали, т.е. нейтральное значение команд управления. Обычно = 127
NOAUTOCENTER — если = 0 — автоматически возвращать сигнал в центральное положение, = 1 — не возвращать. Для каналов газа и руля машинки нужно указать 0, для каналов сервоприводов, которые используются для вращения камеры обзора — нужно указать 1 (если такие есть, конечно)

Если на машинке стоят фары, можно сделать их включение-выключение, потребуется собрать простейший усилитель транзисторный (один полевой транзистор, по сути). Для получения управляющего сигнала используется параметр «pins». Он задаёт пины, которые будут устанавливаться в 0 или 1 при нажатии кнопки в Virt2real Player (на экранных кнопках, на клавиатуре, мышкой или на геймпаде).

pins=1,30,0,0|2,31,0,1

Формат такой:
pins=CHANNEL,CON,DEFVALUE,SAVESTATE|...
где
CHANNEL — канал кнопки (от 1 до 32)
CON — номер пина, который требуется установить в 0 или 1 по приходу команды управления с кнопок
DEFVALUE — значение, в которое данный пин будет установлен при запуске рцборды
SAVESTATE — если = 0 — при нажатии кнопки пин установить в 1, при отпускании — установить в 0. Если = 1 — при нажатии кнопки пин установить в 1, при отпускании кнопки ничего не делать. При следующем нажатии кнопки пин установить в 0, при отпускании — снова ничего не делать. И так в цикле.

Каналы кнопок можно указывать подряд, через разделитель "|".

Краткий вывод из этой смутной информации — если у вас перепутаны каналы газа и руля — можно их поменять местами, изменив параметр axis на axis=1,0,2,3 :-)

Если нужно ограничить крайнее положение сервы руля — меняем значения MIN и MAX для нужного канала. Если машинка при нейтральном положении едет вперёд или назад — изменить значение CENTER для нужного канала.

Дополнительные модули

Во вкладке «Дополнительные модули» находится список активных и неактивных модулей рцборды.

Рцборда, или Как Сделать Управляемую через Интернет Машинку - 10

Модуль — это отдельное приложение (исполняемый бинарник), которое обычно выступает в качестве источника телеметрии. Активные модули — это те, которые запускаются автоматически при старте рцборды и завершаются при завершении её работы. В панели управления можно перемещать модули из одного столбца в другой, нажатием на оранжевую стрелочку. При перемещении в колонку активных — модуль сразу запускается, неважно, запущена рцборда или нет. При перемещении в неактивные — модуль автоматически прекращает работу.

Модули работают просто — читают требуемые параметры и по UDP отправляют на локальный порт (ext_telemetry), указанный в конфиге. А там уже рцборда принимает инфу и передаёт по каналу телеметрии в приложение Virt2real Player. Одновременно с этим та же информация передаётся в пользовательскую библиотеку девайса (в нашем случае это universal.so), чтоб приложение могло анализировать информацию и использовать по своему назначению. Например, у меня была библиотека девайса под названием autobot.so — управляемая тележка, которая помимо управления пользователем могла ещё и автономно ездить, ориентируясь по сигналу с ультразвукового дальномера.

Из основных модулей — statuswifi поставляет в рцборду информацию о статусе вайфай линка. Airosstatus.php (да, модуль можно и на похапе писать) — читает статус линка с оборудования Ubiquity, gps — читает GPS приёмник. Модуль imu обрабатывает инфу с инерциальных датчиков (углы Эйлера формирует, азимут и компас), правда он пока работает только с одним типом датчиков, так что для универсального использования ещё не годится. Nfc — читает NFC метки, но тоже работает только с одним типом ридеров. rc.in — читает PPM сигналы с RC приёмника, т.е. машинкой можно ещё и с обычной аппы управлять, у неё приоритет перед командами управления через вайфай. rfid — читает метки RFID. statusyota — читает статус линка 4G модема Yota. usrange — читает показания ультразвуковых дальномеров. voltage — определяет напряжение питания борта, требуется простенький делитель напряжения (2 резистора) подключить к ADC0. В общем, интересных модулей куча, по каждому предстоит подробное описание делать, так что пока считаем что я упомянул их для затравки :-)

Для нашего рецепта управляемой машинки актуален модуль statuswifi — если настраиваем подключение через Wi-Fi или statusyota — если подключаем Виртурилку через свисток Yota.

Настройка приложений

В Андроидном и айпадно-айфонном приложениях настройки несложные, заключаются лишь в выборе каналов управления. В Андроидном есть ещё выбор канала кнопок (по умолчанию канал не задан, кнопки не отображаются). А вот в виндовом приложении я столько фич накрутил, что сам прихожу в состояние лёгкой паники при осознании того что всё это задокументировать надо. Пока могу только дать ссылочку на описание прошлой версии приложения
http://wiki.virt2real.ru/wiki/Как_сделать_управляемую_тележку_2
http://wiki.virt2real.ru/wiki/RCboard

Протокол управления с тех пор заметно видоизменился, но вот настройка виндового приложения поменялась несильно, так что может помочь при ковырянии. А подробное описание текущей версии постараюсь написать в следующем году :-)

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

Скажу лишь одно — лучше всего машинкой управлять с USB руля и педалей, подключённых к компу. Ну или хотя бы с RC аппы, подключённой тренерским разъёмом к компу. А пальцами по экрану смартфона может быть и круто, но нифига не удобно без тактильных ощущений.

А теперь самое главное — управление через Интернет

Вводная информация про P2P режим

Так как для канала управления и для канала видео используется UDP — так и хотелось сделать полноценный P2P (Peer-to-peer) линк, чтоб не гонять видео от борта до сервера и обратно до клиента. Ну, раз хотелось — взял и сделал :-) Фактически, получился простой и лёгкий аналог адобовского RTMFP (не путать с RTMP). Только вот передачу звука добавить никак руки не дойдут, так что рцборда пока немая и глухая.

С UDP какая основная проблема — преодоление NAT. Так как на одном из концов линка (на передающей стороне или на приёмной) обязательно есть NAT — просто указать адрес и порт сервера (или клиента) не получится — NAT помешает. В виндовом Virt2real Player есть возможность с помощью UPnP сделать проброс порта, но это не совсем то чего я хотел. А то что хотел — получилось только после вдумчивого курения технологии UDP Hole Punching. В итоге всё получилось как надо — неважно, какой роутер, неважно где клиент или сервер. Главное чтоб был выход в Интернет. Хотя вру, есть один единственный тип NAT, который пробить пока не удалось. Всё время забываю как он правильно называется, вроде бы симметричный NAT.

И да, обычные TURN и STUN серверы в рцборде не используются, только своя реализация. Как я обычно говорю: хочешь изучить технологию — сделай по своему, а потом сравни с общепринятыми решениями. Любители велосипедов меня поймут. Однако часто оказывается что велосипед не так уж плох и свои задачи выполняет лучше чем общепринятые решения.

Это так, лёгкий оффтоп был. Продолжаем про NAT. Поддержка P2P есть пока только в виндовом приложении Virt2real Player, в андроидное и айфонно-айпадное ещё не добавлял. Проверял работу с коннектом через свисток Yota, через свисток Beeline 4G, через точку доступа на смартфоне, который в инет выходил тоже через Beeline 4G. Во всех этих случаях всё работает, но заметил что идеально только через Yota. Через билайн (в любом из опробованных видах) тоже работает, но коннект дольше времени занимает. Почему так происходит — пока не разбирался. Из печального — пока не удалось заставить работать линк (и команд, и видео) когда и клиент и сервер подключены через 4G свистки. Возможно, тут как раз симметричный NAT и подкрался.

Настройка P2P режима, на борту стоит Wi-Fi

К Виртурилке на борту машинки подключён свисток Wi-Fi (т.е. как делали до сих пор по инструкции из этого топика). Только сначала мы управляли машинкой локально, а теперь сможем дать кому-нибудь порулить из Инета.

Для включения p2p режима идём веб-панель управления рцборды, раздел «Локальные настройки». Там устанавливаем параметр

role=p2p

Теперь необходимо задать параметры p2p_uid и p2p_hash. Это эдакий аналог логина-пароля, но полноценной авторизации пока нет (но будет обязательно), так что используем именно такую связку. p2p_uid лучше брать из своей учётки на rc.virt2real.ru/remoteconfig/ там он называется «ID пользователя», тогда будет механизм инвайтов работать (об этом чуть ниже). А p2p_hash надо придумать самостоятельно. Любой набор символов, максимальная длина 40 символов.

Всё, на этом настройка p2p режима рцборды закончена. Необходимо убедиться что Виртурилка имеет выход в инет и можно запускать Virt2real Player виндовый. Если его запустить в локальной сети, там же где и рцборда — плеер обнаружит локальную рцборду (неважно что она в p2p режиме) и можно будет подключиться напрямую. А вот если плеер запускается в другой сети, надо настроить его на p2p режим.

Щёлкаем правой кнопкой мыши по окну плеера, идём в меню «Сеть» -> «Настройка сети». Во вкладке «Роль» выбираем «P2P», во вкладке «P2P» указываем UID и DevID. UID это тот же p2p_uid, который в настройках рцборды вводили, а DevID — это тот p2p_hash. Сохраняем, снова щёлкаем правой кнопкой по окну видео, «Сеть» -> «Подключить». В нижнем левом углу плеера должны появиться сообщения «Запрос пира видео» и «Запрос пира команд». Всё, процесс обнаружения пира и спаривания пошёл.

Иногда бывает что сообщения не появляются, тогда лучше просто перезапустить плеер (мой косяк, не отловил его ещё), при запуске он сам сразу начнём коннектиться с теми параметрами, которые мы ему задали, т.е. в режиме P2P.

Из замеченных нюансов — если плеер запускаем на компе, который выходит в инет через Yota — коннект быстро устанавливается. Само собой, если у Йоты сигнал нормальный. А вот если через роутер Yota или 4G свисток от Билайна — первое подключение может длиться до минуты. Но зато все последующие почти мгновенно будут. Я примерно знаю, где я накосячил, но исправить пока руки не дошли.

Настройка P2P режима, на борту стоит Yota

К micro-USB порту Виртурилки на борту машинки подключаем свисток Yota (через переходник USB-OTG, само собой). Те свистки, которые сейчас в продаже у Yota

В остальном всё аналогично предыдущему пункту. Разве что в настройках рцборды в разделе «Дополнительные модули» хорошо бы убрать из активных скриптов модуль statuswifi и наоборот, поместить в активные скрипты модуль statusyota, для того чтоб в плеере видеть параметры сигнала Yota.

Иллюстрации различных типов коннекта

К сожалению, дома у меня Yota еле-еле фурычит, так что полноценно не покатаешься. А вот Билайновский 4G отлично работает, поток 3 мегабита (и входящий, и исходящий) пролазит без проблем.

Во всех нижеприведённых экспериментах все настройки одинаковые, меняется лишь вид связи.

Краулер со свистком Wi-Fi, подключение из Интернета, через Yota

Краулер со свистком Yota, подключение из домашней локальной сети. Сигнал Yota очень плохой :-(

Краулер со свистком Wi-Fi, с ноутбука который имеет выход в инет через смартфон (Билайн 4G)

Инвайты

Чтобы было проще передать кому-то параметры для подключения к нашей машинке в режиме P2P, были созданы намётки механизма инвайтов. Что такое инвайты — знают все. Удобная штука. Так что сейчас попробую рассказать как этим пользоваться. В плеере это пока в тестовом, сыром, виде, но вроде как работает.

Итак, открываем виндовый Virt2real Player, щёлкаем правой кнопкой мыши по окну, выбираем «Инвайт» -> «Создать инвайт». Важный нюанс — плеер должен быть настроен на P2P режим, т.е. в настройках сети указаны все вышеописанные параметры для подключения к машинке. Иначе инвайт создастся, но подключаться не к чему будет. Кстати, надо бы добавить показ предупреждения, если параметры не заполнены.

В поле «Ваш ID пользователя» вводим всё тот же наш p2p_uid.
В поле «Ваш user-magic» вводим содержимое поля «Ваш user-magic» со всё той же странички rc.virt2real.ru/remoteconfig/
В поле «Название инвайта» вводим название, под которым этот инвайт будет на странице rc.virt2real.ru/remoteconfig/ отображаться.

Теперь жмём кнопку «Создать инвайт». Должна покрутиться двоечка-логотип, после чего в нижнем поле «Строчка-инвайт» появится длинная строчка, начинающаяся с символов INV.

Рцборда, или Как Сделать Управляемую через Интернет Машинку - 11

Теперь, если открыть страничку удалённой конфигурации rc.virt2real.ru/remoteconfig/ увидим что там появился инвайт, который мы только что создали

Рцборда, или Как Сделать Управляемую через Интернет Машинку - 12

Ну а дальше достаточно скинуть эту строчку тому, кому хотим дать покататься. А он, в свою очередь, должен в плеере зайти в меню «Инвайт» -> «У меня есть инвайт!» и ввести эту строчку. После чего все нужные параметры заполнятся сами собой, ничего для подключения настраивать не придётся, можно сразу кататься.

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

Немного про задержку

Главное требование к дистанционному управлению одно — как можно меньшая задержка от нажатия кнопки или перемещения джойстика до соответствующего изменения отображаемой с борта устройства картинки в видеопотоке. Когда публикуешь что-нибудь на тему удалённого управления обычно первый вопрос — «какая задержка?».

После многочисленных испытаний оказалось что задержки — штука субьективная и на комфортность управления влияет по разному. Само собой, всё зависит от максимальной скорости ездящего девайса. Для летающих девайсов (самолёты/коптеры) минимальность задержки очень важна, а вот при управлении ездящими устройствами — не всегда. Когда я на очередной выставке Хобби-экспо рассекал по залу на переделанной радиоуправляемой багги, через десять минут руления поймал себя на мысли что задержка (какая бы она ни была) перестаёт ощущаться, начинаешь управлять «на упреждение». На почти половине скорости (а багги моя до 80 км/ч может разгоняться) спокойно гонял по залу, лавируя между павильонами, стульями, людьми. Так что тут, скорее, важна стабильность задержки, а не её абсолютное значение в миллисекундах. Минимальная достигнутая задержка при коннекте к обычному роутеру через обычный Wi-Fi свисток была где-то в районе 200 мс, а при коннекте через общепризнанный эталон — мощные роутеры фирмы Ubiquity минимальная задержка при уверенном коннекте — около 100 мс. Ещё на задержку влияет мощность устройства воспроизведения видеопотока (ПК, смартфон), если оно не успевает декодировать сырой видеопоток (кодек H264) то приятного плавного видео не будет.

Когда я управлял довольно скоростной багги в Шеньчжене, сидя дома в Москве, довольно комфортно было рулить, хотя только сетевой пинг от меня до сервера китайского 4G оператора был около 300 мс. Плюс ещё 100 мс наши — итого под полсекунды набегает. Однако отлично покатался :-)

Некоторые нюансы при связи по 4G

После диких дропов при полёте на самолёте разобрались в чём проблема. Если коннект через 4G — надо параметр mtu устанавливать равным 1322 или меньше. Меньше не надо, ставим mtu=1322 и не паримся. В локальной сети я обычно вообще 16000 ставлю (максимальный размер Jumbo Frames), в локалке это нормально работает, а вот через Интернет уже проблемы будут с прохождением пакетов.

Ссылки

Так как текста получилось овер-чем-дофига, основные ссылки повторю.

Прошивка rcboard-0.01.002.zip для Виртурилки

Дистрибутив Virt2real Player для Windows.
То же самое, но не установщик а просто архив
Под Win8 некорректно проверяет наличие DirectX, так что можно просто архив распаковать. Требуется .Net 4.5 и DirectX.

Описание прошлой версии РЦборды и Virt2real Player
Ещё описание рцборды, старый протокол

Приложение для Android. Только локальное управление.
Приложение для IOS, только локальное управление, нет обнаружения девайсов. Сейчас там старая версия, новая проходит аппрув.

P.S. Эхх, жаль Тачка Бонда не дожила до появления рцборды :-(

Если кто не в курсе

habrahabr.ru/company/virt2real/blog/172167/

Последние испытания, когда с телеканала Discovery приезжали ролик снимать

Сейча она вот так выглядит
Рцборда, или Как Сделать Управляемую через Интернет Машинку - 13
Задняя передача сдохла, дно проржавело и вывалилось. В общем, кирдык пупсику :-(

Автор: Gol

Источник

Поделиться

  1. Тигер:

    Где достать этот Virt2Real ?

* - обязательные к заполнению поля