Программы наземных станций, такие как 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.
Также в 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.