01 февраля 2017

OrangeRX USB Wireless Dongle - беспроводной USB-свисток для симулятора

Давно интересуюсь темой беспроводного подключения передатчика к симулятору. Сегодня расскажу об еще одной попытке приспособить для этого промышленный продукт. Речь пойдет о беспроводном USD-свистке от OrangeRX.


USB-свисток выпускается в двух вариантах: с протоколом DSM2/DSMX и с протоколом FrSky. У меня первый вариант. Для него есть небольшое руководство на английском.

С привязкой USB-свистка к передатчику никаких проблем не возникло. В пульте DEVO-10 с прошивкой Deviation выставил протокол DSMX, 10 каналов. Если выставить меньшее количество каналов, то не все оси будут работать! На USB-свистке зажал кнопку сбоку и вставил его в USB-разъем. В пульте нажал Bind и все. USB-свисток завелся сразу и без проблем. Даже если его выдернуть из USB-разъема, то привязка к передатчику сохранится.


В компьютере USB-свисток определяется как восьми-осевой джойстик без кнопок с названием "Cypress USB dsmx HID". При первом подключении насторожило полное отсутствие дребезга в около-нулевой зоне. Провел калибровку и оказался в полном недоумении. Мертвая зона была порядка 8% хода стика в каждую сторону! Целый вечер сидел и в настройках пульта вырезал эту огромную мертвую зону. А проблема-то была совсем в другом. Мертвая зона образовалась в процессе калибровки. Когда в настройках джойстика руками выставил нормальные значения, то мертвая зона исчезла, но и дребезг не появился! Когда стики находятся по центру и откалиброваны в пульте, то джойстик показывает нулевые значения по осям.


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

Для настройки джойстика в Ubuntu потребуются две программы: joystick и jstest-gtk. Обе устанавливаются одной командой:

# sudo apt-get install joystick jstest-gtk

Затем в jstest-gtk делаются настройки, как на скриншоте выше, и результат сохраняется командой:

# sudo jscal-store /dev/input/js0

При следующем подключении USB-свистка данные калибровки автоматически подтянутся.

В Windows получилась примерно такая же картина. USB-свисток откалибровался без мертвой зоны. Все каналы работали. Никакие драйвера не потребовались.


USB-свисток проверил в симуляторах Heli-X, FPVFreeRider и LiftOff на системе Ubuntu. В Heli-X заработало все сразу и без проблем. С FPVFreeRider и LiftOff USB-свисток не заработал. Стал искать причину. Как оказалось, на симуляторах, созданных с помощью платформы Unity3D, кривовато определяется наличие джойстика в системе, по крайней мере в Ubuntu. На Windows не удалось проверить, но в руководстве написано, что там все должно работать без проблем.

Решение проблемы в Ubuntu придумал практически сразу, благо в наличии был старый USD-свисток, с которым работали все симуляторы. Вот как старый USB-свисток видится в системе:

# udevadm info /dev/input/js0
P: /devices/pci0000:00/0000:00:14.0/usb3/3-13/3-13.4/3-13.4:1.0/0003:06F7:0003.0024/input/input53/js0
N: input/js0
S: input/by-id/usb-WAILLY_PPM-joystick
S: input/by-path/pci-0000:00:14.0-usb-0:13.4:1.0-joystick
E: DEVLINKS=/dev/input/by-id/usb-WAILLY_PPM-joystick /dev/input/by-path/pci-0000:00:14.0-usb-0:13.4:1.0-joystick
E: DEVNAME=/dev/input/js0
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb3/3-13/3-13.4/3-13.4:1.0/0003:06F7:0003.0024/input/input53/js0
E: ID_BUS=usb
E: ID_FOR_SEAT=input-pci-0000_00_14_0-usb-0_13_4_1_0
E: ID_INPUT=1
E: ID_INPUT_JOYSTICK=1
E: ID_MODEL=PPM
E: ID_MODEL_ENC=PPM
E: ID_MODEL_ID=0003
E: ID_PATH=pci-0000:00:14.0-usb-0:13.4:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_13_4_1_0
E: ID_REVISION=0107
E: ID_SERIAL=WAILLY_PPM
E: ID_TYPE=hid
E: ID_USB_DRIVER=usbhid
E: ID_USB_INTERFACES=:030000:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=WAILLY
E: ID_VENDOR_ENC=WAILLY
E: ID_VENDOR_ID=06f7
E: MAJOR=13
E: MINOR=0
E: SUBSYSTEM=input
E: TAGS=:seat:uaccess:
E: USEC_INITIALIZED=945499616162

Старый USB-свисток явно определяется как джойстик и симуляторы его подхватывают. А вот как выглядит в системе USD-свисток от OrangeRX:

