RCboard — различия между версиями

Материал из virt2real wiki
Перейти к: навигация, поиск
Строка 665: Строка 665:
  
 
=Примеры использования=
 
=Примеры использования=
 +
 +
...в процессе написания...
  
 
[[Как сделать управляемую тележку 2]]
 
[[Как сделать управляемую тележку 2]]

Версия 21:51, 19 июня 2014

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

Состоит из трёх частей: бортовая часть, наземная и серверная.

Бортовая называется, собственно, RCboard.

Наземная - RCground.

Серверная (вспомогательная, для удалённой настройки) - http://rc.virt2real.ru

Ну и ещё раздел RCboard в админке Виртурилки.


Содержание

Вступление

Изначально планировалось сделать просто плеер видео для RTP потока с Виртурилки. Потом подумалось - а почему бы не добавить в него возможность управления объектом, с которого видеопоток идёт. При подключении через 4G сеть Yota появилась необходимость иметь возможность изменять параметры бортовой части при недоступности "админки" и консоли, так что добавилась серверная часть rc.virt2real.ru.

Сначала планировалось сделать замену штатного RC приёмника для радиоуправляемых аппаратов. Виртурилка со своими 4-мя каналами PWM вполне это может. Но впоследствии была добавлена возможность управления и тележками с помощью моторшилда.

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

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



Принцип работы

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


Клиент - бортовая часть

RCboard на Виртурилке запускается в режиме клиента, наземная часть - в режиме сервера. Для подключения к наземной части (серверу) необходимо в конфигурации указать её IP и порт UDP. При запуске бортовой части она сразу же начнёт слать на указанный ip:port команду "alive" и телеметрию (состояние бортовой части). Если сервер запущен - он принимает эти сигналы и понимает что клиент подключился. Из этих же команд сервер определяет ip и порт подключившегося клиента и начинает ему отправлять свой сигнал "alive" и команды управления (состояние осей джойстика). В сигнале "alive" так же сервер передаёт клиенту свой тип. На данный момент типов два - наземная часть с отображением видео и наземная часть без отображения видео (только передача команд, как в случае с RCjoy).

Обычно используется когда бортовая часть находится на NAT (т.е. не имеет белого IP), например, при подключении через Yota. Но и в локальной сети такой тип подключения удобен - не требуется знать IP бортовой части, т.к. она сама подключается к серверу, но IP сервера (наземной части) должен быть указан в настройках бортовой части.

Клиент - бортовая часть



Клиент - наземная часть

RCboard на Виртурилке запускается в режиме сервера, наземная часть - в режиме клиента. В настройках наземной части должен быть указан IP бортовой части. Наземная часть сразу после запуска начинает отправлять сигналы "alive" и команды управления на бортовую часть. Когда бортовая часть принимает эти сигналы, то определяет IP и порт, с которого они были отправлены и начинает передавать видео на этот IP, но на другой порт (порт видео отдельно задаётся в конфигурации бортовой части). Так же на эти IP:порт бортовая часть начинает передавать свой сигнал "alive" и телеметрию. В случае пропадания сигнала "alive" от наземной части на промежуток времени, больший чем maxalivetimeout (задаётся в конфигурации бортовой части) бортовая часть определяет разрыв подключения и включает режим Fail-safe (обычно останов всех моторов), который так же останавливает передачу видео. Если в дальнейшем произошло новое подключение (пришёл сигнал "alive") - то снова определяется IP отправителя, снова запускается видеотрансляция и возобновляется приём команд.

Клиент - наземная часть




RCboard

Управляющая часть, устанавливается на борт подвижного устройства (машинки, самолёта, танка, лодочки и т.д.). Состоит из Виртурилки, моторшилда (в случае необходимости управления силовой нагрузкой или увеличения количества каналов PWM), беспроводного приёмо-передатчика (Virt2real Wi-Fi модуль, USB Wi-Fi, 3G/4G USB модема, роутера Ubiquity или другого оборудования), программного обеспечения "RCboard".

Исходные коды расположены в репозитории https://github.com/virt2real/rcboard

Приложение входит в состав штатных прошивок, начиная с версии от 18.06.2014. В случае необходимости, может быть установлено отдельно, командами

opkg-cl update
opkg-cl install rcboard


