Как сделать управляемую тележку 2 — различия между версиями

Материал из virt2real wiki
Перейти к: навигация, поиск
Строка 279: Строка 279:
  
  
=Универсальный режим=
+
 
 +
 
 +
=Универсальный режим подключения=
  
 
Самый простой вариант подключения - когда не требуется делать переброс портов реализуется с помощью UDP Hole Punching, пока находится в разработке. Т.е. работает, но до конца не доделан, так что пока этот функционал не добавляю в rcboard и v2rplayer. Как будет готово - добавлю.
 
Самый простой вариант подключения - когда не требуется делать переброс портов реализуется с помощью UDP Hole Punching, пока находится в разработке. Т.е. работает, но до конца не доделан, так что пока этот функционал не добавляю в rcboard и v2rplayer. Как будет готово - добавлю.

Версия 21:11, 1 июля 2014

На базе RCboard


Содержание

Вступление

В этой инструкции рассмотрим создание простейшей управляемой гусеничной тележки. У меня пока нет нормального Pan-tilt для камеры, так что камера зафиксирована, крутиться не умеет. Так что управление ею я не делал (пока ещё). Так что тележка пока будет просто ездить. Но ездить она будет и при локальном управлении (через домашний Wi-Fi), через Интернет, через тот же роутер, но с доступом "снаружи" и через Интернет с помощью Yota.


Сборка железа

Итак, нам потребуются:

  • тележка (гусеничная или колёсная)
  • Виртурилка (как же без неё)
  • моторшилд, или любые другие драйверы коллекторных моторов (пока задействовано будет 2 канала)
  • Wi-Fi модуль Virt2real или USB Wi-Fi свисток


Я обычно использую гусеничную тележку Dagu RP5. Она уже фигурировала в инструкции под названием Как сделать управляемую тележку. Собственно, сборка аналогична сборке из той инструкции, только подключать будем только моторы гусениц.


Rcboard telegue.png


Моторы гусениц подключаются к пинам разъёма J1 моторшилда. Правый мотор - к контактной паре 1, левый - к паре 2. Моторы должны быть не сильно мощными, моторшилд обеспечивает максимальный ток на 1.5А канал (кратковременно возможно повышение тока до 2А, при постоянном превышении нагрузки сработает защита и канал будет обесточен).

Также нужно надеть перемычку на джампер J11 в положение 1-2 (внешнее питание).

Для локальной связи будем использовать Wi-Fi. Тут на выбор - либо использовать родной модуль Virt2real Wi-Fi, либо использовать USB Wi-Fi. На данный момент с Virt2real Wi-Fi имеются проблемы (дохнут, заразы). Из USB свистков самый дальнобойный оказался ASUS N10. Другие проверенные свистки ASUS N53, D-link DWA160 (rev.B2), ASUS N-13 отлично работают в текущей прошивке, но дальнобойность оказалась чуть поменьше чем у N10.

Для непосредственного (без Wi-Fi) выхода в Интернет будем использовать USB свисток Yota. Существуют свистки нескольких видов, различаются незначительно, работоспособность в прошивке одинаковая.


Настройки борта

