Connect a Gamepad or Other Device to Mathematica - Wolfram Mathematica

Подключение геймпада или другого устройства к Mathematica

Помимо использования клавиатуры или мыши, Вы можете управлять Mathematica при помощи джойстика, геймпада, 3D мыши или любого другого устройства, которое отвечает спецификациям промышленного стандарта человеко-машинного интерфейса.

Для подключения нового устройства к Mathematica, убедитесь, что оно подсоединено и включено. Если устройство поставляется со специальными драйверами, убедитесь, что они уст ановлены.

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

Все устройства, обнаруженные Mathematica указываются в списке, выводимом при выполнении функции ConnectAGamepadOrOtherDeviceToMathematicaRU_1.gif. В приведенном примере, в дополнение к геймпаду Logitech Dual Action подключенному через USB порт, указаны еще несколько встроенных устройств:

In[3]:=

ConnectAGamepadOrOtherDeviceToMathematicaRU_2.gif

Out[3]=

ConnectAGamepadOrOtherDeviceToMathematicaRU_3.gif

Как только Ваше устройство обнаружено, Mathematica готова его использовать.

    

По умолчанию, геймпады и другие контроллеры могут использоваться такими функциями Mathematica как Manipulate и Graphics3D. Например, Вы можете использовать подключенный геймпад для воздействия на элементы управления интерактивных моделей, создаваемых функцией Manipulate, или вращений 3D графики без дополнительных настроек. Для получения большей информации, смотри Руководство How to: Use Built-in Gamepad Support.

На более низком уровне, Mathematica позволяет использовать, при помощи функции ConnectAGamepadOrOtherDeviceToMathematicaRU_4.gif, любую информацию, выводимую на экран функцией  ConnectAGamepadOrOtherDeviceToMathematicaRU_5.gif.

В данном случае, состояние каждого органа управления геймпада выведено в виде списка правил:

In[6]:=

ConnectAGamepadOrOtherDeviceToMathematicaRU_6.gif

Out[6]=

ConnectAGamepadOrOtherDeviceToMathematicaRU_7.gif

Наименования органов управления в списке, такие как Hatswitch X Axis, берутся напрямую из информации низкого уровня, получаемой от устройства.

Устройства различных производителей зачастую используют разные имена для органов управления. Mathematica пытается стандартизировать эти имена, применяя названия X, Y, X2, Y2 и т. д. для одномерных аналоговых органов управления, и B1, B2 и т.д. для кнопок.

Чтобы увидеть, как Mathematica присваивает свои стандартные названия именам аппаратных узлов, воспользуемся параметром Mapping в дополнение к названию контроллера в функции ControllerState. Функция Short использована здесь для отображения лишь нескольких строк результата такого присвоения:

In[19]:=

ConnectAGamepadOrOtherDeviceToMathematicaRU_8.gif

Out[19]//Short=

ConnectAGamepadOrOtherDeviceToMathematicaRU_9.gif

В данном случае, стандартные названия X, Y и Z перечислены в списке для извлечения текущих значений состояния первых трех одномерных аналоговых осей:

In[7]:=

ConnectAGamepadOrOtherDeviceToMathematicaRU_10.gif

Out[7]=

ConnectAGamepadOrOtherDeviceToMathematicaRU_11.gif

Если Вы "обернете" этот командный код в функцию Dynamic, значения на выходе будут постоянно обновляться. Это позволит Вам видеть состояние каждой оси в реальном времени.

Для получения более подробной информации по использованию стандартных названий в функциях типа Manipulate, смотри Руководство How to: Use Built-in Gamepad Support.

    

Если функция ControllerState не получает немедленного отклика от Вашего контроллера, возможно Вам потребуется настроить опцию ControllerPath. Подобно тому, как Mathematica просматривает директории функцией $Path при поиске файлов, опция ControllerState ищет доступные контроллеры на базе настроек опции ControllerPath.

Настройкой по умолчанию для опции ControllerPath является использование геймпада, если таковой присутствует:

In[9]:=

ConnectAGamepadOrOtherDeviceToMathematicaRU_12.gif

Out[9]=

ConnectAGamepadOrOtherDeviceToMathematicaRU_13.gif

По этой причине, Вы можете опустить имя Logitech Dual Action в качестве первого аргумента функции ControllerState, получив тот же самый результат:

In[18]:=

ConnectAGamepadOrOtherDeviceToMathematicaRU_14.gif

Out[18]=

ConnectAGamepadOrOtherDeviceToMathematicaRU_15.gif

In[19]:=

ConnectAGamepadOrOtherDeviceToMathematicaRU_16.gif

Out[19]=

ConnectAGamepadOrOtherDeviceToMathematicaRU_17.gif

В отсутствие подсоединенного геймпада, функция ControllerState, по умолчанию, вернется к поиску других устройств: джойстика, 3D мыши и, далее, других устройств управления, включая инфракрасные устройства и аналогово-цифровые преобразователи.

Изменяя порядок устройств, объявленный в ControllerPath, Вы можете изменить порядок их просмотра функцией ControllerState.

В данном случае,  в опции ControllerPath задано предпочтение для датчика движения, который встроен в некоторые переносные компьютеры:

In[22]:=

ConnectAGamepadOrOtherDeviceToMathematicaRU_18.gif

Out[22]=

ConnectAGamepadOrOtherDeviceToMathematicaRU_19.gif