Utilizzo Data Glove e Tracker in Panda3D -...

18
Utilizzo Data Glove e Tracker in Panda3D Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Davide Gadia Corso di Ambienti Virtuali Immersivi e Interattivi Corso di Ambienti Virtuali Immersivi e Interattivi Laurea Magistrale in Informatica per la Comunicazione Laurea Magistrale in Informatica per la Comunicazione a.a. 2012/2013 a.a. 2012/2013

Transcript of Utilizzo Data Glove e Tracker in Panda3D -...

Page 1: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

Utilizzo Data Glove e Tracker in Panda3DUtilizzo Data Glove e Tracker in Panda3D

Davide GadiaDavide Gadia

Corso di Ambienti Virtuali Immersivi e InterattiviCorso di Ambienti Virtuali Immersivi e Interattivi

Laurea Magistrale in Informatica per la ComunicazioneLaurea Magistrale in Informatica per la Comunicazione

a.a. 2012/2013a.a. 2012/2013

Page 2: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

• Connessione USB

• Dll molto semplice per l'acquisizione dei dati e per il loro utilizzo in un applicativo Autocalibrazione Gesture Acquisizione dati singoli sensori (finger

tracking)

Data Glove 5DT 14 Ultra

Page 3: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

• Valori di flessione minima e massima in ogni sensore dipendono da caratteristiche mano dell' utente

• E' necessario calibrare il dispositivo Manualmente:

inserisco valori predeterminati tramite le chiamate specifiche (applicazione chiede un range limitato e predefinito di valori)

inserisco dati di calibrazione precedenti per l'utente e li carico nel sistema

Automaticamente (impostazione di default): dopo l'apertura e chiusura (un paio di volte) delle dita

vengono acquisiti i nuovi valori minimi e massimi per l'utente Necessario preparare una breve fase preliminare in cui viene

chiesto all'utente di aprire e chiudere la mano Il dispositivo parte con valori di default non adeguati

Data Glove - Autocalibrazione

Page 4: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

Data Glove - Gesture

Image courtesy of www.5dt.com

Page 5: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

• Possibilità di mappare posizioni predefinite delle dita a segnali di input dell'applicazione Metodo getGesture() ritorna un intero (slide precedente) Non tutte intuitive Non tutte facili da fare Troppe gesture difficili da ricordare\gestire

E' necessario avere configurazioni “di riposo” che non siano mappate ad un'azione

Data Glove - Gesture

Page 6: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

Data Glove – Dati raw dei sensori

Image courtesy of www.5dt.com

• Sensori di flessione e abduzione• Acquisizione dati scalati in [0.0, 1.0]

Singolarmente: getSensorScaled(sensor) Tutti insieme: getSensorScaledAll() Possono essere utilizzati per esempio per controllare i joint delle

dita di una mano 3D

Page 7: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

• Dll fornita con il dispositivo è in C• Non esiste una versione Python ufficiale da utilizzare in Python

• Binding Python nel modulo glove del Python Computer Graphics Kit (cgkit)

cgkit non aggiornata da 2 anni Non funziona con Panda 1.8

• Supporto VRPN parziale No gesture Dati scalati senza calibrazione

Data Glove in Panda3D

Page 8: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

• Possibili soluzioni: Creare un wrapper Python utilizzando Boost o Ctypes Creare un applicativo C/C++ che chiami SDK Data Glove ed

esporti dati come pacchetti OSC http://code.google.com/p/oscpack/

• Utilizzo Ctypes: SDK dispositivo utilizza una struct di riferimento non nota Impossibile/molto difficile gestirla direttamente in Ctypes Meglio creare una DLL che faccia da wrap alla SDK Funzioni C della DLL “di servizio” chiamano molto semplicemente

i metodi della SDK, gestendo in C la struttura dati proprietaria. fdOpen - fdClose fdGetSensorScaled fdGetGesture

Data Glove in Panda3D

Page 9: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

Gestione joint in Panda3D

