Skip to content

Latest commit

 

History

History
46 lines (35 loc) · 6.04 KB

rcjoystick.md

File metadata and controls

46 lines (35 loc) · 6.04 KB

Использование аппаратуры как джойстика для передачи каналов RC через mavlink

Теория

Программы наземных станций, такие как Mission Planner или QGroundControl, способны распознавать подключенные джойстики либо аппаратуры в режиме usb-джойстика и передавать на полетный контроллер значения осей в пакете RC_CHANNELS_OVERRIDE (#70). Однако, QGC передает только первые 4 канала (две оси), остальное можно назначить только на кнопки, а MP может это делать только под Windows, что не всегда удобно. Я написал простейшее приложение для регистратора, которое распознает подключенный джойстик и отправляет пакеты RC_CHANNELS_OVERRIDE в версии протокола mavlink 2 для поддержки 18 каналов напрямую в порт telemetry_tx, который обычно опубликован на 127.0.0.1:14650 регистратора. Порт, адрес, время между отправками пакетов, число осей и устройство в системе можно переназначить, смотрите rcjoystick -h.

Usage:
 [-v] verbose;
 [-d device] default '/dev/input/js0';
 [-a addr] ip address send to, default 127.0.0.1;
 [-p port] udp port send to, default 14650;
 [-t time] update RC_CHANNEL_OVERRIDE time in ms, default 50;
 [-x axes_count] 2..9 axes, default 5, other channels mapping to js buttons from button 0;
 [-r rssi_channel] store rx packets per second value to this channel, default 0 (disabled);
 [-i interface] wlan interface for rx packets statistics, default wlan0;

Например, отправлять можно не в telemetry_tx, а в mavlink_routerd, если вам так нужно. Пакет для сборки в buildroot от OpenIPC тут.

Запускаем

Нам необходимо ядро и rootfs с поддержкой usb-hid на регистраторе. Для этого прошейте их из /hi3536dv100 каталога. Необходимо обеспечить запуск модуля hid-generic.ko, для этого добавьте modprobe hid-generic.ko в S95hisilicon. В свежесобранном ядре модуль hid-generic.ko загружается автоматически.

Далее нужно скопировать бинарник rcjoystick в /usr/bin регистратора, через WinSCP и назначить права на исполнение: chmod +x /usr/bin/rcjoystick. Перезагружаемся, подключаем аппаратуру к регистратору по usb и пробуем в консоли запустить rcjoystick -v. Если все прошло хорошо, то на экране мы должны увидеть значения осей при изменении положения стиков и переключателей, а в программе телеметрии, например в QGC (analyse tools > Mavlink inspector > RC_CHANNELS_RAW) должны изменяться каналы. Для запуска на постоянную можно прописать его в отдельный сервис S99rcjoystick, главное чтобы он запускался после wifibroadcast.

RSSI

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

Указываем -r 16 и, если интерфейс wfb не wlan0, то и его -i wlanX и в указанный канал будет попадать число принятых наземкой пакетов в секунду. У меня оно в районе 800, вы можете увидеть свое применив ключ verbose (-v). Далее указываем на полетнике:

RSSI_TYPE	2
RSSI_CHANNEL	16
RSSI_CHAN_LOW	0
RSSI_CHAN_HIGH	800 //ваше обычное значение, примерно среднее, не максимальное и не минимальное.

Значение будет отправлено на полетник, где он его обработает и установит 0..99 в rssi.

Проект пока в стадии тестирования, поэтому присылайте свои отзывы о попытках и пожелания.

Текущие проблемы

Иногда наблюдаются кратковременные фризы, если активно долбить оба стика во всех направлениях. Дебаг говорит, что от драйвера не приходят в это время события о перемещении. Этот эффект не наблюдается, если использовать "радиоудлинитель" джойстика в виде arduino pro micro, которая парсит SBUS от вашего приемника и переводит в usb-hid-joystick.