Makers Italy: VR Neuron la risposta italiana alla piattaforma Raspberry pi
Jug Roma - Wii Remote
1. Java Remoting
Java Motion Analysis, ovvero come
utilizzare il controller Nintendo sfruttando
Bluetooth e Java.
La portabilità di Java permette di interfacciare diversi
WiiRemote da qualsiasi piattaforma conforme alle
specifiche JSR-82 (Java Bluetooth) utilizzando gli
accelerometri e il sensore IR integrati.
v[dot]decarolis[at]yahoo.it
http://www.decabyte.it
Jug Roma – Java Motion Analysis – 17/04/2008 1
2. Di cosa parliamo...
Vediamo come è possibile analizzare il
movimento di un corpo libero utilizzando appositi
sensori come accelerometri e sensori IR...
In questo contesto sfruttiamo quello che la
tecnologia ci offre di bello e pronto:
Jug Roma – Java Motion Analysis – 17/04/2008 2
3. Wii Remote
Un Nintendo Wii Remote è dotato di:
● 1 accelerometro (ADLX330 – ± 3g)
● 1 sensore IR (~ 1024 x 768)
● 1 modulo bluetooth (BCM2042 – Broadcom)
Oltre a un rumble, speaker, led, pulsanti e
design simmetrico...
Sicuri di volersi limitare a Mario Kart?!
Jug Roma – Java Motion Analysis – 17/04/2008 3
4. Wii Remote
Perchè risulta interessante!?
La connettività Bluetooth e le specifiche
HID (Human Interface Device) lo rendono
indipendente dalla piattaforma...
Si comporta come se fosse un semplice
mouse anche se per conoscerlo a fondo c'è
voluto un bel po' di reverse engineering...
Quiz: chi ha proposto le specifiche HID?
Jug Roma – Java Motion Analysis – 17/04/2008 4
5. Movimenti
Un corpo libero nello spazio può compiere 6
differenti tipi di movimenti, 3 traslazioni lungo gli
assi coordinati x, y, z e 3 rotazioni notevoli
pitch, roll e yaw.
Le rotazioni vengono calcolate rispetto
agli assi coordinati mantenendo quindi
una componente costante e le altre due
variabili.
Facile in teoria...ma in pratica?!
Jug Roma – Java Motion Analysis – 17/04/2008 5
6. Accelerometer
L'acceletrometro ADXL330 rileva le
forze applicate su una massa nota.
Il vettore risultante è scomposto
lungo i 3 assi (X, Y, Z) disposti come
in figura. Per convenzione questa è
detta posizione normale...
Piccolo Inconveniente:
Su questo pianeta c'è la forza di gravità!
Non otterremo MAI il vettore zero!
Jug Roma – Java Motion Analysis – 17/04/2008 6
7. Compromessi
Per sua natura l'accelerometro non puo' rilevare
movimenti che non comportano la variazione delle
forze, le rotazioni appartengo a questa categoria!
Grazie alla presenza della forza di gravità (g) le cose
si semplificano: pitch e roll sono calcolabili poiché
modificano la posizione del sensore rispetto a g.
Tuttavia dalla posizione normale non possiamo
calcolare yaw.
2 su 3 bello sconto ma non basta!
Jug Roma – Java Motion Analysis – 17/04/2008 7
8. IR Sensor
Grazie al sensore IR possiamo ottenere informazioni
aggiuntive rispetto a quelle fornite dagli accelerometri
(certificati con un margine d'errore del 10%).
Questo sensore ci fornisce le coordinate (x,y) delle
sorgenti IR (beacon) presenti nel quadro della
telecamera. Il tracking viene effettuato lato hardware.
Considerando la risoluzione (1024x768) e gli angoli di
visuale (~41° oriz, ~31° vert) otteniamo una precisione
di circa 0,04° per incremento.
Jug Roma – Java Motion Analysis – 17/04/2008 8
9. IR Sensor
Per poter calcolare yaw è necessario disporre di due
sorgenti IR fisse.
Tramite la triangolazione è possibile risalire alla
distanza del controller rispetto alle sorgenti e
conoscendo la distranza reale tra di esse è possibile
risalire alla rotazione.
Generalmente le sorgenti IR vengono fornite da
un'apposita sensor bar, realizzata con gruppi di led
IR alle estremità della barra.
Jug Roma – Java Motion Analysis – 17/04/2008 9
10. Sensor Bar
La sensor bar utilizzata è una artigianale risultando
più che sufficiente al nostro scopo.
Per comodità sfruttiamo l'alimentazione fornita da una
comune porta USB (+5V), collegando in parallelo
due gruppi di 3 led IR (ovviamente in serie tra loro)...
Un led IR (5mm) alimentato a 1.6 – 1.8 V assorbe
circa 20mA. L'assorbimento totale è di 40mA.
Una parte esigua rispetto allo standard USB 2.0
Jug Roma – Java Motion Analysis – 17/04/2008 10
11. Comunicazione
La comunicazione tra host e controller segue le
specifiche HID, ovvero il dispositivo stesso informa
l'host specificando protocollo ed interpretazione.
Le specifiche HID si sono evolute con lo standard
USB, giusto per tracciare una linea temporale si parla
di diffusione già nel 1998.
Queste specifiche sono state successivamente
applicate alle comunicazioni radio nella versione
Bluetooth HID.
Jug Roma – Java Motion Analysis – 17/04/2008 11
12. Comunicazione
Lo scambio di informazioni è basato su report ed è di
tipo unidirezionale. Il controller puo' raggiungere la
frequenza massima di 100 report al secondo.
La comunicazione è riconducibile ad una asincrona
basata su eventi.
Questo facilita in gran parte la realizzazione delle
librerie che gestiscono i dati da e verso il controller.
In Java il tutto si sposa magnificamente con listeners
e thread bloccanti.
Jug Roma – Java Motion Analysis – 17/04/2008 12
13. Bluetooth
Volendo sporcarsi le mani con Bluetooth, in
ambiente linux possiamo digitare:
● hidd --connect <baddr>
● hcitool info <baddr>
● sdptool browse
● sdptool records --tree <baddr>
Grazie al protocollo SDP otteniamo informazioni
riguardanti l'implementazione HID.
<baddr> = 00:19:1D:62:36:84 (qualcosa del genere)
Jug Roma – Java Motion Analysis – 17/04/2008 13
14. Libreria Wiiuse
Per comunicare con il wiimote senza dover
reimplementare tutto da zero possiamo sfruttare la
libreria wiiuse scritta in C ma cross-platform.
Questa libreria sfrutta lo stack Bluesoleil per
l'implementazione Windows (.dll) e lo stack BlueZ
sotto Linux (.so).
Nel nostro caso sfruttiamo Ubuntu 7.10 (Gutsy) che
già dispone dello stack BlueZ.
http://www.wiiuse.net/
Jug Roma – Java Motion Analysis – 17/04/2008 14
15. Libreria Wiiusej
Ci affidiamo ad wiiuse perchè è disponibile un ottimo
wrapper java chiamato wiiusej.
Passando per wiiuse e wiiusej otteniamo la maggior
parte delle features offerte dalle varie librerie in
circolazione (WiiremoteJ, Mote4J, Wiiuse Simple).
Entrambe sono open source e grazie a questa
caratteristica è possibile conoscere tutte le operazioni
che vengono effettuate a livello computazionale...
http://code.google.com/p/wiiusej/
Jug Roma – Java Motion Analysis – 17/04/2008 15
16. Libreria Wiiusej
In questa demo utilizziamo la versione 0.11 di
entrambe le librerie che usano la stessa convenzione
per il numero di release.
Verrà rilasciata a breve la nuova versione 0.12 di
wiiusej che andrà a risolvere alcuni piccoli bug.
wiiusej è composta da un wrapper JNI (quindi
nativo) attorno alla libreria wiiuse e da un comodo
file jar che ci offre tutti i dati provienenti dal controller
impacchettati nei dovuti pojo.
Jug Roma – Java Motion Analysis – 17/04/2008 16
17. Environment
Dovendo wrappare una libreria nativa wiiusej effettua
una chiamata del tipo:
System.loadLibrary(“libwiiuse”);
In ambiente linux questo si concretizza nell'andare a
cercare nel ld_environment_path i due moduli .so.
Occorrerà quindi impostare il path del caricatore oppure
sistemare direttamente i due file nella dovuta cartella di
sistema.
In quest'ultimo caso possiamo omettere di settare la
variabile java.library.path.
Jug Roma – Java Motion Analysis – 17/04/2008 17
18. Environment
In ambiente Windows sarà sufficiente impostare
correttamente la variabile java.library.path e il
magico mondo delle DLL farà il resto.
Indipendentemente dai casi ci verrà fornita una
cospicua quantità di output su console, come ad
esempio questo:
<paste code here>
Jug Roma – Java Motion Analysis – 17/04/2008 18
19. Code
Per iniziare non ci resta che aggiungere al nostro
progetto il file wiiusej.jar.
Diamo un piccolo sguardo al codice:
Wiimote[] wiimotes =
WiiUseApiManager.getWiimotes(1, true);
1 = numero di devices da connettere
true = un flag di controllo che fa vibrare i motes
(nel caso peggiore otterremo un array vuoto...)
Jug Roma – Java Motion Analysis – 17/04/2008 19
21. Wii Demo
Netbeans 6.1 Beta
(il rilascio final è previsto per il 24/04)
Ubuntu Linux 7.10
(il rilascio di Hardy 8.04 è previsto per il 24/04)
JDK 1.6.0 – Update 10
(sfruttiamo Nimbus, il nuovo LookAndFeel...)
Dubbi, Domande, Perplessità!?
Jug Roma – Java Motion Analysis – 17/04/2008 21
23. Licenza
Attribution – Noncommercial – Share
Alike 3.0 Unported
You are free:
* to Share — to copy, distribute and transmit the work
* to Remix — to adapt the work
http://creativecommons.org/licenses/by-nc-sa/3.0/
Jug Roma – Java Motion Analysis – 17/04/2008 23