17.06.2013 Views

Analisi e sintesi dei gesti comunicativi per gli - Maurizio Mancini

Analisi e sintesi dei gesti comunicativi per gli - Maurizio Mancini

Analisi e sintesi dei gesti comunicativi per gli - Maurizio Mancini

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Indice<br />

Indice________________________________________________________________________1<br />

Ringraziamenti ________________________________________________________________4<br />

Introduzione __________________________________________________________________5<br />

I Gesti <strong>comunicativi</strong> ___________________________________________________________14<br />

I.1 La conversazione Faccia-a-Faccia_________________________________________________14<br />

I.1.1 Proposizione e interazione____________________________________________________________ 15<br />

I.1.2 Multimodalità _____________________________________________________________________ 16<br />

I.1.3 Temporizzazione ___________________________________________________________________ 17<br />

I.2 I <strong>gesti</strong> nella conversazione _______________________________________________________17<br />

I.2.1 Gesticolazione e tipi di gesto__________________________________________________________ 20<br />

I.2.2 Fasi del gesto______________________________________________________________________ 21<br />

I.3 Contenuto rematico e tematico ___________________________________________________23<br />

I.4 Sintesi <strong>dei</strong> <strong>gesti</strong> <strong>comunicativi</strong> _____________________________________________________24<br />

I.4.1 Marcatori delle convinzioni___________________________________________________________ 25<br />

I.4.2 Marcatori de<strong>gli</strong> obbiettivi ____________________________________________________________ 26<br />

I.4.3 Marcatori delle emozioni_____________________________________________________________ 27<br />

II Stato dell’arte ______________________________________________________________28<br />

II.1 Definizione di agente conversazionale_____________________________________________28<br />

II.2 GesSyCa (Thierry Lebourque & Sylvie Gibet, 1999) ________________________________29<br />

II.3 MAX (Stefan Kopp, 2001) ______________________________________________________32<br />

II.4 REA (Justine Cassell & HaoYan, 2000) ___________________________________________34<br />

II.5 Cosmo (Lester et al., 1997) ______________________________________________________37<br />

II.5.1 Implementazione – Internet Advisor Learning Environment_________________________________ 38


Introduzione<br />

II.6 Confronti con Greta ___________________________________________________________39<br />

III L’agente Greta ____________________________________________________________41<br />

III.1 Introduzione_________________________________________________________________41<br />

III.2 Un esempio di interazione______________________________________________________42<br />

III.3 Descrizione del sistema ________________________________________________________44<br />

IV Il sistema <strong>dei</strong> <strong>gesti</strong> __________________________________________________________47<br />

IV.1 Motore gestuale ______________________________________________________________47<br />

IV.2 Motore gestuale di Greta_______________________________________________________49<br />

IV.3 Dal motore originario a quello finale _____________________________________________50<br />

IV.4 Il motore originario ___________________________________________________________52<br />

IV.4.1 Concretizzatore <strong>gesti</strong> ______________________________________________________________ 52<br />

IV.4.2 Pianificatore del movimento_________________________________________________________ 53<br />

IV.4.3 BAP Player ______________________________________________________________________ 56<br />

IV.5 Il motore finale_______________________________________________________________57<br />

IV.5.1 Il linguaggio APML e il parser APML_________________________________________________ 57<br />

IV.5.2 Festival _________________________________________________________________________ 59<br />

IV.5.3 Pianificatore <strong>dei</strong> <strong>gesti</strong> ______________________________________________________________ 59<br />

IV.6 Il linguaggio GestureScript_____________________________________________________60<br />

V Motore gestuale_____________________________________________________________66<br />

V.1 Pianificazione <strong>dei</strong> <strong>gesti</strong> <strong>comunicativi</strong> ______________________________________________66<br />

V.2 Un esempio___________________________________________________________________67<br />

V.3 Implementazione ______________________________________________________________71<br />

V.4 Selettore <strong>dei</strong> <strong>gesti</strong>______________________________________________________________73<br />

V.5 Gesti <strong>dei</strong>ttici <strong>per</strong> l’agente Greta__________________________________________________75<br />

V.6 Cinematica diretta e inversa_____________________________________________________75<br />

V.7 Cinematica inversa: IKAN ______________________________________________________79<br />

V.8 Dinamica <strong>dei</strong> <strong>gesti</strong> e posizioni di riposo multiple ____________________________________82<br />

VI Tools di supporto ___________________________________________________________85<br />

VI.1 La dipendenza da Maya _______________________________________________________85<br />

2


Introduzione<br />

VI.2 Editor delle pose______________________________________________________________87<br />

VI.3 Implementazione dell’editor delle pose ___________________________________________91<br />

VI.3.1 Lo scheletro _____________________________________________________________________ 91<br />

VI.3.2 Il modello _______________________________________________________________________ 94<br />

VI.4 BAP player __________________________________________________________________97<br />

VI.5 La codifica BAP ______________________________________________________________98<br />

VI.6 Implementazione del BAP player_______________________________________________100<br />

VI.7 Editor <strong>dei</strong> <strong>gesti</strong> ______________________________________________________________103<br />

VII Conclusioni e sviluppi futuri________________________________________________107<br />

VII.1 Conclusioni ________________________________________________________________107<br />

VII.2 Sviluppi futuri______________________________________________________________108<br />

Appendice A ________________________________________________________________110<br />

Il metodo Draw della classe Joint ___________________________________________________110<br />

Il metodo ModelDraw della classe Joint _____________________________________________111<br />

Appendice B ________________________________________________________________113<br />

Tabella <strong>dei</strong> gruppi BAP ___________________________________________________________113<br />

Elenco <strong>dei</strong> BAP in ogni gruppo _____________________________________________________114<br />

Appendice C ________________________________________________________________116<br />

Il modello H-Anim _______________________________________________________________116<br />

H-Anim: Gerarchia delle giunture __________________________________________________117<br />

H-Anim: posizione delle giunture ___________________________________________________118<br />

Bibliografia_________________________________________________________________121<br />

3


Introduzione<br />

Ringraziamenti<br />

Vorrei ringraziare tutte le <strong>per</strong>sone che mi hanno <strong>per</strong>messo di arrivare fin qui.<br />

Ringrazio in primo luogo la professoressa Catherine Pelachaud <strong>per</strong> avermi seguito<br />

durante il <strong>per</strong>iodo della tesi con pazienza e professionalità.<br />

Ringrazio molto la mia fami<strong>gli</strong>a <strong>per</strong> la lunga resistenza e il supporto morale e finan-<br />

ziario.<br />

Ringrazio tutte le <strong>per</strong>sone che conosco <strong>per</strong> i momenti piacevoli trascorsi insieme.<br />

Un ringraziamento particolare a molte delle <strong>per</strong>sone che ho conosciuto durante il<br />

mio servizio civile <strong>per</strong>ché è stato in quel <strong>per</strong>iodo che ho deciso che avrei portato a<br />

termine <strong>gli</strong> studi universitari.<br />

Ringrazio le <strong>per</strong>sone con cui suono da molto tempo <strong>per</strong> aver condiviso con me la<br />

passione <strong>per</strong> la musica.<br />

Ringrazio la mia Compagnia di tiro con l’arco <strong>per</strong>ché tirando sono riuscito a rilas-<br />

sarmi anche nei giorni in cui ero molto preso dallo studio.<br />

Infine saluto e ringrazio Elisabetta Bevacqua, Massimo Bilvi e Bjoern Hartmann che<br />

si occupano insieme a me di Greta.<br />

4


Introduzione<br />

Introduzione<br />

Gli esseri umani comunicano tra di loro non solo attraverso il linguaggio. Durante<br />

una conversazione le braccia e le mani delle <strong>per</strong>sone mimano forme e azioni mentre<br />

l’intonazione della voce sale nel raggiungere la parte importante della frase. Nel frat-<br />

tempo <strong>gli</strong> occhi si muovono, le palpebre si chiudono e riaprono varie volte più o<br />

meno rapidamente e tutto il corpo segue lo svolgersi della conversazione modifi-<br />

cando la sua postura.<br />

I comportamenti appena descritti vengono definiti con un unico termine: comunica-<br />

zione non-verbale. La loro funzione comunicativa si pone come complementare o ri-<br />

dondante rispetto a quella del linguaggio parlato.<br />

Prenderemo in esame l’aspetto gestuale della comunicazione non-verbale in quanto<br />

attinente a<strong>gli</strong> argomenti trattati in questa tesi.<br />

Si tratta di un vero e proprio “canale” di comunicazione che svolge un ruolo centra-<br />

le. Basti pensare che una <strong>per</strong>sona che si trova in un paese straniero di cui non cono-<br />

sce la lingua riesce a comunicare abbastanza agevolmente grazie ai soli <strong>gesti</strong>. Questi<br />

rivelano molto dello stato emotivo di una <strong>per</strong>sona (ad esempio spesso i <strong>gesti</strong> tradi-<br />

scono chi non sta dicendo la verità). Ricordiamo, ad esempio, che i <strong>per</strong>sonaggi poli-<br />

5


Introduzione<br />

tici in occasione di interventi pubblici studiano con molta attenzione anche il lato<br />

gestuale <strong>dei</strong> loro discorsi.<br />

Tutto quello che abbiamo detto finora riferendoci all’interazione tra le <strong>per</strong>sone (po-<br />

tremmo anche dire interazione uomo-uomo, cioè tra esseri umani) potrebbe in<br />

qualche modo essere trasferito all’interazione uomo-macchina e più precisamente<br />

alla progettazione di interfacce utente [48].<br />

L’interfaccia utente è quella parte del computer che <strong>per</strong>mette alle <strong>per</strong>sone di accede-<br />

re alle funzionalità del computer stesso [52].<br />

Dalla nascita <strong>dei</strong> primi sistemi a oggi sono stati progettati e realizzati molti tipi di in-<br />

terfaccia, dalle prime semplicissime a riga di comando fino ad arrivare a quelle in cui<br />

l’utente può dialogare direttamente col computer.<br />

Gli agenti conversazionali sono un tipo di interfaccia. Più esattamente sono delle inter-<br />

facce multimodali e antropomorfiche. Le loro caratteristiche principali sono quelle di ave-<br />

re un aspetto visivo simile a quello dell’uomo e di essere capaci di interagire con<br />

l’utente comunicando sia verbalmente che non-verbalmente [8].<br />

Il motivo principale del loro utilizzo nell’interazione uomo-macchina risiede nel fat-<br />

to che, come è stato varie volte dimostrato, le <strong>per</strong>sone tendono a interagire con i<br />

computer come se essi fossero a loro volta esseri umani e ritengono le informazioni<br />

fornite da <strong>per</strong>sonaggi animati molto più attraenti [13].<br />

Diamo allora una definizione più precisa di agente conversazionale [8]:<br />

un agente conversazionale è un’interfaccia che utilizza la rappresentazione visiva di un<br />

corpo umano o animale e che è capace di:<br />

♦ riconoscere e rispondere ad input verbali e non verbali<br />

♦ generare output verbali e non verbali<br />

♦ tener conto di eventi particolari della conversazione come il turn taking e il<br />

feedback (vedere I.2)<br />

6


Introduzione<br />

♦ fornire segnali che indicano lo stato della conversazione<br />

L’architettura di un agente conversazionale è la seguente:<br />

Possiamo notare prima di tutto che lo schema è diviso in 2 parti principali: la mente e<br />

il corpo.<br />

La mente è il sottosistema che si occupa di acquisire e analizzare l’input dell’utente<br />

(<strong>per</strong>cepire e poi capire quello che dice l’utente e quello che succede nell’ambiente) e<br />

successivamente decidere quale dovrà essere la risposta dell’agente a tale input. Il<br />

suo compito, potremmo dire, è quello di decidere “cosa l’agente deve fare o dire”.<br />

In base a queste indicazioni è poi il sottosistema corpo che realizza la <strong>sintesi</strong> vocale<br />

delle parole che la mente ha deciso di far pronunciare all’agente, attivando contem-<br />

poraneamente il movimento delle braccia, delle mani, della faccia e così via. Per ana-<br />

logia potremmo allora dire che il corpo decide “come l’agente si deve muovere”.<br />

Mente e corpo sono due moduli totalmente indipendenti e questo <strong>per</strong>mette di uti-<br />

lizzare la stessa mente su implementazioni del corpo totalmente differenti, ad esem-<br />

pio in grafica 2D o 3D, con sembianze femminili o maschili e così via.<br />

Vediamo quali sono e quali funzioni svolgono le singole componenti del sistema:<br />

• Input manager: è l’hardware necessario <strong>per</strong> tradurre in segnali elettronici e<br />

quindi in forma digitale l’input proveniente dall’utente. Può essere in grado di<br />

acquisire non solo il suono della voce ma anche la posizione del corpo<br />

dell’utente nello spazio, la direzione del suo sguardo, la posizione e la forma delle<br />

sue mani, ecc. Una volta letti questi dati li codifica in un formato opportuno.<br />

7


Introduzione<br />

• Comprensione e decisione: è l’elemento principale della mente dell’agente.<br />

Utilizzando tecniche ad esempio di intelligenza artificiale l’input dell’utente viene<br />

interpretato e viene decisa la risposta dell’agente che sarà in generale un testo da<br />

pronunciare più alcune meta-informazioni che riguardano il testo e le sue fun-<br />

zioni comunicative [39]. Questi dati vengono a questo punto passati in input al<br />

sottosistema corpo.<br />

• Generazione: la sua funzione è quella di sintetizzare in un file il suono delle pa-<br />

role che l’agente ha deciso di pronunciare fornendo loro la giusta intonazione e<br />

di produrre uno o più file contenenti i dati del movimento di tutte le parti del<br />

corpo dell’agente.<br />

Nelle attuali implementazioni de<strong>gli</strong> agenti conversazionali il modulo di genera-<br />

zione si occupa di calcolare:<br />

♦ l'intonazione con cui si pronunciano le parole<br />

♦ le espressioni della faccia e de<strong>gli</strong> occhi in particolare<br />

♦ la forma e il movimento <strong>dei</strong> <strong>gesti</strong> (braccia, mani)<br />

♦ la postura del corpo<br />

Tutti questi dati viaggiano su canali separati che nello schema abbiamo indicato<br />

come file audio (<strong>per</strong> il suono della voce) e file di animazione (<strong>per</strong> il movimento<br />

del corpo e della faccia).<br />

• Visualizzatore dell’animazione: è l’elemento che genera la rappresentazione<br />

grafica dell’agente rendendo visibili tutti i movimenti decisi dal modulo prece-<br />

dente. Si occupa inoltre di riprodurre in modo sincrono il file audio relativo<br />

all’animazione.<br />

Entriamo nel detta<strong>gli</strong>o di alcuni aspetti implementativi del modulo di Generazione<br />

<strong>dei</strong> movimenti di un agente conversazionale.<br />

8


Introduzione<br />

In generale un programma in grado di calcolare delle animazioni in tempo reale vie-<br />

ne chiamato motore grafico. Il motore grafico di un agente conversazionale può utiliz-<br />

zare tre diverse tecniche di animazione:<br />

♦ animazione statica - L’agente viene disegnato da un animatore. Tutti i frame di<br />

animazione vengono disegnati e trasformati in immagini statiche (bitmap) che<br />

il motore poi concatena in modo opportuno. E’ quindi la soluzione più re-<br />

strittiva <strong>per</strong>ché impone di conoscere in anticipo quali saranno tutti i possibili<br />

movimenti dell’agente. Eventuali nuovi tipi di movimento non posso essere<br />

realizzati a meno che non si disegnino i fotogrammi adatti. Con questa tecni-<br />

ca sono stati implementati <strong>per</strong> esempio <strong>gli</strong> “Assistenti di Office” della Mi-<br />

crosoft.<br />

♦ motion capture - Si immagazzinano tutti <strong>gli</strong> spostamenti del corpo comprese le<br />

espressioni facciali utilizzando un particolare hardware composto da alcuni<br />

sensori indossato da una <strong>per</strong>sona (di solito un attore o comunque una <strong>per</strong>-<br />

sona che riesce ad avere un certo controllo sul proprio corpo). Sequenzializ-<br />

zando questi movimenti si genera l’animazione finale. In questo modo il ri-<br />

sultato ottenuto può essere molto realistico ma come nel caso precedente ci<br />

sono delle limitazioni nell’utilizzo dell’agente. Il problema principale è che si<br />

possono riprodurre soltanto i movimenti preregistrati e non crearne dinami-<br />

camente altri nuovi. Questa tecnica viene spesso usata nei film di animazione<br />

<strong>per</strong> dare ai <strong>per</strong>sonaggi un movimento molto realistico (Final Fantasy, Mon-<br />

sters Inc., ecc.).<br />

♦ <strong>sintesi</strong> del movimento - Si scrivono <strong>dei</strong> tools grazie ai quali <strong>gli</strong> sviluppatori pos-<br />

sono manipolare tramite algoritmi i vari gradi di libertà di un modello sinteti-<br />

co in grafica 3d del corpo dell’agente. E’ necessaria la collaborazione tra<br />

animatori, psicologi e studiosi del comportamento umano e il sistema è mol-<br />

to più complicato da realizzare ma le possibilità di utilizzo dell’agente au-<br />

mentano notevolmente. Esso infatti riesce ad adattarsi almeno in parte (con<br />

de<strong>gli</strong> algoritmi appropriati) a qualsiasi situazione reale <strong>per</strong>ché il suo movi-<br />

9


Introduzione<br />

mento viene generato dinamicamente [7] .<br />

Per esempio supponiamo di avere a disposizione due algoritmi che generano<br />

rispettivamente la camminata normale e la corsa. A differenza delle sequenze<br />

preregistrate del motion capture, in questo caso alla base del movimento ci<br />

sono delle funzioni matematiche. E’ quindi possibile alternare la camminata<br />

e la corsa (<strong>per</strong> esempio tramite interpolazione) in modo che il risultato finale<br />

sia molto naturale e senza interruzioni del movimento. E’ questa la soluzione<br />

mi<strong>gli</strong>ore <strong>per</strong> realizzare un agente interattivo.<br />

In questa tesi ci siamo interessati alla creazione di un agente conversazionale interat-<br />

tivo che sia capace di mettere in atto una comunicazione non verbale sincronizzata<br />

con le parole che sta pronunciando. Il canale di comunicazione non verbale che ab-<br />

biamo studiato e riprodotto con una tecnica di <strong>sintesi</strong> del movimento è quello <strong>dei</strong><br />

<strong>gesti</strong>.<br />

Più esattamente ci siamo occupati del modulo di generazione <strong>dei</strong> <strong>gesti</strong> del sottosi-<br />

stema corpo dell’agente, secondo la definizione che abbiamo dato in precedenza.<br />

Figura 1. L’agente conversazionale Greta<br />

10


Introduzione<br />

Non ci occu<strong>per</strong>emo invece del sottosistema mente assumendo che le informazioni<br />

necessarie al funzionamento del corpo (cioè, come detto, un testo più alcune meta-<br />

informazioni) siano già state rese disponibili come risultato di una precedente elabo-<br />

razione da parte di un modulo di generazione di dialoghi multimodali oppure <strong>per</strong><br />

inserimento manuale.<br />

Questa tesi è stata svolta nell’ambito del progetto MagiCster, finalizzato alla proget-<br />

tazione e implementazione di un agente conversazionale chiamato Greta (figura 1).<br />

Gli obbiettivi di MagiCster sono:<br />

− progettare un agente conversazionale che faccia uso di intonazione vocale,<br />

sguardo, <strong>gesti</strong> e posizione del corpo in maniera sincronizzata<br />

− valutare l'utilizzo di un agente conversazionale al fine di determinare quali aspetti<br />

dell'agente risultano importanti <strong>per</strong> quali tipi di interazione uomo-macchina<br />

− sviluppare e documentare l'architettura dell'agente e <strong>dei</strong> suoi componenti al fine<br />

di <strong>per</strong>mettere ad altri gruppi di ricerca di sviluppare e valutare nuove versioni<br />

dell'agente in nuovi domini.<br />

Riassumiamo ora, dandone una breve descrizione, qual’è stato il lavoro svolto in<br />

questa tesi:<br />

♦ pianificazione <strong>dei</strong> <strong>gesti</strong>: dando come input al sistema un testo con <strong>dei</strong> tag ri-<br />

guardanti le sue funzioni comunicative, abbiamo sviluppato un algoritmo che<br />

pianifica e genera autonomamente una sequenza gestuale “realistica”;<br />

♦ implementazione di un visualizzatore dell’animazione: abbiamo implemen-<br />

tato il modulo incaricato, una volta pianificata una sequenza di <strong>gesti</strong>, di tradurre<br />

l’animazione calcolata dal corpo in un filmato visualizzabile sullo schermo del<br />

computer;<br />

♦ implementazione di alcuni tools di supporto: abbiamo sviluppato una serie<br />

di tools <strong>per</strong> <strong>per</strong>mettere la definizione interattiva <strong>dei</strong> <strong>gesti</strong> e la loro memorizza-<br />

zione in un formato ben definito;<br />

11


Introduzione<br />

♦ implementazione <strong>dei</strong> <strong>gesti</strong> <strong>dei</strong>ttici: sono i <strong>gesti</strong> che servono ad indicare un<br />

punto qualsiasi nello spazio;<br />

Nel primo capitolo descriveremo la teoria <strong>dei</strong> <strong>gesti</strong>, prendendo in esame quello che<br />

avviene durante la conversazione tra esseri umani, quali sono i <strong>gesti</strong> che vengono<br />

utilizzati e come possono essere classificati. Questa analisi preliminare è fondamen-<br />

tale <strong>per</strong>ché vo<strong>gli</strong>amo che l’agente Greta abbia un comportamento credibile, che si<br />

muova quindi in maniera adeguata a quello che dice e al contesto in cui lo dice.<br />

Nel secondo capitolo forniremo una panoramica su<strong>gli</strong> agenti conversazionali. Par-<br />

tendo dalla definizione formale di agente conversazionale e dalla sua architettura ba-<br />

se prenderemo in esame alcuni agenti conversazionali che rappresentano lo “stato<br />

dell’arte” in questo campo. In chiusura metteremo in risalto affinità e differenze con<br />

il nostro agente.<br />

Nel terzo capitolo presenteremo l’agente conversazionale Greta, al sua architettura e<br />

descriveremo il suo funzionamento generale.<br />

Nel quarto capitolo daremo una visione generale del sistema <strong>per</strong> la generazione <strong>dei</strong><br />

<strong>gesti</strong> dell’agente Greta e metteremo in evidenza i punti fondamentali del lavoro che<br />

è stato svolto in questa tesi.<br />

Nel quinto capitolo entreremo nei detta<strong>gli</strong> della realizzazione del motore gestuale<br />

dell’agente Greta. Spiegheremo quali sono le regole che abbiamo fissato <strong>per</strong> decide-<br />

re quali <strong>gesti</strong> fare effettuare all’agente e come siamo riusciti a mi<strong>gli</strong>orare la dinamica<br />

del movimento delle sue braccia.<br />

Nel sesto capitolo descriveremo alcuni tools di supporto che abbiamo sviluppato e<br />

che servono a facilitare, rendendolo estremamente intuitivo, il processo di defini-<br />

zione <strong>dei</strong> <strong>gesti</strong>. Inoltre vedremo come è stato realizzato il visualizzatore<br />

dell’animazione finale.<br />

Nel settimo capitolo infine riassumeremo tutto quello che è stato fatto in questa tesi<br />

e spiegheremo come si evolverà nel futuro il sistema dell’agente Greta.<br />

12


Capitolo I, Gesti <strong>comunicativi</strong><br />

13


Capitolo I, Gesti <strong>comunicativi</strong><br />

I<br />

Gesti <strong>comunicativi</strong><br />

I.1 La conversazione Faccia-a-Faccia<br />

Il termine Faccia-a-Faccia viene usato <strong>per</strong> indicare quando la conversazione tra es-<br />

seri umani avviene direttamente e non con l’interposizione di un qualsiasi mezzo di<br />

comunicazione, come ad esempio succede col telefono o la posta elettronica. Ve-<br />

diamo brevemente come funziona questo tipo di interazione, ponendo l’attenzione<br />

in particolare sul lato gestuale della comunicazione.<br />

La conversazione Faccia-a-Faccia è fondamentalmente uno scambio di informazio-<br />

ni, ma affinché si svolga in modo “sincronizzato” ed efficiente i partecipanti metto-<br />

no in atto spontaneamente (cioè in modo non cosciente, senza una decisione volon-<br />

taria) una complessa interazione.<br />

Pensiamo a un colloquio tra più <strong>per</strong>sone: in generale una delle <strong>per</strong>sone prenderà la<br />

parola mentre le altre la ascolteranno, finché a un certo punto sarà qualcun altro ad<br />

iniziare a parlare <strong>per</strong>ché la prima <strong>per</strong>sona ha finito oppure <strong>per</strong>ché è stata interrotta<br />

14


Capitolo I, Gesti <strong>comunicativi</strong><br />

<strong>per</strong> sollevare un’obiezione e così via. Quindi quando si dice che la conversazione è<br />

“sincronizzata” non si intende dire che le <strong>per</strong>sone necessariamente prendono la pa-<br />

rola una dopo l’altra, ma che lo svolgimento stesso della conversazione contiene una<br />

parte dell’informazione. Ad esempio, se durante un dibattito molto acceso e dai toni<br />

forti (<strong>per</strong> esempio in politica) più <strong>per</strong>sone parlano contemporaneamente e le loro<br />

parole si sovrappongono, questo contribuisce ad aumentare la sensazione di tensio-<br />

ne ed altera lo stato emotivo <strong>dei</strong> presenti.<br />

I.1.1 Proposizione e interazione<br />

Tutto quello che viene comunicato durante una conversazione può essere distinto<br />

tra ciò che effettivamente serve <strong>per</strong> esprimere il proprio pensiero (contenuto proposi-<br />

zionale) e ciò che serve a regolare l’andamento della conversazione (contenuto interat-<br />

tivo).<br />

Le informazioni proposizionali vengono fornite da chi parla <strong>per</strong> raggiungere<br />

l’obbiettivo della conversazione. In generale una <strong>per</strong>sona parla con un’altra <strong>per</strong>sona <strong>per</strong><br />

spiegare qualcosa che a lei è nota ma che è più o meno sconosciuta <strong>per</strong> chi ascolta.<br />

Quindi chi parla ha chiaro nella sua mente qual’è l’obbiettivo della conversazione e<br />

il suo scopo e’ quello di trasferire queste informazioni nella mente dell’ascoltatore<br />

utilizzando tutti i canali <strong>comunicativi</strong> a cui abbiamo già più volte accennato (parole,<br />

sguardo, <strong>gesti</strong>, ecc). I <strong>gesti</strong> prodotti <strong>per</strong> scopi proposizionali sono quindi quelli ad<br />

esempio che servono a spiegare forme (con le mani si descrive nello spazio la forma<br />

di un oggetto a cui si fa riferimento), che indicano qualcosa (anche in senso astratto,<br />

indicando verso il basso dicendo <strong>per</strong> esempio “…in questo contesto…”) e così via.<br />

Le informazioni interattive servono invece a modificare in continuazione<br />

l’andamento della conversazione. I piccoli movimenti della testa che si compiono<br />

mentre l’interlocutore sta parlando e che significano “ho capito, vai pure avanti”,<br />

oppure brevi esclamazioni come “uh?”, o il sollevamento del braccio con il palmo<br />

della mano rivolto in avanti che serve <strong>per</strong> interrom<strong>per</strong>e chi sta parlando.<br />

15


Capitolo I, Gesti <strong>comunicativi</strong><br />

D’altra parte la <strong>per</strong>sona che sta parlando si rivolge spesso con lo sguardo verso <strong>gli</strong><br />

ascoltatori e in particolare verso i loro occhi, ricevendo un’informazione continua<br />

ad esempio sul loro livello di attenzione e/o comprensione di quello che lui sta di-<br />