# udevadm info /dev/input/js0
P: /devices/pci0000:00/0000:00:14.0/usb3/3-13/3-13.4/3-13.4:1.0/0003:0451:16A5.0025/input/input54/js0
N: input/js0
E: DEVNAME=/dev/input/js0
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb3/3-13/3-13.4/3-13.4:1.0/0003:0451:16A5.0025/input/input54/js0
E: ID_BUS=usb
E: ID_INPUT=1
E: ID_INPUT_ACCELEROMETER=1
E: ID_MODEL=USB_dsmX_HID
E: ID_MODEL_ENC=USB\x20dsmX\x20HID
E: ID_MODEL_ID=16a5
E: ID_PATH=pci-0000:00:14.0-usb-0:13.4:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_13_4_1_0
E: ID_REVISION=0100
E: ID_SERIAL=Cypress_USB_dsmX_HID
E: ID_TYPE=hid
E: ID_USB_DRIVER=usbhid
E: ID_USB_INTERFACES=:030000:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=Cypress
E: ID_VENDOR_ENC=Cypress
E: ID_VENDOR_ID=0451
E: MAJOR=13
E: MINOR=0
E: SUBSYSTEM=input
E: USEC_INITIALIZED=945649611930

Ничего себе, определяется, как набор акселерометров! Да, инженеры из OrangeRX еще те шутники:) И никакого намека на то, что это много-осевой джойстик. Вот поэтому симуляторы и не подхватывают этот USB-свисток. Пришлось убедить систему, что перед ней все таки джойстик, а не набор акселерометров. Это можно сделать через простое правило для подсистемы udev. Следующие две команды создают такое правило и применяют его к системе:

# sudo echo 'SUBSYSTEM=="input", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a5", ENV{ID_INPUT_ACCELEROMETER}="0", ENV{ID_INPUT_JOYSTICK}="1"' >/etc/udev/rules.d/52-input-joystick.rules
# sudo udevadm control -R

Теперь снова проверим, как USD-свисток от OrangeRX видится в системе:

# udevadm info /dev/input/js0
P: /devices/pci0000:00/0000:00:14.0/usb3/3-13/3-13.4/3-13.4:1.0/0003:0451:16A5.0026/input/input55/js0
N: input/js0
S: input/by-id/usb-Cypress_USB_dsmX_HID-joystick
S: input/by-path/pci-0000:00:14.0-usb-0:13.4:1.0-joystick
E: DEVLINKS=/dev/input/by-id/usb-Cypress_USB_dsmX_HID-joystick /dev/input/by-path/pci-0000:00:14.0-usb-0:13.4:1.0-joystick
E: DEVNAME=/dev/input/js0
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb3/3-13/3-13.4/3-13.4:1.0/0003:0451:16A5.0026/input/input55/js0
E: ID_BUS=usb
E: ID_FOR_SEAT=input-pci-0000_00_14_0-usb-0_13_4_1_0
E: ID_INPUT=1
E: ID_INPUT_ACCELEROMETER=0
E: ID_INPUT_JOYSTICK=1
E: ID_MODEL=USB_dsmX_HID
E: ID_MODEL_ENC=USB\x20dsmX\x20HID
E: ID_MODEL_ID=16a5
E: ID_PATH=pci-0000:00:14.0-usb-0:13.4:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_13_4_1_0
E: ID_REVISION=0100
E: ID_SERIAL=Cypress_USB_dsmX_HID
E: ID_TYPE=hid
E: ID_USB_DRIVER=usbhid
E: ID_USB_INTERFACES=:030000:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=Cypress
E: ID_VENDOR_ENC=Cypress
E: ID_VENDOR_ID=0451
E: MAJOR=13
E: MINOR=0
E: SUBSYSTEM=input
E: TAGS=:seat:uaccess:
E: USEC_INITIALIZED=946869574054

Ну вот, совсем другое дело! Теперь, вместо набора акселерометров, этот USB-свисток стал определяться как джойстик. После этой простой процедуры без проблем заработали симуляторы FPVFreeRider и LiftOffUSD-свисток от OrangeRX в них видится, калибруется и работает.

Здесь приведу свою конфигурацию для передатчика DEVO-10 с прошивкой Deviation. На тумблере RUDD D/R находится режим для калибровки джойстика, когда каналы ниже четвертого управляются с крутилок AUX4 и AUX5. Остальное можно переназначить на свой вкус.

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

2 комментария :

  1. Занятный продукт. Все еще работает? А то есть желание купить аналогичный для FrSky.

    ОтветитьУдалить
    Ответы
    1. Да, работает. Но после самодельного как-то уже и не пользуюсь им. Самодельный на порядок лучше!

      Удалить