Управление моделью через джойстик
Ввод информации с USB джойстика
Разбираемся, как подключить USB джойстик к модели Engee чтобы получить возможность тестировать управление моделью или аппаратурой с реального устройства ввода.

Описание задачи
К скриптам и моделям в Engee можно подключить любое оборудование, и в этом проекте мы демонстрируем возможность подключения HID устройств (Human Interface Device), подключенных к локальному компьютеру по USB. За общение с Engee отвечает подсистема Engee.Интеграция.
Установка подсистемы Engee.Интеграции
Выполните команду engee.package.install("Engee-Device-Manager") в командной строке, чтобы получить свой идентификатор и скачать клиентскую программу (ссылка появится в терминале, на нее можно будет нажать).
Получите токен доступа в разделе Связь и безопасность вашего личного кабинета Engee (раздел "Токены личного доступа").
После запуска программы engee-device-manager.exe (настроенной на ваш адрес и с действующим PAT-токеном) между Engee и локальным компьютером создается защищенный канал связи, позволяющий задействовать в единой модели локальные программные и аппаратные ресурсы.
Подключение к локальному оборудованию можно осуществлять через профиль HID который может быть настроен для устройств ввода, джойстиков, хобби-платформ вроде Arduino и многих других аппаратных инструментов.
Находим идентификаторы VID и PID нашего USB устройства
В Windows проверить наличие джойстика можно, набрав в окне вызова команд строку joy.cpl. Это второстепенный инструмент, который позволяет проверить подключенные джойстики, но он не покажет клавиатуры, мыши и Arduino.
Команда Get-PnpDevice -Class "HIDClass" | Select-Object FriendlyName, InstanceId позволяет увидеть VID и PID идентификаторы, которые нам будут нужны для настройки канала связи с оборудованием (джойстиком). Вот где их найти:
Числа 1781 и 0898 нужно перевести в десятеричный вид и можно использовать в последующих командах. В Linux те же действия осуществляет команда lsusb.
Следующим шагом проверим подключение:
hid = Main.EngeeDeviceManager.Devices.HID.Hid(6017,2200)
Из этого канала можно считывать данные, указывая размер пакета. Размер полученного вектора ограничен количеством информации, которую присылает устройство.
Main.EngeeDeviceManager.Devices.HID.read( hid, 8 )
Мы прочитали пакет размером 8 байт, который отражает актуальное положение ручек и кнопок пульта управления. Дальше этот пакет можно преобразовывать и перекомпоновывать чтобы извлечь нужную информацию.
Чтение данных с USB/HID устройства в модель Engee
Получение свежих данных с реального оборудования и отправка их в модель Engee не намного труднее получения этой информации в скрипте. Прежде всего, создаем модель с блоком Engee Function:
engee.open("usb_controller_example.engee")
.png)
Код этого компонента содержит следующие строки:
package_dir = "/internal_persistent_vol/support_packages/locations/Engee-Device-Manager/EngeeDeviceManager.jl"
if !isdefined(Main, :EngeeDeviceManager)
include("$(package_dir)/src/EngeeDeviceManager.jl")
end
using .EngeeDeviceManager.Devices: HID
mutable struct Block <: AbstractCausalComponent
hid::Any
function Block()
hid = HID.Hid(6017,2200)
return new(hid)
end
end
После инициализации идёт код, который выполняется на каждом шаге вычисления модели:
function (c::Block)(t::Real)
return HID.read(c.hid, 8)
end
В результате мы получаем компонент, который читает данные с пульта управления и отправляет числа в модель.
Шаги для запуска этой модели
Минимальные шаги для создания рабочего окружения, где эта модель будет работать, следующие:
- запустить программу Engee.Интеграции (возможно, будет осуществлено обновление)
- нажать "Подключиться" (подключение обычно занимает секунд 10)
- подключить оборудование к локальному компьютеру
- запустить модель (включив замедление в настройках, чтобы модельное время шло в том же темпе что и реальное время пользователя).
Заключение
Мы без особого труда подключили джойстик к среде Engee, и можем управлять параметрами моделей, физикой или работой автоматики.