cendo.<br />

In quest’ultimo esempio abbiamo parlato di un tipo di informazione che potremmo<br />

definire “di ritorno” da parte dell’ascoltatore verso chi parla. Il contenuto interattivo<br />

della conversazione può essere di due tipi:<br />

− feedback: informazioni “di ritorno” dall’ascoltatore verso chi sta parlando (ad<br />

esempio annuire con la testa quando vo<strong>gli</strong>amo far capire di essere d’accordo,<br />

chiudere e riaprire <strong>gli</strong> occhi rapidamente più volte <strong>per</strong> indicare stupore o <strong>per</strong>ples-<br />

sità, inclinare leggermente la testa da un lato <strong>per</strong> dimostrare attenzione). Servono<br />

a chi parla <strong>per</strong> sa<strong>per</strong>e come l’ascoltatore sta seguendo la conversazione (è inte-<br />

ressato, sta capendo, si sta annoiando, ecc.).<br />

− turn-taking: comportamenti che stabiliscono il ritmo della conversazione, cioè<br />

l’ordine in cui i partecipanti vo<strong>gli</strong>ono prendere la parola (ad esempio portare la<br />

mano davanti a sé <strong>per</strong> mantenere la parola o scuotere ripetutamente la testa <strong>per</strong><br />

chiedere la parola)<br />

I.1.2 Multimodalità<br />

Durante la conversazione tra esseri umani sono molti i canali che vengono attivati<br />

(parlato, intonazione, occhi, faccia, braccia, mani, postura del corpo). In questo sen-<br />

so si parla di multimodalità della comunicazione Faccia-a-Faccia. La possibilità di<br />

sce<strong>gli</strong>ere se usare uno o più canali nello stesso momento <strong>per</strong>mette anche di paralle-<br />

lizzare più informazioni nello stesso tempo o dare enfasi a un’unica informazione<br />

che riteniamo molto importante convo<strong>gli</strong>andola su più canali contemporaneamente.<br />

In più la gestualità in molti casi serve anche alla <strong>per</strong>sona che sta parlando <strong>per</strong> piani-<br />

ficare me<strong>gli</strong>o come comunicare i propri pensieri, se non addirittura <strong>per</strong> chiarirli me-<br />

<strong>gli</strong>o a se stessa [34]. Pensiamo <strong>per</strong> esempio a quando parliamo al telefono e <strong>gesti</strong>co-<br />

16


Capitolo I, Gesti <strong>comunicativi</strong><br />

liamo pur non essendo osservati dal nostro interlocutore. Oppure quando una <strong>per</strong>-<br />

sona sta spiegando qualcosa che risulta complicata anche <strong>per</strong> lei e allora esprime<br />

pensieri molto corti e sottolinea l’inizio e la fine di ogni concetto producendo con le<br />

mani <strong>dei</strong> <strong>gesti</strong> come se stesse “affettando l’aria” davanti a sé.<br />

Prendendo infine in considerazione in particolare i canali del parlato e <strong>dei</strong> <strong>gesti</strong> bi-<br />

sognerà prestare molta attenzione alla relazione che c’è tra di loro, <strong>per</strong>ché le <strong>per</strong>sone<br />

ne fanno uso quasi sempre contemporaneamente e i <strong>gesti</strong> hanno <strong>per</strong> la maggior par-<br />

te del tempo la funzione di completare l’informazione contenuta nel parlato.<br />

I.1.3 Temporizzazione<br />

Scuotere più volte la testa mentre qualcuno sta parlando ha un particolare significa-<br />

to che ha l’effetto di modificare l’andamento della conversazione. Sia questa che al-<br />

tre azioni hanno una precisa temporizzazione che rende l’azione riconoscibile in<br />

modo univoco a chi osserva. Ad esempio fornire un feedback molto rallentato e ri-<br />

tardato indica distrazione, o svo<strong>gli</strong>atezza.<br />

E’ ovvio quindi che non rispettando la temporizzazione <strong>dei</strong> <strong>gesti</strong> si rischierebbe di<br />

rendere nullo il contenuto informativo che si vuole trasmettere se non addirittura<br />

modificarlo. Ad esempio se mentre vengono pronunciate le parole “prendi quel li-<br />

bro…” il gesto di indicare un certo libro non viene prodotto durante “quel libro”<br />

ma in un altro momento, allora l’ascoltatore non sarà in grado di capire a quale libro<br />

si sta facendo riferimento.<br />

I.2 I <strong>gesti</strong> nella conversazione<br />

Tutti i <strong>gesti</strong> che le <strong>per</strong>sone producono durante una conversazione possono innanzi-<br />

tutto essere suddivisi in due insiemi:<br />

17


Capitolo I, Gesti <strong>comunicativi</strong><br />

• <strong>gesti</strong> <strong>comunicativi</strong>: sono quelli a cui abbiamo fatto riferimento finora e <strong>dei</strong><br />

quali ci interesseremo in questa tesi. Hanno una funzione comunicativa<br />

pari a<strong>gli</strong> altri canali della comunicazione non-verbale (Introduzione).<br />

• <strong>gesti</strong> non <strong>comunicativi</strong>: sono casuali, non sono collegati allo svolgimento della<br />

conversazione né a<strong>gli</strong> argomenti trattati. Ad esempio, spostare un oggetto,<br />

aggiustarsi i capelli, ecc.<br />

Forniremo ora una descrizione più detta<strong>gli</strong>ata <strong>dei</strong> <strong>gesti</strong> <strong>comunicativi</strong> che ricordiamo<br />

(vedi l’Introduzione) rappresentano la quasi totalità <strong>dei</strong> <strong>gesti</strong> prodotti durante la<br />

conversazione.<br />

D’ora in poi, <strong>per</strong> convenzione, utilizzeremo sempre il termine gesto anche se in realtà<br />

ci stiamo riferendo ai soli <strong>gesti</strong> <strong>comunicativi</strong>.<br />

Secondo Kendon [18; 20], pioniere nella ricerca sui <strong>gesti</strong>, esiste una gerarchia, chia-<br />

mata Continuo di Kendon, nella quale si possono distribuire i <strong>gesti</strong> <strong>comunicativi</strong>:<br />

Gesticolazione → Gesti Language-like → Emblemi → Linguaggi <strong>dei</strong> segni<br />

Vediamo la descrizione delle singole classi da destra a sinistra:<br />

♦ Linguaggi <strong>dei</strong> segni: sono i <strong>gesti</strong> <strong>dei</strong> linguaggi utilizzati <strong>per</strong> la comunicazione tra<br />

<strong>per</strong>sone non udenti. In questo caso, mancando del tutto la comunicazione<br />

vocale i <strong>gesti</strong> e le espressioni facciali servono a trasmettere tutta<br />

l’informazione e sono utilizzati all’interno di un linguaggio che ha una fono-<br />

logia, una morfologia e una sintassi ben definite.<br />

♦ Emblemi: sono <strong>gesti</strong> specifici di una certa cultura, cioè possono essere inter-<br />

pretati in modo diverso da cultura a cultura. In Italia [19] si usano moltissimi<br />

<strong>gesti</strong> che hanno un significato ben preciso, ad esempio <strong>per</strong> indicare che si<br />

vuole fare una telefonata si può avvicinare la mano al lato della faccia con<br />

18


Capitolo I, Gesti <strong>comunicativi</strong><br />

pollice e mignolo a<strong>per</strong>ti e le altre dita chiuse. Oppure chiudere tutte le dita<br />

tranne il mignolo e mettere la mano in verticale <strong>per</strong> fare riferimento ad un<br />

oggetto sottile. Pur costituendo solo il 10% <strong>dei</strong> <strong>gesti</strong> che occorrono in una<br />

conversazione, all’inizio <strong>gli</strong> sviluppatori di interfacce conversazionali decisero<br />

di riprodurre principalmente <strong>gesti</strong> emblematici [8]. Questo probabilmente<br />

<strong>per</strong>ché sono <strong>gesti</strong> che vengono prodotti consciamente e quindi molto più fa-<br />

cilmente identificabili andando ad esaminare su<strong>per</strong>ficialmente la gestualità<br />

delle <strong>per</strong>sone.<br />

♦ Gesti Language-like: sono <strong>gesti</strong> integrati grammaticalmente all’interno delle<br />

frasi e si sostituiscono del tutto alle parole differenziandosi <strong>per</strong> questo dai ge-<br />

sti emblematici. Un esempio potrebbe essere la frase “... i genitori erano ok<br />

ma i fi<strong>gli</strong> erano [effettua un gesto invece di pronunciare la parola]” in cui il<br />

gesto prende il posto di un aggettivo.<br />

♦ Gesticolazione: in questo insieme sono raccolti tutti i <strong>gesti</strong> prodotti dalle <strong>per</strong>so-<br />

ne in modo spontaneo e involontario con le mani e le braccia. Caratteristica<br />

fondamentale della <strong>gesti</strong>colazione è che praticamente essa non avviene mai in<br />

assenza del parlato. Numericamente la quasi totalità <strong>dei</strong> <strong>gesti</strong> di una conver-<br />

sazione è <strong>gesti</strong>colazione. La <strong>gesti</strong>colazione comprende quindi tutti i <strong>gesti</strong> più<br />

comuni, quelli compiuti <strong>per</strong> porre enfasi su alcune parti del discorso, quelli<br />

<strong>per</strong> indicare, quelli che riproducono la forma di un oggetto o lo svolgimento<br />

di un’azione. Ritorneremo tra breve sulla <strong>gesti</strong>colazione <strong>per</strong> descrivere tutte le<br />

classi di <strong>gesti</strong> di cui si compone.<br />

Notiamo che man mano che ci spostiamo nella gerarchia da sinistra verso destra la<br />

presenza del parlato diminuisce mentre aumenta la funzione linguistica <strong>dei</strong> <strong>gesti</strong>. In-<br />

fatti nella <strong>gesti</strong>colazione i <strong>gesti</strong> avvengono sempre durante il parlato, i <strong>gesti</strong> langua-<br />

ge-like e emblematici invece possono prendere il posto delle parole e infine nei lin-<br />

guaggi <strong>dei</strong> segni il parlato scompare del tutto. Inoltre aumenta anche il collegamento<br />

tra <strong>gesti</strong> e ambiente, cioè l’interpretazione e l’uso <strong>dei</strong> <strong>gesti</strong> dipende sempre di più<br />

19


Capitolo I, Gesti <strong>comunicativi</strong><br />

dall’ambito culturale, sociale, o addirittura geografico (ad esempio <strong>per</strong> <strong>gli</strong> emblemi)<br />

in cui la conversazione sta avvenendo.<br />

I.2.1 Gesticolazione e tipi di gesto<br />

Abbiamo detto che i <strong>gesti</strong> compresi nella classe della <strong>gesti</strong>colazione rappresentano la<br />

quasi totalità <strong>dei</strong> <strong>gesti</strong> prodotti durante le normali conversazioni tra le <strong>per</strong>sone. Su<br />

questa classe si sono quindi concentrati <strong>gli</strong> studi compiuti nel campo della gestualità,<br />

producendo la seguente classificazione della <strong>gesti</strong>colazione [8; 34]:<br />

• Iconici: sono in stretta relazione con il contenuto semantico del parlato [50]. Un<br />

gesto iconico tende a visualizzare (con la sua forma) alcuni aspetti della scena a<br />

cui fa riferimento il parlato. Quando una <strong>per</strong>sona sta elencando qualcosa, ad<br />

esempio “…la prima cosa che devi fare..”, le mani riproducono i numeri, ad<br />

esempio il pollice alzato <strong>per</strong> il numero 1, indice e medio <strong>per</strong> il numero 2 e così<br />

via. Oppure pronunciando “…c’è solo un piccolo pro-<br />

blema…” <strong>per</strong> esprimere il fatto che il problema non è di<br />

grave importanza una delle mani assumerà la forma con i<br />

polpastrelli di indice e pollice che si toccano e le altre di-<br />

ta curvate e unite tra loro un po’ staccate dall’indice e la<br />

mano si sposterà davanti e leggermente di lato alla faccia<br />

(figura 1). In totale rappresentano circa il 40% <strong>dei</strong> <strong>gesti</strong><br />

normalmente prodotti durante una conversazione.<br />

• Metaforici: <strong>gesti</strong> che rappresentano concetti astratti. Per esempio durante una fra-<br />

se del tipo “…l’ho spinto in avanti…” chi parla fa un gesto con la mano a<strong>per</strong>ta<br />

davanti a sé e poi sposta il braccio in avanti mentre pronuncia “spinto” mante-<br />

nendo la mano nella posizione finale fino alla fine parola “avanti”. Rispetto al to-<br />

tale <strong>dei</strong> <strong>gesti</strong> sono circa il 10%.<br />

20<br />

Figura 1.


Capitolo I, Gesti <strong>comunicativi</strong><br />

• Deittici: indicano un punto nello spazio mentre ci si riferisce a <strong>per</strong>sone, posti o al-<br />

tre entità identificabili in senso spaziale. Fanno cioè parte di questa classe sia i<br />

<strong>gesti</strong> che indicano qualcosa che si trova fisicamente nell’ambiente in cui avviene<br />

la conversazione sia quelli che indicano una parte dell’ambiente<br />

che può in qualche modo essere identificata con un’entità astrat-<br />

ta. Un esempio di questo tipo è quando si indica verso il basso<br />

dicendo “..questo..” (figura 2) <strong>per</strong> indicare in realtà l’oggetto del-<br />

la conversazione. Come i metaforici anche questi <strong>gesti</strong> sono circa<br />

il 10% del totale.<br />

• Beat: vengono definiti come tutti quei movimenti che non presentano un signifi-<br />

cato particolare ma che servono a sottolineare il concetto che<br />

si sta esprimendo oppure hanno funzioni di turn-taking o<br />

feedback. Sono piccoli spostamenti delle mani o delle braccia,<br />

senza una forma particolare. Per esempio se una <strong>per</strong>sona vuo-<br />

le porre una forte enfasi su una certa parola allora, mentre il<br />

parlato rallenta arrivando a scandire le singole sillabe della pa-<br />

rola, le mani si muovono ritmicamente con brevi spostamenti<br />

dall’alto verso il basso, uno <strong>per</strong> ciascuna sillaba pronunciata (figura 3). Il rima-<br />

nente 40% <strong>dei</strong> <strong>gesti</strong> di una conversazione e’ composto di beat.<br />

I.2.2 Fasi del gesto<br />

I <strong>gesti</strong> si svolgono nel tempo e hanno un’evoluzione <strong>per</strong> fasi. Generalmente quelle<br />

che vengono distinte sono:<br />

♦ preparazione: le mani e le braccia iniziano a muoversi e si portano dalla posi-<br />

zione di riposo in un punto dello spazio molto vicino a dove dovrà avvenire<br />

lo stroke.<br />

21<br />

Figura 2<br />

Figura 3


Capitolo I, Gesti <strong>comunicativi</strong><br />

♦ stroke: la fase più energica del gesto, quella che porta con sé il contenuto se-<br />

mantico.<br />

♦ mantenimento: le mani e le braccia si mantengono <strong>per</strong> un certo <strong>per</strong>iodo di tem-<br />

po (che potrebbe essere anche molto lungo) nella posizione che avevano du-<br />

rante lo stroke. A questo punto si potrebbe verificare un nuovo stroke oppu-<br />

re il gesto potrebbe terminare con la successiva fase di rilascio.<br />

♦ rilascio: le braccia si portano di nuovo nella fase di riposo.<br />

Non sempre <strong>per</strong>ò avvengono tutte queste fasi (anche se c’è sempre come minimo la<br />

fase di stroke), ogni gesto ha una complessità diversa ed esistono <strong>gesti</strong> che includo-<br />

no <strong>per</strong> esempio solo la preparazione e lo stroke. Altri hanno una successione di<br />

stroke molto ravvicinati (<strong>gesti</strong> con ripetizioni) e altri un tempo di mantenimento di<br />

molti secondi.<br />

In generale i <strong>gesti</strong> che hanno una funzione visiva (iconici, metaforici) sono composti<br />

di tre fasi (preparazione-stroke-rilascio) mentre quelli non visivi (beat) sono a due<br />

fasi.<br />

Nella figura seguente [26] vediamo il grafico del movimento delle braccia di una<br />

<strong>per</strong>sona durante il gesto “TIRARE”. Esso viene effettuato con il palmo della mano<br />

verso l’alto, partendo col braccio proteso in avanti e il palmo a<strong>per</strong>to e poi portando<br />

la mano verso il corpo con un movimento rettilineo e chiudendo contemporanea-<br />

mente il palmo.<br />

Come possiamo vedere sono chiaramente riconoscibili le tre fasi di cui esso si com-<br />

pone:<br />

22


Capitolo I, Gesti <strong>comunicativi</strong><br />

E’ stato osservato che nella maggior parte <strong>dei</strong> <strong>gesti</strong> il momento culminante dello<br />

stroke (nell’esempio di figura si trova appena prima di 1.4 secondi) avviene mentre<br />

si sta pronunciando la parola su cui si pone l’enfasi del discorso e più esattamente al<br />

75% della pronuncia di quella parola [34].<br />

Quando due <strong>gesti</strong> sono molto ravvicinati nel tempo può succedere che la fase di ri-<br />

lascio del primo e quella di preparazione del secondo si annullino e vengano sosti-<br />

tuite da un parziale rilascio del primo gesto seguito da uno spostamento verso la fa-<br />

se di stroke del secondo. Questo tipo di movimento si chiama coarticolazione tra due<br />

o più <strong>gesti</strong>.<br />

I.3 Contenuto rematico e tematico<br />

Secondo Halliday e altri ricercatori [12] il contenuto informativo di quello che viene<br />

detto durante una conversazione può essere denotato in due modi: contenuto rema-<br />

tico (rheme) e contenuto tematico (theme).<br />

Il theme è l’argomento principale del discorso, noto a tutti i partecipanti, mentre il<br />

rheme corrisponde a ciò che viene introdotto a un certo punto del discorso come<br />

concetto nuovo, oppure riguarda il theme ma è di particolare interesse <strong>per</strong> qualche<br />

altro motivo.<br />

23


Capitolo I, Gesti <strong>comunicativi</strong><br />

Di solito quindi (e anche in questa tesi) tutto quello che viene detto durante una<br />

conversazione viene sempre classificato come rheme o theme.<br />

Cassell e Prevost [8] hanno dimostrato non solo che la quasi totalità <strong>dei</strong> <strong>gesti</strong> si veri-<br />

fica durante il rheme, ma che si verifica quasi sempre almeno un gesto <strong>per</strong> ogni fra-<br />

se con contenuto di tipo rematico. I ricercatori ipotizzano che questo avvenga <strong>per</strong>-<br />

ché il rheme è l’informazione che, essendo nuova, maggiormente contribuisce<br />

all’evoluzione del discorso e che quindi necessita di una descrizione più accurata e<br />

completa (con l’ausilio della gestualità) da parte di chi sta parlando.<br />

I.4 Sintesi <strong>dei</strong> <strong>gesti</strong> <strong>comunicativi</strong><br />

Abbiamo visto che secondo il tipo di classificazione più diffuso [8; 34] l’insieme <strong>dei</strong><br />

<strong>gesti</strong> <strong>comunicativi</strong> può essere suddiviso in classi in base alla funzione svolta dal ge-<br />

sto. Quindi i <strong>gesti</strong> iconici o metaforici sono quelli che in qualche modo assomi<strong>gli</strong>a-<br />

no a quello a cui si riferiscono, i <strong>gesti</strong> <strong>dei</strong>ttici servono ad indicare qualcosa nello<br />

spazio e quelli emblematici hanno una funzione linguistica.<br />

Nel lavoro svolto in questa tesi ci siamo basati su un’altra classificazione frutto de<strong>gli</strong><br />

studi svolti da Isabella Poggi della Terza Università di Roma [43;44;45].<br />

Secondo Poggi i <strong>gesti</strong> <strong>comunicativi</strong> possono essere classificati in base al significato<br />

di quello che le <strong>per</strong>sone vo<strong>gli</strong>ono comunicare.<br />

Da questo punto di vista una <strong>per</strong>sona mentre parla fa riferimento a concetti che ap-<br />

partengono sempre a una delle seguenti categorie:<br />

• l’ambiente che la circonda<br />

• la propria identità<br />

• il proprio stato mentale ed emotivo<br />

Le informazioni sull’ambiente riguardano le entità e <strong>gli</strong> eventi concreti o astratti che<br />

si trovano nel mondo in cui la <strong>per</strong>sona si trova (oggetti, altre <strong>per</strong>sone, organismi,<br />

eventi, posti).<br />

24


Capitolo I, Gesti <strong>comunicativi</strong><br />

Le informazioni sulla propria identità comprendono la propria età, sesso, <strong>per</strong>sonali-<br />

tà, radici culturali e così via.<br />

Infine le informazioni sulla mente della <strong>per</strong>sona servono <strong>per</strong> comunicare a<strong>gli</strong> altri il<br />

proprio stato mentale, i propri obbiettivi, le proprie convinzioni ed emozioni.<br />

Gli studi di Isabella Poggi [45] si sono concentrati su quest’ultimo tipo di informa-<br />

zione e sui <strong>gesti</strong> che ne <strong>per</strong>mettono la comunicazione durante una conversazione,<br />

che sono stati chiamati Marcatori Gestuali Mentali (originariamente in inglese Gestural<br />

Mind Markers). Un marcatore gestuale mentale è quindi un gesto usato <strong>per</strong> comuni-<br />

care il proprio stato mentale o emotivo.<br />

I Marcatori Gestuali Mentali possono a loro volta essere di tre tipi: Marcatori delle<br />

convinzioni (Belief Markers), Marcatori de<strong>gli</strong> obbiettivi (Goal Markers), Marcatori delle emo-<br />

zioni (Emotive Markers). Vediamo ora <strong>per</strong> ciascuna di queste categorie quali sono i<br />

<strong>gesti</strong> associati.<br />

I.4.1 Marcatori delle convinzioni<br />

Sono quei <strong>gesti</strong> che usiamo <strong>per</strong> comunicare all’esterno le nostre convinzioni, certez-<br />

ze o dubbi circa quello che stiamo dicendo in quel preciso istante.<br />

• Certezza o incertezza: aprire il palmo della mano verso l’alto inclinandola leg-<br />

germente verso l’interlocutore significa che siamo certi di quello che stiamo di-<br />

cendo nel senso che la cosa è ovvia, evidente. Il gesto stesso è come se volesse<br />

mostrare qualcosa alla <strong>per</strong>sona che ci ascolta.<br />

Quando invece vo<strong>gli</strong>amo dimostrare di conoscere con precisione l’argomento<br />

del discorso possiamo unire indice e pollice facendo un piccolo spostamento col<br />

braccio dall’alto verso il basso.<br />

Al contrario ci sono <strong>gesti</strong> che indicano incertezza, quello tipico consiste nel sol-<br />

levare le spalle, eventualmente aprendo anche entrambe le mani lateralmente. Per<br />

quanto riguarda la negazione il gesto tipico consiste nel sollevare l’indice facen-<br />

dolo oscillare da destra a sinistra e viceversa (il gesto “no”).<br />

25


Capitolo I, Gesti <strong>comunicativi</strong><br />

• Gesti meta-cognitivi: alcuni <strong>gesti</strong> vengono impiegati <strong>per</strong> dare informazioni relati-<br />

ve all’origine della certezza <strong>dei</strong> concetti che stiamo esprimendo. Ad esempio<br />

schioccare indice e pollice o portare la mano intorno al mento mentre cerchiamo<br />

di ricordare qualcosa che ci sfugge. In questo modo avvertiamo l’interlocutore<br />

che parleremo di un ricordo lontano e quindi che non saremo del tutto sicuri di<br />

quello che diremo. Oppure fare il gesto delle virgolette (con indice e medio di<br />

entrambe le mani) <strong>per</strong> far capire che stiamo riportando le parole di qualcun’altro.<br />

I.4.2 Marcatori de<strong>gli</strong> obbiettivi<br />

Sono i <strong>gesti</strong> che servono a dare informazioni sull’obbiettivo del discorso.<br />

• Argomento-commento: è stato rilevato che in generale durante una conversazio-<br />

ne le mani si sollevano mentre facciamo riferimento all’obbiettivo del discorso,<br />

che comunque è già noto alle <strong>per</strong>sone che partecipano alla conversazione (argo-<br />

mento), e si abbassano quando vengono aggiunte delle nuove informazioni rela-<br />

tive ad esso (commento). Questo accade indipendentemente dalla forma <strong>dei</strong> <strong>gesti</strong><br />

che vengono prodotti.<br />

• Gesti <strong>per</strong>formativi: sono quelli prodotti mentre si fa riferimento diretto<br />

all’obbiettivo del discorso <strong>per</strong> dare informazioni su esso. Ad esempio il gesto con<br />

il solo indice esteso, il palmo verso sinistra, ruotando la mano in alto e in basso<br />

significa “fai attenzione a quello che sto dicendo <strong>per</strong>ché è quello che penso circa<br />

questo argomento e sarà me<strong>gli</strong>o <strong>per</strong> te essere<br />

d’accordo!”.<br />

• Gesti meta-discorsivi: servono a spiegare il senso o la lo-<br />

gica di quello che stiamo dicendo. Per esempio contare<br />

con le dita delle mani mentre facciamo riferimento ad un<br />

elenco di concetti collegati tra loro (figura 2).<br />

Altri <strong>gesti</strong> meta-discorsivi servono <strong>per</strong> indicare relazioni<br />

26<br />

Figura 4


Capitolo I, Gesti <strong>comunicativi</strong><br />

di causa-effetto o contrasto tra diversi elementi del discorso. In Italia si usa mol-<br />

to ruotare la mano con indice e pollice curvati e distanziati <strong>per</strong> esprimere il lega-<br />

me di causa-effetto quando questo è praticamente ovvio.<br />

• Gesti meta-conversazionali: comunicano le nostre intenzioni circa l’andamento<br />

della conversazione. Alzare il dito indice <strong>per</strong> far capire che vorremmo prendere<br />

la parola oppure aprire il palmo della mano verso l’interlocutore (come se voles-<br />

simo porgere un oggetto immaginario) quando abbiamo finito di parlare e vo-<br />

<strong>gli</strong>amo cedere la parola.<br />

I.4.3 Marcatori delle emozioni<br />

In generale le emozioni vengono quasi sempre espresse attraverso canali diversi da<br />

quello gestuale, <strong>per</strong> esempio tramite le espressioni facciali.<br />

Comunque esistono <strong>gesti</strong> collegati alle emozioni. Sollevare le braccia coi pugni chiu-<br />

si nel momento in cui siamo felici di aver raggiunto un importante traguardo. La<br />

vergogna invece viene espressa ad esempio coprendo il viso con le mani.<br />

Quello che appare evidente inoltre è che l’emotività viene espressa non attraverso<br />

un tipo particolare di gesto ma nell’alterazione delle caratteristiche <strong>dei</strong> <strong>gesti</strong> stessi.<br />

Velocità e tensione <strong>dei</strong> movimenti comunicano ansia mentre lentezza e armonia so-<br />

no associati ad uno stato emotivo sereno.<br />

27


Capitolo II, Stato dell’arte<br />

II<br />

Stato dell’arte<br />

II.1 Definizione di agente conversazionale<br />

Riprendendo la definizione usata da Justine Cassell [8] diremo che un agente conversa-<br />

zionale è un’interfaccia che utilizza la rappresentazione visiva di un corpo umano o<br />

animale e che è capace di:<br />

♦ riconoscere e rispondere a input verbali e non verbali<br />

♦ generare output verbali e non verbali<br />

♦ tenere conto di eventi particolari della conversazione come il turn taking ed<br />

il feedback (vedere il paragrafo 2)<br />

♦ fornire segnali che indicano lo stato della conversazione<br />

28


Capitolo II, Stato dell’arte<br />

