Wii-Mando con Libwiimote en GNU/Linux (Incluye video-demo ;-P)

Ampliando la información de Cleto sobre el Wiimando… De lo mejor que he visto son las librerías nativas de C libwiimote (paquete debian en su versión muy antigua), aunque a la fecha de escritura de este post van por la 0.4. Pueden descargarse en http://libwiimote.sourceforge.net/. Para compilarlas necesitarás tener libbluetooth y bluez.
Estas librerías permiten recuperar la información de los sensores internos de aceleración y rotación del wiimando, reproducir pequeños samples de sonido en el altavoz e incluso acceder a la información guardada en los slots de memoria… Y además son muy sencillas. Como ejemplo de uso os dejo este pequeño video de ejemplo que hice ayer, que representa un objeto en OpenGL según la rotación del mando, junto con el código fuente. La línea de compilación del ejemplo (se debería hacer un bonito makefile), una vez que tengáis instaladas estas librerías y las de OpenGL (+GLUT) sería algo así como:

$ gcc -I/rutaHasta/libwiimote-0.4/src/ -L/rutaHasta/libwiimote-0.4/lib/ -lGL -lGLU -lglut -lcwiimote -lbluetooth -lm -Os -Wall -pipe -D_ENABLE_TILT -D_ENABLE_FORCE -g -O2 -o wiigl wiigl.c

Un saludo y happy wiiing!! Carlos

PD: En los tipos de recetas metería al menos una categoría genérica de “Gráficos” o similar. Sticking out tongue

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Parece que mando no establece bien la conexion

Buenas, estoy trasteando un pokito con todo el wiigl pero tengo un problema que creo que el mando no se queda linkado con el portatil, estoy usando ubuntu 8.04 en un macbook, ¿puede ser por el bluetooth de mi portatil? esto es lo que me ocurre.

-laptop:~/wiigl$ ./wiigl
Pulsa los botones 1 y 2 del WiiMando simultáneamente para conectar…
Se ha detectado el mando C:BE:15:0D:FD .
Se procede a conectar...
l2cap_connect(): connect
wiimote_connect(): l2cap_connect
wiimote_api.c(39): wiimote_open(): unable to connect to host
Conectado!! Pulsa el botón Home para salir

es como si no le pasara correctamente la direccion fisica del mando, a ver si me podeis hechar una mano.

Un saludo

Movimiento de un servo con el mando de la wii

Muchísimas gracias por publicar este fantástico ejemplo. Yo lo he utilizado para mover un servo con el mando de la wii:

http://www.youtube.com/watch?v=Jh3A3AR1EeI

Tiene muchas aplicaciones en robótica Smiling

Gracias

Saludos, Obijuan

Imagen de cleto

Muy interesante...

... tanto, que me he puesto a hacer unos ejemplillos con libwiimote. Sin embargo, tengo un problema y creo que es por la arquitectura de mi portátil (PowerPC). Al hacer un wiimote_connect me da un error la librería:

wiimote_io.c(99): wiimote_read(): read failed

¿Te ocurre a tí lo mismo?

Me gustaría hacerte una sugerencia. Para conectar el mando puedes utilizar wiimote_discover y después hacer la conexión sobre el mando detectado. Así, no hace falta que sepas la dirección física del mando con el que conectas y puedes conectar con cualquier mando. La modificación iría donde tienes el wiimote_connect() y sería (sé que soy un cutre, lo siento Eye-wink):

//El segundo parámetro indica que, como mucho, descubre 1 mando
int n = wiimote_discover(&wiimando,1);
//n es el número de mandos descubiertos
if (n==0){
    printf("Ningún mando descubierto\n");
    exit(1);
}else{
    printf("Se ha detectado el mando %s.\nSe procede a conectar...\n", wiimando.link.r_addr);
    wiimote_connect(&wiimando, wiimando.link.r_addr);
   ...
}

En fin, wiimote_discover te permite descubrir hasta 4 mandos (pasándole un vector de wiimote_t de tamaño 4 como primer argumento). Yo estoy conectando un par de mandos Wii y he visto como lo hace en el "test3.c" que te viene en la librería.

El único problema que le veo a todo esto es que wiimote_discover necesita que el mando esté en modo SYNC (que ya le hayan pulsado 1-2) y si no lo está, muere "deprisa". Por ello indicaría al usuario que pulsara 1-2 y después ENTER, o algo así, para que al usuario le de tiempo y no se colapse mentalmente Sticking out tongue.

Supongo que ya esto lo sabías pero no está de más para alguien que busca esta información.

Gracias por tu programa y por la información.
Un saludo!
----------------------------------------------------------------
"Software Libre para una sociedad libre."

