linux

WIIMOTE COM A MOUSE DE LINUX (Ubuntu Feisty)

Fa uns dies em vaig pillar un adaptador USB bluetooth per poder connectar el mòbil al ordinador. El fet, és que un cop configurat l'adaptador vaig pensar en connectar també el wiimote de la wii via bluetooth (havia vist diferents demos per internet que ensenyaven com fer-ho). El fet és que la cosa no és gens complicada, però CAL llegir bé els passos dels diferents manuals que hi ha per fer-ho. Els passos per utilitzar el wiimote coma mouse en un Linux Ubuntu Feisty, són els següents:
 

 
CONFIGURACICIÓ de l'ADAPTADOR USB BLUETOOTH:

En el meu cas es tracta d'un Belkin F8T012 com el que es mostra més avall. Primer de tot connectem l'aparatillu al usb per veure que com a mínim ens el detecta. Amb Synaptic (o apt-get) instal·lem el paquet necessari de bluetooth d'Ubuntu, com a mínim, necessitarem el bluez-utils , però no està de més instal·lar altres utilitats com hcidump.
 
 

 
Amb lsusb, veiem que el dispositiu és detectat pel sistema:
 
#lsusb
Bus 005 Device 001: ID 0000:0000 
Bus 005 Device 002: ID 05e3:070e Genesys Logic, Inc.
Bus 004 Device 001: ID 0000:0000 
Bus 002 Device 001: ID 0000:0000 
Bus 003 Device 002: ID 046d:c505 Logitech, Inc. Cordless Mouse+Keyboard Receiver
Bus 003 Device 003: ID 050d:0121 Belkin Components F5D5050 100Mbps Ethernet
Bus 003 Device 001: ID 0000:0000 
Bus 001 Device 001: ID 0000:0000 
 
En un principi, fet això, la teoria diu que ja ens hauria de funcionar, però en el cas d'aquest adaptador amb Ubuntu, no és així. Així que deicideixo reiniciar, i amb l'adaptador connectat, no m'arrenca el sistema operatiu. El trec i si que m'arrenca. El problema és que ubuntu detecta aquest adaptador com un adaptador ethernet (ho podem veure amb lsusb), i li carrega el mòdul de pegasus (/var/log/messages):
 
Jul  3 18:19:02 akira kernel: [ 3991.072445] usb 4-2: new full speed USB device using uhci_hcd and address 4
Jul  3 18:19:02 akira kernel: [ 3991.246514] usb 4-2: configuration #1 chosen from 1 choice
Jul  3 18:19:02 akira kernel: [ 3991.376458] pegasus: v0.6.14 (2006/09/27), Pegasus/Pegasus II USB Ethernet driver
 
Per evitar que li carregui aquest mòdul, editem el fitxer /etc/modprobe.d/blacklist, i li afegim la següent línia:
 
blacklist pegasus 
 
Tornem a reiniciar i problema solucionat. Per comprovar-ho podem, per exemple, agafar el mòbil i buscar dispositius bluetooth, i ens hauria d'apereixer la nostra màquina. Si no és així per comprovar que el servei /etc/init.d/bluetooth estigui engegat: 
 
# ps aux | grep hci
root     25818  0.0  0.0   2692  1104 ?        Ss   15:46   0:00 /usr/sbin/hcid -x -s
 
Si no ens apereix aquesta línia, l'hem d'engegar:
 
#/etc/init.d/bluetooth start
 * Starting Bluetooth services
 
WIIMOTE AMB LINUX (UBUNTU FEISTY):
 
A la pàgina de wiili.org , hi ha diferents solucions de drivers de wiimote per a Linux, a més de llibreries en C i altres. El que sembla més "madur" i senzill d'instal·lar i utilitzar són els drivers fets amb Python WMD . Així que em vaig decidir per aquest. Seguint aquest manual de wiili i aquest, en principi és un plis fer que el wiimote et fagi de mouse en un Ubuntu. En definitiva els pasos seguits són els següents: 
 
1-Baixem i descomprimim els drivers a la ubicació on els volguem instal·lar:
 
root@akira:/opt/wiimote# wget http://forthewiin.org/WMD/wmd-0.1.2.tar.gz
root@akira:/opt/wiimote# tar xvfz wmd-0.1.2.tar.gz
 
2-Seguidament carreguem els següents mòduls:
 
#modprobe uinput
#modprobe evdev
 
3-No és imprescindible, però ens interessa saber l'adreça bluetooth del wiimote que volem connectar. Amb hcitool i l'opció scan podem "rastrejar" dispositius bluetooth. Executem la següent comanda, i al mateix temps premem alhora els botons 1 i 2 del wiimote, de tal manera que aquest pugui ser detectat per el nostre ordinador: 
 
# hcitool scan
Scanning ...
        00:19:1D:D1:85:82       Nintendo RVL-CNT-01
        00:18:C5:1C:41:E8       Musa
 