In questo capitolo prendiamo in esame alcuni sistemi tra i tanti che si trovano in let-<br />

teratura [8; 13; 24; 25; 26; 27; 29; 30; 31; 32; 55] che <strong>per</strong> le loro caratteristiche asso-<br />

mi<strong>gli</strong>ano al nostro.<br />

Nel paragrafo finale metteremo me<strong>gli</strong>o in evidenza queste affinità e specificheremo<br />

eventuali differenze.<br />

II.2 GesSyCa (Thierry Lebourque & Sylvie Gibet, 1999)<br />

L'agente virtuale di Lebourque e Gibet [29] è in grado di riprodurre in modo interat-<br />

tivo il linguaggio <strong>dei</strong> segni <strong>per</strong> <strong>per</strong>sone non udenti di lingua francese. Il sistema uti-<br />

lizza un linguaggio appositamente creato <strong>per</strong> la descrizione <strong>dei</strong> <strong>gesti</strong> e un motore<br />

grafico basato sulla cinematica inversa chiamato modello sensori-motor.<br />

Il linguaggio di definizione <strong>dei</strong> <strong>gesti</strong> è QualGest, che sta <strong>per</strong> Qualitative Gesture Spe-<br />

cification, ed è un linguaggio che descrive in modo qualitativo i <strong>gesti</strong>. Così ogni ge-<br />

sto è descritto <strong>per</strong> come viene <strong>per</strong>cepito visivamente (appunto in modo qualitativo)<br />

evitando di dover specificare complicate sequenze numeriche <strong>per</strong> definire i movi-<br />

menti delle singole articolazioni. Per descrivere un gesto con QualGest è sufficiente<br />

fornire: la posizione del braccio nello spazio intorno all'agente, la traiettoria che<br />

eventualmente il braccio deve compiere, la forma della mano (più precisamente del-<br />

le dita) e la direzione della mano, cioè l’orientamento del palmo della mano.<br />

Come detto tutti questi parametri sono espressi qualitativamente. Per indicare la po-<br />

sizione del braccio è stata effettuata una suddivisione dello spazio intorno all'agente<br />

(figura 1) e sono state fissate sei direzioni base (destra,sinistra, su, giù, davanti, die-<br />

tro) e tre distanze (vicino, a metà, lontano). In questo modo ogni punto dello spazio<br />

potrà essere approssimato dalla coppia (direzione, distanza) che più <strong>gli</strong> si avvicina (di-<br />

scretizzazione dello spazio). In più si possono ottenere direzioni intermedie come<br />

combinazione di quelle base. Per esempio nella figura seguente la freccia tratteggiata<br />

indica la direzione ottenuta combinando su con davanti:<br />

29


Capitolo II, Stato dell’arte<br />

Figura 1. discretizzazione dello spazio<br />

Per il movimento delle braccia sono disponibili cinque primitive (puntamento, mo-<br />

vimento lineare, movimento curvo, movimento circolare, movimento ondeggiante)<br />

che vanno istanziate dando i punti di riferimento spaziali del movimento (da speci-<br />

ficare come detto poco fa). Per esempio la primitiva del movimento curvilineo ha<br />

bisogno di un punto iniziale, un punto intermedio e un punto finale:<br />

Per la forma della mano si può sce<strong>gli</strong>ere tra cinque configurazioni base (figura a de-<br />

stra: angolata, a uncino, a<strong>per</strong>ta, pugno chiuso, dritta) ed eventualmente aggiungere<br />

un modificatore su ciascuna delle singole dita <strong>per</strong><br />

ottenere nuove forme.<br />

Infine <strong>per</strong> la direzione (orientamento) della mano<br />

è sufficiente dire dove puntano il palmo e il metacarpo usando le stesse direzioni<br />

della posizione spaziale del braccio.<br />

Dall'osservazione del linguaggio <strong>dei</strong> segni e utilizzando QualGest Lebourque e Gi-<br />

bet hanno memorizzato un vocabolario (più esattamente un gestuario) di ben 1359<br />

<strong>gesti</strong> che poi sono stati estesi <strong>per</strong> comprendere i <strong>gesti</strong> comunemente utilizzati du-<br />

rante la comunicazione verbale.<br />

30


Capitolo II, Stato dell’arte<br />

Come <strong>per</strong> tutti <strong>gli</strong> altri agenti conversazionali anche in GesSyCa è prevista una tem-<br />

porizzazione <strong>dei</strong> <strong>gesti</strong>. Al contrario di sistemi <strong>per</strong>ò questo aspetto non è stato tenuto<br />

particolarmente in considerazione. E' consentito poter vincolare una componente di<br />

un gesto in modo da farla avvenire dopo un certo intervallo di tempo dall'inizio del<br />

gesto o dopo che una certa <strong>per</strong>centuale del gesto è trascorsa. Inoltre si può ottenere<br />

una sincronizzazione tra le componenti del gesto e avvenimenti "esterni", come ad<br />

esempio il contatto tra le mani. Questo è sufficiente a riprodurre molto fedelmente<br />

il linguaggio <strong>dei</strong> segni della lingua francese ma non dà risultati particolarmente con-<br />

vincenti quando si utilizza GesSyCa nell'ambito di una conversazione "tradizionale".<br />

La parte implementativa del motore grafico si basa su un modello chiamato sensori-<br />

motor. Secondo il principio di funzionamento di questo modello in un certo istante<br />

di tempo lo stato q delle articolazioni dell'agente viene calcolato in base al gradiente<br />

dell'errore tra il vettore a che rappresenta lo stato all'istante precedente e il vettore<br />

obbiettivo t. Ovviamente se l'errore tra lo stato precedente e quello obbiettivo è<br />

molto grande (nel senso che alcune articolazioni devono compiere ampie rotazioni)<br />

nascono delle instabilità che possono generare <strong>dei</strong> loop del sistema. Per evitare que-<br />

sto è stata usata una funzione non lineare il cui guadagno cresce esponenzialmente<br />

con l'errore. Una caratteristica interessante di questo metodo è la capacità di antici-<br />

pare i movimenti in base al contesto generale del modello (stato precedente, stati<br />

successivi) e di concatenare piccoli movimenti consecutivi in un modo molto flui-<br />

do.<br />

31


Capitolo II, Stato dell’arte<br />

II.3 MAX (Stefan Kopp, 2001)<br />

Il lavoro di Kopp [24; 25; 26; 27; 55] è partito dall’osservazione e la misura <strong>dei</strong> <strong>gesti</strong><br />

compiuti dalle <strong>per</strong>sone mentre parlano. E’ stato studiato in laboratorio l'esatto svol-<br />

gimento spaziale <strong>dei</strong> <strong>gesti</strong> attraverso il tempo <strong>per</strong> mezzo di sensori elettromagnetici<br />

applicati sulle braccia e le mani di più <strong>per</strong>sone. Fatto questo è iniziata la fase di ana-<br />

lisi <strong>dei</strong> dati raccolti e la classificazione e traduzione <strong>dei</strong> <strong>gesti</strong> in una notazione simbo-<br />

lica.<br />

Il risultato di questa ricerca è che un gesto si compone di molte fasi, come la prepa-<br />

razione, lo stroke e il rilascio e che c'è una precisa dinamica secondo la quale queste<br />

fasi avvengono. Il modello finale dell'agente <strong>per</strong>mette quindi di parametrizzare non<br />

solo la forma del gesto ma anche la sua dinamica esatta.<br />

In Max ogni gesto viene descritto in termini delle sue caratteristiche posturali (vin-<br />

coli statici) e delle fasi del movimento prima, dopo e durante la fase di stroke del ge-<br />

sto (vincoli dinamici) mentre le fasi di preparazione e rilascio del gesto vengono in-<br />

serite automaticamente dal sistema. Questi vincoli vengono poi sistemati in una<br />

struttura ad albero composta di nodi di tipo PARALLEL e SEQUENCE. La de-<br />

scrizione <strong>dei</strong> vincoli statici e dinamici è fornita nello standard HamNoSys che è sta-<br />

to creato <strong>per</strong> trascrivere il linguaggio <strong>dei</strong> segni della lingua tedesca [47].<br />

32


Capitolo II, Stato dell’arte<br />

Fig. 2. Trascrizione in HamNoSys del segno che significa “ANDARE”<br />

Nel momento in cui un gesto viene istanziato avvengono 3 o<strong>per</strong>azioni:<br />

• viene scelto dal gestuario la definizione del gesto<br />

• il gesto viene adattato al contesto<br />

• vengono forniti i vincoli esterni di temporizzazione del gesto<br />

Per esempio il gesto “TIRARE” una volta istanziato temporalmente avrà la forma:<br />

TIRARE:<br />

(PARALLEL(Start 1.1)(End 1.41))<br />

(DYNAMIC (Start 1.1)(End 1.41)(HandLocation((LocShoulder Loc Stretched)(LocNear)))(Manner(Peak 1.39)))<br />

(DYNAMIC (Start 1.1)(End 1.41)(HandShape((BSflato)(BSfist)))(Manner(Peak 1.39)))<br />

(STATIC (Start 1.1)(End 1.41)(Palm Orientation(PalmU)))<br />

Il gesto parte con la mano a<strong>per</strong>ta di fronte alla spalla col braccio proteso in avanti e<br />

finisce con il pugno chiuso e il braccio chiuso in modo da portare la mano vicino al-<br />

la spalla mentre <strong>per</strong> tutta la durata del gesto il palmo è rivolto verso l’alto. La tem-<br />

porizzazione è impostata in modo che sia la chiusura delle dita che il movimento del<br />

braccio inizino al tempo 1.1 e finiscano al tempo 1.41 avendo come punto di stroke<br />

(che qui è chiamato peak) il tempo 1.39.<br />

33


Capitolo II, Stato dell’arte<br />

II.4 REA (Justine Cassell & HaoYan, 2000)<br />

L’obbiettivo di questo progetto [8; 13] era quello di realizzare un agente immobiliare<br />

in grado di interagire con l’utente fornendo le informazioni da lui richieste. REA<br />

viene proiettato su uno schermo di fronte al quale si trova l’utente che indossa un<br />

microfono che <strong>per</strong>mette il dialogo diretto con l’agente. Inoltre il sistema traccia <strong>per</strong><br />

mezzo di telecamere il movimento della testa e la posizione delle mani dell’utente.<br />

Infatti REA è forse l’unico agente che tiene in considerazione la comunicazione non<br />

verbale da parte dell’utente. Se <strong>per</strong> esempio mentre l’agente sta parlando l’utente sol-<br />

leva di scatto una mano l’agente è in grado di capire che l’utente vuole prendere la<br />

parola e allora smette di parlare e si mette in attesa (turn taking).<br />

Per la realizzazione di REA il lavoro è partito dall’osservazione di come alcune <strong>per</strong>-<br />

sone si comportavano durante la descrizione della struttura fisica di immobili e am-<br />

bienti chiusi. Durante questi es<strong>per</strong>imenti sono stati realizzati <strong>dei</strong> video che una volta<br />

analizzati hanno <strong>per</strong>messo di stabilire delle regole <strong>per</strong> la <strong>sintesi</strong> <strong>dei</strong> <strong>gesti</strong>. Infine è<br />

stata decisa la seguente gerarchia:<br />

Gesto referenziale complementare<br />

Gesto referenziale ridondante<br />

Gesto beat<br />

34


Capitolo II, Stato dell’arte<br />

Alla base di tutto ci sono i <strong>gesti</strong> di tipo beat (vedi capitolo I) che sono quindi i meno<br />

importanti nel senso che non esistono vincoli particolari <strong>per</strong> i quali devono essere<br />

generati. I <strong>gesti</strong> ridondanti riguardano l’obbiettivo principale (goal) della conversa-<br />

zione al quale di solito più di un gesto viene dedicato da chi parla. I <strong>gesti</strong> comple-<br />

mentari sono riferimenti a obbiettivi secondari, che sono obbiettivi di contorno a<br />

quello principale e che concorrono a specificarlo me<strong>gli</strong>o. Come si vede i <strong>gesti</strong> com-<br />

plementari hanno la priorità sui <strong>gesti</strong> ridondanti, e come ultima possibilità vengono<br />

lasciati i <strong>gesti</strong> beat.<br />

L’agente REA è in grado di capire e sintetizzare informazioni sia proposizionali che<br />

interattive, consente un input e un output multimodale, tiene in considerazione la<br />

temporizzazione. Vediamo com’è strutturato il modello su cui è basato:<br />

L’Input Manager racco<strong>gli</strong>e e codifica l’input proveniente dall’utente attraverso il parla-<br />

to, i <strong>gesti</strong>, lo sguardo. L’Hardwired Reaction comanda eventuali reazioni veloci che<br />

l’agente deve avere in conseguenza di stimolazioni come ad esempio lo spostamento<br />

dell’utente nell’ambiente in cui si svolge il dialogo. Il modulo Deliberative Discourse<br />

Processing interpreta i vari input dell’utente in modo appropriato. Nell’introduzione<br />

era questo l’oggetto che avevamo chiamato mente dell’agente.<br />

35


Capitolo II, Stato dell’arte<br />

Il Generation Module sintetizza poi la voce, i <strong>gesti</strong>, le espressioni facciali e la postura<br />

dell’agente, e nell’introduzione lo avevamo chiamato corpo dell’agente.<br />

L’implementazione vera e propria di Rea utilizza uno stesso modulo, lo SPUD, sia<br />

<strong>per</strong> generare il testo delle risposte che <strong>per</strong> calcolare <strong>gesti</strong>, intonazione e espressione<br />

facciale. Lo SPUD costruisce una struttura ad albero formalizzata con la grammatica<br />

LTAG (Stone & Doran, 1997) dalla quale vengono ottenuti <strong>gli</strong> alberi <strong>per</strong> i <strong>gesti</strong> e<br />

l'intonazione con un'o<strong>per</strong>azione di sostituzione. Ad esempio, se l'utente chiedesse<br />

all'agente di descrivere la sala da pranzo della casa, lo SPUD potrebbe fornire una<br />

risposta che dopo l'o<strong>per</strong>azione di sostituzione apparirebbe del tipo:<br />

SENTENCESTART<br />

there is astaircase in the<br />

middle ofit<br />

Invece di sce<strong>gli</strong>ere ogni gesto da un vocabolario di <strong>gesti</strong>, il sistema Rea cerca di sin-<br />

tetizzare il gesto dai suoi elementi base, come <strong>per</strong> esempio la forma delle mani, la<br />

posizione iniziale delle braccia, la loro traiettoria. Inoltre tiene in considerazione il<br />

contesto del discorso e <strong>gli</strong> obbiettivi della comunicazione. Quindi se l'agente sta de-<br />

scrivendo il giardino della casa allora compirà un lungo arco con le braccia nella di-<br />

rezione del giardino mentre pronuncia le parole "è ampio e molto verde".<br />

La temporizzazione <strong>dei</strong> <strong>gesti</strong> non è un elemento centrale come nel caso dell’agente<br />

di Kopp, e l’autore afferma che anche se è stata tenuta in considerazione il risultato<br />

finale non è stato particolarmente convincente.<br />

36


Capitolo II, Stato dell’arte<br />

II.5 Cosmo (Lester et al., 1997)<br />

Si tratta di un agente pedagogico sviluppato dall'Università della Carolina del Nord<br />

[30; 31; 32] nell’ambito dello studio di un agente animato da impiegare in progetti<br />

educativi. Cosmo in particolare è un agente es<strong>per</strong>to nella tecnologia di comunica-<br />

zione di rete su cui si basa Internet. Il suo compito è quello di seguire l'apprendi-<br />

mento di giovani studenti che anche attraverso il gioco imparano i meccanismi di<br />

trasmissione dell'informazione attraverso una rete con protocollo TCP/IP. Per rea-<br />

lizzare un agente dedicato all'apprendimento ci sono particolari aspetti della comu-<br />

nicazione umana da tenere in considerazione. Due di questi sono particolarmente<br />

importanti nel caso in cui, come accade con Cosmo, l'agente agisca all'interno di un<br />

mondo condiviso con l'utente:<br />

• Deictic believability<br />

Un agente pedagogico deve essere capace come <strong>gli</strong> esseri umani di far riferimen-<br />

to ad oggetti fisici situati nell'ambiente che lo circonda utilizzando una corretta<br />

combinazione di parlato, movimento, gestualità. E' quindi necessario progettare<br />

un planner <strong>per</strong> il comportamento dell'agente che tenga in considerazione le pro-<br />

prietà fisiche del mondo in cui l'agente abita e che <strong>gli</strong> <strong>per</strong>metta di esprimersi rife-<br />

rendosi a<strong>gli</strong> oggetti sia con i <strong>gesti</strong> (<strong>per</strong> esempio indicando con l’indice) che con le<br />

parole senza ambiguità. L’agente è in grado di rilevare il grado di ambiguità del<br />

37


Capitolo II, Stato dell’arte<br />

suo comportamento durante la fase di pianificazione e può agire di conseguenza.<br />

Ad esempio supponiamo che l’agente abbia appena fatto riferimento ad un og-<br />

getto A di classe C. Se dopo pochi secondi dovesse parlare di un altro oggetto B<br />

sempre di classe C allora l’agente rileverebbe un livello di ambiguità molto alto e<br />

deciderebbe di spostarsi nelle vicinanze dell’oggetto B prima di iniziare a descri-<br />

verlo.<br />

• Emotive believability<br />

L'agente deve essere emotivamente credibile. Già da molti anni <strong>gli</strong> animatori gra-<br />

fici si sono accorti che la qualità e la chiarezza della comunicazione può essere<br />

molto incrementata attraverso un comportamento emotivamente credibile. Il<br />

contenuto emotivo di quello che l’agente dice deve trasparire anche attraverso il<br />

movimento del corpo e di alcune sue parti in particolare. Un secondo planner si<br />

occupa quindi di orchestrare precisamente le espressioni della faccia, il movimen-<br />

to del corpo e delle braccia <strong>per</strong> sottolineare il contenuto affettivo delle parole, da-<br />

re incoraggiamento o aumentare la motivazione de<strong>gli</strong> studenti.<br />

II.5.1 Implementazione – Internet Advisor Learning Environment<br />

Cosmo è un agente pedagogico che “abita” un ambiente virtuale chiamato Internet<br />

Advisor Learning Environment. Gli studenti possono interagire con quest’ambiente<br />

attraverso un normale PC e possono imparare come funziona il metodo di instra-<br />

damento <strong>dei</strong> pacchetti di Internet.<br />

La voce di Cosmo è stata preregistrata da un attore e comprende 240 possibili frasi<br />

che durano da uno a venti secondi ciascuna. L’aspetto visivo di Cosmo è umano-<br />

stilizzato, cioè è più simile ad un cartone animato che ad un essere umano. Per ge-<br />

nerare la sua rappresentazione grafica è stato utilizzato un software 3D della<br />

Alias/Wavefront su una workstation SGI e tutti i possibili movimenti del corpo so-<br />

no stati precalcolati e poi trasferiti come immagini statiche su PC.<br />

38


Capitolo II, Stato dell’arte<br />

Notare che questo tipo di approccio nell’implementazione è completamente diver-<br />

so da quello de<strong>gli</strong> agenti <strong>dei</strong> paragrafi precedenti.<br />

Le immagini precalcolate sono di due tipi: full body o compositional. Le immagini full<br />

body vengono utilizzate ad esempio <strong>per</strong> azioni come battere le mani che in generale<br />

non hanno la funzione di indicare (nel senso di far riferimento a) qualcosa. Le im-<br />

magini compositional rappresentano invece varie parti del corpo separatamente (te-<br />

sta, braccia, corpo) e vengono assemblate quando l’agente deve indicare qualcosa<br />

con lo sguardo e/o con le mani.<br />

Una volta decisa una sequenza di azioni e quindi una o più sequenze di immagini<br />

precalcolate da visualizzare, <strong>per</strong> ottenere un movimento morbido del corpo vengo-<br />

no eventualmente aggiunti <strong>dei</strong> fotogrammi di transizione tra un’azione e la successi-<br />

va.<br />

II.6 Confronti con Greta<br />

Mettiamo ora in evidenza differenze e analogie tra l'agente Greta e i 4 sistemi pre-<br />

sentati nei paragrafi precedenti. Considereremo due piani diversi, prima quello delle<br />

caratteristiche generali dell'agente e poi quello implementativo.<br />

Per prima cosa va ricordato che l'agente Greta è in grado di comunicare il proprio<br />

stato emotivo mentre dialoga con l'utente e questo lo rende diverso da<strong>gli</strong> altri agenti<br />

che si concentrano di più sulla complessità <strong>dei</strong> <strong>gesti</strong> (Gessyca), sulla temporizzazio-<br />

ne (MAX) o sullo scopo pratico della conversazione (REA e Cosmo).<br />

Inoltre l'agente ha un aspetto visivo molto credibile al contrario ad esempio di Co-<br />

smo che è un cartone animato, o MAX che ha un corpo molto stilizzato come an-<br />

che REA e Gessyca.<br />

Inoltre molto spesso <strong>gli</strong> altri sistemi sono dedicati alla riproduzione <strong>dei</strong> <strong>gesti</strong> in con-<br />

testi molto ristretti (linguaggio <strong>dei</strong> segni, insegnamento) mentre la struttura di Greta<br />

è più generale e non legata a un utilizzo mirato dell'agente.<br />

39


Capitolo II, Stato dell’arte<br />

Alcuni sistemi <strong>per</strong>ò sono davvero avanzati sul piano della ricezione de<strong>gli</strong> input ver-<br />

bali e non verbali provenienti dall'utente. Per esempio REA riconosce il parlato e i<br />

movimenti del corpo in tempo reale. L'input di Greta è invece semplicemente un te-<br />

sto inserito in una finestra di dialogo.<br />

A livello implementativo Greta presenta forti somi<strong>gli</strong>anze con Gessyca nella defini-<br />

zione <strong>dei</strong> <strong>gesti</strong> tramite un linguaggio dedicato che <strong>per</strong>mette di comporre un gesto a<br />

partire da configurazione base. Questa tecnica è quella utilizzata anche in MAX<br />

mentre REA, come abbiamo visto, non ha un gestuario predefinito ma "crea" il ge-<br />

sto in base a quello che sta dicendo in un certo istante.<br />

In Greta <strong>per</strong>ò, al contrario di Gessyca e MAX, nel gestuario possono essere memo-<br />

rizzati anche <strong>dei</strong> <strong>gesti</strong> definiti a basso livello, cioè specificando esattamente le posi-<br />

zioni delle singole giunture del corpo dell'agente.<br />

La temporizzazione <strong>dei</strong> <strong>gesti</strong> di Greta è molto accurata e può essere paragonata a<br />

quella di MAX rispetto alla quale in più tiene in considerazione la suddivisione del<br />

gesto in un maggior numero di fasi elementari.<br />

L'animazione finale dell'agente viene calcolata matematicamente come fanno anche<br />

Gessyca, MAX e REA e non è preregistrata come nel caso di Cosmo.<br />

40


Capitolo III, L’agente Greta<br />

III.1 Introduzione<br />

III<br />

L’agente Greta<br />

Greta è un agente conversazionale capace di conversare in modo naturale con<br />

l’utente. Per fare questo è stato dotato di certe qualità tipiche de<strong>gli</strong> esseri umani:<br />

comunica attraverso i <strong>gesti</strong>, lo sguardo e l’intonazione della voce, trasmette il suo<br />

stato emotivo e tiene costantemente presente l’obbiettivo della conversazione<br />

Nel tipo di interazione che siamo <strong>per</strong> ora in grado di simulare, Greta ha il compito<br />

di fornire all’utente un’informazione appartenente a un certo dominio al quale<br />

l’agente riesce ad adattare il proprio comportamento. L’utente può fare richieste<br />

scrivendo in un’apposita finestra di dialogo e Greta pianifica di conseguenza quello<br />

che dovrà rispondere all’utente.<br />

Il comportamento (nel senso di gestualità, espressioni facciali, intonazione della vo-<br />

ce) dell’agente dovrà essere sincronizzato con la sua voce e con il significato di quel-<br />

lo che sta dicendo; e dovrà anche riflettere il suo stato mentale evitando contempo-<br />

41


Capitolo III, L’agente Greta<br />

raneamente un “sovraccarico delle espressioni” (<strong>per</strong> esempio una <strong>gesti</strong>colazione ec-<br />

cessiva).<br />

Vedremo ora un esempio di interazione e daremo poi una descrizione più detta<strong>gli</strong>a-<br />

ta dell’architettura di Greta.<br />

III.2 Un esempio di interazione<br />

Supponiamo che il compito di Greta sia quello di fornire all’utente delle informa-<br />

zioni di tipo medico. L’utente attraverso una finestra di dialogo informa Greta di<br />

voler conoscere il proprio stato di salute. In questo esempio Greta risponde<br />

all’utente che e<strong>gli</strong> soffre di una forma leggera di angina pectoris. L’utente allora<br />

chiede di avere maggiori informazioni su questa malattia e quale potrebbe essere la<br />

cura <strong>per</strong> guarire da essa.<br />

Figura 1. L'agente Greta<br />

Utente: attraverso un’interfaccia grafica l’utente effettua il login e chiede informa-<br />

zioni sul proprio stato di salute.<br />

Greta: “Mi dispiace doverla informare che le è stata diagnosticata una forma non<br />

grave di quella che viene chiamata angina pectoris.”<br />

42


Capitolo III, L’agente Greta<br />

Utente: “Di che tipo di malattia si tratta?”<br />

Greta: “E’ uno spasmo del torace ed è causato dal un sovraffaticamento del cuore.”<br />

Utente: “Come posso curarmi?”<br />

Greta: “Per risolvere il suo problema ci sono due medicine che lei deve prendere.<br />

La prima è l’Aspirina e la seconda è l’Atenolol.”<br />

Nell’esempio possiamo distinguere 3 turni di dialogo, ciascuno composto da una<br />

coppia domanda/risposta. L’agente ha una base di conoscenza che <strong>gli</strong> <strong>per</strong>mette di<br />

interpretare la domanda dell’utente e di costruire la risposta. Siccome l’utente è stato<br />

caratterizzato come paziente di un dottore, Greta spiegherà la malattia usando un<br />

linguaggio adatto a <strong>per</strong>sone che non hanno conoscenze mediche. In più in questo<br />

dialogo l’agente dovrà dimostrare un certo coinvolgimento emotivo con l’utente, di-<br />

verso da quello che avrebbe mostrato parlando con un altro dottore.<br />

Durante la prima frase Greta esprimerà la sua empatia all’utente sia verbalmente<br />

(“mi dispiace doverla informare”) che non (sollevando le sopracci<strong>gli</strong>a e inclinando<br />

leggermente la testa di lato, sollevando le mani come mostrato in figura). Poi <strong>per</strong>ò<br />

farà in modo di sottolineare le parole “non grave” <strong>per</strong> far capire all’utente che la<br />

malattia non è molto seria.<br />

43


Capitolo III, L’agente Greta<br />

III.3 Descrizione del sistema<br />

Figura 2. Architettura dell'agente Greta<br />

L’architettura del sistema è costituita da quattro parti principali, che descriviamo<br />

brevemente:<br />

• Mente: si occupa dello stato mentale ed emotivo dell’agente. Durante ogni turno<br />

della conversazione esso può rimanere invariato oppure essere modificato in ba-<br />

se a fattori come <strong>gli</strong> eventi esterni, l’input dell’utente, l’evoluzione di uno stato<br />

emotivo precedente, e così via.<br />

• Gestore del dialogo: è il modulo incaricato di portare avanti i turni di dialogo<br />

con l’utente.<br />

All’inizio del dialogo esso formula lo scopo della conversazione. Nell’esempio<br />

che abbiamo visto lo scopo era quello di fornire all’utente informazioni sul suo<br />

stato di salute. A questo punto viene generato il piano del discorso e la conversazio-<br />

ne inizia in base alla parte iniziale di questo piano. Nell’esempio la fase iniziale<br />

