2009-03-31 14 views
14

Estoy escribiendo un programa que necesita recibir información de un controlador XBox 360. La entrada se enviará de forma inalámbrica a un RC Helicopter que estoy construyendo.¿Cómo obtengo la información de un controlador XBox 360?

Hasta ahora, he aprendido que esto se puede hacer utilizando la biblioteca XInput de DirectX o el marco de entrada en XNA.

Me pregunto si hay otras opciones disponibles. El alcance de mi programa es bastante pequeño, y tener que instalar una gran biblioteca de juegos como DirectX o XNA parece excesivo. Además, me gustaría que el programa sea multiplataforma y no específico de Microsoft.

¿Hay una manera simple y liviana de poder tomar la entrada del controlador con algo como Python?

Editar para responder a algunos comentarios:

El helicóptero tendrá 6 hélices totales, dispuestos en pares 3 co-axiales. Básicamente, será muy similar a this, solo costará aproximadamente $ 1,000 en lugar de $ 15,000. Utilizará un Arduino para el procesamiento integrado, y Zigbee para el control inalámbrico.

El controlador 360 se seleccionó porque está bien diseñado. Es muy ergonómico y tiene todas las entradas de control necesarias. Para aquellos familiarizados con los controles del helicóptero, el joystick izquierdo controlará el colectivo, el joystick derecho con control del cabeceo y el balanceo, y los disparadores analógicos controlarán el guiñada. Los disparadores analógicos son una gran característica para el controlador 360. PD y la mayoría de los demás no los tienen.

Tengo una página web para el proyecto, pero todavía es bastante escasa. Sin embargo, planeo documentar todo el diseño, por lo que eventualmente será interesante.
http://tricopter.googlecode.com
En una nota lateral, ¿mataría a Google tener una función de blog para los proyectos de googlecode?

Me gustaría que el programa de entrada del controlador 360 funcione tanto en Linux como en Windows si es posible. Sin embargo, eventualmente, me gustaría conectar el controlador directamente a un tablero microcontrolador integrado (como Arduino) para no tener que pasar por una computadora, pero no es una prioridad en este momento.

+0

¿Realmente tiene que ser un controlador xBox 360? ¿Por qué no un joystick de computadora más estándar? ¿Qué tiene de especial el controlador 360? – Kibbee

+1

¿Vas a escribir un blog o escribir cuando termines? Deberías vincularlo, me interesaría :) – alex

+2

Quizás sea dueño de un controlador 360, pero no un joystick estándar de computadora. (En este momento no conozco personalmente a nadie que tenga un joystick estándar de computadora). –

Respuesta

6

PyGame puede leer joysticks, que es lo que el controlador X360 muestra como en una PC.

+0

¿No usa PyGame DirectInput para leer realmente los sticks? Por lo tanto, no funcionaría si quisiera evitar DInput como requisito. –

+0

Probé PyGame anoche y funcionó bastante bien. Pude tomar la entrada del controlador con bastante facilidad. Sin embargo, aún no lo he probado en Linux. – bengineerd

+1

PyGame es esencialmente una capa de Python encima de SDL. No creo que tenga ninguna dependencia de directX. Al igual que SDL, no puede hacer comentarios de fuerza. También trata los dos disparadores analógicos como un solo eje. Creo que DirectInput hace lo mismo. Solo XInput y XNA permiten un uso completo. – bengineerd

1

Bueno, si realmente no desea agregar una dependencia en DirectX, puede utilizar la antigua API de Joystick de Windows - Windows Multimedia -> Referencia de Joystick en la plataforma SDK.

La biblioteca estándar de juegos de plataformas cruzadas es Simple DirectMedia Layer, originalmente escrita para portar juegos de Windows a sistemas Unix (Linux). Es una API muy básica y liviana que tiende a admitir el subconjunto mínimo de funciones en cada sistema y tiene enlaces para la mayoría de los idiomas principales. Tiene soporte de joystick y gamepad muy básico (sin retroalimentación forzada, por ejemplo) pero podría ser suficiente para sus necesidades.

0

Tal vez la biblioteca Mono.Xna ha añadido soporte GamePad, que proporcionaría la funcionalidad multiplataforma que estás buscando:
http://code.google.com/p/monoxna/

En cuanto a las preocupaciones acerca de la biblioteca que se está peso demasiado pesado, seguro, para esta opción puede ser verdad ... sin embargo, podría abrir oportunidades para hacer una buena visualización en el futuro.

descargo de responsabilidad: No estoy familiarizado con el estado del proyecto mono xna, por lo que es posible que aún no haya agregado esta característica. Pero aún así, es una opción :-)

8

No es tan difícil. Como mencionó el chico anterior, puedes usar las bibliotecas SDL para leer el estado del controlador xbox y luego puedes hacer lo que quieras con él.

Hay un tutorial de SDL: http://sdl.beuc.net/sdl.wiki/Handling_Joysticks que es bastante útil.

Tenga en cuenta que un controlador de Xbox tiene la siguiente:

  • dos palancas de mando:
    • palanca de mando izquierda es eje 0 & 1;
    • el gatillo izquierdo es el eje 2;
    • joystick derecho es el eje 3 & 4;
    • gatillo derecho es el eje 5
  • un sombrero (el D-pad)
  • 11 botones SDL
    • dos de ellos son el centro de la palanca de mando presiona
  • dos gatillos (actúan como eje, ver arriba)

El próximo SDL v1.3 también soportará forzar la realimentación (también conocido como h aptic).

Supongo que, dado que este hilo tiene varios años, ya has hecho algo, por lo que este post es principalmente para informar a los visitantes futuros.

Cuestiones relacionadas