follow me on Twitter

    Just4Fun: Python Wiimote Control

    Just For Fun: Python Wiimote Control

    From SaLUG’s LinuxDay2008… … powered by “Just4Fun (TM)”

    Python Wiimote Control

    Intro

    In principio c’era il declino inesorabile della Nintendo nel panorama delle console per videogame, la quale lasciava il passo alla muscolosa Sony con la sua PlayStation… ed infine a Microsoft che con la sua XBox sottocosto (che in realta’ paghiamo tutti noi con le licenze di Windows che siamo costretti a comprare insieme ai nostri PC) intende rompere le balle alla Sony… buon per noi :-P

    La Nintendo in questa lotta a due (tra PlayStation e XBox) ha deciso di non immischiarsi e ha scelto la strada dell’innovazione anziche’ quella dei muscoli… evidentemente hanno assunto qualche dirigente piu’ sveglio e rinfrescato il settore Ricerca e Sviluppo.

    Questi fatti apparentemente banali e senza alcun interesse “scientifico” hanno generato pero’ un importante cambiamento nel campo dell’intrattenimento casalingo:

    nuove possibilita'/modalita' di interazione uomo-macchina

    Quanti anni sono passati da quando abbiamo cominciato ad usare tastiere, joystick, joypad e mouse… … e’ arrivato il momento di cambiare… ed era anche ora!!!! :-)

    Sono veramente poche le tecnologie rimaste cosi’ statiche quanto quelle di interazione uomo-macchina.

    E questo non riguarda solo il settore ludico o dell’intrattenimento.

    Wiimote

    Questo e’ il Wiimote (il telecomando/joystick bluetooth della Nintendo Wii) una periferica di interazione totalmente nuova, le cui possibilita’ sono solo in minima parte conosciute e sfruttate a pieno dai giochi della Wii.

    Probabilmente neanche chi lo ha inventato sapeva realmente quanti campi di applicazione gli avrebbero trovato in breve tempo gli hacker di tutto il mondo:

    Ma come fanno?!?!?!?

    Cosa c’e’ di tanto magico in un Wiimote da renderlo cosi’ poliedrico?!?!

    Beh si fa presto a dirlo :-P

    Oltre a vari pulsanti, pulsantini e freccette (comuni in altri joystick/joypad) ci sono 2 importanti novita’:

    • un accellerometro… che misura, indovinate un po’… l’accellerazione
    • una videocamera che (attraverso varie elaborazioni dei segnali fatte all’interno del wiimote stesso) calcola la posizione di 4 sorgenti luminose infrarosse all’interno del suo campo visivo

    … oooooh! (fate un’espressione stupita… dai! :-P)

    Grazie all’accellerometro possiamo conoscere gli spostamenti del wiimote sui 3 assi e cosi’ come alcuni degli angoli di orientamento (in particolare pitch e roll)…

    … pero’ non e’ possibile calcolare lo yaws

    e che c…to e’ lo yaws direte voi…

    Per riuscire a calcolare lo yaws i ricercatori della Nintendo hanno pensato di piazzare una barra dotata di 4 led (la Sensor Bar) con la console e di utilizzare una telecamerina nel Wiimote per identificare l’orientamento del Wiimote sul piano orizzontale quando la Sensor Bar si trova all’interno del suo campo visivo…

    e avete ragione… e’ quello che ho pensato anche io… non si capisce un… ma dato che una illustrazione vale piu’ di mille parole ecco a voi:

    grafico degli assi applicati ad un wiimote

    Ora dopo aver ringraziato tutti quelli che hanno reversato, documentato e scritto librerie ed applicazioni per questa stupenda periferica (e molte sue estensioni ;-)):

    potete andare a divertirvi anche voi un po’ ;-)

    Just For Fun: Python Wiimote Control

    Da vero geek non sono riuscito a vedere tutta sta gente divertirsi come i matti e non poter partecipare :-D

    Quindi ho deciso di farmi un regalo e comprarmi un bel Wiimote… si solo la periferica ;-)

    Ho cominciato a giocarci un po’ attraverso la libreria cwiid e in particolare utilizzando il binding in python.

    I primi timidi tentativi si sono concretizzati nell’emissione di rumori di vario genere da parte di un sintetizzatore (ZynAddSubFX) a cui inviavo messaggi MIDI basati (malamente) sull’accellerazione del Wiimote…

    avevo proprio bisogno di leggere un paio di righe di documentazione in piu’ … http://www.wiili.org/index.php/Motion_analysis

    Dopo aver letto un po’ di documentazione l’emissione di rumori e’ diventata l’emissione di 3 note diverse con velocita’ (nel senso midi del termine) proporzionale all’accellerazione del wiimote opportunamente riscalata (sarebbe piu’ corretto dire empiricamente riscalata :-P)

    Volendo mi sarei anche accontentato… se non fosse stato per la gradita visita di due altri geek locali (Fabio “valvola” Viola e Enrico “Bongy” Tramacere) che con domande, valutazioni e nuove periferiche (il Nunchuk :-P) mi hanno costretto a continuare :-PPPPP

    Come potevo non provare a far diventare il Nunchuk il plettro della mia “chitarra elettrica” bluetooth? Come potevo resistere all’irresistibile voglia di utilizzare i due accellerometri presenti in Wiimote e Nunchuk di concerto per simulare le due bacchette di una batteria?

    Non potevo… ma soprattutto non volevo resistere :-P

    Quindi una variante dopo l’altra mi sono trovato con 3 scriptini in python:

    • wiiguitar: per simulare una chitarra elettrica con wiimote e zynaddsubfx
    • wiidrums: per simulare una batteria con wiimote e hydrogen
    • wiidesktop: per controllare desktop e applicazioni con il wiimote durante le presentazioni

    LinuxDAY2008

    Un hack cosi’ divertente non poteva mancare al linuxday del GLUG piu’ bello del mondo :-D

    Pero’ sai che palle riavviare lo script e rieffettuare il detect del wiimote per passare da uno modalita’ all’altra?!?!?

    Gia immaginavo Francesco “haku” Palermo esclamare: “che pizza… ma devi scrivere tutte ‘ste cose ogni volta?!?!?”

    Allora ho pensato che sarebbe stato carino fondere di nuovo insieme i 3 script e studiare un modo per passare da una modalita’ ad un’altra con la pressione di un tasto del Wiimote (il tasto home in particolare).

    Visto che fondamentalmente le differenze tra quegli script si limitavano alla fase di inizializzazione e all’interpretazione dei messaggi provenienti, il refactoring e’ consistito nel trasformare gli script in moduli da caricare e scrivere un nuovo script che inizializzi tutti i moduli e nella propria callback intercetti un tasto di cambio modalita’ per poi passare il controllo alle callback dei moduli attivi…

    … si si… e’ piu’ facile da scrivere in python che a spiegarlo in italiano :-P

    Get the sources

    Essendo un piccolo hack non c’e’ ovviamente ne binario ne risoluzione automatica delle dipendenze :-)

    C’e’ un repository di codice GPLv3 da scaricare, studiare e modificare a proprio piacimento … esercitate liberamente le vostre 4 liberta’ :-P

    Nel README ci sono anche due note sulle dipendenze ma in ogni caso invito chi decidesse di cimentarsi nel tentativo di utilizzarlo sulla propria macchina o di utilizzarlo come base per qualche proprio esperimento di scrivermi le proprie idee e/o problemi su questo piccolo pezzo di “cera pongo” :-) all’indirizzo “rpl AT salug.it”

    Per eventuali flame, troll, insulti etc. scrivetemi pure… saranno tutti ridirezionati su /dev/null :-D

    beh… bando alle ciance ora…

    Happy Hacking, rpl

    1 commenti:

    Unknown ha detto...

    eheheh mitico ripley ;)
    Sto gia' hackando il modulo wiisendkey, vediamo cosa riesco a farne uscire ihihi :-PPP

    ...e poi... geek evening!!! ;)

    View Luca Greco"s profile on LinkedIn

    Rpl

    La mia foto
    Lecce, Italy
    Fulltime Coder and *nix BOFH