consisteva nell’informare l’utente che e<strong>gli</strong> era affetto da una lieve forma di angina<br />

pectoris.<br />

44


Capitolo III, L’agente Greta<br />

Man mano che l’utente richiede maggiori informazioni (<strong>per</strong> esempio su come cu-<br />

rarsi, ecc.) il piano del discorso serve come punto di riferimento <strong>per</strong> l’agente <strong>per</strong><br />

decidere come impostare le sue risposte in base alle risposte che già sono state<br />

fornite.<br />

Ogni volta che il gestore del dialogo genera un turno di conversazione esso viene<br />

mandato in input sia al modulo Mente che al MIDAS. Il primo potrà così ag-<br />

giornare lo stato emotivo dell’agente e, comunicando il suo nuovo stato al Dialog<br />

Manager, verrà influenzato il modo in cui l’agente presenterà le successive rispo-<br />

ste.<br />

• MIDAS: questo modulo effettua la traduzione dalla rappresentazione simbolica<br />

del dialogo ricevuta dal gestore del dialogo, in una rappresentazione che specifi-<br />

chi i segnali non verbali che l’agente deve mostrare durante il parlato. Il destina-<br />

tario dell’output del MIDAS è infatti il modulo di generazione <strong>dei</strong> movimenti fi-<br />

sici dell’agente. Il linguaggio di specifica è stato definito usando XML [54] ed è<br />

stato chiamato APML (Affective Presentation Markup Language, vedere anche il<br />

capitolo IV <strong>per</strong> un esempio).<br />

Una volta ricevuto il testo in linguaggio naturale e il piano del discorso dal gesto-<br />

re del dialogo, il modulo MIDAS arricchisce il testo con i marcatori del linguag-<br />

gio APML, tenendo in considerazione lo stato emotivo attuale dell’agente e <strong>gli</strong><br />

obbiettivi della conversazione.<br />

I tag del linguaggio APML si riferiscono alle funzioni comunicative descritte nel<br />

paragrafo I.4 e hanno la forma:<br />

<br />

• Corpo: ha la funzione (come già spiegato nell’introduzione) di generare il movi-<br />

mento fisico dell’agente, cioè la comunicazione non verbale, sintetizzare il suono<br />

delle frasi pronunciate dall’agente e sincronizzare tra loro movimenti (del corpo,<br />

delle labbra) e suono.<br />

Quando l’agente vorrà comunicare un particolare stato emotivo sarà compito del<br />

modulo Corpo decidere su quali canali convo<strong>gli</strong>are questa informazione. Ad<br />

45


Capitolo III, L’agente Greta<br />

esempio avevamo già detto che l’espressione “mi dispiace...” doveva essere mol-<br />

to rafforzata e quindi poteva essere espressa sia attraverso l’espressione facciale<br />

(sollevando le sopracci<strong>gli</strong>a) che con i <strong>gesti</strong> (sollevando le mani e coi palmi rivolti<br />

verso l’interlocutore).<br />

In altri casi i messaggi non verbali verranno smistati su singoli canali. Ad esem-<br />

pio nel capitolo I avevamo detto che i <strong>gesti</strong> di solito non sono molto adatti ad<br />

esprimere emozioni affettive che quindi verranno quasi sempre destinate alle<br />

espressioni facciali.<br />

In qualche caso infine sarà anche possibile una parallelizzazione della comunica-<br />

zione, cioè l’utilizzo contemporaneo di più canali <strong>per</strong> dare informazioni diverse.<br />

46


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

IV.1 Motore gestuale<br />

IV<br />

Il sistema <strong>dei</strong> <strong>gesti</strong><br />

Questa tesi si occupa principalmente della progettazione e dello sviluppo del modu-<br />

lo di <strong>sintesi</strong> <strong>dei</strong> <strong>gesti</strong> dell'agente conversazionale Greta. Questo elemento può essere<br />

anche chiamato motore gestuale. Prima di descrivere come il lavoro è stato impostato<br />

vediamo quali sono in generale i problemi a cui si va incontro durante la realizza-<br />

zione di un oggetto di questo tipo.<br />

Il motore gestuale di un agente conversazionale è un programma che, preso in input un'opportuna<br />

descrizione dell'informazione che l'agente intende comunicare, decide e calcola i movimenti delle arti-<br />

colazioni delle braccia e delle mani dell'agente.<br />

L’architettura tipica di un generico motore gestuale potrebbe essere la seguente:<br />

47


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

Figura 1. Architettura di un motore gestuale<br />

In input c'è un'opportuna descrizione dell'informazione che l'agente vuole comuni-<br />

care all'utente. Nel nostro caso, come abbiamo anticipato alla fine del capitolo III, si<br />

tratta di un testo arricchito con i tag del linguaggio APML:<br />

Esempio IV.1:<br />

<br />

Salve,<br />

<br />

il mio nome è<br />

<br />

Greta.<br />

<br />

Nell’esempio una coppia di tag (in questo caso un marcatore <strong>per</strong>formativo, vedere<br />

capitolo I) racchiude la parola "salve" indicando al motore che si tratta di un saluto,<br />

e successivamente un'altra coppia (marcatore enfasi, vedere capitolo I) è intorno alla<br />

parola "Greta" <strong>per</strong> specificare che essa rappresenta un concetto da enfatizzare mol-<br />

to.<br />

Questo testo arriva in input al selettore <strong>dei</strong> <strong>gesti</strong> che decide secondo alcuni criteri quali<br />

sono i <strong>gesti</strong> che vanno riprodotti. I criteri che usa <strong>per</strong> fare questo derivano da studi<br />

sulla gestualità delle <strong>per</strong>sone, come già spiegato in precedenza nell’ultimo paragrafo<br />

del capitolo I.<br />

48


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

Il sintetizzatore del movimento infine accede a una base dati in cui sono contenute le de-<br />

scrizioni "motorie" di molti tipi di gesto e da questa preleva i <strong>gesti</strong> che possono ef-<br />

fettivamente essere riprodotti, scartandone eventualmente altri. L'output finale è<br />

una descrizione del movimento, <strong>per</strong> esempio un file contenete una sequenza di coppie<br />

(giuntura, rotazione) del tipo:<br />

fotogramma 1: (giuntura 1, rotazione), (giuntura 2, rotazione),..............., (giuntura n, rotazione)<br />

fotogramma 2: (giuntura 1, rotazione), (giuntura 2, rotazione),..............., (giuntura n, rotazione)<br />

.....<br />

.....<br />

fotogramma k: (giuntura 1, rotazione), (giuntura 2, rotazione),..............., (giuntura n, rotazione)<br />

IV.2 Motore gestuale di Greta<br />

Il motore gestuale dell'agente Greta è basato sul lavoro inizialmente svolto da<br />

Bjoern Hartmann [15] dell'Università della Pennsylvania.<br />

Il sistema originario è stato ampliato aggiungendo alcune parti totalmente mancanti<br />

e modificato <strong>per</strong> rispondere ad alcuni requisiti indispensabili.<br />

Il motore è stato scritto totalmente in C++ utilizzando come supporto alcune libre-<br />

rie matematiche di pubblico dominio sviluppate quasi sempre da altre Università <strong>per</strong><br />

fini di ricerca.<br />

Il modello utilizzato <strong>per</strong> riprodurre il corpo dell'agente segue le specifiche dello<br />

standard H-Anim (Appendice C) [10] e l'output prodotto dal motore è in formato<br />

MPEG4/BAP (Appendice B) [5; 17; 35; 46], leggibile cioè da un qualsiasi Player <strong>per</strong><br />

questo standard.<br />

49


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

IV.3 Dal motore originario a quello finale<br />

Vediamo in detta<strong>gli</strong>o come è stato impostato il lavoro svolto in questa tesi.<br />

Il motore originario sviluppato da Hartmann era un’applicazione che, una volta ri-<br />

chiesta una certa sequenza di <strong>gesti</strong>, calcolava tutti i fotogrammi di animazione delle<br />

articolazioni di uno scheletro umanoide definito secondo lo standard H-Anim pro-<br />

ducendo infine un file d’animazione in formato MPEG4/BAP.<br />

In altre parole era possibile inviare una serie di richieste di tipo Request(nome gesto,<br />

temporizzazione) al motore <strong>per</strong> ottenere in output l’animazione finale.<br />

In pratica il motore era il modulo che nella figura 1 abbiamo indicato come Sintetiz-<br />

zatore del movimento.<br />

Il sistema stesso era quindi ancora molto lontano dall’essere quello che abbiamo in<br />

precedenza definito motore gestuale.<br />

Gli obbiettivi del lavoro svolto in questa tesi sono stati:<br />

1. trasformare il motore originario in un motore gestuale: era necessario intro-<br />

durre un nuovo modulo che si occupasse di decidere quali <strong>gesti</strong> eseguire seguen-<br />

do una certa strategia e con una corretta temporizzazione. Successivamente oc-<br />

correva creare un gestuario da cui questo modulo potesse ottenere le informa-<br />

zioni sui <strong>gesti</strong> da riprodurre.<br />

Inoltre è stato necessario integrare nel motore il parser APML realizzato da Mas-<br />

simo Bilvi <strong>per</strong> il suo motore di <strong>sintesi</strong> delle espressioni facciali dell’agente Greta.<br />

Nel prossimo capitolo vedremo me<strong>gli</strong>o come è stata svolta tutta questa parte del<br />

lavoro.<br />

2. implementare il BAP player e raffinare il modello 3D: si tratta del modulo<br />

che trasforma i dati dell’animazione in una rappresentazione grafica in movimen-<br />

to. L’output del BAP Player è un vero e proprio filmato in cui il corpo<br />

dell’agente Greta è visibile e animato in base ai dati calcolati dal motore memo-<br />

rizzati nel file BAP.<br />

50


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

Il BAP Player che abbiamo implementato è stato dotato di controlli <strong>per</strong> la ripro-<br />

duzione (avanti, stop, indietro, avanzamento di singoli fotogrammi) e <strong>per</strong> modi-<br />

ficare la posizione della telecamera.<br />

Nel capitolo VI, in cui il BAP Player viene descritto, vedremo che i filmati pro-<br />

dotti inizialmente avevano numerosi problemi di visualizzazione che hanno ri-<br />

chiesto un lavoro di raffinamento del modello 3D del corpo dell’agente.<br />

Il BAP Player viene presentato nel capitolo VI.<br />

3. ottenere un sistema del tutto autosufficiente: il progetto iniziale era forte-<br />

mente vincolato al programma commerciale Maya della Alias/Wavefront (vedere<br />

Appendice).<br />

Questo software veniva utilizzato <strong>per</strong> la modellazione del corpo dell’agente e poi<br />

<strong>per</strong> la definizione delle pose statiche sulle quali vengono poi costruiti i <strong>gesti</strong>. Tut-<br />

ti questi concetti verranno ripresi poi nel capitolo VI.<br />

E’ stato quindi necessario realizzare alcuni tools che <strong>per</strong>mettessero di fare del a<br />

meno di Maya, <strong>per</strong> mantenere il progetto indipendente nel suo insieme da qual-<br />

siasi altro software. Anche questi tools verranno spiegati nel capitolo VI.<br />

4. mi<strong>gli</strong>orare il motore gestuale: sono state apportate una serie di mi<strong>gli</strong>orie al<br />

motore, sia <strong>per</strong> correggere alcuni difetti che <strong>per</strong> aggiungere nuove funzionalità.<br />

Tutte queste modifiche sono spiegate in detta<strong>gli</strong>o nel prossimo capitolo:<br />

• <strong>gesti</strong> <strong>dei</strong>ttici: il motore inizialmente non era in grado di calcolarli. E’ stata ag-<br />

giunta la possibilità di chiedere all’agente di indicare un oggetto presente nello<br />

spazio. Vedremo che questo tipo di problema è un classico dell’animazione in<br />

grafica 3D e che non è in generale di ovvia soluzione.<br />

• temporizzazione: i <strong>gesti</strong> non erano eseguiti correttamente, erano sempre<br />

troppo lenti e morbidi. E’ stato <strong>per</strong>ciò modificato alcune componenti del mo-<br />

tore in modo da conferire al movimento una dinamica più realistica.<br />

• posizioni di riposo multiple: abbiamo detto che quando una <strong>per</strong>sona produce<br />

<strong>gesti</strong> va continuamente dalla posizione di riposo a quella del gesto, <strong>per</strong> poi<br />

tornare in una posizione di riposo che <strong>per</strong>ò non è necessariamente identica a<br />

51


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

quella iniziale ma è influenzata da vari fattori, come ad esempio il punto dello<br />

spazio in cui è avvenuto il gesto o il fatto che stiamo <strong>per</strong> effettuare un altro<br />

gesto molto ravvicinato nel tempo al primo.<br />

Tutto ciò non veniva tenuto in considerazione dal motore originario ed è sta-<br />

to implementato successivamente.<br />

IV.4 Il motore originario<br />

Diamo quindi una descrizione del motore realizzato da Bjoern Hartmann [15], par-<br />

tendo dalla sua architettura:<br />

IV.4.1 Concretizzatore <strong>gesti</strong><br />

Figura 2. Il motore di B. Hartmann<br />

Il concretizzatore <strong>gesti</strong> riceve un elenco di richieste di gesto. In questa versione iniziale<br />

del motore queste richieste erano inserite manualmente all’interno del codice sor-<br />

gente, mentre in quello finale saranno il risultato delle scelte effettuate precedente-<br />

mente dal modulo di pianificazione <strong>dei</strong> <strong>gesti</strong>.<br />

52


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

Una volta ricevuta in input una lista di richieste il concretizzatore esegue i seguenti<br />

passi:<br />

1. cercare il gesto nel gestuario: se non esiste passare alla richiesta successi-<br />

va, altrimenti andare avanti<br />

2. controllare se è possibile effettuare il gesto:<br />

2.1. se il gesto richiede l’uso di tutte e due le mani controllare che en-<br />

trambe siano libere, altrimenti passare alla richiesta successiva<br />

2.2. se il gesto richiede l’uso di una sola mano controllare se almeno<br />

una delle mani è disponibile altrimenti passare alla richiesta succes-<br />

siva<br />

3. creare un’istanza del gesto con i vincoli di temporizzazione richiesti<br />

A questo punto il concretizzatore esamina la lista <strong>dei</strong> <strong>gesti</strong> istanziati e inserisce tra di<br />

loro <strong>dei</strong> <strong>gesti</strong> particolari, detti <strong>gesti</strong> di riposo che vanno effettuati quando c’è molto<br />

spazio tra due <strong>gesti</strong> consecutivi. Anche su questo punto abbiamo detto che è stato<br />

svolto un lavoro di raffinamento me<strong>gli</strong>o descritto nel prossimo capitolo.<br />

Nel passo 1 dell’algoritmo che abbiamo appena visto si fa riferimento a un gestua-<br />

rio. Esso è una raccolta di <strong>gesti</strong> sotto forma di file di testo nei quali i <strong>gesti</strong> sono de-<br />

scritti nel linguaggio GestureScript appositamente definito, descritto nel paragrafo fi-<br />

nale di questo capitolo.<br />

IV.4.2 Pianificatore del movimento<br />

Il pianificatore del movimento è la componente che calcola effettivamente il movi-<br />

mento delle braccia e delle mani dell’agente.<br />

Il suo input è un vettore di <strong>gesti</strong>. La struttura dati che viene utilizzata <strong>per</strong> memoriz-<br />

zare le informazioni di ciascun gesto è una gerarchia in cui ogni gesto è composto di<br />

vari fotogrammi chiave e ogni fotogramma di varie componenti:<br />

53


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

Un gesto può essere composto da (almeno) uno o più fotogrammi. Un fotogramma<br />

è a sua volta un vettore di componenti, e ciascuna di esse può appartenere a una di<br />

queste classi:<br />

Nome Giunture interessate<br />

Mano tutte quelle delle dita della mano<br />

Braccio spalla e gomito<br />

Polso polso<br />

Rumore tutte, vedi sotto<br />

Statica tutte, vedi sotto<br />

Per ogni frame è ammessa una qualsiasi combinazione di componenti (ma non più<br />

di una <strong>per</strong> ogni classe).<br />

Le componenti Rumore e Statica servono <strong>per</strong> scopi particolari:<br />

• Rumore: viene applicata a tutte le giunture del modello e contiene piccolis-<br />

simi spostamenti generati casualmente. Cioè inserisce un fattore di impreci-<br />

sione “umano” nei movimenti dell’agente [41].<br />

54


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

• Statica: questo tipo di componente serve a descrivere <strong>gesti</strong> “statici”. In al-<br />

cuni casi infatti potrebbe non essere possibile riuscire a specificare tutti i ge-<br />

sti in senso qualitativo con il linguaggio GestureScript a cui abbiamo già ac-<br />

cennato e che vedremo me<strong>gli</strong>o nell’ultimo paragrafo di questo capitolo. In<br />

questi casi allora il gesto può essere specificato in senso quantitativo inseren-<br />

do in un file tutti i valori numerici de<strong>gli</strong> spostamenti delle articolazioni e in-<br />

dicando poi al motore il nome di questo file.<br />

Vediamo con un esempio come funziona il pianificatore del movimento.<br />

Esempio IV.3:<br />

Passo 1: <strong>per</strong> ogni gesto presente nel vettore <strong>dei</strong> <strong>gesti</strong> ricevuto in input considerare il<br />

vettore composto dai suoi fotogrammi chiave:<br />

Nel grafico sull’asse delle ascisse c’è il tempo espresso in secondi e sull’asse delle<br />

ordinate <strong>per</strong> ogni fotogramma c’è la coordinata spaziale di una delle giunture<br />

dell’agente.<br />

Passo 2: utilizzando un algoritmo di interpolazione (spiegata più avanti) tra i foto-<br />

grammi chiave generare l’intera sequenza di frame dell’animazione:<br />

55


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

Il problema dell’animazione <strong>per</strong> mezzo di interpolazione tra fotogrammi chiave è<br />

stato ed è tuttora molto studiato. In particolare nell’animazione de<strong>gli</strong> arti di un esse-<br />

re umano o di un animale insorgono anomalie nel movimento se si usa una semplice<br />

interpolazione lineare insieme a una rappresentazione euleriana delle rotazioni.<br />

La tecnica utilizzata in Greta consiste nel convertire <strong>gli</strong> angoli di rotazione dalla<br />

rappresentazione euleriana a quella con quaterne [9; 49] e poi effettuare<br />

un’interpolazione tramite TCB splines [23; 28; 37; 56; 57].<br />

Il risultato finale prodotto dal pianificatore del movimento è un file in formato<br />

MPEG4/BAP [5; 17; 35; 46].<br />

IV.4.3 BAP Player<br />

La rappresentazione grafica finale dell’agente Greta viene fornita dal BAP Player. Il<br />

motore come abbiamo visto si occupa solo del calcolo <strong>dei</strong> fotogrammi<br />

dell’animazione. E’ il Player che, leggendo i dati contenuti nel BAP File prodotto dal<br />

motore, dà all’agente un aspetto “fisico” animato.<br />

56


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

IV.5 Il motore finale<br />

Descriveremo ora la struttura finale del motore gestuale. Alcuni elementi dello<br />

schema sono già stati presi in esame nel paragrafo precedente <strong>per</strong>ché facevano parte<br />

del sistema originario.<br />

Figura 3. Il motore gestuale di Greta<br />

IV.5.1 Il linguaggio APML e il parser APML<br />

L’unico input di tutto il sistema è un file APML contenente del testo arricchito da<br />

alcuni tag che descrivono l’informazione che l’agente deve comunicare attraverso i<br />

canali non verbali. Lo stesso file APML viene inviato anche all’altro motore di ge-<br />

stione dell’agente attualmente sviluppato, cioè quello <strong>per</strong> le espressioni facciali.<br />

57


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

Il linguaggio APML è stato creato da Nadja de Carolis e Mark Steedman usando<br />

XML, un metalinguaggio markup <strong>per</strong> la definizione di altri linguaggi sempre di tipo<br />

markup [54].<br />

Abbiamo già detto nel capitolo III che i tag del linguaggio APML si riferiscono alle<br />

funzioni comunicative descritte nel paragrafo I.4 e hanno la forma:<br />

<br />

In più sono stati definiti i tag x-pitchaccent [42] che servono a regolare la variazione<br />

dell’altezza del tono della voce.<br />

Il parser XML realizzato da Massimo Bilvi provvede a validare il file in input, estrae<br />

il testo in esso contenuto che poi passa in input al programma di <strong>sintesi</strong> vocale Festi-<br />

val (vedi paragrafo successivo). Infine genera un nuovo file di testo contenente tutti<br />

tags che sono stati incontrati e <strong>per</strong> ciascuno di essi l’esatta temporizzazione del tag<br />

rispetto al file WAV restituito da Festival. Il file con le temporizzazioni viene resti-<br />

tuito al pianificatore del turno.<br />

Vediamo un esempio di input <strong>per</strong> il parser:<br />

Esempio IV.2:<br />

<br />

<br />

I'm sorry to tellyou<br />

<br />

that you have been<br />

diagnosed <br />

as suffering<br />

from a mild<br />

formof what we call<br />

<br />

angina<br />

pectoris.<br />

<br />

<br />

<br />

58


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

ed ecco il risultato dell’o<strong>per</strong>azione di parsing, i tempi (in secondi) sono nella forma<br />

tempo di inizio, durata :<br />

IV.5.2 Festival<br />

<strong>per</strong>formative=inform 1.5335 7.4918<br />

theme affect=sorry-for 1.5335 1.4738<br />

theme belief-relation=gen-spec 1.5335 1.4738<br />

theme emphasis=LplusHstar 2.5817 0.2546<br />

rheme emphasis=Hstar 3.7545 0.7687<br />

rheme emphasis=Hstar 4.9208 0.5276<br />

rheme emphasis=Hstar 5.7342 0.2939<br />

rheme adjectival=small 5.7342 0.2939<br />

rheme emphasis=Hstar 6.0281 0.5123<br />

topic-comment=comment 7.6744 1.3509<br />

emphasis=Hstar 7.6744 0.4726<br />

emphasis=Hstar 8.1470 0.8783<br />

Si tratta di un sistema di <strong>sintesi</strong> vocale sviluppato dal CSTR (Centre for Speech<br />

Technology Research) dell’Università di Edimburgo [4]. Esso svolge un ruolo im-<br />

portante nel motore <strong>per</strong>ché si occupa di calcolare esattamente il tempo di inizio e la<br />

durata del testo che viene pronunciato dall’agente. Grazie a questo calcolo il parser<br />

XML riesce a risalire alla temporizzazione <strong>dei</strong> singoli tag contenuti nel file XML di<br />

input, come abbiamo visto nel paragrafo precedente.<br />

Fetival è basato sul linguaggio funzionale Scheme (variante del LISP) ma fornisce<br />

un’interfaccia in C <strong>per</strong> poter invocare le funzioni Scheme.<br />

IV.5.3 Pianificatore <strong>dei</strong> <strong>gesti</strong><br />

Anche intorno a questo elemento del motore si è concentrato il lavoro svolto in<br />

questa tesi, e torneremo a parlarne molto in detta<strong>gli</strong>o nel capitolo V.<br />

Il compito del pianificatore <strong>dei</strong> <strong>gesti</strong> è quello di generare il piano secondo cui<br />

l’agente effettuerà i <strong>gesti</strong> durante il suo turno di conversazione.<br />

59


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

Questo significa che esso esaminerà il risultato del parser XML (il file delle tempo-<br />

rizzazioni) e deciderà quali saranno i <strong>gesti</strong> che il motore dovrà generare, stabilendo<br />

la loro temporizzazione e risolvendo eventuali conflitti.<br />

Tornando all’Esempio IV.2, a partire dal file generato dal parser, il pianificatore ef-<br />

fettuerà una sequenza di chiamate di questo tipo:<br />

Concretizzatore.Richiedi(“ADJECTIVAL=SMALL”,5.7342,5.954625,6.0281);<br />

Concretizzatore.Richiedi(“BEAT=BEATHBOTH”,8.147,8.805725,9.0253);<br />

...<br />

...<br />

IV.6 Il linguaggio GestureScript<br />

Il motore gestuale dell’agente Greta utilizza un sistema di descrizione qualitativa <strong>dei</strong><br />

<strong>gesti</strong> basato su un linguaggio appositamente definito chiamato GesturesScript.<br />

Riportiamo una breve descrizione della sintassi del linguaggio utilizzando la seguen-<br />

te notazione: le parole chiave sono in maiuscolo, le parentesi quadre indicano un<br />

campo opzionale e quelle angolari rimandano ad un tipo di dato.<br />

Ad ogni gesto del gestuario corrisponde il relativo file di descrizione GestureScript.<br />

Ogni file inizia con una sezione di intestazione (header):<br />

GESTURECLASS <br />

GESTUREINSTANCE <br />

DURATION <br />

SIDE <br />

Il primo campo indica a quale classe il gesto appartiene tra quelle definite nel capito-<br />

lo I. Il secondo campo è il tipo particolare di istanza del gesto. Un esempio potreb-<br />

be essere:<br />

GESTURECLASS <strong>per</strong>formative<br />

GESTUREINSTANCE greet<br />

Il terzo campo è la durata di default del gesto. Il motore in realtà adatta la durata del<br />

gesto al contesto in cui esso viene inserito. Il quarto campo specifica con quale ma-<br />

60


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

no dovrà essere effettuato il gesto. Se il campo non viene specificato il motore deci-<br />

derà probabilisticamente quale mano utilizzare, favorendo quella destra. Altrimenti<br />

sarà obbligato ad usare la mano specificata e in caso di conflitto con altri <strong>gesti</strong> vicini<br />

potrebbe decidere di non effettuare il gesto.<br />

Dopo l’header seguono uno o più blocchi <strong>per</strong> ogni fotogramma del gesto. Un foto-<br />

gramma è una posizione intermedia del corpo durante lo svolgimento del gesto. Se<br />

c’è un solo fotogramma allora esso descrive totalmente il gesto, altrimenti il gesto<br />

sarà ottenuto concatenando con un’opportuna interpolazione tutti i fotogrammi di<br />

cui è composto.<br />

La sintassi <strong>per</strong> la definizione di un fotogramma è:<br />

STARTFRAME <br />

[FRAMETYPE ]<br />

[ARM ]<br />

[WRIST ]<br />

[HAND [] []<br />

OR [ OR ]]<br />

[FINGER ]<br />

[ADDNOISE]<br />

ENDFRAME<br />

• STARTFRAME, ENDFRAME: marcano l’inizio e la fine del blocco di defi-<br />

nizione del fotogramma. STARTFRAME è seguito da un numero compreso<br />

tra 0 e 1 che indica la posizione relativa del fotogramma all’interno dello<br />

svolgimento dell’intero gesto. Un valore di 0.5 ad esempio significherà che il<br />

fotogramma si trova esattamente a metà del gesto.<br />

• FRAMETYPE: specifica quale fase del gesto è descritta dal fotogramma. I<br />

possibili valori sono:<br />

− preparation<br />

− pre_stroke_hold<br />

− stroke<br />

− stroke_start<br />

− stroke_end<br />

− post_stroke_hold<br />

− retraction<br />

<strong>per</strong> la descrizione delle fasi del gesto vedere il capitolo I.<br />

61


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

• ARM: definisce la configurazione di braccio e avambraccio. Per fare questo<br />

basta specificare la posizione nello spazio della mano dell’agente. Lo spazio<br />

intorno al corpo dell’agente è stato suddiviso in regioni:<br />

Le coordinate X e Y quindi possono essere specificate indicando la regione<br />

nella quale si trovano. La coordinata X potrà variare tra questi valori: estrema<br />

<strong>per</strong>iferia (EP), <strong>per</strong>iferia (P), centro (C), centro-centro (CC) e centro opposto<br />

(OppC). La Y invece: estrema <strong>per</strong>iferia su<strong>per</strong>iore (Up<strong>per</strong>EP), <strong>per</strong>iferia supe-<br />