Приложение находится в каталоге /opt/rcboard и для своей работы требует несколько файлов:

  • rcboard - собственно, приложение
  • config.sh - базовый конфиг для указания роли (клиент/сервер) и параметров для получения удалённой конфигурации.
  • rcboard.conf - локальная конфигурация (описание см. в разделе "Параметры конфигурации rcboard"
  • run.sh - скрипт запуска

Так же есть ещё скрипт автозагрузки S98rcboard, который размещается в /etc/init.d (или в /etc/init.d.sample, если он неактивен).

Ключи запуска rcboard можно узнать, запустив rcboard с ключом -h или -?

# ./rcboard -h
RC car control
by Gol, 2014
Usage: [-u -p] [-a] [-v]
-u              remote config request user ID
-p              remote config request hash
-a              remote config URL
-v              verbose output
-? or -h        show this info


Ключ Описание
u задаёт user ID для получения удалённой конфигурации
p задаёт хэш-строку для получения удалённой конфигурации
a задаёт URL получения удалённой конфигурации
v показывать отладочные сообщения
? или h показать справку по ключам



RCground

Стостоит из ПК и программного обеспечения. Для управления можно использовать клавиатуру (простейший вариант), USB джойстики/геймпады, обычную RC аппаратуру управления (необходимо подключить к компьютеру по USB через тренерский разъём).


Программное обеспечение на данный момент:

  • V2Rplayer
  • RCjoy

Ожидаются ещё приложения для iPad/iPhone и для девайсов на базе Android.


V2Rplayer

Пока только под Win 7 x64. Работает пока только с HD прошивкой (фиксированное разрешение 1280x720), можно добавить и обычное разрешение, но смысла не вижу.


Запуск

Запуск v2rplayer

При запуске будет произведён поиск подключенных USB джойстиков.

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

Так же производится поиск библиотек GStreamer. Сначала ищутся в текущем каталоге, затем по путям в переменной %GST_PLUGIN_PATH%


Основное окно v2rplayer

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



Оверлей

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

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

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


Основное окно v2rplayer


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


Меню

При щелчке любой кнопкой мыши по видеоокну (или правой кнопкой - по заголовку окна) откроется менюшка с различными пунктами настройки.


Менюшка


Пункты меню (в дальнейшем могут меняться, но пока именно такие):

  • Видеопоток
    • Пауза - остановить показ видео
    • Поверх всех окон - собссно, сделать видеоокно отображаемое всегда поверх других окон.
    • Сохранять пропорции - при изменении размеров окна оставлять видео с оригинальным соотношением сторон.
    • Запись видео - включить/остановить запись
    • Настройка видео - различные настройки видеострима.
  • Оверлей
    • Показывать оверлей - показать/скрыть оверлей
  • Джойстик
    • Обрабатывать джойстик - отправлять или не отправлять команды джойстика на борт
    • Настройка - выбор джойстика, настройка осей, выбор типа управления и т.д.
  • Клавиатура
    • Настройка - настройка клавиш и типа клавиатурного управления.
  • Сеть
    • Настройка сети - настройка таймаута подключения, портов управления, переброса портов, роли (клиент/сервер),
  • Управление бортом
    • Перезапустить скрипт управления - отправить на борт команду перезапуска приложения rcboard (не ребут виртурилки!)
    • Изменить параметры передачи видео - пока позволяет только изменить битрейт видео и mtu.
  • Выход


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

Настройка видео
Название контрола Описание
UDP порт порт, на который приходит видеопоток с борта
размер блока параметр udpsrc, обычно равен 4096
буфер параметр buffer для элемента gstrtpjitterbuffer, размер буфера для приёма RTP видеопотока
макс. задержка параметр latency элемента gstrtpjitterbuffer, максимальная задержка видеопотока
drop frames отбрасывать или не отбрасывать пакеты, не уложившиеся в период максимальной задержки
do-timestamp осуществлять поиск таймстампов в видеопотоке, обычно включено
rtpjitterbuffer тип буфера, может принимать значения none, slave, buffer. Отличия пока толком неясны, выбираются методом тыка под разные варианты применения.
эффект несколько видеоэффектов пост-обработки видео (заработают только после перезапуска приложения)
Каталог каталог в который помещать записанные видеофайлы
Имя файла начальное имя файла, к нему будет добавлено время начала записи. Т.е. если указать имя файла stream.mkv, файл получится stream191000.mkv если запись была запущена ровно в десять минут восьмого вечером.
Создавать лог записывать сообщения GStreamer в лог-файл (в текущем каталоге), уровень логирования задаётся рядом в поле. Чем больше значение - тем подробнее лог.



Настройка джойстика

Настройка джойстика
Название контрола Описание
Все оси джойстика все стандартные оси джойстиков в DirectInput под Windows.
Все слайдера джойстика слайдеры - те же оси джойстика, но специфические.
Составная ось "виртуальная ось", используется для суммирования двух реальных осей (необходима для USB педалей в нативном режиме, когда каждая педаль это отдельная ось)
Каналы передатчика 8 каналов, на любой из которых можно настроить любую ось. Руль и газ обычно 1-й и 2-й канал соответственно.
Инверс Инвертировать значение канала
Тип управления Автомобильное - когда одна ось отвечает за руль, вторая за газ и т.д. Обычно используется для управления RC машинками. Танковое - когда управление гусеничными тележками (к примеру), т.е. из значений руля и газа высчитываются скорости вращения гусениц.
Кнопки джойстика тут отображаются нажатые кнопки джойстика, отправляются на борт но в rcboard пока не обрабатываются.


Сначала надо выбрать нужный джойстик (листбокс в правом верхнем углу). Для присвоения оси джойстика какому-то каналу надо правой кнопкой мышки щёлкнуть по нужной оси в разделе "Все оси джойстика". Появится менюшка со списком каналов, где нужно выбрать требуемый. Помимо каналов, в этой менюшке есть два специальных пункта - "составная 1" и "составная 2". Они означают присвоить оси не канал, а специальную ось CMP0 или CMP1 соответственно. CMP0 и CMP1 суммируются, результат помещается в поле SUM, которое уже можно назначить на любой канал. Не знаю как проще объяснить, постараюсь на видео заснять демонстрацию настройки на управление рулём и педалями.

Триммирования осей пока нет, но планируется. Сглаживание люфта осей (через НЧ-фильтр) пока в тестовом режиме.

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

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

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

На данный момент кнопки из раздела "Дополнительно" не обрабатываются (ещё не придумал куда их задействовать).

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


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

Настройка сети
Название контрола Описание
Адрес В режиме "клиент" - отправлять UDP команды по этому адресу. В режиме "сервер" недоступно.
Порт В режиме "клиент" - отправлять UDP команды на этот порт (и по адресу, указанному в поле "адрес"). В режиме "сервер" - слушать этот порт для приёма телеметрии.
Подключаться к серверу при запуске Если установлена галочка - автоматически начинать приём-передачу при запуске приложения.
тайм-аут промежуток времени, при превышении которого считать что подключение разорвано. С борта раз в 500мс приходит сигнал "alive", который обнуляет тайм-аут. Если сигналы не приходят в течении значения, указанного в этом поле - коннект потерян.
Переброс портов Локальный IP (их у хоста может быть несколько), на который пробросить порты для управления и для видео. Проброс портов реализуется с помощью протокола UPnP, т.е. приложение отправляет на локальный роутер команду устроить временную переадресацию извне на этот IP. Может работать не со всеми роутерами. При завершении работы приложения на роутер отправляется команда удаления переадресации, это может занимать несколько секунд, так что приложение может не сразу завершаться. Для отмены переброса портов (например, если это вручную настроено на роутере) это поле надо сделать пустым.
Роль "Клиент" - подключаться к rcboard, которая работает в режиме сервера. "Сервер" - принимать подключение, rcboard должна работать в режиме клиента.





RCjoy

Устанавливается на Виртурилку, к которой подключены USB джойстик (аппа, руль/педали и т.д.), осуществляет управление любой RCboard, но пока без приёма видео.


Админка

В админке Виртурилки есть раздел "RC" -> "RC Board", где можно выполнить настройки бортовой части rcboard.

Rcboardadminka1.png


Здесь можно запустить/остановить скрипт rcboard.


Общие настройки


Запускать при включении питания - поместить скрипт запуска в активные скрипты автозагрузки.

Использовать локальный/удалённый конфиг. Если локальный - то брать конфигурацию из локального файла настроек (/opt/rcboard/rcboard.conf ). Если удалённый - брать с сервера.


Удалённая конфигурация


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

По сути, тот же файл rcboard.conf, только находится на сервере и скачивается при запуске rcboard.

Редактирование удалённой конфигурации производится на сервере, см. раздел "Серверная часть".

Для получения конкретной конфигурации (их может быть сколько угодно для разных устройств или для разных применений одного устройства) используется простейшая идентификация по ID пользователя (ID юзера форума) и хэш-строчки, генерируемой при создании конфигурации на сервере. URL получения конфигурации по умолчанию настроен на сервер rc.virt2real.ru, скрипт по адресу http://rc.virt2real.ru/getconfig, но при использовании своего сервера можно указать другой URL.


Локальная конфигурация


Тут можно отредактировать содержание локального файла конфигурации (/opt/rcboard/rcboard.conf). Описание параметров см. в разделе "Параметры конфигурации rcboard".

Серверная часть

Используется для создания и редактирования конфигураций, используемых RCboard. Идентификация пользователей осуществляется по форумным учёткам, так что сначала необходимо войти на форум http://forum.virt2real.ru под своей учётной записью или зарегистрироваться там.

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

http://rc.virt2real.ru/remoteconfig/


Удалённая конфигурация


Слева мы видим список имеющихся у меня конфигураций. Чуть выше иконка для создания новой. При создании конфигурации присваивается дефолтное название "new config", которое можно изменить при редактировании. Слева от названия конфигурации иконка для её удаления. Справа от названия конфигурации - время её создания.

Для редактирования конфигурации надо щёлкнуть мышкой по названию. Увидим поле "Ваш ID пользователя" - это как раз тот ID который надо ввести в админке, в разделе удалённой конфигурации в поле "Идентификатор пользователя". А в самом низу есть поле "хэш", эту строчку необходимо ввести там же в админке в поле "Хэш-строка". Это всё что требуется, чтобы с сервера бралась именно эта конфигурация.

В самом низу ещё немного информации о времени создании конфигурации, времени последнего редактирования и время последнего обращения из rcboard.


В принципе, данный сервис можно использовать не только для получения конфигурации для rcboard, но и для получения конфига для чего угодно, что умеет скачивать файл (к примеру, wget из bash-скрипта).


Параметры конфигурации rcboard

Параметр Возможные значения Описание
devicetype 0 - 1 0 - RC (автомобильное управление), 1 - "tank", танковое управление.
role client/server client - подключаться к наземной части, server - принимать подключение от наземной части.
server_addr xxx.xxx.xxx.xxx Используется только в режиме клиента. Задаёт IP адрес сервера (наземной части), к которой надо подключаться.
port 1 - 65535, по умолчанию 1082 В режиме "клиент" - порт сервера, к которому надо подключаться для отправки телеметрии. В режиме "сервер" - принимать подключения команд управления на этот порт.
bitrate 1000 - 10000000, по умолчанию 1600000 Задаёт начальный битрейт видеотрансляции (бит/сек).
mtu 100 - 65535, по умолчанию 1500 Задаёт MTU (Maximum Transfer Unit) для формирования блоков для передачи. Чем больше - тем меньше загрузка процессора, но при плохой связи возможны пропадания кадров видео. При хорошем коннекте нормальное значение 30000. При коннекте через Yota нормальное значение не выше 1344. При меняющихся условиях - 1444.
initialhost по умолчанию 127.0.0.1 Задаёт хост, на который будет запущена видеотрансляция сразу после старта rcboard. Если равно 127.0.0.1 - не запускать трансляцию при старте.
videoport 1 - 65535, по умолчанию 3000 Задаёт порт UDP, на который будет транслироваться видеопоток.
vref 1 - 30, по умолчанию 20 Задаёт максимальное опорное напряжение для рассчёта напряжения питания борта. Зависит от делителя напряжения, подключённого к каналу ADC0. Для моторшилда vref = 20
verbose 0 - 1, по умолчанию 0 Если 1 - выводить отладочные сообщения в консоль, используется при отладке или настройке.
wlantype 1 - 4, по умолчанию 1 Задаёт способ опрашивания состояния канала связи. =1 - для подключения по Wi-Fi, =2 - для подключения через модем Yota, =3 - для подключения через Ethernet, =4 - для подключения с помощью оборудования Ubiquity. На данный момент работают только режимы 1 и 2.
wifi_iface по умолчанию wlan0 Имя интерфейса, для которого определять состояние подключения, используется только при wlantype=1
yota_status по умолчанию http://10.0.0.1/status URL для определения состояния подключения через модем Yota, используется только при wlantype=2
alive_max_timeout по умолчанию 5 Тайм-аут для сигнала alive с наземной части. При отсутствии сигнала alive дольше чем этот тайм-аут считается что коннект потерян и необходимо включить Fail-safe.
ppm0_con по умолчанию 43 CON, на котором использовать PWM0
ppm1_con по умолчанию 44 CON, на котором использовать PWM1
ppm2_con по умолчанию 19 CON, на котором использовать PWM2
ppm3_con по умолчанию 42 CON, на котором использовать PWM3
axis0 по умолчанию 1 Задаёт канал PWM для оси 0
axis1 по умолчанию 0 Задаёт канал PWM для оси 1
axis2 по умолчанию 2 Задаёт канал PWM для оси 2
axis3 по умолчанию 3 Задаёт канал PWM для оси 3
ppm0_min по умолчанию 700 Минимальное положение (в микросекундах) для PWM0 (ну или PPM0, тут спорная терминология). Как и максимальное положение, используется для ограничения крайних положений сервы.
ppm0_max по умолчанию 2200 Максимальное положение (в микросекундах) для PWM0.
ppm1_min по умолчанию 700 Минимальное положение (в микросекундах) для PWM1.
ppm1_max по умолчанию 2200 Максимальное положение (в микросекундах) для PWM1.
ppm2_min по умолчанию 700 Минимальное положение (в микросекундах) для PWM2.
ppm2_max по умолчанию 2200 Максимальное положение (в микросекундах) для PWM2.
ppm3_min по умолчанию 700 Минимальное положение (в микросекундах) для PWM3.
ppm3_max по умолчанию 2200 Максимальное положение (в микросекундах) для PWM3.
ppm0_zero 0 - 180, по умолчанию 90 Нейтральное положение (в абсолютном значении) для PWM0. Используется для Fail-safe.
ppm1_zero 0 - 180, по умолчанию 90 Нейтральное положение (в абсолютном значении) для PWM1. Используется для Fail-safe.
ppm2_zero 0 - 180, по умолчанию 90 Нейтральное положение (в абсолютном значении) для PWM2. Используется для Fail-safe.
ppm3_zero 0 - 180, по умолчанию 90 Нейтральное положение (в абсолютном значении) для PWM3. Используется для Fail-safe.



Протокол управления

Команд пока немного, это скорей базовый вариант.

Для передачи команд управления используются серии байтов, передаваемые по UDP. Команды управления всегда отправляются с наземной части на бортовую, неважно кто из них клиент или сервер. По умолчанию используется порт UDP 1082, но его можно изменить в настройках.

Команды состоят из последовательности нескольких байт, количество байт различное для разных типов команд. Тип команды задаётся первым байтом (байт 0). Последний байт является простейшей контрольной суммой - все байты команды (кроме последнего) складываются командой XOR, результат записывается в последний байт.


Типы команд управления (байт 0):

Тип 0 - alive

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

Номер байта Описание Значения
0 id команды ("alive") 0
1 тип клиента 0 - клиент без возможности воспроизведения видео, 1 - клиент с воспроизведением видео
2 контрольная сумма байт[0] ^ байт[1]


Тип 1 - команды RC осей ("автомобильное" управление)

Команды управления пропорциональными осями, 4 из которых отрабатываются аппаратными PWM Виртурилки.

Номер байта Описание Значения
0 id команды ("rc axis") 1
1 номер канала 0-3 (в текущей версии), позже будет каналов побольше. Каждый канал обрабатывается отдельным аппаратным PWM Виртурилки (см. описание конфигурации). Канал 0 обычно отвечает за руль, канал 1 - газ. Но это необязательное правило.
2 младший байт значения оси 0 - 255
3 старший байт значения оси 0 - 255 (пока не используется)
4 контрольная сумма байт[0] ^ байт[1] ^ байт[2] ^ байт[3]


Тип 2 - команды осей "танкового" управления

Команды управления пропорциональными осями, 4 из которых отрабатываются аппаратными PWM Виртурилки. Отличаются от команд "автомобильного" управления методом расчёта скоростей вращения гусениц.

Номер байта Описание Значения
0 id команды ("rc axis") 2
1 номер канала 0-3 (в текущей версии), позже будет каналов побольше. На данный момент канал 0 отвечает за руль, канал 1 - газ.
2 младший байт значения оси 0 - 255
3 старший байт значения оси 0 - 255 (пока не используется)
4 контрольная сумма байт[0] ^ байт[1] ^ байт[2] ^ байт[3]


Тип 3 - нажатия кнопок джойстика

Пока не используется.


Тип 5 - системные команды

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


Код 1

Выполнить перезапуск скрипта rcboard.

Номер байта Описание Значения
0 Тип команды 5
1 Код команды 1
2 Контрольная сумма байт[0] ^ байт[1]


Код 2

Изменить битрейт видео. Значение битрейта 32-х битное, занимает 4 байта.

Номер байта Описание Значения
0 Тип команды 5
1 Код команды 2
2 первый байт значения битрейта 0-255
3 второй байт значения битрейта 0-255
4 третий байт значения битрейта 0-255
5 четвёртый байт значения битрейта 0-255
6 контрольная сумма байт[0] ^ байт[1] ^ байт[2] ^ байт[3] ^ байт[4] ^ байт[5]


Код 3

Изменить MTU передачи видео. Значение MTU 32-х битное, занимает 4 байта.

Номер байта Описание Значения
0 Тип команды 5
1 Код команды 3
2 первый байт значения MTU 0-255
3 второй байт значения MTU 0-255
4 третий байт значения MTU 0-255
5 четвёртый байт значения MTU 0-255
6 контрольная сумма байт[0] ^ байт[1] ^ байт[2] ^ байт[3] ^ байт[4] ^ байт[5]



Протокол телеметрии

Телеметрия пока простейшая - напряжение питания борта, состояние сигнала беспроводной сети (для Wi-Fi или для Yota). Когда научусь высчитывать горизонт и компас из показаний IMU датчиков - в команды телеметрии добавятся соответствующие данные.

Контрольная сумма не используется.


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


Типы команд телеметрии (байт 0):

Тип 0 - alive

Сигнал о том что бортовая часть активна.

Номер байта Описание Значения
0 id команды ("alive") 0


Тип 1 - вольтаж

Сообщает напряжение питания борта. Целая и десятичная части передаются в разных байтах. Например, для напряжения 7.4В байт[1] = 7, байт[2] = 4.

Номер байта Описание Значения
0 id команды ("voltage") 1
1 целое значение напряжения
2 десятичное значение напряжения


Тип 2 - состояние сигнала

Так как для разных способов беспроводной связи (Wi-Fi, 3G/4G, роутеры Ubiquity и т.д.) состояние сигнала определяется и выглядит по разному, введены разные коды типа связи.


Номер байта Описание Значения
0 id команды ("signal") 2
1 код сигнала 1 - Wi-Fi, 2 - Yota, 3 - LAN, 4 - Ubiquity
2 состояние подключения 0 - не подключено, 1 - подключено. Толку от этого байта мало, так что особо не используется.
3 - 103 строка состояния сигнала По-разному для разных типов связи. Например, для Wi-Fi она выглядит так: '"ssid";Frequency=2.472GHz;Quality=100/100;Signal level:-57 dBm'



Ссылки

RCboard https://github.com/virt2real/rcboard/tree/master/board

Исходный код V2Rplayer на Github (C# .Net 4.0 Client) https://github.com/virt2real/rcboard/tree/master/ground

GStreamer SDK для сборки V2Rplayer https://code.google.com/p/ossbuild/downloads/detail?name=GStreamer-WinBuilds-SDK-LGPL-x86-Beta04-0.10.7.msi


Дистрибутив V2Rplayer (GStreamer включён в состав) http://files.virt2real.ru/soft/v2rplayer/

GStreamer, используемый в V2Rplayer https://code.google.com/p/ossbuild/downloads/detail?name=GStreamer-WinBuilds-LGPL-x86-Beta04-0.10.7.msi


Примеры использования

...в процессе написания...

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

Как сделать управляемую машинку

Как сделать управляемую лодочку