Veiem que hcitool ens ha detectat dos dipositius bluetooth. El que ens interessa, evidentment, és Nintendo (l'altre és el meu mòbil). Anotem l'adreça bluetooth del wiimote: 00:19:1D:D1:85:82.

4-Anem al directori on hem descomprimit els drivers:
 
root@akira:/opt/wiimote#cd wmd-0.1.2 
 
Editem el fitxer wmd/Config.py. I a la variable de l'adreça del wiimote hi posem l'adreça blutooth del nostre wiimote, i tal com ens indica un comentari en el mateix fitxer, canviem el valor de la variable UINPUT_DEV per /dev/input/uinput
 

...
'MY_WIIMOTE_ADDR': "00:19:1D:D1:85:82",
...
'UINPUT_DEV': "/dev/input/uinput",
...

 
Guardem els canvis.

4-Dins el directori wmd-0.1.2 hi ha un script anomenat WMD.py. L'executem:
 
root@akira:/opt/wiimote/wmd-0.1.2# ./WMD.py 
 
Ens apreixerà una pantalla blanca, quan aquesta aparegui, cal pulsar els botons 1 i 2 del wiimote alhora, per tal que es connecti amb la nostra màquina (en el cas que no haguem entrat el valor de l'adreça bluetooth del nostre wiimote, aquest script farà una rastrejada per detectar el nostre wiimote, per tant el procés de connexió serà més lent). Un cop connectat, a la pantalla ens apereixen uns gràfics que mesuren l'acceleració dels moviments que fem amb el wiimote en els diferents eixos (X, Y Z), i per consola, ens monotoritza els botons que premem.
 


Per desconnectar el wiimote, premem el botó "Home".

5-Un cop hem comprovat que la connexió wiimote-linux ens funciona, ara cal que editem el fitxer /etc/X11/xorg.conf (és aconsellable fer una còpia). Primer afegim la següent línia dins la secció Section "ServerLayout" :
 
InputDevice    "Wiimote" "AlwaysCore"  
 
I després de l'últim Section "InputDevice", afegim la següent secció:
 
Section "InputDevice"
        Identifier "Wiimote"
        Driver "evdev"
        Option "Name" "Nintendo Wiimote"
EndSection
 
 Guardem el fitxer i reiniciem.

6-Un cop reiniciat, executant l'script WMD.py, ens hauria de funcionar...però, tal com comentava, és molt important llegir bé tots els document. Arribat a aquest punt, a mi no em funcionava el moviement del mouse (els botons sí que feien les seves funcions). El que passava és que no havia tingut en compte que el wiimote necessita de 2 a 4 fonts d'infrarojos per poder-se "orientar", tal i com s'explica aquí . Des de que tinc la wii, em va sorprendre que hagués de posar el que semblava un receptor d'infrarojos per als wiimotes ja que sabia que els wiimotes anaven per bluetooth. Doncs, simplement són dos emisors de IR, anomenat sensor bar.
 
Així, per provar que tot el que havia fet funcionava correctament, vaig connectar la wii al costat del ordinador i vaig col·locar l'emisor IR damunt la pantalla. A simple vista no podem veure aquesta llum, però a través de fotos i/o vídeos sí. A continuació veiem a través d'una foto la llum IR que emeten els LED s de la sensor bar de la wii:
 
 
 
Un cop tenim dos focus de IR, ja podem executar de nou l'script i tot funciona correctament tal i com es mostra al video:
 
 
7-Ara que sabia que tot estava bé, havia de buscar una alternativa a tenir la wii connectada al costat de l'ordinador. Els únics LEDs IR que tenia per casa eren els dels comandaments a distància . Així que en vaig agafar dos i vaig pensar que deixant un botó de cadascun apretat ja tenia el tema solucionat. Però no va ser així, ja que el wiimote actuava com a mouse del Ubuntu, però em feia canvis de direcció molt bruscos i inesperats. Després vaig caure en que el que veia a través de la càmera quan havia filmat l'emisor de la wii, eren dos fonts de llum IR contínues, i els comandaments a distància, emeten llum IR intermitentment, tal i com es pot comprovar al vídeo:
 
 
8-La solució, jo no en tenia ni idea, me la va donar en Carles ahir fent una birra després d'un concert . I és col·locar dos espelmes , que jo no ho sabia, emeten llum IR. Avui he investigat, i hi ha bastanta gent que ha fet això per emular la llum IR de la sensor bar (de fet havia vist algun video del wiimote amb ordinador, i unes espelmes, però no havia donat importància, ja que hi ha molt de boig pel món). Així doncs ho vaig provar, i efectivament funciona! (NOTA: cal que no passi gens d'aire on hi hagi les espelmes i que la flama estigui estabilitzada, sinó aquestes en comptes d'emular el sensor bar de la wii, emularan un comandament a distància): 
 
 
El pas final seria fabricar-nos el nostre propi sensor bar de IR i no haver d'encendre dues espelmes cada vegada que volguem utilitzar el wiimote a l'ordinador. 
 
 
blog comments powered by Disqus

Additional information