riore (Up<strong>per</strong>P), centro su<strong>per</strong>iore (Up<strong>per</strong>C), centro-centro (CC), centro infe-<br />

riore (LowerC), <strong>per</strong>iferia inferiore (LowerP) e estrema <strong>per</strong>iferia inferiore<br />

(LowerEP).<br />

Anche la Z può trovarsi in una delle 3 regioni: vicino (Near), medio (Middle)<br />

e lontano (Far).<br />

• WRIST: rappresenta la rotazione del polso e di conseguenza l’orientamento<br />

della mano. Prevede due parametri, e cioè le direzioni <strong>dei</strong> vettori “palmo” e<br />

“dita” indicati nella figura seguente:<br />

62


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

Figura 4. Vettori palmo e dita<br />

Anche le possibili direzioni di questi due vettori sono state discretizzate e<br />

possono variare tra: su, giù, avanti, dietro, interno, esterno (up, down, away,<br />

towards, inwards, outwards).<br />

• HAND e FINGER: definisce la forma della mano, più esattamente delle dita<br />

della mano. E’ possibile sce<strong>gli</strong>ere tra alcune forme base oppure specificare<br />

ogni dito singolarmente (usando FINGER). Se si sce<strong>gli</strong>e una forma base si<br />

può comunque aggiungere un modificatore <strong>per</strong> il pollice. Nelle figure se-<br />

guenti possiamo vedere tutte le forme base:<br />

63


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

e i modificatori del pollice:<br />

• ADDNOISE: indica al motore di aggiungere una componente di rumore ca-<br />

suale al fotogramma, vedere anche IV.4.2.<br />

Per concludere, descriviamo un esempio reale di definizione di un gesto tramite Ge-<br />

stureScript:<br />

GESTURECLASS iconic<br />

GESTUREINSTANCE small<br />

DURATION 1.5<br />

STARTFRAME 0.0<br />

FRAMETYPE strokestart<br />

ARM XC YUp<strong>per</strong>P ZNear<br />

HAND symbol_1_open<br />

FINGER index bend_curved<br />

WRIST FBUp PalmInwards<br />

ENDFRAME<br />

STARTFRAME 0.4<br />

FRAMETYPE stroke<br />

ARM XC YUp<strong>per</strong>P ZMiddle<br />

WRIST FBUp PalmInwards<br />

ENDFRAME<br />

STARTFRAME 1.0<br />

FRAMETYPE hold<br />

ARM XC YUp<strong>per</strong>P ZMiddle<br />

HAND symbol_1_open<br />

FINGER index bend_curved<br />

WRIST FBUp PalmInwards<br />

ENDFRAME<br />

Il gesto dura 1.5 secondi e si compone di tre fotogrammi base. Il primo inizia al<br />

tempo 0 con la mano leggermente più in alto della spalla, vicina al corpo e con la<br />

64


Capitolo IV, Il sistema <strong>dei</strong> <strong>gesti</strong><br />

forma symbol_1_open. Il secondo fotogramma avviene al 40% del tempo totale<br />

del gesto, corrisponde alla fase di stroke e differisce dal primo <strong>per</strong> un piccolo mo-<br />

vimento della mano in avanti. Il terzo fotogramma serve solo a mantenere la stessa<br />

configurazione del secondo fino alla fine del gesto.<br />

65


Capitolo V, Motore gestuale<br />

V<br />

Motore gestuale<br />

V.1 Pianificazione <strong>dei</strong> <strong>gesti</strong> <strong>comunicativi</strong><br />

Una parte del lavoro svolto in questa tesi, come abbiamo anticipato nel capitolo IV,<br />

è consistita nel realizzare il modulo di pianificazione <strong>dei</strong> <strong>gesti</strong> <strong>comunicativi</strong> <strong>per</strong> il<br />

motore gestuale dell’agente Greta.<br />

Il pianificatore <strong>dei</strong> <strong>gesti</strong> è l’elemento del motore che si occupa di:<br />

1. decidere quali <strong>gesti</strong> l’agente deve effettuare<br />

2. fornire la loro temporizzazione<br />

Questi due compiti sono molto importanti <strong>per</strong>ché determinano il corretto svolgi-<br />

mento della comunicazione non verbale attraverso il canale della gestualità (capitolo<br />

I).<br />

Iniziamo a spiegare come è stato progettato il pianificatore considerando un esem-<br />

pio di file di input e andando a guardare com’è l’output prodotto dal sistema. Di se-<br />

66


Capitolo V, Motore gestuale<br />

guito spiegheremo l’architettura completa del pianificatore e l’insieme di regole che<br />

determinano la scelta <strong>dei</strong> <strong>gesti</strong> da compiere.<br />

V.2 Un esempio<br />

Ritorniamo nella situazione descritta nel capitolo III. L’agente Greta ha il compito<br />

di dare all’utente delle informazioni relative al suo stato di salute.<br />

In un certo istante di tempo supponiamo che il modulo mente dell’agente abbia ela-<br />

borato la seguente informazione codificata in APML (il testo di quello che verrà<br />

pronunciato è in grassetto):<br />

<br />

Buongiorno<br />

Signor Smith.<br />

<br />

<br />

<br />

<br />

Mi dispiace doverla informare<br />

che abbiamo diagnosticato<br />

<br />

che leisoffre<br />

di unaleggera<br />

forma<br />

di quella che è chiamata<br />

angina<br />

pectoris.<br />

<br />

<br />

<br />

Per risolvere<br />

questo problema,<br />

<br />

ci sarebbero due<br />

medicine che vorrei che lei prendesse.<br />

<br />

<br />

Laprima<br />

<br />

è l’Aspirina<br />

<br />

<br />

che<br />

serve ad alleviare<br />

ildolore.<br />

<br />

67


Capitolo V, Motore gestuale<br />

<br />

Sottoponiamo questo file al motore gestuale dell’agente Greta e prendiamo in esame<br />

l’animazione risultante:<br />

1) inizio del turno di conversazione<br />

2) gesto di saluto in corrispondenza dell’enfasi che si trova sulla parola giorno.<br />

3) gesto fatto con la mano destra con i polpastrelli di indice e pollice molto vicini e<br />

le altre dita leggermente a<strong>per</strong>te in corrispondenza<br />

dell’enfasi sulla parola leggera (figura 1). Il gesto inoltre si<br />

prolunga con una piccola oscillazione anche sull’enfasi<br />

della parola forma.<br />

4) gesto beat (capitolo I) sull’enfasi della parola angina. Vi-<br />

sto che la mano destra era stata appena utilizzata <strong>per</strong> il ge-<br />

sto precedente e che temporalmente i due <strong>gesti</strong> sono mol-<br />

to ravvicinati, anche questo gesto verrà effettuato dalla<br />

mano destra prima di ritornare nella posizione di riposo (coarticolazione, vedere<br />

sezione I.2.2).<br />

5) gesto che rappresenta il numero 2 in corrispondenza della parola due.<br />

6) gesto che rappresenta il numero 1 in corrispondenza della parola prima. Sicco-<br />

me sta iniziando un elenco di alcuni punti importanti <strong>per</strong> lo scopo della conver-<br />

sazione, questo gesto si prolungherà <strong>per</strong> tutta la spiegazione collegata<br />

all’elemento dell’elenco (in questo caso fino alla parola dolore).<br />

7) gesto fatto con la mano a<strong>per</strong>ta rivolta col palmo in basso, muovendo il braccio<br />

orizzontalmente partendo da davanti al corpo e arrivando lateralmente in corri-<br />

spondenza dell’enfasi sulla parola alleviare. Ricordiamo che il gesto precedente<br />

è ancora in corso e quindi il gesto attuale verrà effettuato con la mano ancora li-<br />

bera.<br />

8) fine del turno di conversazione<br />

68<br />

Figura 1


Capitolo V, Motore gestuale<br />

Innanzitutto notiamo che l’informazione del turno di conversazione è raggruppata<br />

gerarchicamente ed è schematizzabile con una struttura ad albero (da sinistra a de-<br />

stra):<br />

Al primo livello della gerarchia ci sono sempre <strong>dei</strong> blocchi di tipo <strong>per</strong>formativo che<br />

abbiamo indicato con le lettere dalla a alla d. Inoltre notiamo che ogni <strong>per</strong>formativo<br />

corrisponde esattamente a una frase intera della conversazione.<br />

69


Capitolo V, Motore gestuale<br />

Mettiamo in evidenza la relazione che c’è tra quello che è accaduto nell’esempio ap-<br />

pena visto e la struttura del file APML che avevamo mandato in input, prendendo<br />

in esame separatamente i vari blocchi <strong>per</strong>formativi:<br />

• a - <strong>per</strong>formativo greet: nell’esempio corrisponde al gesto di saluto e infatti la tipo-<br />

logia indicata nel tag APML è “greet” che in inglese significa appunto “salutare”.<br />

Il gesto avveniva sulla parola giorno che si trova nel sottoalbero associato al <strong>per</strong>-<br />

formativo a e è racchiusa da un tag di tipo “emphasis”.<br />

E’ quindi come se l’enfasi indicasse il punto del discorso in cui emerge mag-<br />

giormente lo scopo della frase, e il gesto ad esso associato dipende dalla natura<br />

del contenuto <strong>per</strong>formativo della frase (in questo caso il <strong>per</strong>fomativo era di tipo<br />

greet e infatti sull’enfasi è avvenuto un saluto).<br />

• b - <strong>per</strong>formativo inform: innanzitutto notiamo che nell’esempio non avveniva<br />

nessun gesto in corrispondenza della parola informare. Questo è corretto, infatti<br />

pur essendo in presenza di un’enfasi l’informazione è di tipo tematico e quindi in<br />

generale non va accompagnata da gestualità [8] come abbiamo osservato nel ca-<br />

pitolo I.<br />

Possiamo quindi concludere che al fine di riprodurre correttamente i <strong>gesti</strong> di una<br />

<strong>per</strong>sona, l’informazione tematica può essere in generale ignorata mentre va sem-<br />

pre considerata quella rematica.<br />

Come ulteriore conferma osserviamo che nell’esempio i <strong>gesti</strong> di questo <strong>per</strong>for-<br />

mativo sono sulle parole leggera forma e angina, tutte contenute nel sottoalbe-<br />

ro di un tag di tipo rheme.<br />

Questo tag contiene <strong>per</strong>ò altre enfasi (diagnosticato, soffre) che non hanno da-<br />

to luogo a nessun gesto. L’enfasi su leggera prevale sulle altre <strong>per</strong>ché è riferita<br />

ad un aggettivo (“adjectival=small”). In più la parola seguente è il nome (forma)<br />

a cui l’aggettivo si riferisce provocando una ripetizione del gesto.<br />

La parola angina invece viene sottolineata da un gesto <strong>per</strong>ché il tag enfasi in cui<br />

70


Capitolo V, Motore gestuale<br />

è racchiusa ha un parametro in più (level=”strong”) che ne aumenta la priorità<br />

rispetto alle altre.<br />

• c - <strong>per</strong>formativo suggest: l’unico gesto presente è il numero 2 fatto con una mano<br />

in corrispondenza della parola due. In accordo con quanto precedentemente<br />

stabilito, il gesto avviene all’interno di un tag che indica un contenuto informati-<br />

vo di tipo rematico. Nell’albero sotto questo tag inoltre è presente una sola enfa-<br />

si che è di tipo adjectival=two.<br />

• d - <strong>per</strong>formativo inform: la sequenza di <strong>gesti</strong> in questo caso è leggermente più<br />

complicata. Viene riprodotto con una mano il numero 1 e mentre questo gesto<br />

viene mantenuto <strong>per</strong> tutta la durata della frase (quindi durante tutto il <strong>per</strong>forma-<br />

tivo) l’altra mano fa un gesto <strong>per</strong> sottolineare la parola alleviare. Possiamo nota-<br />

re ancora una volta che la gestualità accompagna il contenuto rematico della fra-<br />

se. Il primo gesto, che avviene in corrispondenza della parola prima, è di tipo<br />

meta-discorsivo (belief-relation) e <strong>per</strong> questo viene mantenuto fino alla fine della<br />

frase (in accordo con l’analisi <strong>dei</strong> <strong>gesti</strong> spiegata alla fine del capitolo I). Sulla pa-<br />

rola alleviare è invece presente una normale enfasi.<br />

Ci accorgiamo infine della presenza di un’enfasi rematica (su l’Aspirina) che<br />

non ha dato luogo a nessun gesto <strong>per</strong>ché nella frase esistevano altre due enfasi<br />

che avevano una priorità maggiore e l’inserimento di un terzo gesto avrebbe<br />

provocato un “sovraccarico” della comunicazione.<br />

Presentiamo adesso le regole che abbiamo impiegato nell’implementazione del pia-<br />

nificatore <strong>dei</strong> <strong>gesti</strong>, e che in parte abbiamo anticipato descrivendo questo esempio.<br />

V.3 Implementazione<br />

Vediamo prima l’architettura del pianificatore (figura 2) <strong>dei</strong> <strong>gesti</strong> e descriviamo bre-<br />

vemente il suo funzionamento.<br />

• Per prima cosa il pianificatore riceve in input un file proveniente dal parser<br />

APML (capitolo IV) e contenente i tempi di inizio e durata <strong>dei</strong> tag incontrati du-<br />

71


Capitolo V, Motore gestuale<br />

rante la scansione del file AMPL. Il file delle temporizzazioni corrispondente<br />

all’esempio del paragrafo precedente è:<br />

<strong>per</strong>formative=greet;0;1.577;<br />

rheme;emphasis=Hstar;0.5265;0.4091;<br />

<strong>per</strong>formative=inform;1.577;7.7451;<br />

theme;affect=sorry-for;1.577;2.1289;<br />

theme;belief-relation=gen-spec;1.577;2.1289;<br />

theme;emphasis=LplusHstar;3.1317;0.5742;<br />

rheme;emphasis=Hstar;4.2583;0.8704;<br />

rheme;emphasis=Hstar;5.5049;0.4431;<br />

rheme;emphasis=Hstar;6.2823;0.4379;<br />

rheme;adjectival=small;6.2823;0.4379;<br />

rheme;emphasis=Hstar;6.7202;0.4237;<br />

rheme;emphasis=Hstar;8.3448;0.4052;<br />

rheme;level=strong;8.3448;0.4052;<br />

rheme;emphasis=Hstar;8.75;0.5721;<br />

rheme;level=strong;8.75;0.5721;<br />

<strong>per</strong>formative=suggest;9.3221;5.234;<br />

theme;belief-relation=solutionhood;9.3221;1.957;<br />

theme;emphasis=LplusHstar;9.8803;0.5284;<br />

rheme;belief-relation=sug<strong>gesti</strong>on;11.2791;3.277;<br />

rheme;emphasis=Hstar;12.2787;0.2533;<br />

rheme;adjectival=two;12.2787;0.2533;<br />

<strong>per</strong>formative=inform;14.5561;3.6882;<br />

rheme;belief-relation=first;14.5561;1.0617;<br />

rheme;emphasis=LplusHstar;15.0722;0.3336;<br />

rheme;emphasis=Hstar;15.684;0.5451;<br />

theme;affect=relief;16.2291;0.1546;<br />

theme;belief-relation=gen-spec;16.2291;0.1546;<br />

rheme;emphasis=Hstar;16.8849;0.4885;<br />

rheme;emphasis=Hstar;17.467;0.7773;<br />

• Successivamente entra in azione un piccolo parser che legge i<br />

dati contenuti nel file delle temporizzazioni e costruisce un al-<br />

bero in cui ogni nodo ha la seguente struttura:<br />

GestureTree:<br />

GestureTree* FirstSon; //punta al primo nodo fi<strong>gli</strong>o<br />

GestureTree* Parent; //punta al nodo padre<br />

GestureTree* NextBrother;//punta al successivo nodo fratello<br />

char Type[20]; //vale “theme” o “rheme”<br />

char Description[250]; //descrizione, ad esempio “ADJECTIVAL=SMALL”<br />

double StartTime,EndTime;//tempo esatto di inizio e fine pronuncia<br />

//delle parole contenute nel tag<br />

bool Requested; //flag che indica se è già stato assegnato un<br />

//gesto a questo tag; inizializzato sempre a<br />

//false<br />

Nell’albero quindi ogni nodo padre può avere un numero arbitrario di fi<strong>gli</strong> che<br />

sono <strong>gesti</strong>ti come lista. Un nodo fo<strong>gli</strong>a si può riconoscere dal fatto che il punta-<br />

tore FirstSon vale NULL.<br />

72<br />

Figura 2


Capitolo V, Motore gestuale<br />

• A questo punto, lavorando sulla struttura ad albero che abbiamo appena defini-<br />

to, il selettore <strong>dei</strong> <strong>gesti</strong> decide finalmente quali sono i <strong>gesti</strong> che vanno riprodotti e<br />

assegna loro la corretta temporizzazione. I criteri in base ai quali effettua queste<br />

scelte verranno esposti nel prossimo paragrafo.<br />

V.4 Selettore <strong>dei</strong> <strong>gesti</strong><br />

Ricapitoliamo tutto quello che è stato detto finora riguardo la gestualità in generale.<br />

Nel paragrafo finale del capitolo I abbiamo dato una classificazione <strong>dei</strong> <strong>gesti</strong> ottenu-<br />

ta dallo studio di situazioni reali svolto da Isabella Poggi.<br />

Ci siamo quindi proposti come obbiettivo quello di riprodurre quel tipo di <strong>gesti</strong> con<br />

il nostro agente conversazionale Greta.<br />

Presentiamo ora l’insieme finale di regole che abbiamo stabilito nella fase di imple-<br />

mentazione del modulo di pianificazione <strong>dei</strong> <strong>gesti</strong> dell’agente Greta.<br />

1. <strong>per</strong> ogni tag adjectival o <strong>dei</strong>ctic, se nel gestuario esiste il gesto corrispon-<br />

dente allora riproducilo sull’enfasi del tag ed eventualmente aggiungi delle ri-<br />

petizioni del gesto sulle enfasi successive se queste sono consecutive nel<br />

tempo;<br />

2. (da applicare solo se la regola 1 non ha dato luogo a nessun gesto) <strong>per</strong> ogni<br />

tag belief-relation, se nel gestuario esiste un gesto corrispondente allora ri-<br />

producilo facendolo iniziare sull’enfasi del tag e facendolo terminare alla fine<br />

del tag <strong>per</strong>formativo dal quale discende il belief-relation; <strong>per</strong> ogni tag affect<br />

se nel gestuario esiste il gesto corrispondente allora riproducilo sull’enfasi del<br />

tag;<br />

3. (da applicare solo se né la regola 1, né la regola 1 hanno dato luogo a nessun<br />

gesto) <strong>per</strong> ogni tag <strong>per</strong>formativo, se nel gestuario esiste il gesto corrispon-<br />

dente allora riproducilo sull’enfasi del tag, altrimenti riproduci un gesto beat<br />

sull’enfasi del tag;<br />

73


Capitolo V, Motore gestuale<br />

Ecco allora l’algoritmo in pseudo-codice che codifica queste regole. Ricordiamo che<br />

la struttura dati su cui l’algoritmo lavora è quella dell’albero di tag descritto nel para-<br />

grafo precedente (e in cui sono memorizzate anche le temporizzazioni di ogni tag):<br />

Input: puntatore alla radice dell’albero<br />

for(ogni nodo s fi<strong>gli</strong>o della radice):<br />

cercare nel sottoalbero che si dirama da s <strong>per</strong>:<br />

− nodi con enfasi ADJECTIVAL;<br />

− nodi con enfasi DEICTIC;<br />

if(trovato==true):<br />

effettuare il relativo gesto ottenendo le temporizzazioni<br />

dai dati del nodo enfasi;<br />

if(esistono <strong>dei</strong> nodi fratelli temporalmente consecutivi):<br />

effettuare una ripetizione del gesto su ciascuno di loro;<br />

if(è stato effettuato almeno un gesto)<br />

uscire e passare alla prossima iterazione;<br />

cercare nel sottoalbero che si dirama da s <strong>per</strong>:<br />

− nodi BELIEF-RELATION;<br />

− nodi AFFECT;<br />

if(trovato==true):<br />

if(BELIEF-RELATION):<br />

cercare il primo nodo enfasi contenuto nel sottoalbero che<br />

si dirama da questo BELIEF-RELATION e poi effettuare il<br />

relativo gesto ottenendo il tempo di inizio dal nodo<br />

enfasi e prolungando il gesto fino al tempo di fine<br />

del <strong>per</strong>formativo s;<br />

if(AFFECT):<br />

cercare il primo nodo enfasi contenuto nel sottoalbero che<br />

si dirama da questo AFFECT e poi effettuare il relativo gesto<br />

ottenendo le temporizzazioni dai dati del nodo enfasi;<br />

if(è stato effettuato almeno un gesto)<br />

uscire e passare alla prossima iterazione;<br />

cercare nel sottoalbero che si dirama da s <strong>per</strong>:<br />

if(trovato==true):<br />

− la prima enfasi;<br />

74


Capitolo V, Motore gestuale<br />

if(esiste un gesto associato al tipo di <strong>per</strong>formativo di s)<br />

else:<br />

effettuare il <strong>per</strong>formativo in base alle temporizzazioni<br />

del nodo enfasi;<br />

effettuare un gesto di tipo BEAT con le temporizzazioni<br />

del nodo enfasi;<br />

passare alla successiva iterazione;<br />

V.5 Gesti <strong>dei</strong>ttici <strong>per</strong> l’agente Greta<br />

I <strong>gesti</strong> <strong>dei</strong>ttici servono ad indicare un punto nello spazio mentre stiamo parlando.<br />

L’entità a cui fanno riferimento può essere fisicamente presente nell’ambiente in cui<br />

ci troviamo oppure può essere astratta. Un esempio di questo tipo consiste<br />

nell’indicare verso il basso mentre con la parola “..questo..” si sta facendo riferimen-<br />

to all’oggetto della conversazione.<br />

Nel motore originario l’agente Greta non era capace di effettuare questo tipo di ge-<br />

sto. Questa limitazione era dovuta al tipo di implementazione del movimento <strong>per</strong> la<br />

<strong>sintesi</strong> <strong>dei</strong> <strong>gesti</strong>.<br />

Nell’ultimo paragrafo del capitolo IV abbiamo visto che lo spazio intorno all’agente<br />

è stato discretizzato suddividendolo in varie regioni. Questa scelta non è stata casua-<br />

le. Infatti [34] è stato dimostrato statisticamente che i <strong>gesti</strong> avvengono sempre in<br />

prossimità di alcune punti ben precisi dello spazio e quindi <strong>per</strong>mettere di posiziona-<br />

re le braccia in modo del tutto libero non ha poi un’utilità pratica vera e propria.<br />

In più questa scelta ha reso più semplice (sotto alcuni punti di vista che ora vedre-<br />

mo) l’implementazione del motore limitandone <strong>per</strong>ò <strong>per</strong> altri aspetti l’utilizzo.<br />

V.6 Cinematica diretta e inversa<br />

Consideriamo il sistema fisico braccio-avambraccio di una <strong>per</strong>sona. Il punto dello<br />

spazio in cui si trova il polso è in ogni momento funzione delle lunghezze di braccio<br />

75


Capitolo V, Motore gestuale<br />

e avambraccio e dell’angolazione del braccio rispetto al corpo e dell’avambraccio ri-<br />

spetto al braccio. Vediamo un esempio in 2D:<br />

Le coordinate del punto finale sono naturalmente:<br />

x<br />

y<br />

f<br />

f<br />

= x<br />

0<br />

= y<br />

0<br />

+ a ⋅cosσ<br />

+ b ⋅cosθ<br />

+ a ⋅senσ<br />

+ b ⋅senθ<br />

Questo semplice ragionamento si può facilmente estendere a una catena molto più<br />

lunga <strong>dei</strong> due soli elementi del sistema braccio-avambraccio e considerando coordi-<br />

nate a tre dimensioni. Il problema di determinare la posizione finale dell’estremità<br />

dell’ultimo elemento della catena in funzione de<strong>gli</strong> angoli di rotazione di tutti <strong>gli</strong> altri<br />

elementi viene chiamato cinematica diretta.<br />

Nella cinematica inversa invece il problema è l’esatto contrario: data la posizione nello<br />

spazio dell’estremità dell’elemento finale della catena (target) determinare <strong>gli</strong> angoli di<br />

rotazione di tutti <strong>gli</strong> elementi della catena.<br />

Si può facilmente intuire che questo tipo di calcolo è abbastanza complicato e che<br />

inoltre se esiste una soluzione al problema non è detto che sia unica.<br />

Torniamo al sistema braccio-avambraccio in 2 dimensioni:<br />

(a)<br />

(b) (c) (d)<br />

76


Capitolo V, Motore gestuale<br />

(a) il problema non ammette soluzione<br />

(b) il problema ha un’unica soluzione (caso banale)<br />

(c) il problema ha esattamente due soluzioni<br />

(d) il problema ha infinite soluzioni<br />

Vediamo una delle tecniche che si possono impiegare <strong>per</strong> risolvere il problema.<br />

Consideriamo prima il caso di una sola giunzione:<br />

Costruiamo il vettore F che congiunge l’estremità della giunzione con il target. Sia R<br />

il vettore <strong>per</strong>pendicolare alla giunzione. La velocità di rotazione della giunzione è<br />

proporzionale al prodotto scalare tra F e R:<br />

rotazione=(F⋅R)*k<br />

Se le giunture sono 2 (<strong>per</strong> esempio braccio-avambraccio):<br />

In questo caso basterà iterare all’infinito il seguente algoritmo:<br />

<strong>per</strong> ogni componente i della catena:<br />

− calcolare il vettore F i tra l’estremità della componente e il punto tar-<br />

get;<br />

− calcolare il prodotto (F i⋅ R i)*k e applicare il risultato all’angolo di ro-<br />

tazione della componente<br />

Spostandoci al caso in 3 dimensioni il problema si può risolvere con un tipo di algo-<br />

ritmo analogo.<br />

77


Capitolo V, Motore gestuale<br />

Figura 3. Cinematica inversa <strong>per</strong> un sistema complesso costituito da più catene (Maya)<br />

Abbiamo detto che in generale possiamo aspettarci che il numero di configurazioni<br />

della catena che sono soluzione del problema sia infinito. Nel caso del sistema brac-<br />

cio-avambraccio, si possono impiegare strategie particolari <strong>per</strong> selezionare<br />

dall’insieme di tutte le soluzioni quelle che possono essere considerate effettivamen-<br />

te ammissibili.<br />

Dato il punto target infatti, essendo presenti due sole giunzioni, se esiste una solu-<br />

zione che non sia quella banale allora esistono infinite soluzioni che differiscono tra<br />

loro <strong>per</strong> il piano sul quale giace il sistema:<br />

78


Capitolo V, Motore gestuale<br />

In figura possiamo vedere il sistema braccio-avambraccio posizionato in modo da<br />

raggiungere un certo punto di target. E’ chiaro che questa è solo una delle infinite<br />

soluzioni ammissibili, che <strong>per</strong>ò differiscono tra loro semplicemente <strong>per</strong> il valore<br />

dell’angolo σ.<br />

Il problema generale della cinematica inversa nel caso di due giunzioni diventa<br />

quindi risolvibile in modo univoco vincolando il valore dell’angolo σ.<br />

Torniamo al motore dell’agente Greta. Nell’implementazione originaria le configu-<br />

razioni delle braccia durante i <strong>gesti</strong> venivano calcolate esclusivamente con tecniche<br />

di cinematica diretta. Questo <strong>per</strong>ché basandosi su una suddivisione discreta dello<br />

spazio era stato possibile memorizzare preventivamente le rotazioni da applicare a<br />

spalla e gomito <strong>per</strong> fare in modo che la mano raggiungesse ognuna delle regioni del-<br />

lo spazio.<br />