Imagen de morcy

Sobre el ejemplo...

No tengo ese problema, Cleto... El wiimote_connect() no me devuelve ningún error.
Sobre lo que comentas para conectar el mando, tienes razón. No es necesario pasarle la dirección del mando, pero para ver que funcionaba mi programa cutre era así más sencillo. Sticking out tongue

Un saludo!!
Carlos.

Imagen de cleto

Confirmado...

... es por la arquitectura PowerPC. Smiling ¡Qué felicidad! Barf!
----------------------------------------------------------------
"Software Libre para una sociedad libre."

Imagen de int-0

Tal vez...

El problema lo tengas por el endian de los PPC, invierte las palabras y mira a ver si rula bien entonces. Si rula bien, pones unos cuantos #ifdef y se lo mandas al autor Eye-wink.
------------------------------------------
For Happy Lusers! Try this as root!
dd if=/dev/zero of=/dev/hda bs=1G count=10
------------------------------------------

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

Imagen de cleto

Ok

Muchas gracias por los consejos. Miraré en wiimote_io.h y wiimote_io.c que es donde están los problemas.

Gracias de nuevo. Ya os comentaré.

----------------------------------------------------------------
"Software Libre para una sociedad libre."

Imagen de brue

y si ...

... pruebas con:


brue@doped:~$ apt-cache search libwiimote
libwiimote0 - library to interface with the wiimote
libwiimote0-dev - library to interface with the wiimote -- development

--
·brue

brue

Imagen de brue

Apostaría a...

...que es esto Smiling Lo raro es que no lo tengan ya en cuenta. Yo te digo lo mismo que int-0. Puedes hacer un giro a la izquierda e ir metiendo el acumulador por la izquierda a otro valor, por ejemplo.

Dale caña.

--
·brue

brue

Imagen de brue

pues hay que hacer...

...si no hay, el wrapper del APi para python.

Venga señores! Que se anima estoooo!

--
·brue

brue

api para el mando de la wii

Hola y me alegro encontrar gente que sepa de esto!!!! que llevo un tiempo buscando información y no he encontrado mucho.

Actualmente estoy desarrollando una aplicación para un colega que tiene problemas de movilidad y quiero encontrar una api o una librería para usar el mando de la wii. El problema es que lo necesito para .NET, no para c como he visto algunas.

Espero que me podais ayudar porque a la aplicación le queda bastante poco

Un saludo

Imagen de brue

Hola!

Gracias por tu interés en el trabajo que se realiza en crysol. Sobre la portabilidad a python, hay gente de esta comunidad que se está dedicando a portar el api a python. Python es portable y lo puedes usar en windows al igual que punto net. Si necesitas ayuda con python, te podemos ayudar entre todos.

Si lo quieres hacer en .NET de Micro$oft, te recomiendo que preguntes a la gente del club de .NET de Ciudad Real, que ellos seguro saben asesorarte en lo que quieres hacer. Puedes decargar el código fuente libre que existe para GNU/Linux y que ellos te guíen para portarlo.

He buscado el grupo de google pero no lo encuentro, así que te remito a la web de uno de los miembros (sin su permiso, espero que no le moleste), en la que se habla de la puesta en marcha del mismo:

http://slion2000.blogspot.com/2007/03/hola-amigos-os-anuncio-la-pronta-p...

Mucha suerte, y si necesitas ayuda con python o si te interesa desarrollar el proyecto con herramientas de software libres, cuenta con mi ayuda y con la de esta comunidad. Sé bienvenido pues y esta es tu casa si te animas.

--
PPC: int main(){long foo=1649571173;puts(&foo);}
x86: int main(){long foo=1702187618;puts(&foo);}

brue

Imagen de david.villa

Wii mando

Cleto y yo (y lk2?) hemos estado trasteando con la librería CWiid que tiene bindings para Python (python-cwiid en Debian). No sabía que hubiera gente de CRySoL portando un API, ¿quién?

Muy interesante lo de portarlo a .Net. Si lo haces con software libre y llega a buen puerto, cuéntanos cómo ha ido.

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

Imagen de brue

lo está portando ...

... gnurita entonces. Usuaria honorífica Smiling Hay que preguntarle cómo va.

--
PPC: int main(){long foo=1649571173;puts(&foo);}
x86: int main(){long foo=1702187618;puts(&foo);}

brue

Imagen de Lk2

Y yo y yo

Ando trasteando con wminput (que permite también plugins usando los bindings de python) para manejar el PC con el wiimote a modo de ratón .... ya haré una recetilla con una barra emisora de infrarrojos algo "particular" Laughing out loud