Как получить информацию от контроллера XBox 360? - PullRequest
15 голосов
/ 31 марта 2009

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

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

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

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

Изменить, чтобы ответить на некоторые комментарии:

В коптере будет 6 полных винтов, расположенных в 3 коаксиальных парах. По сути, он будет очень похож на этот , только он будет стоить около 1000 долларов, а не 15000 долларов. Он будет использовать Arduino для бортовой обработки и Zigbee для беспроводного управления.

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

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

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

Ответы [ 4 ]

9 голосов
/ 14 марта 2011

Это не так уж сложно. Как упоминалось ранее, вы можете использовать библиотеки 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 также будет поддерживать обратную связь по силе (он же haptic).

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

7 голосов
/ 31 марта 2009

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

1 голос
/ 31 марта 2009

Что ж, если вы действительно не хотите добавлять зависимость от DirectX, вы можете использовать старый API джойстика Windows - Windows Multimedia -> Joystick Reference в SDK платформы.

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

0 голосов
/ 04 июня 2009

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

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

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

...