Per questo i <strong>gesti</strong> <strong>dei</strong>ttici erano di fatto irrealizzabili: non era possibile chiedere<br />

all’agente di indicare un punto nello spazio, o<strong>per</strong>azione che alla luce di quello che<br />

abbiamo spiegato in questo paragrafo è tipica della cinematica inversa.<br />

V.7 Cinematica inversa: IKAN<br />

Nel lavoro svolto in questa tesi abbiamo introdotto nel motore dell’agente Greta un<br />

nuovo oggetto capace di risolvere problemi di cinematica inversa.<br />

Per fare questo abbiamo implementato un tool del tutto indipendente dal motore<br />

che impiega una libreria matematica sviluppata dal Center of Human Modeling and<br />

Simulation dell’Università della Pennsylvania chiamata IKAN (Inverse Kinematics<br />

using ANalytical Methods).<br />

79


Capitolo V, Motore gestuale<br />

Figura 4. Jack, un agente sviluppato usando IKAN<br />

IKAN è specializzata nella risoluzione di problemi di cinematica inversa <strong>per</strong> <strong>gli</strong> arti<br />

umani (braccia, gambe).<br />

L’oggetto principale della libreria è l’SRS.<br />

Date le matrici G, S, T l’oggetto SRS risolve l’equazione:<br />

G=R 2 * S * R y * T * R 1<br />

dove:<br />

R 2 e R 1 sono le matrici di rotazione rispettivamente di polso e spalla<br />

R y è la matrice di rotazione del gomito<br />

S è la matrice di traslazione tra polso e gomito<br />

T è la matrice di traslazione tra gomito e spalla<br />

Il tool che abbiamo sviluppato <strong>per</strong>mette di spostare liberamente nello spazio una<br />

sfera e in tempo reale il braccio destro dell’agente viene rivolto nella direzione della<br />

sfera in modo corretto, evitando cioè configurazioni impossibili <strong>per</strong> il braccio di un<br />

essere umano.<br />

80


Capitolo V, Motore gestuale<br />

Figura 5. Il tool sviluppato <strong>per</strong> il calcolo della cinematica inversa<br />

A questo punto non è rimasto altro da fare che includere nel motore la parte di co-<br />

dice del tool che effettuava il calcolo della cinematica inversa:<br />

1. settare S e T con le dimensioni di braccio e avambraccio;<br />

2. istanziare un oggetto di classe SRS:<br />

SRS(&T, &S, a, p);<br />

dove a è un vettore parallelo all’avambraccio e p è parallelo al vetto-<br />

re intorno a cui ruota il gomito;<br />

3. settare la matrice G con le coordinate del punto che l’agente deve<br />

indicare (target);<br />

4. eseguire il metodo SRS::SetGoal(&G);<br />

5. eseguire il metodo SRS:SolveR1(&R1) che calcola la matrice di rota-<br />

zione della spalla;<br />

6. convertire la matrice di rotazione in una terna di singole rotazioni ri-<br />

spetto a<strong>gli</strong> assi coordinati (rappresentazione euleriana) che è quella<br />

utilizzata nel motore;<br />

81


Capitolo V, Motore gestuale<br />

V.8 Dinamica <strong>dei</strong> <strong>gesti</strong> e posizioni di riposo multiple<br />

Non appena il motore ha assunto la forma finale che abbiamo specificato nel para-<br />

grafo IV.5, abbiamo rivolto la nostra attenzione alla qualità della riproduzione <strong>dei</strong><br />

<strong>gesti</strong> da parte dell’agente Greta.<br />

Anche se il pianificatore <strong>dei</strong> <strong>gesti</strong> svolgeva molto bene il compito di fornire una<br />

temporizzazione gestuale basata sulle parole che venivano pronunciate, il risultato<br />

finale era una sequenza animata in cui i <strong>gesti</strong> avvenivano nei momenti giusti ma le<br />

braccia si muovevano in modo troppo lento e morbido da un gesto all’altro.<br />

Parte del lavoro svolto in questa tesi è consistito allora nell’apportare delle modifi-<br />

che al concretizzatore <strong>dei</strong> <strong>gesti</strong> (vedi IV.4.1) in modo da indurre una dinamica <strong>dei</strong><br />

<strong>gesti</strong> molto più realistica.<br />

Supponiamo che, ad esempio, dopo la fase di pianificazione siano stati decisi i se-<br />

guenti 3 <strong>gesti</strong>:<br />

A questo punto nella versione originaria il concretizzatore avrebbe effettuato una<br />

serie di confronti:<br />

• <strong>per</strong> ogni (i=2; iso<strong>gli</strong>a) allora inserire tra t i-1 e t i un gesto di<br />

riposo al tempo t’= t i-1+(t i- t i-1)/2;<br />

Supponendo che nell’esempio solo t 2 e t 3 distino un numero di secondi maggiore<br />

della so<strong>gli</strong>a fissata questo sarebbe stato il risultato:<br />

82


Capitolo V, Motore gestuale<br />

Innanzitutto il valore della so<strong>gli</strong>a era troppo grande. E comunque anche riducendola<br />

molto in modo da provocare l’inserimento di un gesto di riposo tra ogni coppia di<br />

<strong>gesti</strong> presenti il risultato era che i <strong>gesti</strong> di riposo avvenivano sempre a metà tra il ge-<br />

sto precedente e quello successivo e questo nel caso di <strong>gesti</strong> abbastanza distanti (dai<br />

3 secondi circa in su) dava luogo ai lunghi e lenti spostamenti delle braccia a cui ab-<br />

biamo accennato all’inizio del paragrafo.<br />

E’ stato sufficiente allora cambiare questa strategia <strong>per</strong> ottenere un primo mi<strong>gli</strong>ora-<br />

mento dell’animazione. Tornando all’esempio:<br />

• <strong>per</strong> ogni (i=2; iso<strong>gli</strong>a) allora inserire tra t i-1 e t i due <strong>gesti</strong> di<br />

riposo al tempo t’= t i-1+0.5 e al tempo t’’= t i-0.5;<br />

Supponendo che la so<strong>gli</strong>a sia stata diminuita di valore in modo da essere su<strong>per</strong>ata<br />

anche dalla distanza tra t 1 e t 2, l’elaborazione del concretizzatore dà luogo alla se-<br />

quenza di <strong>gesti</strong>:<br />

Dopo queste modifiche i movementi dell’agente erano molto più realistici <strong>per</strong>ché<br />

effettuava i vari <strong>gesti</strong> con una dinamica simile a quella de<strong>gli</strong> esseri umani.<br />

83


Capitolo V, Motore gestuale<br />

Il passo successivo nell’ottimizzazione del funzionamento del concretizzatore è sta-<br />

to quello di introdurre le posizioni di rest multiple.<br />

Una <strong>per</strong>sona mentre parla non torna sempre nella stessa posizione di partenza tra<br />

un gesto e l’altro. Soprattutto se tra due <strong>gesti</strong> non trascorre un tempo molto elevato<br />

le mani raggiungono una posizione di riposo in prossimità della zona dello spazio<br />

nella quale avverrà il gesto successivo.<br />

Partendo da quest’idea abbiamo ulteriormente modificato il concretizzatore intro-<br />

ducendo due valori so<strong>gli</strong>a1so<strong>gli</strong>a1) allora inserire tra t i-1 e t i due<br />

<strong>gesti</strong> di tipo riposo1 al tempo t’= t i-1+0.5 e al tem-<br />

po t’’= t i-0.5;<br />

84


Capitolo VI, Tools di supporto<br />

VI.1 La dipendenza da Maya<br />

VI<br />

Tools di supporto<br />

Nel capitolo IV, descrivendo il lavoro svolto in questa tesi, abbiamo detto che uno<br />

de<strong>gli</strong> obbiettivi raggiunti è stato quello di rendere il sistema del tutto indipendente<br />

dal software Maya della Alias/Wavefront.<br />

Maya è un programma molto completo <strong>per</strong> il rendering di scene 3D realistiche e viene<br />

impiegato in numerosi campi e in particolare in quello de<strong>gli</strong> ef-<br />

fetti speciali <strong>per</strong> il cinema.<br />

Una delle sue caratteristiche principali è quella di incorporare<br />

un linguaggio ad alto livello chiamato MEL <strong>per</strong> la realizzazione<br />

di script che <strong>per</strong>mettono quindi al sistema di interfacciarsi con<br />

applicazioni esterne.<br />

Grazie a questa funzionalità inizialmente Maya è stato utilizzato<br />

come player <strong>per</strong> le animazioni BAP, <strong>per</strong> verificare i risultati<br />

dell’elaborazione del motore (figura 1).<br />

85<br />

Figura 1. L'agente<br />

Greta sotto Maya


Capitolo VI, Tools di supporto<br />

Nei capitoli precedenti (paragrafo IV.6 in particolare) abbiamo spesso parlato del<br />

fatto che i <strong>gesti</strong> vengono definiti come una successione di fotogrammi chiave, cia-<br />

scuno <strong>dei</strong> quali viene descritto qualitativamente come una sovrapposizione delle<br />

configurazioni di braccio, polso, dita della mano. Ad esempio un fotogramma chia-<br />

ve potrebbe essere definito come:<br />

“braccio proteso in avanti”+”mano chiusa col solo indice a<strong>per</strong>to”+”palmo vero il basso e dita in avanti”<br />

Questa descrizione è qualitativa e <strong>per</strong>mette quindi di codificare abbastanza facil-<br />

mente molti tipi di gesto evitando di agire manualmente sulle rotazioni del modello<br />

(che sarebbe un processo molto lungo e complicato).<br />

Il motore riesce a generare i fotogrammi chiave di un gesto effettuando delle o<strong>per</strong>a-<br />

zioni di composizione tra le diverse pose base corrispondenti alla descrizione del fo-<br />

togramma.<br />

Una posa è in generale un qualsiasi elenco di elementi (giuntura, rotazione) dove una<br />

giuntura è il punto di congiungimento di due o più ossa dello scheletro dell’agente..<br />

Esistono quindi pose <strong>per</strong> le braccia, <strong>per</strong> le mani, <strong>per</strong> le dita, o addirittura <strong>per</strong> tutto il<br />

corpo. L’impiego di Maya era inizialmente fondamentale anche <strong>per</strong> la definizione di<br />

queste pose base <strong>dei</strong> <strong>gesti</strong> che venivano poi esportate sempre grazie a MEL.<br />

Per tutti i motivi fin qui esposti e soprattutto <strong>per</strong> non obbligare <strong>gli</strong> sviluppatori ad<br />

acquistare una copia di un programma commerciale che inoltre ha funzionalità mol-<br />

to più estese di quelle che poi effettivamente vengono utilizzate col motore, abbia-<br />

mo deciso di:<br />

1. implementare un BAP player<br />

2. implementare un tool <strong>per</strong> la definizione di pose<br />

Nell’ultimo paragrafo di questo capitolo prendiamo invece in esame un altro tool<br />

molto utile, l’editor <strong>dei</strong> <strong>gesti</strong> che abbiamo implementato <strong>per</strong> automatizzare la ste-<br />

86


Capitolo VI, Tools di supporto<br />

sura <strong>dei</strong> file di definizione <strong>dei</strong> <strong>gesti</strong> (vedere IV.6). L’idea di scrivere questo tool è na-<br />

ta da necessità puramente pratiche.<br />

Il gestuario del motore originario infatti andava “popolato” di <strong>gesti</strong> e durante il la-<br />

voro di scrittura <strong>dei</strong> relativi file di definizione ci siamo accorti del fatto che il lin-<br />

guaggio di specifica <strong>dei</strong> <strong>gesti</strong> non è molto mnemonico mentre sarebbe stato molto<br />

più intuitivo poter combinare graficamente le varie componenti del gesto. Inoltre<br />

era abbastanza probabile commettere errori di battitura o sulle temporizzazioni <strong>dei</strong><br />

fotogrammi chiave.<br />

VI.2 Editor delle pose<br />

Il motore gestuale dell’agente Greta ottiene i dati <strong>dei</strong> movimenti da effettuare <strong>per</strong><br />

riprodurre <strong>gesti</strong> da quelle che abbiamo definito nel paragrafo precedente con il ter-<br />

mine pose base.<br />

Una posa è una sequenza di coppie (g,r) ciascuna delle quali informa il motore sulla<br />

quantità di rotazione r da applicare alla giuntura g dello scheletro dell’agente.<br />

Schematicamente ecco quello che succede:<br />

Figura 2. I file delle pose<br />

87


Capitolo VI, Tools di supporto<br />

Il motore chiede al gestuario il file di definizione di un gesto. Scandendo il file, <strong>per</strong><br />

ogni fotogramma base del gesto vengono fatti de<strong>gli</strong> accessi a uno o più file di posa.<br />

Ad esempio, se in un fotogramma base di un certo gesto una delle mani fosse stata<br />

definita a forma di “pugno chiuso” allora il motore avrebbe effettuato un accesso al<br />

file form_fist.txt contenente le seguenti informazioni (la rotazione di ogni<br />

giuntura è espressa da tre singole rotazioni intorno a<strong>gli</strong> assi x, y e z):<br />

r_wrist 0.000000 0.000000 0.000000<br />

r_thumb1 12.000000 17.000000 27.000000<br />

r_thumb2 55.000000 0.000000 0.000000<br />

r_thumb3 27.000000 0.000000 0.000000<br />

r_index0 0.000000 0.000000 0.000000<br />

r_index1 5.000000 7.000000 84.000000<br />

r_index2 0.000000 0.000000 72.000000<br />

r_index3 0.000000 0.000000 62.000000<br />

r_middle0 0.000000 0.000000 0.000000<br />

r_middle1 2.000000 0.000000 80.000000<br />

r_middle2 0.000000 0.000000 69.000000<br />

r_middle3 0.000000 0.000000 50.000000<br />

r_ring0 0.000000 0.000000 0.000000<br />

r_ring1 0.000000 0.000000 75.000000<br />

r_ring2 0.000000 0.000000 62.000000<br />

r_ring3 0.000000 0.000000 52.000000<br />

r_pinky0 0.000000 0.000000 0.000000<br />

r_pinky1 0.000000 0.000000 68.000000<br />

r_pinky2 0.000000 0.000000 69.000000<br />

r_pinky3 0.000000 0.000000 27.000000<br />

Applicando queste rotazioni alle relative giunture (wrist=polso, thumb=pollice, in-<br />

dex=indice, middle=medio, ring=anulare, pinky=mignolo) ecco il risultato sul cor-<br />

po dell’agente:<br />

Figura 3. Posa "pugno chiuso"<br />

I <strong>gesti</strong> dell’agente risultano essere il risultato di una composizione di pose base stati-<br />

che precedentemente definite.<br />

L’editor delle pose serve a facilitare la fase di definizione delle pose <strong>per</strong>ché <strong>per</strong>mette<br />

di muovere liberamente <strong>gli</strong> arti su<strong>per</strong>iori dell’agente Greta avendo un continuo<br />

feedback visivo e una volta raggiunta la configurazione desiderata genera la corri-<br />

spondente sequenza di rotazioni e la memorizza in un file di testo.<br />

88


Capitolo VI, Tools di supporto<br />

Figura 4. Editor delle pose<br />

L’utente interagisce con l’editor <strong>per</strong> mezzo di un’interfaccia grafica intuitiva.<br />

Un’area molto grande dell’interfaccia è riservata alla finestra di feedback destinata<br />

alla visualizzazione del corpo dell’agente Greta. Essa riflette in tempo reale tutte le<br />

variazioni che vengono applicate alle sue giunture usando i controlli situati nella par-<br />

te destra:<br />

− Pose name: è il nome della posa su cui si sta lavorando<br />

− Joint: il campo Name contiene l’elenco di tutte le giunture dello sche-<br />

letro dell’agente Greta. Per modificare la posizione di una giuntura ba-<br />

sta selezionarla in questa listbox e poi agire sui tre sliders RotX, RotY,<br />

RotZ.<br />

− Zoom: imposta la quantità di zoom sul corpo dell’agente.<br />

− Show model, Show skeleton: servono ad attivare o disattivare la vi-<br />

sualizzazione del corpo dell’agente e del suo scheletro. In figura 4 è vi-<br />

89


Capitolo VI, Tools di supporto<br />

sibile tutto il corpo mentre in figura 5 osserviamo la stessa configura-<br />

zione ma attraverso il solo scheletro.<br />

− left2right, right2left: svolgono l’utile funzione di copiare tutte le rota-<br />

zioni de<strong>gli</strong> angoli del braccio sinistro in quelle corrispondenti del brac-<br />

cio destro, e viceversa.<br />

− Load: carica da un file di testo le rota-<br />

zioni associate ad una certa posa base:<br />

− Save: nel momento in cui viene pre-<br />

muto questo pulsante l’editor chiede<br />

quale sottoinsieme dell’insieme delle<br />

giunture vo<strong>gli</strong>amo che venga scritto nel<br />

file di testo che poi specificheremo.<br />

− Constraints: <strong>per</strong>mette di configurare,<br />

<strong>per</strong> mezzo di un’ulteriore finestra di dialogo, i vincoli sulle rotazioni<br />

delle giunture. Non è infatti detto che ogni giuntura possa ruotare<br />

liberamente intorno a tutti e tre <strong>gli</strong> assi. Pensiamo ad esempio al<br />

gomito di una <strong>per</strong>sona che può ruotare intorno a due soli assi, quello<br />

parallelo alla sua lunghezza e quello che esce “lateralmente”:<br />

Spalla e polso invece hanno <strong>per</strong> esempio tutti e tre i gradi di libertà.<br />

Il motore deve <strong>per</strong>ciò tenere conto di queste considerazioni<br />

anatomiche e di conseguenza altrettanto deve fare l’editor <strong>per</strong> fare in<br />

modo che quello che viene visualizzato nella finestra di feedback<br />

90<br />

Figura 1. Scheletro


Capitolo VI, Tools di supporto<br />

corrisponda poi precisamente a quello che il motore riprodurrà<br />

durante l’animazione.<br />

VI.3 Implementazione dell’editor delle pose<br />

L’editor delle pose è un’applicazione <strong>per</strong> sistemi o<strong>per</strong>ativi Win32 che fa uso della li-<br />

breria MFC <strong>per</strong> la creazione e la <strong>gesti</strong>one dell’interfaccia grafica e della libreria<br />

OpenGL [36] <strong>per</strong> la visualizzazione in grafica tridimensionale.<br />

L’editor è stato sviluppato in Visual C++ all’interno del Microsoft Develo<strong>per</strong> Stu-<br />

dio, semplificando in questo modo la fase di creazione della finestra di dialogo e di<br />

tutte le sue componenti.<br />

Quello che vo<strong>gli</strong>amo mettere in risalto in questo paragrafo riguarda il procedimento<br />

adottato <strong>per</strong> la visualizzazione tridimensionale del corpo dell’agente Greta. La stessa<br />

tecnica è stata poi trasferita facilmente (grazie al paradigma di programmazione a<br />

oggetti) nello sviluppo del BAP player che vedremo nel prossimo paragrafo.<br />

Nella prima versione dell’editor ci siamo preoccupati innanzitutto di arrivare a vi-<br />

sualizzare semplicemente uno scheletro con proporzioni umane (figura 5) mentre<br />

successivamente abbiamo “applicato” intorno allo scheletro un modello umanoide<br />

(figura 4).<br />

VI.3.1 Lo scheletro<br />

Il punto di partenza di tutto il lavoro è stato Maya. Come abbiamo detto nel primo<br />

paragrafo di questo capitolo tutta la fase di definizione delle pose avveniva inizial-<br />

mente in questo ambiente di sviluppo.<br />

Il corpo umano può essere considerato suddiviso in una serie di segmenti connessi<br />

tra di loro (braccio, avambraccio, mano, dita). Il punto in cui due o più segmenti si<br />

congiungono è detto giuntura. Per riprodurre un corpo umano è quindi prima di tut-<br />

to necessario considerare una sua rappresentazione come gerarchia di giunture. Per<br />

animarlo si può allora accedere alle giunture e modificarne <strong>gli</strong> angoli di rotazione.<br />

91


Capitolo VI, Tools di supporto<br />

Lo standard H-Anim (Appendice C) fornisce appunto un elenco di giunture di uno<br />

scheletro umanoide e le relative coordinate tridimensionali, del tipo:<br />

l_acromioclavicular 0.0962 1.4269 -0.0424<br />

l_shoulder 0.2029 1.4376 -0.0387<br />

l_elbow 0.2014 1.1357 -0.0682<br />

l_wrist 0.1984 0.8663 -0.0583<br />

l_thumb1 0.1924 0.8472 -0.0534<br />

l_thumb2 0.1951 0.8226 0.0246<br />

l_thumb3 0.1955 0.8159 0.0464<br />

l_index0 0.1983 0.8024 -0.0280<br />

l_index1 0.1983 0.7815 -0.0280<br />

l_index2 0.2017 0.7363 -0.0248<br />

l_index3 0.2028 0.7139 -0.0236<br />

. . . . . . . . .<br />

Inserendo questi dati in Maya è stato configurato uno scheletro che poteva essere a<br />

questo punto posizionato agendo sulla quantità di rotazione di ogni giuntura.<br />

Figura 6. Maya - l'ambiente di lavoro con lo scheletro dell'agente<br />

Dopo il posizionamento bastava mandare in esecuzione un apposito script in lin-<br />

guaggio MEL e la posa veniva scritta in un file di testo al quale avrebbe poi potuto<br />

accedere il motore durante l’elaborazione dell’animazione (figura 2).<br />

Il primo passo è stato allora quello di replicare lo scheletro all’interno dell’editor.<br />

L’oggetto principale dell’editor è la giuntura (in inglese Joint) e lo scheletro<br />

dell’agente è ovviamente un albero di giunture:<br />

92


Capitolo VI, Tools di supporto<br />

class Joint:<br />

Joint* sons;<br />

//puntatore alla giuntura padre<br />

Joint* parent;<br />

//nome della giuntura<br />

CString name;<br />

//posizione(offset) della giuntura rispetto al padre<br />

coord3d translation;<br />

//rotazione della giuntura<br />

coord3d rotation;<br />

//vincoli sui gradi di libertà della giuntura<br />

bool enableX,enableY,enableZ;<br />

In fase di inizializzazione l’editor scorre il contenuto di un file in cui abbiamo me-<br />

morizzato la descrizione dello scheletro H-Anim (Appendice C)[10].<br />

Per ogni giuntura incontrata vengono eseguite le o<strong>per</strong>azioni:<br />

1. istanziazione di un nuovo oggetto di classe Joint;<br />

2. memorizzazione del nome della giuntura;<br />

3. memorizzazione dell’offset della giuntura rispetto al padre;<br />

4. azzeramento della rotazione della giuntura;<br />

5. inserimento della giuntura nella corretta posizione all’interno<br />

dell’albero (scheletro) finora creato;<br />

Una volta immagazzinati i dati di tutte le giunture e costruito l’albero che corri-<br />

sponde allo scheletro dell’agente è molto semplice ottenere la visualizzazione dello<br />

scheletro.<br />

In pratica <strong>per</strong> ogni giuntura occorre tracciare le ossa che vanno verso quelle fi<strong>gli</strong>e e<br />

poi spostarsi in ciascuna di loro e ripetere il procedimento.<br />

Ecco il metodo (ricorsivo) che abbiamo implementato:<br />

metodo Draw:<br />

input: una giuntura dello scheletro<br />

disegnare una piccola sfera;<br />

effettuare la rotazione R associata alla giuntura;<br />

for(ogni giuntura s fi<strong>gli</strong>a di quella in input):<br />

disegnare il segmento che unisce la giuntura in input ad s;<br />

spostare con una traslazione T il sistema di riferimento in<br />

modo che l’origine si trovi nella posizione di s;<br />

s.Draw;<br />

93


Capitolo VI, Tools di supporto<br />

effettuare la traslazione –T;<br />

effettuare la rotazione –R;<br />

Se t è il puntatore alla radice dell’albero-scheletro basterà una semplice chiamata<br />

t→Draw(); <strong>per</strong> provocare il disegno tramite OpenGL dell’intero scheletro<br />

dell’agente completo di tutte le rotazioni corrispondenti alle varie giunture.<br />

Il codice completo commentato del metodo Draw della classe Joint è riportato<br />

nell’Appendice A.<br />

VI.3.2 Il modello<br />

Visualizzare un modello complesso invece di un semplice scheletro è leggermente<br />

più complicato.<br />

Un modello tridimensionale è una coppia (V,T) dove V è un insieme di punti dello<br />

spazio tridimensionale e T un insieme di triangoli i cui vertici sono punti apparte-<br />

nenti a V.<br />

Figura 7. Maya - modello 3D del corpo dell’agente Greta<br />

Grazie ad uno script MEL appositamente realizzato era abbastanza semplice ottene-<br />

re una versione in OpenGL del modello 3D del corpo dell’agente originariamente<br />

impiegato nel Player di Maya (figura 1). Lo script effettuava un’iterazione<br />

sull’insieme V di tutti i vertici del modello scrivendo in un file di intestazione C le<br />

94


Capitolo VI, Tools di supporto<br />

loro coordinate sotto forma di array, e successivamente in un secondo array memo-<br />

rizzava tutti i triangoli dell’insieme T come indici del primo array.<br />

Il problema principale è consistito <strong>per</strong>ò nel trovare un modo <strong>per</strong> arrivare a poter<br />

applicare un procedimento ricorsivo analogo al caso del solo scheletro (vedi sezione<br />

precedente) anche in presenza di un modello tridimensionale e che <strong>per</strong>mettesse di<br />

<strong>gesti</strong>re al me<strong>gli</strong>o le deformazioni a cui il modello sarebbe andato incontro come<br />

conseguenza delle rotazioni delle articolazioni dello scheletro.<br />

Ancora una volta la soluzione è stata ispirata dalla tecnica impiegata da Maya.<br />

Il software della Alias/Wavefront <strong>per</strong>mette di effettuare un’assegnazione detta<br />

skinning tra le ossa dello scheletro e sottoinsiemi dell’insieme V <strong>dei</strong> vertici del mo-<br />

dello. In questo modo i vertici sono vincolati a muoversi seguendo <strong>gli</strong> spostamenti<br />

dell’osso associato. Visivamente inoltre con questa tecnica il modello sembra de-<br />

formarsi in modo sufficientemente naturale vicino alle giunture:<br />

Figura 8. Maya - deformazione del braccio<br />

Abbiamo allora realizzato un ulteriore script MEL <strong>per</strong> esportare su file di testo i dati<br />

dello skinning. Il risultato dello script è un file di intestazione C che contiene <strong>per</strong><br />

ogni giuntura dello scheletro l’array de<strong>gli</strong> indici <strong>dei</strong> vertici dell’insieme V assegnati a<br />

quella giuntura.<br />

Definire un algoritmo <strong>per</strong> il tracciamento tridimensionale del modello corpo<br />

dell’agente Greta equivale a calcolare a partire da V un nuovo insieme V’ in cui i<br />

vertici dell’insieme di partenza siano stati spostati (<strong>per</strong> mezzo di rotazioni) in base<br />

alla configurazione delle giunture dello scheletro.<br />

95


Capitolo VI, Tools di supporto<br />

Illustriamo il procedimento con un esempio semplice, nel caso bidimensionale.<br />

Consideriamo 2 giunture:<br />

Supponiamo di applicare una rotazione θ nel punto P 0 e una rotazione σ nel punto<br />

P 1:<br />

Utilizziamo la notazione matriciale, trasferibile quindi direttamente al caso in 3 di-<br />

mensioni. Ricordiamo che dato un punto P e una matrice di rotazione K il punto<br />

che si ottiene applicando a P la rotazione descritta da K intorno è: P’=P⋅K.<br />

Definiamo allora due matrici di rotazione M,N che corrispondono rispettivamente<br />

alle rotazioni θ e σ.<br />

Per calcolare le coordinate finali del punto P 2 basterà effettuare due traslazioni e due<br />