• ActorNodePath.exposeJoint(None, “modelRoot”, “Joint Name”) Ritorna il NodePath a cui è attaccato il joint Riparentando a questo NodePath, il nuovo oggetto seguirà il joint Metodi di sola lettura

• ActorNodePath.controlJoint(None, “modelRoot”, “Joint Name”) crea un NodePath “dummy” a cui applicare una

trasformazione Ad ogni frame, la trasformazione è applicata al joint Controllo procedurale dell' animazione. Metodi di sola scrittura

Page 10: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

• Connessione USB o Seriale• Trasmissione posizione e orientamento

del ricevitore rispetto al trasmettitore

• Problemi interferenza metalli Posizionamento trasmettitore su

treppiede fotografico

Tracker Polhemus FASTRAK

Page 11: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

• Dati trasmessi tramite VRPN Di default, supporterebbe solo connessione seriale In caso di disponibilità solo della connessione USB:

possibile utilizzare cavo USB-Seriale per creare una porta seriale virtuale sul PC

mantentendo però la gestione del dispositivo tramite USB

• In Panda3d, connessione a server VRPN tramite classe VrpnClient Acquisizione dati tramite classe TrackerNode

FASTRAK in Panda3D

Page 12: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

• Orientamento sistema di riferimento Tracker diverso da quello di Panda3D Va tenuto conto nell'utilizzare i dati Invertire segno asse Z Scambiare valori su X e Y

FASTRAK in Panda3D

Assi Trasmettitore - Image courtesy of www.polhemus.com

Page 13: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

FASTRAK in Panda3D

Assi Ricevitore - Image courtesy of www.polhemus.com

Page 14: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

• Classe TrackerNode serve all'acquisizione dei dati dal dispositivo ma non li passa al grafo della scena non trasforma i dati tenendo conto delle eventuali trasformazioni

locali dei nodi.

• L'oggetto deve essere attaccato al datagraph un grafo dedicato alla gestione dei dati dei dispositivi

• Creo poi un nodo figlio di tipo Transform2SG: viene connesso al grafo della scena la cui funzione è convertire i dati assoluti del dispositivo in

trasformazioni relative al nodo a cui vengono applicate perciò considerando anche la catena di trasformazioni

precedenti

FASTRAK in Panda3D

Page 15: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

FASTRAK in Panda3D

.... self.vrpnclient = VrpnClient ('localhost') self.tracker0 = TrackerNode(self.vrpnclient,"Tracker0") #creo un nodo nel grafo della scena self.myTrackedNode = render.attachNewNode('myTrackedNode') # collego il nodo del tracker a dataRoot base.dataRoot.node().addChild(self.tracker0) # creo un nodo Transform2SG, che trasformera' e #passera' i dati dal TrackerNode al grafo della scena t2n = Transform2SG('t2n') # lo imparento a tracker0 self.tracker0.addChild(t2n) #lo collego a myTrackerNode t2n.setNode(self.myTrackedNode.node()) .....

Page 16: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

• Applicando rotazioni in maniera separata sui 3 assi, è possibile far coincidere due assi di rotazione Perdo un grado di libertà Es: pitch di 90°-> yaw e roll si annullano

• Soluzione: Utilizzo quaternioni

Più complessi da utilizzare e gestire Oppure applico limitazioni sugli assi e/o sugli angoli di rotazione

Devo considerare cosa mi serve effettivamente nell'applicazione

Es: Head tracking Posso evitare il roll Limito angoli di Pitch nel range [-85°,+85°]

Gimbal lock

Page 17: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

Gimbal lock

Situazione normale Gimbal lock: assi di rotazione yaw e pitch sono paralleli → ho perso un

grado di libertà

Page 18: Utilizzo Data Glove e Tracker in Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08b...Utilizzo Data Glove e Tracker in Panda3D Davide Gadia Corso di Ambienti Virtuali

• Esportazione pacchetti OSC• Da provare e testare

• Processing Con libreria processing-fastrak

• Puredata Con libreria comport

Alternative per connessione Tracker