Как я могу получить информацию от контроллера XBox 360?

Я пишу программу, которая должна принимать данные от контроллера XBox 360. Затем вход будет отправлен по беспроводной связи на вертолет RC, который я создаю.

До сих пор я узнал, что это можно сделать, используя либо библиотеку XInput из DirectX, либо структуру ввода в XNA.

Мне интересно, есть ли другие доступные опции. Объем моей программы довольно мал, и установка большой игровой библиотеки, такой как DirectX или XNA, кажется чрезмерной. Кроме того, я хотел бы, чтобы программа была кросс-платформенной, а не специфичной для Microsoft.

Есть ли простой легкий способ я могу захватить вход контроллера с чем-то вроде Python?

Отредактируйте, чтобы ответить на некоторые комментарии:

Котел будет иметь 6 полных пропеллеров, расположенных в 3 коаксиальных парах. В принципе, он будет очень похож на этот, только он будет стоить около $1000, а не $15,000. Он будет использовать Arduino для обработки на борту, а Zigbee для беспроводного управления.

Контроллер 360 был выбран, потому что он хорошо разработан. Он очень эргономичен и имеет все необходимые управляющие входы. Для тех, кто знаком с элементами управления вертолетом, левый джойстик будет управлять коллективным, правый джойстик с управлением шагом и рулоном, а аналоговые триггеры будут управлять рысканием. Аналоговые триггеры - большая функция для контроллера 360. PS и большинство других не имеют их.

У меня есть веб-страница для проекта, но она по-прежнему довольно редкая. Я планирую документировать весь дизайн, хотя, в конце концов, это будет интересно.
http://tricopter.googlecode.com
На стороне примечания, убьет ли он Google функцию блога для проектов googlecode?

Я хотел бы, чтобы программа ввода контроллера 360 запускалась как в Linux, так и в Windows, если это было возможно. В конце концов, хотя, я хотел бы подключить контроллер непосредственно к встроенной плате микроконтроллера (например, Arduino), так что мне не нужно проходить через компьютер, но это не высокий приоритет на данный момент.

Ответы

Ответ 1

PyGame может читать джойстики, что и показывает контроллер X360, как на ПК.

Ответ 2

Это не так уж сложно. Как упоминалось ранее, вы можете использовать библиотеки SDL для чтения статуса контроллера xbox, а затем вы можете делать все, что вам нужно.

Существует учебник SDL: http://sdl.beuc.net/sdl.wiki/Handling_Joysticks, который довольно полезен.

Обратите внимание, что контроллер Xbox имеет следующее:

  • два джойстика:
    • левый джойстик - ось 0 и 1;
    • левый триггер - ось 2;
    • правый джойстик - ось 3 и 4;
    • правый триггер - ось 5
  • одна шляпа (D-pad)
  • 11 кнопок SDL
    • два из них - это нажатия на джойстик.
  • два триггера (действуют как ось, см. выше)

Предстоящий SDL v1.3 также будет поддерживать силовую обратную связь (aka. haptic).

Я предполагаю, что, поскольку этой теме несколько лет, вы уже что-то сделали, поэтому этот пост предназначен, прежде всего, для информирования будущих посетителей.

Ответ 3

Ну, если вы действительно не хотите добавлять зависимость от DirectX, вы можете использовать старый API-интерфейс Joystick для Windows - Мультимедиа Windows → Справочник по Joystick в платформе SDK.

Стандартная бесплатная игровая библиотека с поперечной платформой - это простой DirectMedia Layer, первоначально написанный для переноса игр Windows в системы Unix (Linux). Это очень простой, легкий API, который имеет тенденцию поддерживать минимальный набор функций в каждой системе и имеет привязки для большинства основных языков. У него очень простой джойстик и поддержка геймпада (например, нет обратной связи), но этого может быть достаточно для ваших нужд.

Ответ 4

Возможно, библиотека Mono.Xna добавила поддержку GamePad, которая обеспечила бы кросс-платформенную функциональность, которую вы искали:
 http://code.google.com/p/monoxna/

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

Отказ от ответственности: я не знаком со статусом проекта mono xna, поэтому он, возможно, еще не добавил эту функцию. Но все же, это вариант: -)