rotazioni:<br />

1. traslare il sistema portando il punto P 1 nell’origine;<br />

2. calcolare P’ 2= P 2⋅N;<br />

3. traslare il sistema in modo da riportare P 0 nell’origine;<br />

4. calcolare P’’ 2= P’ 2⋅M;<br />

96


Capitolo VI, Tools di supporto<br />

Ed ecco l’algoritmo finale che calcola l’insieme V’ ripetendo questo procedimento<br />

su tutti i vertici del modello del corpo dell’agente:<br />

Metodo ModelDraw:<br />

input: una giuntura g dello scheletro<br />

ottenere l’insieme G ⊆ V <strong>dei</strong> vertici associati a g;<br />

inizializzare la matrice ROT come matrice identità;<br />

for(ogni giuntura s a partire da g e risalendo nello scheletro<br />

fino alla radice):<br />

sia R la matrice di rotazione associata alla rotazione di s;<br />

ROT=ROT*R;<br />

for(ogni v ∈ G):<br />

traslare la giuntura s nell’origine;<br />

v=ROT*v;<br />

traslare la giuntura s nella posizione iniziale;<br />

ripetere tutto il procedimento sulle giunture fi<strong>gli</strong>e di g;<br />

Il codice completo e commentato del metodo ModelDraw della classe Joint è ri-<br />

portato nell’Appendice A.<br />

VI.4 BAP player<br />

Abbiamo più volte citato questo importante elemento del sistema dell’agente con-<br />

versazionale Greta. Ricordiamo che pur non essendo una componente del motore<br />

gestuale esso ha il compito fondamentale di dotare l’agente di un aspetto fisico e<br />

una voce, potremmo quindi dire di “dare vita” all’agente.<br />

Nell’architettura di un agente conversazionale e dell’agente Greta in particolare (ve-<br />

dere il paragrafo IV.5) il BAP player entra in azione non appena il motore gestuale<br />

ha terminato il calcolo di tutti i fotogrammi di animazione del turno di conversazio-<br />

ne dell’agente e ha riversato questi dati in un file BAP, la cui codifica esatta verrà<br />

spiegata nel prossimo paragrafo.<br />

97


Capitolo VI, Tools di supporto<br />

Il player a questo punto accede al file BAP e al file WAV che era stato generato da<br />

Festival (IV.5.2) e avvia la riproduzione dell’animazione e dell’audio in modo sin-<br />

crono. Nella versione attuale del player è possibile modificare in tempo reale la po-<br />

sizione della telecamera che sta inquadrando l’agente e regolare la riproduzione<br />

dell’animazione agendo su <strong>dei</strong> pulsanti simili a quelli di un videoregistratore.<br />

VI.5 La codifica BAP<br />

BAP (Body Animation Parameters) è un insieme di parametri <strong>per</strong> la codifica<br />

dell’animazione del corpo di figure umanoidi sia 2D che 3D. E’ stato definito<br />

all’interno dello standard MPEG4 <strong>per</strong> l’integrazione di animazioni di figure uma-<br />

noidi all’interno di contenuti multimediali.<br />

La codifica prevede la possibilità di <strong>gesti</strong>re ben 175 gradi di libertà (che a loro volta<br />

vengono singolarmente chiamati ancora BAP, <strong>per</strong> un elenco completo vedere<br />

l’Appendice B) <strong>per</strong> lo scheletro del modello.<br />

Ciascuno di questi BAP rappresenta la quantità di rotazione intorno a uno <strong>dei</strong> tre<br />

assi coordinati di una giuntura dello scheletro.<br />

Ad esempio <strong>per</strong> entrambe le spalle esistono tre BAP <strong>per</strong> la rotazione intorno a<strong>gli</strong> as-<br />

si X, Y e Z. Per i gomiti invece sono riservati due BAP ciascuno <strong>per</strong> la rotazione in-<br />

torno a<strong>gli</strong> assi X e Z.<br />

Nella sezione VI.3.1 avevamo spiegato che lo scheletro dell’agente è stato definito<br />

usando un altro standard chiamato H-Anim che prevede una rappresentazione tra-<br />

mite uno scheletro composto da 89 giunture. Abbiamo quindi identificato i BAP<br />

che intervenivano nell’animazione gestuale (quindi quelli relativi a spalle, gomiti,<br />

polsi e dita delle mani) ed effettuato un’o<strong>per</strong>azione di matching tra BAP e giunture<br />

H-Anim.<br />

In pratica H-Anim serve come standard <strong>per</strong> la struttura dello scheletro mentre BAP<br />

è lo standard <strong>per</strong> animarlo.<br />

98


Capitolo VI, Tools di supporto<br />

Consideriamo un esempio. Per il dito mignolo della mano sinistra (che in inglese si<br />

chiama pinky) la codifica BAP prevede 6 parametri su 4 giunture:<br />

• giuntura l_pinky0: flexion (rotazione intorno all’asse X)<br />

• giuntura l_pinky1: pivot,twisting,flexion (rotazione intorno a<strong>gli</strong> assi<br />

X,Y e Z)<br />

• giuntura l_pinky2: flexion (rotazione intorno all’asse X)<br />

• giuntura l_pinky3: flexion (rotazione intorno all’asse X)<br />

Lo stesso dito <strong>per</strong> H-Anim è composto di 4 ossa: l_pinky_metacarpal,<br />

l_pinky_proximal, l_pinky_middle, l_pinky_distal.<br />

Il matching tra BAP e H-Anim è illustrato nella seguente figura:<br />

Significa quindi che l’osso del metacarpo ruoterà intorno alla giuntura PINKY0 che,<br />

come abbiamo detto all’inizio di questo esempio, ha un solo grado di libertà (quello<br />

rispetto all’asse X). L’osso della falange invece ruoterà intorno alla giuntura PIN-<br />

KY1 che aveva tutti e 3 i gradi di libertà. Falangina e falangetta, dovendo ruotare in-<br />

torno rispettivamente alle giunture PINKY2 e PINKY3 avranno un solo grado di<br />

libertà (asse X).<br />

Un file BAP è un file di testo in formato Ascii, contenente più righe che terminano<br />

con il carattere di ritorno a capo e ha una struttura fissa.<br />

La prima riga contiene sempre:<br />

99


Capitolo VI, Tools di supporto<br />

• il numero della versione BAP (ad esempio “2.1”) e in questo modo il player<br />

potrà decidere se e come procedere nella visualizzazione dell’animazione;<br />

• una stringa che rappresenta il nome del file BAP;<br />

• un intero che indica il numero di fotogrammi al secondo (FPS) che sono sta-<br />

ti generati durante il calcolo dell’animazione (nel caso dell’agente Greta sono<br />

sempre 25 FPS).<br />

• il numero totale di fotogrammi che compongono l’animazione.<br />

Dalla seconda in poi sono memorizzate le informazioni relative ai fotogrammi<br />

dell’animazione, in modo che ogni fotogramma sia contenuto in due righe.<br />

La prima è una maschera, cioè una sequenza di 175 valori “0” o “1”. Uno “0” nella<br />

posizione i indica al player che il BAP numero i non viene utilizzato nel fotogram-<br />

ma attuale, un “1” il contrario.<br />

La seconda inizia sempre con il numero di fotogramma attuale e successivamente ci<br />

sono, nell’ordine, i valori <strong>dei</strong> BAP (espressi in radianti*10 5 ) che nella maschera della<br />

riga precedente erano stati contrassegnati con il numero “1”.<br />

Ecco un esempio di file BAP:<br />

0.0 tmp\into1_1.bap 25 839<br />

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1<br />

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1<br />

1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0<br />

0 -4645 -4796 27592 -26998 -38885 38796 -112452 -110961 -917 859 13757 -12173 -25731 -<br />

30218 82764 -84527 -68255 65700 -6907 -7117 0 0 -106708 99125 -97646 98381 -72864 71440 -<br />

6477 -6260 0 0 -98507 102741 -97987 90837 -68262 64587 6611 6758 0 0 -102057 93953 -85530<br />

97681 -51875 48845 17696 16831 0 0 -78502 80728 -91709 88674 -32323 -30713 -63022 69897<br />

49194 -47899 35007 40433 52715 53306<br />

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1<br />

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1<br />

1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0<br />

1 -5672 -5827 27844 -27257 -38659 38553 -111703 -110277 -909 851 12592 -10819 -24203 -<br />

28623 88805 -90882 -61782 59479 -7024 -7321 0 0 -96606 89751 -88394 89054 -65965 64669 -<br />

6482 -6255 0 0 -89179 92995 -88703 82236 -61791 58474 5985 6117 0 0 -92377 85055 -77429<br />

88418 -46954 44220 17046 16250 0 0 -71060 73074 -83026 80286 -29242 -27784 -57075 63295<br />

44521 -43351 31708 36620 47744 48276<br />

VI.6 Implementazione del BAP player<br />

Il player che abbiamo realizzato è in realtà fortemente basato sul codice creato <strong>per</strong><br />

l’editor delle pose.<br />

100


Capitolo VI, Tools di supporto<br />

Come abbiamo visto, l’editor era capace di visualizzare il corpo dell’agente varian-<br />

done la posizione de<strong>gli</strong> arti in base all’input dell’utente oppure leggendo questi dati<br />

da un file.<br />

L’idea allora è stata quella di caricare il file BAP in un array e poi inserire, ad inter-<br />

valli tempo prestabiliti, i dati dell’array nello scheletro dell’agente provocando di<br />

conseguenza il movimento del corpo con il risultato che possiamo vedere nella se-<br />

guente figura:<br />

Figura 9. BAP player<br />

Il corpo dell’agente nella figura è completo anche della testa. Infatti nel player è sta-<br />

to integrato il codice del FAP player realizzato da Massimo Bilvi [2] <strong>per</strong> la visualiz-<br />

zazione delle espressioni facciali.<br />

Durante la riproduzione, in qualsiasi momento:<br />

• muovendo il mouse e tenendo premuto il tasto sinistro la telecamera che in-<br />

quadra l’agente ruota verso destra, sinistra, in alto o in basso.<br />

• muovendo il mouse e tenendo premuto il tasto destro la telecamera scorre<br />

lateralmente o dall’alto in basso (panning).<br />

101


Capitolo VI, Tools di supporto<br />

• muovendo il mouse e tenendo premuto il tasto centrale la quantità di zoom<br />

della telecamera aumenta o diminuisce.<br />

L’implementazione del player si basa sull’introduzione nella classe Joint presentata<br />

nel paragrafo 3 di un metodo LoadFrame(int n); che dato il numero di foto-<br />

gramma n accede all’n-esimo elemento dell’array <strong>dei</strong> fotogrammi e copia le rotazio-<br />

ni <strong>dei</strong> vari BAP nelle corrispondenti giunture dello scheletro.<br />

A questo punto non resta che invocare il metodo ModelDraw (spiegato nel para-<br />

grafo 3) <strong>per</strong> ottenere la visualizzazione del corpo dell’agente al fotogramma n.<br />

Una volta avviata l’animazione va avanti autonomamente. Questo significa che è<br />

stato necessario creare un thread secondario dedicato all’aggiornamento della visua-<br />

lizzazione del corpo dell’agente. Riportiamo il codice del thread e del metodo che<br />

effettua il refresh della visualizzazione della finestra di dialogo principale del player:<br />

DWORD WINAPI PlayThread( LPVOID pParam )<br />

{<br />

//effettuare il cast del parametro nella classe della<br />

//finestra di dialogo principale<br />

CDlgOglDlg* pObject = (CDlgOglDlg*)pParam;<br />

//ripetere all’infinito<br />

while(true)<br />

{<br />

//bloccare qui finché il dialogo non esce dalla fase di refresh<br />

while(pObject->refreshing==true)<br />

{<br />

Sleep(10);<br />

}<br />

//inviare al dialogo un messaggio che lo avverta che può iniziare<br />

//la fase di refresh<br />

pObject->refreshing=true;<br />

pObject->PostMessage(WM_PAINT,0,0);<br />

//rimanere inattivo <strong>per</strong> 10 millisecondi<br />

Sleep(10);<br />

}<br />

//questa istruzione non verrà mai raggiunta<br />

return 0;<br />

}<br />