Подразумевается, что на microSD карточку уже залита прошивка (версия от 18.06.2014 http://files.virt2real.ru/firmware/virt2real-board/1.1/18_06_2014_sdcard.hd.img.zip или младше) и настроено подключение по wi-fi к локальному роутеру.

Теперь нам требуется настроить RCboard по схеме "наземная часть - сервер".

  • Идём в админку, в раздел RC->RC Board. В подразделе "общие настройки" ставим галочку около "Запускать при включении питания", чтобы приложение RCboard прописалось в автозапуск.
  • Там же выбираем "Использовать Локальный конфиг". Жмём "Сохранить".
  • Идём в подраздел "Локальная конфигурация".

Так как наш девайс танкового типа (поворот за счёт разницы вращения гусениц), устанавливаем переменную devicetype в танковый тип.

devicetype=1

Так как мы настраиваем по схеме "наземная часть - сервер", то бортовая часть у нас является клиентом. Устанавливаем переменную role в это значение

role=client

Для режима "клиент" необходимо указать адрес сервера. Это ip адрес компьютера, с которого будем управлять тележкой.

server_addr=192.168.1.10

Также для режима "клиент" нужно указать порт сервера команд. По умолчанию V2Rplayer слушает порт 1082

port=1082

Битрейт видео устанавливаем 2 мегабита

bitrate=2600000

Параметр MTU устанавливаем в 30000 для максимального быстродействия. Здесь есть тонкость - такое значение можно установить только если хороший коннект, иначе будут частые рассыпания картинки. При плохой связи лучше установить дефолтное значение - 1444 или 1500.

mtu=30000

Порт для видеопотока обычно 3000

videoport=3000

Так как канал связи у нас Wi-Fi, надо указать это в настройках, чтобы получать параметры связи по каналу телеметрии. Интерфейс Wi-Fi устройства обычно называется wlan0, но если у вас другое название - надо его указывать вместо wlan0

wlantype=1
wifi_iface=wlan0

Параметр vref надо установить в значение 20, т.к. это именно это значение для делителя напряжения моторшилда

vref=20


Остальные параметры можно не изменять.

Жмём кнопку "Сохранить". Всё, настройка борта завершена. Теперь надо или запустить RCboard вручную, зайдя в основной подраздел меню RC->RC board и нажав Большую Синюю кнопку. Либо можно перезагрузить бортовую Виртурилку, rcboard запустится автоматически.


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

Качаем приложение http://files.virt2real.ru/soft/v2rplayer/v2rplayer-0.1.zip , разархивируем куда-нибудь и запускаем файл v2r_player.exe.

!!! Приложение пока работоспособно только по Windows 7 x64


Так как приложение по умолчанию настроено на схему "наземная часть - сервер", то там уже должна появиться картинка с камеры тележки и внизу, в строке телеметрии, должны появиться надписи "Подключено", статус коннекта Wi-Fi и напряжение батареи тележки.

Выглядеть должно примерно вот так

Rcboardexample1.png



На всякий случай, рассмотрим настройки рулилки под эту схему.

Щёлкаем правой кнопкой мыши по окну v2rplayer, выбираем пункт меню Сеть->Настройки сети.

Задаём роль "сервер", адрес не указываем, порт - 1082. Ставим галочку в "подключаться к серверу при запуске", задаём тайм-аут (время отсутствия сигнала с борта, в миллисекундах, по прошествии которого будем считать что борт отключился). В разделе "переброс портов" можно ничего не указывать, так как мы пока рассматриваем локальное управление. Не забываем сохранить настройки!

Теперь настраиваем порт видео. Меню Видеопоток->Настройка видео. Тут достаточно лишь указать UDP порт. Обычно он стандартный - 3000. Изменять его может потребоваться только если используем несколько рулилок (приложений v2rplayer) на одном компьютере. В любом случае, значение порта должно совпадать с настройкой бортовой части (параметр videoport=3000 в конфиге rcboard).


Так как джойстик мы ещё не настраивали, можно поездить с помощью клавиатуры. Клавиши "вперёд","назад", "влево", "вправо", "A" и "S" для изменения скорости, "Ctrl" - форсаж.


Теперь подключим джойстик.

Подключение джойстика

Берём обычный джойстик (желательно с аналоговыми осями, для пропорционального управления), втыкаем в USB порт компьютера. Я обычно использую Logitech Rumble Gamepad F510.

Убеждаемся что джойстик видится виндой, после чего запускаем rcboard.

Щёлкаем правой кнопкой мыши по окну rcboard, заходим в меню Джойстик->Настройка.

Теперь необходимо настроить нужные оси. В окне настроек справа вверху выбираем нужный джойстик (если подключено несколько джойстиков, иначе джойстик там уже выбран).

Двигаем на джойстике нужную ось, в группе "Все оси джойстика" увидим изменяющиеся значения. Например, когда я двигаю на джойстике левую аналоговую палку вверх-вниз, изменяется значение "Y". Когда двигаю её же влево-вправо, то изменяется "X". Допустим, я хочу чтобы вверх-вниз задавало направление движения, а влево-вправо - повороты. Для этого щёлкаем правой кнопкой мыши по числу, которое написано рядом названием оси, откроется менюшка со списком каналов. Ось X это получается руль, значит выбираем "Канал 1", Ось Y - газ, выбираем "Канал 2".

Теперь самое главное - задаём танковый тип управления. Под каналами передатчика есть выбор типа, "автомобильное" и "танковое". Выбираем танковое, после чего сохраняем изменения кнопкой "Сохранить".

Снова видим окно с видео, пробуем подвигать оси джойстика и видим что тележка ездит вперёд-назад правильно, а вот влево-вправо ездит наоборот. Идём обратно в настройки джойстика и ставим галочку в чекбоксе "инверс" около "канал 1 (руль)". Сохраняем настройки и снова пробуем поездить.



Подключение RC аппы

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


Подключение USB руля/педалей

Процесс подключения аналогичен подключению обычного USB джойстика, разница лишь в настройке осей. Я использую руль Logitech Driving Force GT, так что всё буду описывать на его примере. Для других рулей всё должно быть аналогично, только оси могут быть использованы другие.

Мой руль по умолчанию работает в нативном режиме, т.е. каждая педаль использует свою ось. В этом основное отличие от обычного джойстика, где газ и тормоз (езда назад) используют одну общую ось. Но педаль газа использует свою ось (у меня это ось Y), а педаль тормоза - ось Rz, так что нам необходимо сделать их суммирование для получение полноценного канала газа.

Для этого служит так называемая "Составная ось". Всего лишь надо назначить ось газа на одну составную ось ("составная 1", она же CMP1) а ось тормоза - на вторую ("составная 2", она же CMP2). А вот результирующую ось ("SUM") уже назначаем на канал газа. Если тележка едет вперёд, хотя жмём газ - надо поставить инверсию на канале газа.

Вроде несложно, но добавлю видеодемонстрашку на всякий случай.



Настройка буфера видео

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

Однако можно настроить буферизацию под конкретные условия. Для визуализации заполнения буфера поверх видео (в окне оверлея) выводится небольшой оранжевый индикатор, находится в правом нижнем углу. Подробное описание можно почитать в разделе про RCboard, а сейчас рассмотрим практическое применение.

Когда всё нормально и видеопоток приходит без проблем, индикатор постоянно заполнен или постоянно пустой. Это зависит от режима буферизации, который задаётся в v2rplayer в менюшке, раздел "видеопоток -> настройка видео". Параметр "rtpjitterbuffer" как раз и задаёт тип буферизации. Если включён режим "buffer" то индикатор буфера должен быть постоянно заполнен. В режиме "slave" индикатор должен быть постоянно пустой. В режиме "none" - тоже пустой.

Основная настройка буферизации сводится к настройке параметров "буфер" и "макс.задержка" там же, в настройках видео. Если индикатор буфера начинает скакать - надо увеличить значение в поле "буфер". Макс. задержка не так однозначно влияет, так что её подбирать надо экспериментально. Так же буфер должен быть не меньше чем значение MTU в настройках бортовой части.

Я обычно ставлю двойное значение MTU, т.е. если MTU на борту задано 30000, размер буфера ставлю 60000.


Управление через Интернет, по Wi-Fi

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

В этом случае тележка находится за NAT (Netword Address Translation), т.е. не имеет прямого выхода в Интернет. V2Rplayer тоже, скорее всего, не имеет прямого выхода в Интернет, т.е. тоже находится за NAT. Так что нам надо сделать переброс портов на роутере. Так как видеопоток в любом случае должен приходить в V2Rplayer, логичнее делать переброс портов там где запускается V2Rplayer, а не там где ездит тележка, тем более что V2Rplayer умеет сама перебрасывать на себя порты.


Бортовая часть - клиент

Тележка (точнее, Виртурилка на её борту) будет подключаться к V2Rplayer. Для этого надо знать внешний IP адрес компьютера, на котором будет запущена V2Rplayer. Его можно узнать на любом интернет-сервисе по определению IP, или на странице удалённой конфигурации http://rc.virt2real.ru/remoteconfig/ Там, под логотипом, будет сообщение "Вы опознаны как %имя_пользователя_форума%. Ваш IP %ваш_IP%"

Вот этот IP надо указать в настройках бортовой части, в админке, в разделе RC->RC Board. "Локальная конфигурация", server_addr=%ваш_IP%

Теперь, при запуске rcboard, тележка будет слать телеметрию на указанный IP, а когда с этого адреса придут команды - будет их отрабатывать моторами.


Теперь запускаем RCboard. Идём в меню, "Сеть->Настройки сети". Там, в группе "Переброс портов", из выпадающего списка выбираем локальный IP. Их может быть несколько (если компьютер имеет несколько интерфейсов), выбираем нужный (тот, который находится в сети с доступом в Интернет). После этого жмём "Подключить", или перезапускаем приложение v2rplayer. При этом v2rplayer отправит на локальный роутер команду переадресации порта, т.е. чтобы все подключения на порты 1082 и 3000 (управление и видео) переадресовывались на компьютер, на котором v2rplayer запущен.

Это реализовано с помощью UPnP, Universal Plug and Play (UPnP) (статья в Википедии http://ru.wikipedia.org/wiki/UPnP). Для корректной работы необходимо чтобы роутер поддерживал UPnP и этот режим был включён в настройках роутера. Современные роутеры умеют это и UPnP обычно включено по умолчанию, так что должно работать. Если же не работает - необходимо или включить UPnP на роутере или вручную настроить переброс портов.

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

Теперь, если всё настроено правильно и тележка включена, мы должны увидеть видео с тележки в приложении V2Rplayer и можем управлять тележкой.


Бортовая часть - сервер

Аналогично варианту "бортовая часть - клиент", только в этом случае V2Rplayer будет подключаться к тележке. Переброс портов потребуется и на строне V2Rplayer, и на стороне тележки. В этом случае не требуется знать IP адрес V2Rplayer, но требуется знать внешний IP адрес роутера, к которому тележка подключается по Wi-Fi.

Необходимо в настройках тележки, в админке, в разделе RC->RC board, подраздел "Локальная конфигурация", поменять значение переменной role

role=server

В настройках V2Rplayer надо в меню, раздел "Сеть->Настройки сети", установить роль "клиент" и указать адрес. Адрес это как раз внешний IP сети, к которой подключена тележка.

На роутере, к которому подключена тележка, необходимо перебросить порт UDP 1082 (команды управления) на IP тележки. Это можно сделать вручную, в настройках роутера. Или, если роутер поддерживает UPnP, автоматически с Виртурилки командой

upnpc -a 192.168.1.128 1082 1082 udp

Где 192.168.1.128 - адрес Виртурилки на борту тележки, 1082 - локальный порт и 1082 - внешний порт. Все пакеты из Интернет на UDP порт 1082 роутера будут переадресовываться на порт 1082 Виртурилки.


Подключение через Yota

Теперь рассмотрим более интересный вариант - управление тележкой когда она выходит в Интернет через 4G. В конкретном случае - через USB свисток Yota.

В этом случае мы не сможем заходить в админку, чтобы изменить какие-то параметры, так что нам потребуется удалённая конфигурация для rcboard. Так что перед тем как втыкать 4G свисток Yota в Виртурилку, сделаем базовые настройки.

Для этого открываем админку, раздел RC->RC board. В подразделе "Общие настройки" выбираем "Использовать удалённый конфиг", затем в подразделе "Удалённая конфигурация" указываем параметры для подключения к серверу конфигураций.


!!! Данный сервис работает только если у вас есть учётная запись на форуме http://forum.virt2real.ru и вы там залогинены !!!


Открываем в браузере страницу http://rc.virt2real.ru/remoteconfig/ и создаём конфигурацию (щёлкнуть по иконке с плюсиком). Будет создана новая конфигурация с названием "new config". Теперь щёлкаем по названию конфигурации. В открывшемся разделе видим поле "Ваш ID пользователя", это ID пользователя с форума http://forum.virt2real.ru. А в самом низу страницы видим поле "хэш". Берём эти значения и вставляем в поля "Идентификатор пользователя" и "Хэш-строка" в админке. "URL получения конфигурации" в админке оставляем по умолчанию, http://rc.virt2real.ru/getconfig


Сохраняем настройки в админке, продолжаем править настройки на страничке http://rc.virt2real.ru/remoteconfig/

Настройка ничем не отличается от настройки локальной конфигурации в админке, параметры те же самые. Внешний IP адрес можно посмотреть там же на странице редактирования удалённой конфигурации.

role=client
server_addr=внешний_ip_v2rplayer

Главный нюанс - MTU необходимо установить 1322, иначе будут постоянные дропы.

mtu=1322

Также не забываем установить vref для моторшылда

vref=20

Также в админке, в настройке сети, необходимо удалить все DNS сервера, чтобы при коннекте Yota добавила свой DNS.


В настройках V2Rplayer при подключении через Yota я обычно использую такие значения:

  • буфер: 30000
  • макс.задержка: 500
  • rtpjitterbuffer: buffer
  • роль: сервер


Переброс портов для V2Rplayer делается аналогично прошлым вариантам подключения.



Универсальный режим подключения

Самый простой вариант подключения - когда не требуется делать переброс портов реализуется с помощью UDP Hole Punching, пока находится в разработке. Т.е. работает, но до конца не доделан, так что пока этот функционал не добавляю в rcboard и v2rplayer. Как будет готово - добавлю.