void CDlgOglDlg::Refresh(){<br />

//se l’animazione è stata avviata<br />

if(playing)<br />

{<br />

//calcolare il numero di fotogramma corrente<br />

//(25FPS=>ogni fotogramma dura 40 ms)<br />

102


Capitolo VI, Tools di supporto<br />

currentframe=currentframe+(timeGetTime()-starttime)/40.0;<br />

//se non è stata su<strong>per</strong>ata la lunghezza totale dell’animazione<br />

if(currentframeDrawGLScene(m_root,type,xrot,yrot,xscroll,yscroll,zoom);<br />

refreshing=false;<br />

}<br />

La variabile refreshing funge da semaforo. Il thread la pone uguale a true quando dà<br />

il via alla fase di refresh e attende che venga posta di nuovo a false prima di prose-<br />

guire. In questo modo evitiamo che il thread richieda un nuovo refresh mentre è in<br />

corso quello precedente.<br />

VI.7 Editor <strong>dei</strong> <strong>gesti</strong><br />

Nel capitolo IV abbiamo presentato il linguaggio GestureScript <strong>per</strong> la definizione<br />

<strong>dei</strong> <strong>gesti</strong>. Il linguaggio è stato utilizzato <strong>per</strong> creare il gestuario del motore gestuale<br />

dell’agente Greta.<br />

Ricordiamo brevemente che <strong>per</strong> il motore ogni gesto è una sequenza di uno o più<br />

fotogrammi base ciascuno <strong>dei</strong> quali viene descritto qualitativamente dalla sovrappo-<br />

sizione delle configurazioni di braccio, polso, dita della mano.<br />

Durante lo sviluppo del motore abbiamo rilevato che sarebbe stato molto più sem-<br />

plice ed intuitivo poter costruire “visivamente” i <strong>gesti</strong> invece di scrivere manual-<br />

mente i file GestureScript rischiando oltretutto di commettere errori di battitura e di<br />

sintassi.<br />

L’editor delle pose è un’interfaccia grafica che <strong>per</strong>mette all’utente di definire <strong>gesti</strong><br />

<strong>per</strong> il motore gestuale secondo la specifica del linguaggio GestureScript occupandosi<br />

103


Capitolo VI, Tools di supporto<br />

poi della compilazione del file di testo corrispondente ed impedendo all’utente di<br />

commettere errori di definizione.<br />

In particolare vengono del tutto eliminati i seguenti tipi di errore:<br />

• errori di temporizzazione <strong>dei</strong> fotogrammi base: ogni fotogramma base ha un<br />

tempo associato compreso tra 0 e 1 che rappresenta il momento in cui il foto-<br />

gramma si verifica relativamente alla durata totale del gesto; l’editor è predispo-<br />

sto in modo da impedire di assegnare a ogni fotogramma un tempo inferiore a<br />

quello del fotogramma precedente oppure al di fuori dell’intervallo [0,1].<br />

• errori nell’accoppiamento tra forme della mano e del pollice: in GestureScript la<br />

configurazione della mano prevede alcune forme base (ad esempio form_fist,<br />

form_open, symbol_1_open, ecc.) più alcuni modificatori opzionali <strong>per</strong> il polli-<br />

ce; le forme sono suddivise in tre insiemi che sono associati a diversi tipi di mo-<br />

dificatore del pollice; l’editor, grazie ad alcuni pulsanti di tipo “radio” che si abili-<br />

tano automaticamente, consente di effettuare solo accoppiate sintatticamente<br />

corrette.<br />

• errori di assegnazione <strong>dei</strong> vettori palmo e dita: <strong>per</strong> ogni fotogramma base è<br />

possibile specificare la direzione del vettore parallelo alle dita e di quello uscente<br />

dal palmo (figura 4 del capitolo IV); se ad esempio il vettore dita è diretto in<br />

avanti allora le uniche possibili direzioni del vettore palmo sono ovviamente su,<br />

giù, interno e esterno, mentre specificando avanti o dietro il motore non saprebbe<br />

come interpretare il gesto; l’editor <strong>per</strong>mette di assegnare ai vettori solo direzioni<br />

compatibili tra loro.<br />

L’editor è un’interfaccia grafica <strong>per</strong> sistemi o<strong>per</strong>ativi Win32 che fa uso della libreria<br />

MFC <strong>per</strong> la creazione e la <strong>gesti</strong>one <strong>dei</strong> controlli dell’interfaccia. Di seguito possiamo<br />

vedere un’immagine dell’editor:<br />

104


Capitolo VI, Tools di supporto<br />

Figura 10. L'editor <strong>dei</strong> <strong>gesti</strong><br />

Nella finestra di dialogo i controlli sono suddivisi in gruppi che corrispondono alle<br />

parole chiave di GestureScript (ArmX, ArmY, ArmZ, Hand, Palm, FingerBase). Il<br />

fotogramma definito nella schermata della figura 10 dà poi luogo all’esecuzione del<br />

gesto iconico “piccolo” (figura 11).<br />

105


Capitolo VI, Tools di supporto<br />

Figura 11. L'agente Greta mentre esegue il gesto iconico "piccolo".<br />

106


Capitolo VII, Conclusioni e sviluppi futuri<br />

VII.1 Conclusioni<br />

VII<br />

Conclusioni e sviluppi futuri<br />

In questa tesi abbiamo realizzato il sistema gestule dell’agente conversazionale Greta.<br />

Questo ha richiesto prima di tutto lo studio di argomenti collegati alla comunicazio-<br />

ne sociale, alla psicologia e alle scienze cognitive <strong>per</strong> risalire ai meccanismi mediante<br />

i quali avviene la comunicazione non-verbale tra <strong>gli</strong> esseri umani.<br />

Partendo da un motore <strong>per</strong> il calcolo <strong>dei</strong> movimenti di singoli <strong>gesti</strong> abbiamo intro-<br />

dotto una serie di modifiche in modo da ottenere un motore gestuale completo:<br />

• è stato creato un modulo <strong>per</strong> effettuare la scelta <strong>dei</strong> <strong>gesti</strong> da riprodurre (come<br />

detto, secondo i principi che regolano la gestualità delle <strong>per</strong>sone) e fornire lo-<br />

ro la corretta temporizzazione;<br />

• è stato implementato il calcolo <strong>dei</strong> <strong>gesti</strong> <strong>dei</strong>ttici che inizialmente non erano<br />

stati previsti;<br />

• è stata modificata la dinamica <strong>dei</strong> <strong>gesti</strong> <strong>per</strong> renderla più realistica ed è stata<br />

aggiunta la capacità <strong>per</strong> l’agente di effettuare posizioni di riposo multiple;<br />

107


Capitolo VII, Conclusioni e sviluppi futuri<br />

• è stata implementata un’applicazione <strong>per</strong> definire le pose base <strong>dei</strong> <strong>gesti</strong> in<br />

modo da rendere il sistema indipendente da qualsiasi software commerciale;<br />

• è stato implementato un editor <strong>dei</strong> <strong>gesti</strong> <strong>per</strong> semplificare la procedura di de-<br />

finizione <strong>dei</strong> <strong>gesti</strong>;<br />

• è stato creato un gestuario;<br />

• è stato implementato un BAP player che fornisce un aspetto “fisico”<br />

all’animazione calcolata dal motore;<br />

VII.2 Sviluppi futuri<br />

Il sistema dell’agente è ancora in fase di sviluppo e presto verranno implementate<br />

nuove funzionalità:<br />

• mi<strong>gli</strong>oramento della riproduzione <strong>dei</strong> <strong>gesti</strong>:<br />

− dare più espressività ai <strong>gesti</strong>;<br />

− riprodurre anche <strong>gesti</strong> con movimento circolare;<br />

• creazione automatica <strong>dei</strong> <strong>gesti</strong> – <strong>per</strong> ora l’agente può riprodurre solo i <strong>gesti</strong> pre-<br />

senti nel gestuario. In alcune situazioni <strong>per</strong>ò potrebbe essere utilizzato un proce-<br />

dimento che, esaminando l’informazione che l’agente sta comunicando verbal-<br />

mente, riesca a comporre automaticamente un gesto coerente con la conversa-<br />

zione. Ciò renderebbe molto più flessibile il tipo di impiego dell’agente.<br />

• implementazione della riproduzione della postura – l’agente <strong>per</strong> ora mantiene<br />

sempre la stessa postura mentre in futuro sarà in grado di modificarla in base<br />

all’andamento del discorso; il motore gestuale è già predisposto <strong>per</strong> effettuare il<br />

calcolo su tutti i BAP del corpo, compresi quelli che interessano la postura. An-<br />

drà introdotto un sistema di definizione delle posture e un pianificatore che si<br />

occu<strong>per</strong>à di impostare <strong>dei</strong> fotogrammi chiave <strong>per</strong> la postura. Il motore effettuerà<br />

poi lo stesso tipo di interpolazione di braccia e mani.<br />

108


Capitolo VII, Conclusioni e sviluppi futuri<br />

• implementazione di un sistema multiagente – sarà possibile attivare nello stesso<br />

ambiente virtuale più istanze dell’agente che potranno comunicare tra di loro.<br />

Questo comporterà la definizione <strong>dei</strong> <strong>gesti</strong> relativi al turn-taking e al feedback<br />

che <strong>per</strong> adesso non sono stati considerati.<br />

• rendere l’agente libero di muoversi – nel sistema attuale Greta non può spostarsi<br />

nell’ambiente virtuale in cui si trova. Verranno implementati alcuni algoritmi che<br />

<strong>per</strong>metteranno all’agente di camminare mentre si sta svolgendo la conversazione.<br />

• calcolo delle deformazioni del corpo – il BAP player visualizza il corpo di Greta<br />

utilizzando una tecnica di deformazione base che potrebbe essere raffinata te-<br />

nendo in considerazione la struttura anatomica del corpo umano.<br />

• calcolo <strong>dei</strong> vestiti – i vestiti dell’agente sono stati inseriti nel BAP player come<br />

modelli poligonali statici. In futuro i vestiti si deformeranno seguendo i movi-<br />

menti del corpo.<br />

• valutazione della credibilità del comportamento dell’agente – verranno valutate le<br />

espressioni comunicative dell’agente <strong>per</strong> controllare che siano coerenti col con-<br />

tenuto informativo che vuole comunicare e che riproducano correttamente le<br />

espressioni utilizzate nella comunicazione tra esseri umani.<br />

• valutazione dell’usabilità: andrà verificato che effettivamente <strong>per</strong> l’utente la fami-<br />

liarizzazione con il sistema è più semplice e veloce grazie al fatto che sta inter-<br />

agendo con un agente conversazionale invece che con un’interfaccia tradizionale.<br />

109


Appendice A<br />

Appendice A<br />

VII.3 Il metodo Draw della classe Joint<br />

Nella sezione 1 del paragrafo VI.3 avevamo descritto l’algoritmo sul quale è basato<br />

il metodo Draw() della classe Joint. In questo paragrafo riportiamo il codice<br />

commentato della sua implementazione nel linguaggio C++:<br />

void Joint::Draw(){<br />

//disegnare una sfera nel punto attuale, cioè nel punto da cui parte la giuntura<br />

gluSphere(gluNewQuadric(),1.0f,4,4);<br />

//OPENGL:effettuare la rotazione associata alla giuntura<br />

glRotatef(rotation.z,0.0f,0.0f,1.0f);<br />

glRotatef(rotation.y,0.0f,1.0f,0.0f);<br />

glRotatef(rotation.x,1.0f,0.0f,0.0f);<br />

//se la giuntura ha delle giunture fi<strong>gli</strong>e allora <strong>per</strong> ciscuna di esse:<br />

for(int i=0; itranslation.x,sons[i]->translation.y,sons[i]->translation.z);<br />

glEnd();<br />

//OPENGL:spostarsi nella posizione di quella fi<strong>gli</strong>a<br />

glTranslatef(sons[i]->translation.x, sons[i]->translation.y, sons[i]->translation.z);<br />

//disegnare ricorsivamente quella fi<strong>gli</strong>a e tutti i suoi successori<br />

sons[i]->Draw(jointname);<br />

//OPENGL:tornare nella posizione della giuntura attuale<br />

glTranslatef(-sons[i]->translation.x, -sons[i]->translation.y, -sons[i]->translation.z);<br />

}<br />

OPENGL:dopo aver disegnato tutte le fi<strong>gli</strong>e effettuare una rotazione opposta a quella della<br />

giuntura attuale<br />

glRotatef(-rotation.x,1.0f,0.0f,0.0f);<br />

glRotatef(-rotation.y,0.0f,1.0f,0.0f);<br />

glRotatef(-rotation.z,0.0f,0.0f,1.0f);<br />

}<br />

110


Appendice A<br />

VII.4 Il metodo ModelDraw della classe Joint<br />

Nella sezione 2 del paragrafo VI.3 avevamo descritto l’algoritmo sul quale è basato<br />

il metodo ModelDraw() della classe Joint. In questo paragrafo riportiamo il co-<br />

dice commentato della sua implementazione nel linguaggio C++:<br />

void Joint::ModelDraw(CString jointname,coord3d totaltranslation,GLfloat* vertex_new,<br />

GLfloat* normal_new){<br />

//convertire il nome della giuntura in una stringa standard c++<br />

std::string namestring(name.GetBuffer(0));<br />

//ottere il nome dell’array <strong>dei</strong> vertici associati alla giuntura<br />

int*jointVertices= GetPolySet(namestring);<br />

//e il suo numero di elementi<br />

int size= GetPolySetSize(namestring);<br />

//variabili locali<br />

int whichVertex;<br />

int i;<br />

coord3d center;<br />

Joint* prevjoint;<br />

alg3::vec3 vertex_rot;<br />

alg3::vec3 normal_rot;<br />

alg3::mat3 rotmatx(alg3::vec3(0,0,0),alg3::vec3(0,0,0),alg3::vec3(0,0,0));<br />

alg3::mat3 rotmaty(alg3::vec3(0,0,0),alg3::vec3(0,0,0),alg3::vec3(0,0,0));<br />

alg3::mat3 rotmatz(alg3::vec3(0,0,0),alg3::vec3(0,0,0),alg3::vec3(0,0,0));<br />

alg3::mat3 tempmat(alg3::vec3(1,0,0),alg3::vec3(0,1,0),alg3::vec3(0,0,1));<br />

//aggiungere la traslazione di questa giuntura alla traslazione totale, data come parametro<br />

totaltranslation.x=totaltranslation.x+this->translation.x;<br />

totaltranslation.y=totaltranslation.y+this->translation.y;<br />

totaltranslation.z=totaltranslation.z+this->translation.z;<br />

//<strong>per</strong> ruotare questa parte del corpo occorre spostarsi nel centro di rotazione locale<br />

//ed effettuare la rotazione della giuntura associata<br />

//poi il tutto va ripetuto sulle giunture fi<strong>gli</strong>e<br />

prevjoint=this;<br />

center.x=totaltranslation.x;<br />

center.y=totaltranslation.y;<br />

center.z=totaltranslation.z;<br />

//la rotazione va applicata a ritroso a tutte le giunture precedenti fino alla radice<br />

while(prevjoint!=NULL)<br />

{<br />

//calcolare tre matrici di rotazione, una intorno ad ognuno de<strong>gli</strong> assi<br />

rotmatx[0][0]=1;<br />

rotmatx[0][1]=0;<br />

rotmatx[0][2]=0;<br />

rotmatx[1][0]=0;<br />

rotmatx[1][1]=Cosine((int)(prevjoint->rotation.x));<br />

rotmatx[1][2]=-Sine((int)(prevjoint->rotation.x));<br />

rotmatx[2][0]=0;<br />

rotmatx[2][1]=Sine((int)(prevjoint->rotation.x));<br />

rotmatx[2][2]=Cosine((int)(prevjoint->rotation.x));<br />

rotmaty[0][0]=Cosine((int)(prevjoint->rotation.y));<br />

rotmaty[0][1]=0;<br />

rotmaty[0][2]=Sine((int)(prevjoint->rotation.y));<br />

rotmaty[1][0]=0;<br />

rotmaty[1][1]=1;<br />

rotmaty[1][2]=0;<br />

rotmaty[2][0]=-Sine((int)(prevjoint->rotation.y));<br />

rotmaty[2][1]=0;<br />

rotmaty[2][2]=Cosine((int)(prevjoint->rotation.y));<br />

rotmatz[0][0]=Cosine((int)(prevjoint->rotation.z));<br />

rotmatz[0][1]=-Sine((int)(prevjoint->rotation.z));<br />

rotmatz[0][2]=0;<br />

rotmatz[1][0]=Sine((int)(prevjoint->rotation.z));<br />

rotmatz[1][1]=Cosine((int)(prevjoint->rotation.z));<br />

rotmatz[1][2]=0;<br />

rotmatz[2][0]=0;<br />

rotmatz[2][1]=0;<br />

rotmatz[2][2]=1;<br />

111


Appendice A<br />

//tempmat conterrà la matrice di rotazione finale<br />

tempmat[0][0]=1;<br />

tempmat[0][1]=0;<br />

tempmat[0][2]=0;<br />

tempmat[1][0]=0;<br />

tempmat[1][1]=1;<br />

tempmat[1][2]=0;<br />

tempmat[2][0]=0;<br />

tempmat[2][1]=0;<br />

tempmat[2][2]=1;<br />

tempmat=tempmat*rotmatz;<br />

tempmat=tempmat*rotmaty;<br />

tempmat=tempmat*rotmatx;<br />

//ora <strong>per</strong> ogni vertice della parte del corpo associata a questa giuntura effettuare<br />

//la rotazione<br />

for (i=0; itranslation.x;<br />

center.y=center.y-prevjoint->translation.y;<br />

center.z=center.z-prevjoint->translation.z;<br />

}<br />

//spostarsi nella precedente e ripeti<br />

prevjoint=prevjoint->parent;<br />

}<br />

//l’algoritmo su tutti i vertici di questa giuntura è terminato, passare ora alle giunture<br />

//fi<strong>gli</strong>e<br />

for(i=0; iModelDraw(jointname,totaltranslation,vertex_new,normal_new)<br />

}<br />

112


Appendice B<br />

VII.5 Tabella <strong>dei</strong> gruppi BAP<br />

Appendice B<br />

Nel paragrafo VI.5 abbiamo descritto lo standard MPEG4/BAP [5; 17; 35; 46]. Ri-<br />

portiamo la lista completa <strong>dei</strong> gruppi BAP. Nel paragrafo successivo forniremo<br />

l’elenco <strong>dei</strong> singoli BAP (Body Modification Parameters) che appartengono ad ogni<br />

gruppo.<br />

BAP Group n. Group Description Number of BAPs<br />

1. Pelvis 3<br />

2. Left leg1 4<br />

3. Right leg1 4<br />

4. Left leg2 6<br />

5. Right leg2 6<br />

6. Left arm1 5<br />

7. Right arm1 5<br />

8. Left arm2 7<br />

9. Right arm2 7<br />

10. Spine1 12<br />

11. Spine2 15<br />

12. Spine3 18<br />

13. Spine4 18<br />

14. Spine5 12<br />

113


Appendice B<br />

15. Left hand1 16<br />

16. Right hand1 16<br />

17. Left hand2 13<br />

18. Righ thand2 13<br />

19. Global positioning 6<br />

20. Extension BAPs1 22<br />

21. Extension BAPs2 22<br />

22. Extension BAPs3 22<br />

23. Extension BAPs4 22<br />

24. Extension BAPs5 22<br />

VII.6 Elenco <strong>dei</strong> BAP in ogni gruppo<br />

Pelvis:<br />

sacroiliac_tilt, sacroiliac_torsion, sacroiliac_roll<br />

Left leg1:<br />

l_hip_flexion,l_hip_abduct,l_knee_flexion,l_ankle_flex<br />

Right leg1:<br />

r_hip_flexion,r_hip_abduct,r_knee_flexion,r_ankle_flex<br />

Left leg2:<br />

l_hip_twisting, l_knee_twisting, l_ankle_twisting,<br />

l_subtalar_flexion,l_midtarsal_flexion,l_metatarsal_flex<br />

Right leg2:<br />

r_hip_twisting, r_knee_twisting, r_ankle_twisting,<br />

r_subtalar_flexion,r_midtarsal_flexion,r_metatarsal_flex<br />

Left arm1:<br />

l_shoulder_flexion,l_shoulder_abduct,l_shoulder_twist<br />

l_elbow_flexion, l_wrist_flexion<br />

Right arm1:<br />

r_shoulder_flexion,r_shoulder_abduct,r_shoulder_twist<br />

r_elbow_flexion, r_wrist_flexion<br />

Left arm2:<br />

l_sternoclavicular_abduct, l_sternoclavicular_rotate,<br />

l_acromioclavicular_abduct, l_acromioclavicular_rot,<br />

l_elbow_twisting, l_wrist_pivot, l_wrist_twisting<br />

Right arm2:<br />

r_sternoclavicular_abduct, r_sternoclavicular_rotate,<br />

r_acromioclavicular_abduct,r_acromioclavicular_rot,<br />

r_elbow_twisting, r_wrist_pivot, r_wrist_twisting<br />

Spine1:<br />

skullbase_roll, skullbase_torsion, skullbase_tilt,<br />

vc4roll, vc4torsion, vc4tilt,vt6roll, vt6torsion, vt6tilt,<br />

vl3roll, vl3torsion, vl3tilt,<br />

Spine2:<br />

vc2roll, vc2torsion, vc2tilt,vt1roll, vt1torsion, vt1tilt,<br />

vt10roll,vt10torsion,vt10tilt, vl1roll, vl1torsion, vl1tilt,<br />

vl5roll, vl5torsion, vl5tilt<br />

Spine3:<br />

vc3roll, vc3torsion, vc3tilt,vc6roll, vc6torsion, vc6tilt,<br />

vt4roll, vt4torsion, vt4tilt,vt8roll, vt8torsion, vt8tilt,<br />

vt12roll, vt12torsion, vt12tilt,vl4roll,vl4torsion, vl4tilt,<br />

114


Appendice B<br />

Spine4:<br />

vc5roll, vc5torsion, vc5tilt, vc7roll, vc7torsion, vc7tilt<br />

vt2roll, vt2torsion, vt2tilt, vt7roll, vt7torsion, vt7tilt,<br />

vt11roll, vt11torsion, vt11tilt,vl2roll,vl2torsion, vl2tilt,<br />

Spine5:<br />

vc1roll, vc1torsion, vc1tilt, vt3roll, vt3torsion, vt3tilt,<br />

vt5roll, vt5torsion, vt5tilt, vt9roll, vt9torsion, vt9tilt,<br />

Left hand1:<br />

l_pinky1_flexion,l_pinky2_flexion,l_pinky3_flexion,<br />

l_ring1_flexion, l_ring2_flexion, l_ring3_flexion,<br />

l_middle1_flexion,l_middle2_flexion,l_middle3_flex<br />

l_index1_flexion, l_index2_flexion,l_index3_flexion,<br />

l_thumb1_flexion, l_thumb1_pivot,<br />

l_thumb2_flexion, l_thumb3_flexion<br />

Right hand1:<br />

r_pinky1_flexion, r_pinky2_flexion,r_pinky3_flexion,<br />

r_ring1_flexion, r_ring2_flexion, r_ring3_flexion,<br />

r_middle1_flexion,r_middle2_flexion,r_middle3_flex<br />

r_index1_flexion, r_index2_flexion, r_index3_flexion,<br />

r_thumb1_flexion, r_thumb1_pivot,<br />

r_thumb2_flexion,r_thumb3_flexion<br />

Left hand2:<br />

l_pinky0_flexion,l_pinky1_pivot,l_pinky1_twisting,<br />

l_ring0_flexion,l_ring1_ pivot,l_ring1_twisting,<br />

l_middle0_flexion,l_middle1_pivot,l_middle1_twist<br />

l_index0_flexion,l_index1_ pivot,<br />

l_index1_twisting,l_thumb1_twisting<br />

Right hand2:<br />

r_pinky0_flexion, r_pinky1_pivot,r_pinky1_twisting,<br />

r_ring0_flexion,r_ring1_ pivot, r_ring1_twisting,<br />

r_middle0_flexion,r_middle1_pivot,r_middle1_twist<br />

r_index0_flexion, r_index1_pivot,<br />

r_index1_twisting, r_thumb1_twisting<br />

Global positioning:<br />

HumanoidRoot_tr_vertical,HumanoidRoot_tr_lateral,<br />

HumanoidRoot_tr_frontal,HumanoidRoot_rt_turn,<br />

HumanoidRoot_rt_roll,HumanoidRoot_rt_tilt<br />

115


Appendice C<br />

VII.7 Il modello H-Anim<br />

Appendice C<br />

H-Anim è una specifica <strong>per</strong> la sintetizzazione di <strong>per</strong>sonaggi umanoidi in ambienti<br />

virtuali. L’obbiettivo è quello di creare una libreria di questi <strong>per</strong>sonaggi e <strong>dei</strong> tools<br />

<strong>per</strong> animarli.<br />

Il corpo umano può essere considerato suddiviso in una serie di segmenti connessi<br />

tra di loro (braccio, avambraccio, mano, dita). Il punto in cui due o più segmenti si<br />

congiungono è detto giuntura. Per riprodurre un corpo umano è quindi prima di tut-<br />

to necessario considerare una sua rappresentazione come gerarchia di giunzioni.<br />

Nel prossimo paragrafo vedremo il diagramma delle giunture del modello H-Anim,<br />

che ci fornisce anche le loro coordinate spaziali, riportate nell’ultimo paragrafo.<br />

116


Appendice C<br />

VII.8 H-Anim: Gerarchia delle giunture<br />

117


Appendice C<br />

VII.9 H-Anim: posizione delle giunture<br />

Per ogni giuntura il modello fornisce la traslazione (offset) rispetto alla giuntura<br />

precedente nella gerarchia. Questi offset sono stati utilizzati nella creazione dello<br />

scheletro <strong>per</strong> il modello dell’agente Greta:<br />

Joint n. Joint name Offset (dx,dy,dz)<br />

1 l_forefoot_tip 0.1354 0.0016 0.1476<br />

2 l_metatarsal_pha5 0.1825 0.0070 0.0928<br />

3 l_digit2 0.1195 0.0079 0.1433<br />

4 l_metatarsal_pha1 0.0816 0.0232 0.0106<br />

5 l_lateral_malleolus 0.1308 0.0597 -0.1032<br />

6 l_medial_malleolus 0.0890 0.0716 -0.0881<br />

7 l_sphyrion 0.0890 0.0575 -0.0943<br />

8 l_calcaneous_post 0.0974 0.0259 -0.1171<br />

9 l_knee_crease 0.0993 0.4881 -0.0309<br />

10 l_femoral_lateral_epicn 0.1598 0.4967 0.0297<br />

11 l_femoral_medial_epicn 0.0398 0.4946 0.0303<br />

12 r_forefoot_tip -0.1043 -0.0227 0.1450<br />

13 r_metatarsal_pha5 -0.1523 0.0166 0.0895<br />

14 r_digit2 -0.0883 0.0134 0.1383<br />

15 r_metatarsal_pha1 -0.0521 0.0260 0.0127<br />

16 r_lateral_malleolus -0.1006 0.0658 -0.1075<br />

17 r_medial_malleolus -0.0591 0.0760 -0.0928<br />

18 r_sphyrion -0.0603 0.0610 -0.1002<br />

19 r_calcaneous_post -0.0692 0.0297 -0.1221<br />

20 r_knee_crease -0.0825 0.4932 -0.0326<br />

21 r_femoral_lateral_epicn -0.1421 0.4992 0.0310<br />

22 r_femoral_medial_epicn -0.0221 0.5014 0.0289<br />

23 r_iliocristale -0.1525 1.0628 0.0035<br />

24 r_trochanterion -0.1689 0.8419 0.0352<br />

25 l_iliocristale 0.1612 1.0537 0.0008<br />

26 l_trochanterion 0.1677 0.8336 0.0303<br />

27 r_asis -0.0887 1.0021 0.1112<br />

28 l_asis 0.0925 0.9983 0.1052<br />

29 r_psis -0.0716 1.0190 -0.1138<br />

30 l_psis 0.0774 1.0190 -0.1151<br />

118


Appendice C<br />

31 crotch 0.0034 0.8266 0.0257<br />

32 skull_tip 0.0050 1.7504 0.0055<br />

33 sellion 0.0058 1.6316 0.0852<br />

34 r_infraorbitale -0.0237 1.6171 0.0752<br />

35 l_infraorbitale 0.0341 1.6171 0.0752<br />

36 supramenton 0.0061 1.5410 0.0805<br />

37 r_tragion -0.0646 1.6347 0.0302<br />

38 r_gonion -0.0520 1.5529 0.0347<br />

39 l_tragion 0.0739 1.6348 0.0282<br />

40 l_gonion 0.0631 1.5530 0.0330<br />

41 nuchale 0.0039 1.5972 -0.0796<br />

42 r_neck_base -0.0419 1.5149 -0.0220<br />

43 l_neck_base 0.0646 1.5141 -0.0380<br />

44 l_thumb_distal_tip 0.1982 0.8061 0.0759<br />

45 l_index_distal_tip 0.2089 0.6858 -0.0245<br />

46 l_dactylion 0.2056 0.6743 -0.0482<br />

47 l_middle_distal_tip 0.2080 0.6731 -0.0491<br />

48 l_ring_distal_tip 0.2035 0.6750 -0.0756<br />

49 l_pinky_distal_tip 0.2014 0.7009 -0.1012<br />

50 l_metacarpal_pha2 0.2009 0.8139 -0.0237<br />

51 l_ulnar_styloid -0.2142 0.8529 -0.0648<br />

52 l_metacarpal_pha5 0.1929 0.7860 -0.1122<br />

53 l_radial_styloid 0.1901 0.8645 -0.0415<br />

54 l_olecranon -0.1962 1.1375 -0.1123<br />

55 l_humeral_medial_epicn 0.1735 1.1272 -0.1113<br />

56 l_radiale 0.2182 1.1212 -0.1167<br />

57 l_humeral_lateral_epicn 0.2280 1.1482 -0.1100<br />

58 l_clavicale 0.0271 1.4943 0.0394<br />

59 l_acromion 0.2032 1.4760 -0.0490<br />

60 l_axilla_ant 0.1777 1.4065 -0.0075<br />

61 l_axilla_post 0.1706 1.4072 -0.0875<br />

62 r_thumb_distal_tip -0.1869 0.8090 0.0820<br />

63 r_index_distal_tip -0.1980 0.6883 -0.0180<br />

64 r_dactylion -0.1941 0.6772 -0.0423<br />

65 r_middle_distal_tip -0.1969 0.6758 -0.0427<br />

66 r_ring_distal_tip -0.1934 0.6778 -0.0693<br />

67 r_pinky_distal_tip -0.1938 0.7035 -0.0949<br />

68 r_metacarpal_pha2 -0.1977 0.8169 -0.0177<br />

119


Appendice C<br />

69 r_ulnar_styloid -0.2117 0.8562 -0.0584<br />

70 r_metacarpal_pha5 -0.1929 0.7890 -0.1064<br />

71 r_radial_styloid -0.1884 0.8676 -0.0360<br />

72 r_olecranon -0.1907 1.1405 -0.1065<br />

73 r_humeral_medial_epicn -0.1680 1.1298 -0.1062<br />

74 r_radiale -0.2130 1.1305 -0.1091<br />

75 r_humeral_lateral_epicn -0.2224 1.1517 -0.1033<br />

76 r_clavicale -0.0115 1.4943 0.0400<br />

77 r_acromion -0.1905 1.4791 -0.0431<br />

78 r_axilla_ant -0.1626 1.4072 -0.0031<br />

79 r_axilla_post -0.1603 1.4098 -0.0826<br />

80 suprasternale 0.0084 1.4714 0.0551<br />

81 cervicale 0.0064 1.520 -0.0815<br />

82 r_thelion -0.0736 1.3385 0.1217<br />

83 l_thelion 0.0918 1.3382 0.1192<br />

84 substernale 0.0085 1.2995 0.1147<br />

85 r_rib10 -0.0711 1.1941 0.1016<br />

86 l_rib10 0.0871 1.1925 0.0992<br />

87 rib10_midspine 0.0049 1.1908 -0.1113<br />

88 waist_preferred_post 0.2900 1.0915 -0.1091<br />

89 navel 0.0069 1.0966 0.1017<br />

120


Bibliografia<br />

Bibliografia<br />

[1] N. Badler, R. Bindiganavale, J. Allbeck, W. Schuler, L. Zhao, M. Palmer. Param-<br />

eterized action representation for virtual human agents. In "Embodied conversational<br />

characters". Cambridge MA, MIT Press, 2000<br />

[2] M. Bilvi. Progetto e sviluppo di un agente conversazionale multimodale: animazione e sincro-<br />

nizzazione <strong>dei</strong> segnali verbali e non verbali. Tesi di laurea, Università de<strong>gli</strong> Studi di<br />

Roma “La Sapienza”, 2001<br />

[3] R. Bindiganavale, N. Badler. Motion abstraction and mapping with spatial constraints.<br />

In "International workshop on Modeling and motion capture techniques for<br />

virtual environments", Ginevra, novembre 1998, pp. 70-82<br />

[4] A. Black, P. Taylor, R. Caley, R. Clark. The festival speech sinthesis system.<br />

http://www.cstr.ed.ac.uk/projects/festival/<br />

[5] T. K. Capin, E. Petajan, J. Ostermann. Efficient modeling of virtual humans in<br />

MPEG-4, In "ICME 2000", 2000<br />

[6] J. Cassell. Embodied conversation: integrating face and gesture into automatic spoken dia-<br />

logue systems. In "Spoken dialogue systems". Cambridge Ma, MIT Press, 2001<br />

[7] J. Cassell, C. Pelachaud, N. Badler, M. Steedman, B. Achorn, T. Becket, B.<br />

Douville, S. Prevost, M. Stone. Animated conversation: rule-based generation of facial<br />

expression, gesture & spoken intonation for multiple conversational agents. In<br />

"SIGGRAPH ’94", 1994, pp. 413-420<br />

[8] J. Cassell, J. Sullivan, S. Prevost, E. Churchill. Embodied Conversational Agents.<br />

Cambridge MA, MIT Press, 2000<br />

121


Bibliografia<br />

[9] D. Eberly. Key frame interpolation via splines and quaternions. http://www.magic-<br />

software.com/<br />

[10] H-anim. http://www.h-anim.org/<br />

[11] E. Hajicova, P. Sgall. The ordering principle. In "Journal of pragmatics 11", 1987,<br />

pp. 435-454<br />

[12] M. Halliday. Intonation and grammar in British En<strong>gli</strong>sh. The Hague, Mouton, 1967<br />

[13] Hao Yan. Paired speech and gesture generation in embodied conversational agents. M.S.<br />

thesis in the Media Lab. Cambridge MA, MIT Press, 2000<br />

[14] P. A. Harling, A. D. N. Edwards. Hand tension as a gesture segmentation cue. In<br />

"Progress in Gestural Interaction: Proceedings of Gesture Workshop '96",<br />

London, Springer, 1997, pp. 75-87<br />

[15] B. Hartmann, M. <strong>Mancini</strong>, C. Pelachaud. Formational parameters and adaptive proto-<br />

type instantiation for MPEG-4 compliant gesture synthesis. In "Computer Animation".<br />

Geneva, giugno 2002, IEEE Computer Society, 2002, p. 111-119<br />

[16] T. Huang, V. Pavlovic. Hand gesture modeling, analysis, and synthesis, in "Proceed-<br />

ings of the International workshop on Automatic Face and Gesture Recogni-<br />

tion", giugno 1995, pp. 73-79<br />

[17] ISO/IEC JTC 1/SC 29/WG11 N2739 subpart 2, MPEG-4 Versione 2 - BIFS,<br />

marzo 1999<br />

[18] A. Kendon. Gesticulation and speech: two aspects of the process of utterance. In "The rela-<br />

tion between verbal and nonverbal communication". The Hague, Mouton,<br />

1980, pp. 207-227<br />

[19] A. Kendon. Gestures as illocutionary and discourse structure markers in southern Italian<br />

conversation. In "Journal of pragmatics", 23, 1995, pp. 247-279<br />

[20] A. Kendon. How gestures can become like words. In "Crosscultural <strong>per</strong>spectives in<br />

nonverbal communication", F. Poyatos ed., Toronto, Hogrefe, 1988. pp. 131-<br />

141<br />

[21] A. Kendon. Movement coordination in social interaction: some examples described. In<br />

"Nonverbal communication". Oxford University Press, 1974<br />

122


Bibliografia<br />

[22] J.R. Kennaway. Synthetic animation of deaf signing gestures. In "4th International<br />

Workshop on Gesture and Sign Language Based Human-Computer Interac-<br />

tion", London, aprile 2001<br />

[23] D. H. U. Kochanek, R. H. Bartels. Interpolating splines with local tension, continuity<br />

and bias control. In "Computer Graphics (SIGGRAPH ’84 Proceedings)", 18,<br />

1984, pp. 33-41<br />

[24] S. Kopp, I. Wachsmuth. A knowledge-based approach for lifelikegesture animation. In<br />

"Proceedings of the 14 th European conference on artificial intelligence". IOS<br />

Press, 2000<br />

[25] S. Kopp, I. Wachsmuth. Model-based Animation of Coverbal Gesture. In "Proceed-<br />

ings of Computer Animation", IEEE Press, 2002, pp. 252-257<br />

[26] S. Kopp, I. Wachsmuth. Planning and motion control in lifelike gesture: a refined ap-<br />

proach. In "Computer Animation", IEEE Computer Society, 2000, pp. 92-97<br />

[27] A. Kranstedt, S. Kopp, I. Wachsmuth. MURML: A Multimodal Utterance Repre-<br />

sentation Markup Language for Conversational Agents. In "Autonomous Agents and<br />

Multi-Agent Systems", 2002<br />

[28] J. Lasseter. Principles of traditional animation applied to 3D computer animation. In<br />

"Computer Graphics (SIGGRAPH ’85 Proceedings)", 21, 1987, pp. 35-44<br />

[29] T. Lebourque e S. Gibet. High level specification and control of communication gestures:<br />

the GESSYCA system. In "Computer Animation '99", IEEE Computer Society,<br />

1999, pp. 24-35<br />

[30] J. C. Lester, S. A. Converse, S. H. Kahler, S. T. Barlow, B. A. Stone, R. S. Bho-<br />

gal. The <strong>per</strong>sona effect: affective impact of animated pedagogical agents. In "CHI", pp.<br />

1997, 359-366<br />

[31] J. C. Lester, S. G. Towns, C. B. Callaway, J. L. Voerman, P. J. Fitzgerald. Deictic<br />

and emotive communication in animated pedagogical agents. In "Embodied Conversa-<br />

tional Agents". Cambridge MA, MIT Press, 2000<br />

123


Bibliografia<br />

[32] J. C. Lester, J. Voerman, S. Towns, C. Callaway. Cosmo: a like-like animated peda-<br />

gogical agent with <strong>dei</strong>ctic believability. In "Proceedings of the IJCAI97 workshop on<br />

animated interface agents: making them intelligent", 1997, pp. 61-69<br />

[33] MAYA 4 Online Library. Alias/Wavefront, 2001<br />

[34] D. McNeill. Hand and Mind: What Gestures Reveal about Thought. University of<br />

Chicago, 1992<br />

[35] MPEG4: http://www.m4if.org/<br />

[36] OpenGL: http://www.opengl.org/<br />

[37] R. Parent. Computer animation: algorithms and techniques. Morgan Kaufmann Pub-<br />

lishers, 2002<br />

[38] V.I. Pavlovic, R. Sharma, T.S. Huang. Visual interpretation of hand gestures for hu-<br />

mancomputer interaction: a review. In "IEEE Transaction on Pattern Analysis and<br />

Machine Intelligence", vol. 19, n. 7, 1997<br />

[39] C. Pelachaud, V. Carofi<strong>gli</strong>o, B. De Carolis, F. de Rosis, I. Poggi. Embodied Con-<br />

textual Agent in Information Delivering Application. In "First International Joint Con-<br />

ference on Autonomous Agents & Multi-Agent Systems", 2002<br />

[40] C. Pelachaud, I. Poggi, B. De Carolis, F. de Rosis. Behavior planning for a reflexive<br />

agent. IJCAI - 2001, Seattle, 2001<br />

[41] K. Perlin, K., Noise, Hy<strong>per</strong>texture, Antialiasing and Gesture, in "Texturing and<br />

Modeling, A Procedural Approach". D. Ebert, Ed. Cambridge, MA, AP Profes-<br />

sional, 1994<br />

[42] J. Pierrehumbert, J. Hirschberg. The meaning of intonational Contours in the Interpreta-<br />

tion of Discourse. In " Plans and Intentions in Communication and Discours".<br />

P.R. Cohen, J. Morgan, M.E. Pollack ed. Cambridge MA, MIT Press, 1990, pp<br />

271-311<br />

[43] I. Poggi. The Semantics and Pragmatics of Everyday Gestures. C.Mueller and R.Posner,<br />

2001<br />

[44] I. Poggi, E. M. Caldognetto. A score for the analysis of gestures in multimodal communi-<br />

cation. In "Proceedings of the workshop on the integration of gesture and lan-<br />

124


Bibliografia<br />

guage in speech, applied science and engineering laboratories", Newark and<br />

Wilmington, 1996, pp. 235-244<br />

[45] I. Poggi, C. Pelachaud, E. Magno Caldognetto. Gestural Mind Markers in ECAs.<br />

In "Second International Joint Conference on Autonomous Agents & Multi-<br />

Agent Systems", 2003.<br />

[46] M. Preda, T. Zaharia, F. Prêteux. 3D body animation and coding within a MPEG4<br />

compliant framework. In "International workshop SNHC", 1999<br />

[47] S. Prillwitz, R. Leven, H. Zienert, T. Hamke, J. Henning. HamNoSys Version 2.0:<br />

Hamburg Notation System for Sign Languages: An Introductory Guide. In "International<br />

Studies on Sign Language and Communication of the Deaf". Signum Press, vol.<br />

5, 1989<br />

[48] B. Reeves, C. Nass. The Media Equation: How People Treat Computers, Television, and<br />

New Media like Real People and Places. CSLI Publications, 1996<br />

[49] K. Shoemake. Animating rotation with quaternion curves. In "Computer Graphics<br />

(SIGGRAPH ’85 Proceedings)", 19, 1985, pp. 245-254<br />

[50] T. Sowa, I. Wachsmuth. Coverbal iconic gestures for object descriptions in virtual envi-<br />

ronments: An empirical study. In "Post-Proceedings of the Conference of Gestures:<br />

Meaning and Use", 2000<br />

[51] W. Stokoe. Sign language structure: an outline of the communicative systems of the Ameri-<br />

can deaf. Linstock Press, 1978<br />

[52] H. Thimbleby. User Interface Design, Addison-Wesley, 1990.<br />

[53] K. R. Thórisson. Layered, modular action control for communicative humanoids. In Com-<br />

puter Animation ’97, IEEE Computer Society, 1997, pp. 134-143<br />

[54] XML: http://xml.coverpages.org/xml.html<br />

[55] I. Wachsmuth, S. Kopp. Lifelike Gesture Synthesis and Timing for Conversational<br />

Agents. In "Gesture Workshop 2001", pp. 120-133<br />

[56] A. Watt. 3D computer graphics. Addison Wesley, 1993<br />

[57] A. Watt, M. Watt. Advanced animation and rendering techniques. Addison Wesley,<br />

1992<br />

125


Bibliografia<br />

126

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!