• Non ci sono risultati.

Capitolo 1 Materiali e Metodi

N/A
N/A
Protected

Academic year: 2021

Condividi "Capitolo 1 Materiali e Metodi"

Copied!
32
0
0

Testo completo

(1)

Capitolo 1

Materiali e Metodi

Condurre studi cinematici e dinamici sull'arto superiore, in modo analogo a quanto fatto in precedenza sull'arto inferiore con lo studio della cammi-nata (`Gait'), è di interesse e attuale a causa delle frequenti patologie che colpiscono la spalla.

Questa tesi propone, e rende operativa, una procedura che consente di eseguire un'analisi biomeccanica di un modello dell'arto superiore in grado di simulare un movimento eseguito in laboratorio, e di stimare dei conseguenti carichi ai giunti.

Il tracking dei movimenti si avvale del sistema PhaseSpace.

La descrizione del modello biomeccanico che rappresenta la cinematica dei segmenti rigidi in gioco si avvale del software OpenSim.

L'analisi del modello, e quindi in particolare la stima dei carichi ai giunti, si avvale del software Matlab, e delle varie possibilità oerte da OpenSim sia di essere interfacciato con Matlab, che adattato a problematiche speciche.

Di seguito viene prima descritta la procedura generale seguita, e succes-sivamente viene spiegato in dettaglio ogni singolo step.

1.1 Procedura generale

La procedura generale prevede principalmente le seguenti fasi (gura 1.1): 1. Marker set e Task: fase preliminare per la scelta dei task da far eseguire

e la denizione del marker set.

2. Fase sperimentale (mediante sistema di motion capture PhaseSpace): acquisizione dei dati antropometrici del soggetto e dei dati cinematici per i task in esame.

(2)

3. Fase di elaborazione dati: ltraggio e conversione in un formato leggi-bile dal modello virtuale in OpenSim (`M-les' Matlab).

4. Fase di Scale: scalatura modello virtuale e simulazione della posa statica del soggetto (Matlab-OpenSim).

5. Fase di simulazione cinematica e dinamica: utilizzo di Tool in OpenSim per stimare le forze muscolari e determinare la forza di reazione al giunto GH.

Figura 1.1: Fasi della procedura generale

1. Marker set e Task (capitolo ??, paragrafo ??): Attraverso un'indagine della letteratura, sono stati individuati dei task di riferimento in grado di riprodurre un ampio range di movimento delle articolazioni della spalla, come mostrato in capitolo ??, paragrafo ??.

Sono state denite due tipologie di marker set: anatomico e tecnico. Il primo viene utilizzato per scalare il modello, mentre il secondo consen-te di ricavare le informazioni sul movimento. Il marker set anatomico è costituito da LED liberi posti direttamente sulla pelle del sogget-to1. Il marker set tecnico, invece, è costituito da cluster di LED posti

su supporti rigidi di tipo `stella' o di tipo `placchetta'. Questi sono dettaglianti nel capitolo ??, paragrafo ??.

1Per fornire maggiore chiarezza all'esposizione della procedura, verrà indicato con il

termine `LED' il marker sperimentale posto sul soggetto e con il termine `Marker' il marker virtuale posto sul modello.

(3)

I marker set sperimentali e virtuali devono combaciare al termine della procedura di scalatura del modello OpenSim.

Una volta ottenuto il modello scalato si avrà a che fare con un unico marker set virtuale costituito dall'unione dei marker set anatomici e tecnici.2.

2. Fase sperimentale (paragrafo 1.2): Il sistema PhaseSpace è in grado di acquisire le coordinate dei LED espresse nel sistema di riferimento del laboratorio, salvandole in un le di tipo 'c3d', considerato uno standard nell'analisi del movimento. Si registrano le `.c3d' per i vari task e per la static pose.

3. Fase di elaborazione dati (paragrafo 1.4): I dati cinematici acquisi-ti sono staacquisi-ti elaboraacquisi-ti con un codice custom (due `M-le') in Matlab, chiamato `PS2OS', che ha utilizzato sia alcune funzioni della Toolbox Matlab OpenSim pipeline che funzioni implementate ad hoc. Il codice Matlab consente di ottenere le leggibili in OpenSim, avendo come in-put dei le di setting (`.xml') per i Tool di OpenSim da utilizzare e un modello muscolo-scheletrico virtuale (`.osim') da scalare. `E opportuno notare che il modello di arto superiore implementato in OpenSim deve essere dotato dei Marker che costituiscono i marker set anatomici e tec-nici virtuali per poter utilizzare le funzioni dello Scale Tool e all'Inverse Kinematics Tool dei OpenSim.

4. Fase di Scale: Nella fase di scalatura i marker virtuali anatomici sul modello vengono usati per scalarlo sulle dimensioni del soggetto por-tandoli a sovrapporsi a quelli sperimentali. In particolare, per ottenere il modello scalato (`_SCALED.osim') è necessario fornire in input un le `.c3d' con dati ottenuti in una acquisizione statica. Lo Scale Tool viene fatto girare mediante apposite linee di comando in Matlab. 5. Fase di simulazione cinematica e dinamica: Anche l'Inverse Kinematics

Tool viene fatto girare in Matlab. Deve essere, però, fornito al codice `PS2OS' Matlab il le `.c3d' relativo alla registrazione dinamica. A questo punto è possibile importare il modello scalato in OpenSim, eseguire la simulazione del task ed utilizzare gli altri Tool di OpenSim per l'analisi dinamica (Analyze Tool), che consentono di stimare le forze muscolari e la forza di reazione al giunto gleno-omerale.

2Ottenuto il modello scalato in base alle dimensioni del soggetto, per riferirci ai marker

(4)

1.2 PhaseSpace Motion Capture

Il PhaseSpace è un sistema a LED attivi (IR), che esegue analisi del movimento in real-time (gura 1.2).

Figura 1.2: Laboratorio di motion capture con sistema PhaseSpace.

La congurazione PhaseSpace disponibile nel Laboratorio di Robotica del Dipartimento d Ingegneria Civile e Industriale, è dotata di di 10 tele-camere ad infrarossi con una frequenza di campionamento massimo di 480 Hz. I LED hanno dimensioni ridotte di qualche mme sono raggruppato in gruppetti da otto. Il sistema è composto anche da una parte software che consente acquisizione e in parte elaborazione dei dati (ad esempio visualizzare le registrazione avvenute).

Prima di procede con le registrazioni dei task è necessario eseguire, i seguenti step3:

I) la calibrazione in cui il sistema acquisisce le informazioni sul volume in cui verranno disposti i LED;

II) la denizione del sistema di riferimento del laboratorio.

Tali operazioni sfruttano una bacchetta strumentata `wand'4 che il

siste-ma riconosce autosiste-maticamente.

3La procedura eseguita in laboratorio per garantire la messa in funzione del sistema,

sarà descritta in dettaglio in un successivo lavoro di tesi a cura della Dott.ssa Giulia Lazzari.

(5)

Per questo lavoro di tesi sono state utilizzati gli strumenti di calibra-zione (`calib') e master (`master') del software PhaseSpace5. La prima ha

consentito la calibrazione e l'allineamento e la seconda la registrazione delle coordinate dei LED nel tempo.

Ogni LED ha una etichetta (ID) associata di default da PhaseSpace. Le ID sono numerate a partire da 0 no al `numero di LED utilizzati -1' (ad esempio M000, M001,...,M0039 con 40 LED).

I LED possono essere oscurati per qualche istante della registrazione, da altre parti del corpo. In corrispondenza dei frame in cui le telecamere non acquisiscono informazioni riguardanti un determinato LED, il sistema PhaseSpace associa il valore 0.

Il PhaseSpace è stato utilizzato inizialmente per eseguire delle prove test preliminari su oggetti rigidi. Tali prove sono servite a prendere familiarità con il sistema di motion capture, per determinare il settaggio ottimale dei parametri da utilizzare durante le acquisizioni (ad esempio la frequenza di acquisizione massima) e per valutare i dati ottenuti (errore di misura).

Le prove preliminari sono riportate in Appendice B.

1.3 OpenSim

OpenSim 3.2 è un software opensource6 che mette a disposizione

dell'u-tente dei modelli del sistema muscolo-scheletrico e consente la creazione di simulazioni dinamiche del movimento.

La OpenSim Community propone diversi modelli del sistema muscolo-scheletrico dell'arto superiore. I modelli di spalla più semplici o in grado di eseguire solo elaborazioni cinematiche sono stati scartati a priori. Uno studio più accurato è stato condotto sui modelli ritenuti più interessanti e possibilmente applicabili alla studio da condurre.

1.3.1 Modello selezionato

Lo studio dei modelli implementati in OpenSim ha permesso di selezionare uno dei modelli presentati (vedi capitolo ??, paragrafo 1.3) e di apportare delle modiche, in modo da rispettare le esigente di questo caso studio.

Il modello selezionato è il Dynamic Arm simulator (DAS3) in gura 1.3. Le modiche apportate al modello cinematico del DAS3, sono state le seguenti:

5Il software PhaseSpace mette a disposizione anche altre unità per consentire la

manipolazione dei dati acquisiti, ad esempio `paint' e `scope2'.

(6)

Figura 1.3: Modello di arto superiore `DAS3' implementato in OpenSim. Nel riquadro a sinistra dell'immagine sono riportati i corpi del modello DAS3.

• togliere i corpi ttizi, privi di massa ed inerzia;

• introdurre giunti sferici (3 GDL) al posto di tre coppie rotoidali (1 GDL rotazione) e denire la sequenza di rotazioni;

Il nostro modello, denominato `upper_limb', è costituito complessivamente da otto corpi (ground, torace, clavicola, scapola, omero, radio, ulna, mano) ed ha complessivamente 11 gradi di libertà.

Per quanto riguarda il modello muscolare è stato mantenuto il modello `Thelen2003Muscle' implementato nel modello DAS3, con i relativi valori di default dei parametri.

1.3.2 File OpenSim

Il software OpenSim lavora con le di diversa estensione, con una strut-tura ben denita a seconda della informazione contenuta.

Le estensioni dei le OpenSim utilizzati in questo lavoro sono principal-mente i seguenti:

• `.osim': le dove è denito il modello muscolo-scheletrico (corpi, giunti, muscoli).

(7)

• `.mot': le che contiene i valori degli angoli ai giunti ad ogni frame; la prima colonna è solitamente `time' e deve riportare i valori uniforme-mente spaziati. Tale colonna può però contenere anche quantità diverse dal tempo.

• `.sto': le che riporta varie tipologie di informazioni (movimento, forze, valori di attivazioni muscolari); dierenze dal `.mot', la colonna del tempo non deve avere valori uniformemente spaziati e la prima colonna

(8)

deve contenere obbligatoriamente il tempo. Un esempio del le `.sto' è riportato in gura.

• `.xml': le che contiene informazioni di setting o di setup dei Tool di OpenSim;

In openSim per comunicare informazioni di vario genere, come settaggio di Tool, task particolari, aggiungere speciche ad una analisi o al calcolo che si vuole condurre, vengono utilizzati le `.xml'7. Ogni tipologia di informazione

è riportata in un `tag' predenito. Per ogni Tool è necessario fornire appositi le `.xml' di setup.

Ad esempio nello Scale Tool è necessario denire le coppie di Marker in base ai quali vogliamo valutare il fattore di scala da applicare, tali cop-pie vengono indicate in un le `.xml' in corrispondenza del tag `markers' appartenente alla sezione `MarkerPair' come mostrato in gura ??.

(9)

1.3.3 OpenSim Tool studiati

OpenSim mette a disposizione diversi Tool che consentono di eseguire calcoli e stime sui parametri dei modelli del sistema muscolo-scheletrico.

Nella terza fase della procedura relativa all'analisi cinematica, si vuole scalare il modello ed eseguire cinematica inversa per determinare la posa statica.

La quarta fase della procedura, invece, prevede un'analisi di tipo dinamico del modello muscolo-scheletrico di arto superiore.

`

E possibile eseguire, ad esempio, dinamica inversa per calcolare le coppie agenti sui giunti. Per avere una stima della forza di reazione tra scapola e omero, invece, è necessario prima conoscere le forze muscolari agenti sul giunto d'interesse.

Il software OpenSim mette a disposizione diversi Tool che consentono di eseguire la scalatura del modello e una sua analisi di tipo cinematico e dina-mico. I Tool sono utilizzabili sia in OpenSim mediante apposite `Graphical User Interface' (GUI) che mediante `Command-line Execution' da lanciare in Matlab.

In questo lavoro di tesi la parte relativa alla scalatura e alla cinematica inversa è stata condotta utilizzando le `Command-line Execution' in Matlab degli appropriati Tool di OpenSim. La parte relativa allo studio dinamico del modello, invece, è stata condotta direttamente in OpenSim utilizzando le GUI dei Tool di interesse.

Per la terza fase della procedura sono stati utilizzati per mezzo di comandi Matlab, i seguenti Tool di OpenSim:

• Scale Tool, per la scalatura del modello;

• Inverse kinematics Tool, per la cinematica inversa.

Per lo studio dinamico del modello sono stati utilizzati, direttamente in OpenSim, i seguenti Tools:

• Inverse Dynamics Tool, per valutare le coppie ai giunti;

• Static Optimization Tool, Analyze Tool (impostato sulla Static Optimi-zation Analyses) e Computed Muscle Control Tool (CMC), per stimare le forze muscolari;

• Tool Analyze (impostato sulla Joint Reaction Analyses), per il calcolo delle forze di reazione.

Il contributo fornito dai muscoli durante il movimento simulato viene valutato per mezzo di un processo di ottimizzazione. Ciò può essere fatto in OpenSim

(10)

con lo Static Optimization Tool, con l'Analyze Tool (impostato sulla Static Optimization Analyses) e con il Computed Muscle Control Tool (CMC).

La dierenza tra CMC Tool e Static Optimization Tool si ha nel fat-to che quest'ultimo fornisce una soluzione frame by frame del problema di distribuzione delle forze muscolari. Il CMC Tool, invece, tiene conto delle di-namiche del sistema e i risultati garantiscono una continuità tra le eccitazioni (o controlli) muscolari.

L'Analyze Tool consente di eseguire vari tipi di analisi di dati, in que-sto studio l'attenzione è rivolta all'analisi di ottimizzazione statica (Static Optimization Analyses) e all'analisi delle reazioni ai giunti (Joint Reaction Analyses). Questi Tools in una fase preliminare, sono stati utilizzati in mo-do analogo per tutti e quattro i modelli OpenSim messi a disposizione degli utenti (Upper Extremity Dynamic Model (UEDM), Delft Shoulder and El-bow Model (DSEM), Dynamic Arm Simulator (DAS3) e Dynamic Arm Si-mulator Modicato (MS)), fornendo in input un movimento test (Appendice B).

In seguito verrà riportata la descrizioni dei Tool relativi alla parte di-namica, utilizzati per mezzo della GUI direttamente in OpenSim. Come esempio applicativo dei Tool dinamici viene riportato il caso del modello di arto superiore Dynamic Arm Simulator (DAS3).

La descrizione relativa ai Tool della scalature e della parte cinematica, viene riportata nel paragrafo successivo (1.4) dove verrà descritta la parte della procedura che prevede l'utilizzo di Matlab.

Inverse Dynamics Tool

L'Inverse Dynamics Tool permette di eseguire su un modello un'analisi di dinamica inversa, ossia valutare le forze e le coppie ai giunti che hanno causato un determinato movimento.

INPUT :

 le `.osim' contenente il modello di OpenSim scelto per la simula-zione;

 le `.mot' contenente dati del movimento;

 le `.xml' contenente le forze esterne agenti sul modello; OUTPUT :

 le `.sto' contenente i valori delle forze e delle coppie ai giunti del modello calcolate nel tempo.

(11)

A livello operativo nella GUI, attraverso il menu a tendina `Tools', è stata selezionata la nestra Inverse Dynamics Tool che permette l'accesso al `Main Settings' del Tool. `E stato compilato inserendo il le di input del task e la Directory dove salvare gli output.

Nella gura sottostante è riportato a titolo di esempio, il movimento test di abduzione per il modello DAS3 (T = 1 s).

Per quanto riguarda la nestra `External Loads' è possibile mantenere la congurazione di default del Tool poiché, l'unica forza esterne agente sul modello considerata, è la gravità.

Per riuscire a valutare i risultati forniti nel le di output dall' Inverse Dynamics Tool, è possibile eseguire un plot per ogni modello dell'andamento nel tempo della coppia al giunto responsabile del movimento.

Static Optimization Tool

Lo Static Optimization Tool consente di eseguire una ottimizzazione sta-tica, quindi un'estensione della dinamica inversa capace di risolvere le equa-zioni del momento ai giunti, considerando le forze muscolare ad ogni istante di tempo. Le forze muscolari vengono stimate mediante la minimizzazione di una funzione obiettivo costituita dalla somma dei quadrati delle attivazioni muscolari.

INPUT :

 le `.osim' contenente il modello di OpenSim scelto per la simula-zione;

 le `.mot' contenente i dati cinematici dei giunti che descrivono il movimento del modello;

(12)

 le contenente gli stati del sistema dinamico;  le contenente le forze esterne agenti sul modello; OUTPUT :

 le `.sto' contenente una stima delle forze muscolari al variare del tempo (le da fornire come input al Analyze Tool per valutare la Joint Reaction)

 le `.sto' contenente i valori delle attivazioni muscolari nel tempo. Nella GUI si accede allo Static Optimization Tool mediante il solito menu a tendina `Tools'.

In questo caso è suciente completare solamente la prima schermata che si presenta, `Main Settings'. La schermata relativa agli attuatori e alle forze esterne (`Actuators and External Loads') è mantenuta nella congurazione di default, dato che agisce solo la forza peso come forza esterna.

In input è possibile fornire sia il le `.mot', che i valori degli stati del sistema.

Nel manuale, negli esempi applicativi e nel tutorial trovati sul website di OpenSim relativi allo Static Optimization Tool, viene fornito come input il le del movimento. Il `Tools' che esegue l'ottimizzazione statica, ricava auto-nomamente dalle informazioni sul movimento, le forze incognite del modello rispettando le condizioni imposte sulle attivazioni muscolari (minimizzazione della funzione obiettivo).

Nella sezione di output deve essere specicata la Directory dove lo Static Optimization Tool di OpenSim andrà a salvare i les di uscita prodotti, e la precisione con cui vogliamo valutare i dati (in questo caso pari a 3).

La schermata compilata ad esempio per il modello DAS3 è quella riportata in gura.

(13)

Tra i les di output dello Static Optimization Tool, interessa quello che contiene i valori delle forze muscolari al variare del tempo (ad esempio per DAS3 il le `DSEM_StaticOptimization_force.sto'); questo dovrà essere uno degli input del Analyze Tool impostato per eseguire l'analisi di Joint Reaction.

Computed Muscle Control Tool

Lo scopo del Computed Muscle Control (CMC) consiste nel calcolare un set di eccitazioni muscolari che guidino il modello muscolo-scheletrico in modo che segua una cinematica desiderata.

INPUT :

 le `.osim' contenente il modello di OpenSim scelto per la simula-zione;

 le `.mot' contenente i dati della cinematica desiderata;  le contenente le forze esterne agenti sul modello;

 le `.xml' dei `Tracking Tasks' dove sono specicate gli angoli ai giunti la cui cinematica deve essere seguita e i relativi pesi assegnati;

(14)

 le `.xml' degli `Actuators' che contiene gli attuatori di riserva (coppie addizionali al giunto che intervengono se necessario in modo da garantire la simulazione);

 le `.xml' dei `Control Constraints' che contiene i limiti massimi e minimi delle eccitazioni per gli attuatori del modello (muscoli e attuatori di riserva);

OUTPUT :

 le `.sto' contenente i valori delle forze muscolari ai giunti del modello calcolate nel tempo;

 le `.sto' contenente i valori dei segnali di eccitazione muscolare e di controllo degli attuatori di riserva;

 le `.sto' contenenti i valori degli stati del modello e degli stati muscolari corrispondenti al movimento simulato (angoli e velocià angolari, lunghezze delle bre muscolari e attivazioni).

I le di input vengono generalmente forniti mediante il le di setup, un le `.xml' per gestire i parametri utilizzati dall'algoritmo del CMC.8

Il Tool CMC fornisce in output altri le che, però, non sono rilevanti nel nostro studio.

Come per tutte gli altri Tools della GUI, si accede al CMC dal menu a tendina `Tools' in cui viene selezionata la voce `Computed Muscle Control'. Il Tool può essere compilato caricando il le di setup, oppure inserendo manualmente i dati opportuni.

Nella nestra `Main Settings' devono essere specicati nella sezione input i les della `Desired kinematics' e del `Tracking Tasks' e nella sezione output la directory dove devono essere salvati i risultati, insieme alla precisione di calcolo richiesta (vedere in gura).

8I modelli utilizzati come esempio per i les `Tracking Tasks', `Actuators' e `Control

(15)

Nella nestra `Actuators and External Loads' (sezione `Actuators'), viene inserito il le contenente le denizioni delle forze addizionali applicate ai giunti del modello (gure sotto).

(16)

Le parti rimanenti dell'interfaccia del CMC Tool rimangono nella con-gurazione di default.

Uno dei le di output fornito dal CMC Tool riporta i valori delle forze muscolari. Tale le deve essere fornito in input al Analyze Tool impostato per eseguire l'analisi di Joint Reaction.

Analyze Tool

L'Analyze Tool consente l'analisi di un modello o di una simulazione basata su una serie di input come i valori degli stati, dei controlli e delle forze esterne agenti sul modello. Ad esempio l'Analyze Tool può essere utilizzato per analizzare una simulazione già avvenuta senza dover nuovamente eseguire la simulazione.

In questo caso studio in particolare dell'Analyze Tool della GUI vengono utilizzate:

• Static Optimization Analysis per valutare le forze muscolari esercitate sui giunti durante il movimento;

• Joint Reaction Analysis per stimare la forza di reazione ai giunti, considerando le forze muscolari agenti.

Static Optimization Analysis L'Analyze Tool può essere utilizzato per eseguire una Static Optimization Analysis. Questo strumento consente di analizzare i risultati ottenuti in seguito ad un processo di ottimizzazione statica.

(17)

Gli input e gli output ottenuti sono gli stessi forniti allo Static Optimiza-tion Tool (vedi paragrafo 1.3.3).

Analogamente allo Static Optimization Tool, questo Tool consente di ot-tenere una stima delle forze muscolari agenti durante il movimento, per poter valutare la reazione al giunto gleno-omerale eseguendo una Joint Reaction Analysis.

Lo Static Optimization Analysis Tool viene però solitamente utilizzato come strumento di analisi, e non di vero e proprio calcolo.

Le simulazioni vere e proprie, che consentono di ottenere i valori delle forze muscolari agenti, vengono eseguite generalmente con lo Static Optimization Tool e con il Computed Muscle Control Tool.

Operativamente si accede alla schermata Analyze Tool mediante il solito menu `Tools' e `Analyze'.

Dato che nel caso studio, non ci sono attuatori o forze esterne agenti sul modello, interessa compilare solo le schermate del Analyze Tool relative agli input e output (`Main Settings') e al tipo di analisi da eseguire (`Analyses'). Nel `Main Settings' nella sezione di input, deve essere caricato il le `.mot' contenente i dati del movimento; nella sezione output va specicata alla voce Directory la cartella in cui verrà salvato il le di output del Tool (vedi gura).

(18)

Per selezionare la tipologia di analisi da eseguire, è necessario accedere alla schermata `Analyses' e cliccare su `Add>'. In questo caso interessa scegliere Static Optimization (vedi gura).

`

E quindi necessario selezionare la voce `Static Optimization' e successiva-mente il bottone `Edit' per poter variare i parametri di defaul del Tool (vedi gure seguenti).

(19)
(20)

Joint Reaction Analysis L'Analyze Tool viene utilizzato in questo caso per eseguire una Joint Reaction Analysis, che consiste nel valutare le forze e i momenti agenti sui giunti del modello.

Viene eseguita un'analisi sequenziale, partendo dal link del modello più lontando dal riferimento no ad arrivare a quello prossimale. Per ogni corpo del modello viene ricavata l'espressione della reazione prossimale risolven-do l'equazione di equilibrio del corpo, consideranrisolven-do tutte le forze agenti (ad esempio forze esterne, forze muscolari, forze di vincolo, forza peso). La rea-zione trovata constituirà la rearea-zione distale del corpo successivo da studiare, e contribuirà a valutare la nuova reazione al giunto prossimale no ad arrivare al giunto relativo al ground.

La funzione Joint Reaction calcola le forze e i momenti risultati che i giunti devono sopportare in risposta al movimento e a tutte le forze agenti sul modello, incluse le forze muscolari, i motori e tutti gli attuatori.

L' Inverse Dynamics Tool, invece, valuta le forze ai giunti cosiderando esclusivamente il movimento e le forze esterne agenti sul modello. L'azione

(21)

dei muscoli, dei motori e degli attuatori non viene considerata nell'analisi di dinamica inversa.

INPUT :

 le `.osim' contenente il modello di OpenSim scelto per la simula-zione;

 le `.mot' contenente i dati cinematici dei giunti che descrivono il movimento del modello oppure le `.sto' con gli stati del sistema dinamico;

 le `.xml' contenente le forze esterne agenti sul modello;  le `.sto' contenente le forze muscolari nel tempo; OUTPUT :

 le `.sto' contenente i valori delle componenti della forza e del momento di reazione ad ogni giunto del modello.

Per accedere al Analyze Tool dalla GUI, la procedura da seguire è analoga a quella descritta nel paragrafo precedente (vedi paragrafo 1.3.3).

In questo caso, però, si vuole valutare la reazione ai giunti, quindi è necessario selezionare la voce Joint Reaction e cliccare su `Edit' per poter accedere alle proprietà del Tool (vedi gura 1.4 e gura 1.5).

Nella nuova nestra `Property Editor' è necessario introdurre alla voce `forces_le' il le contenente le forze muscolare ottenuto dall'ottimizzazione statica, ad esempio per il modello DAS3 nel caso dell'utilizzo dello Static Optimization Tool, `DSEM_StaticOptimization_force.sto'9.

`

E necessario adeguare il range di tempo dell'analisi di reazione al giunto a quello del le contenente le forze muscolari.

Le altre voci della nestra consentono di scegliere se analizzare solo qual-che giunto del modello, su quale corpo applicare la reazione e in quale frame. In questo caso vengono lasciate invariate le impostazioni di default che pre-vedono: analisi su tutti i giunti, reazioni applicate sul corpo del `glio' e le componenti espresse nel sistema di riferimento del ground (vedi gura 1.5).

Una volta eseguita l'analisi viene creato un le contenente le tre compo-nenti della forza di reazione e del momento ai giunti selezionati nel modello (per DAS3 `DAS3_JointReaction_ReactionLoads.sto').

La reazione d'interesse, in questo caso, è la forza applicata al giunto gleno-omerale esercitata dalla scapola (corpo `padre') sull'omero (corpo `glio').

9Deve essere inserito il percorso completo per raggiungere il le `.sto', non è suciente

(22)

Figura 1.4: Selezione della funzione Joint Reaction nell' Analyze Tool. Il Joint Reaction Analysis Tool mediante la GUI, può essere utilizzato nel caso in cui siano stata eseguita un'analisi delle forze muscolari agenti mediante la `Command-line Execution' dello Static Optimization Tool in Matlab.

1.4 Elaborazione dati PhaseSpace

Il passaggio tra i dati ottenuti dal PhaseSpace e le elaborazioni in Open-Sim, è stato possibile grazie all'implementazione di una routine Matlab. Tale codice utilizza funzioni custom e funzioni appartenenti alla Toolbox `Matlab-OpenSim Pipeline' che consentono la creazione di le in un formato leggi-bile da OpenSim. `E stato inoltre possibile far girare in Matlab dei Tool di OpenSim per mezzo delle relative `Command-line Execution'.

La OpenSim Community mette a disposizione degli utenti dei pacchetti Matlab, che consentono di trasformare i dati ottenuti da sistemi di analisi del movimento in formato `.c3d' in le leggibili da OpenSim (`.trc', `.mot', `.sto', `.xml').

(23)
(24)

Tra i vari Tool proposti dalla Community per preparare dati di analisi del movimento sono stati studiati il `Gait Extract Toolbox' e il `Matlb OpenSim Pipeline Tool'. Tra i due, quest'ultimo è stato considerato più idoneo per questo studio di tesi.

1.4.1 Matlab OpenSim Pipeline Tool

Il Matlab OpenSim Pipeline Tool contiene funzioni utili per processare dati `.c3d' e creare le `.trc' e `.xml' di setting per far girare i Tool di Open-Sim (Scale Tool, Inverse Kinematics, Static Optimization) direttamente dalle linee di comando in Matlab.

Le funzioni presentate di seguito, richiamano altre due Toolbox di Matlab; la `BTK' che serve per leggere e manipolare dati contenuti nel le `.c3d' e la `xml_toolbox' che crea le `.xml'.

La Toolbox Matlab OpenSim Pipeline consente di creare le `.xml' di setup anche per le altre Tool di OpenSim (ad esempio Inverse Dynamic Tool e Computed Muscle Control Tool).

Le funzioni della Matlab OpenSim Pipeline Tool che sono state richiamate dagli `M-le' custom (`Statico.m' e `Dinamico.m') scritti per questo lavoro di tesi sono:

• 'btk_loadc3d.m': riceve in input il le `.c3d' contentente i dati del-le registrazioni eseguite con PhaseSpace e fornisce in output un og-getto struttura i cui campi (e sottocampi) contengono le informazioni contenute nel le `.c3d';

• 'btk_c3d2trc.m': converte i dati contenuti nella struttura creata dalla funzione 'btk_loadc3d' (relativi al le `.c3d') nei formati `.trc' e `.mot' leggibili da OpenSim;

• 'load_st_le.m': crea un oggetto struttura dove vengono caricate i dati e le etichette delle colonne contenuti nei le `.mot' (o `.sto') forniti in input alla funzione;

• 'setup_scale.m': crea il le di setup (`Setup_Scale.xml') per lo Scale Tool di OpenSim basandosi sui dati del le `.c3d' e i nome dei le del modello `.osim' da scalare;

• 'setup_InverseKinematics.m': crea il le di setup (`Setup_IK.xml') per l'Inverse Kinematics Tool di OpenSim basandosi sui dati del le `.c3d' e i nomi dei le del modello scalato (`_SCALED.osim') usato per simulare il movimento;

(25)

• 'setup_StaticOptim.m': crea il le di setup (`Setup_StaticOptim.xml') per lo Analyze Tool di OpenSim che esegue ottimizzazione statica, rice-vendo in input il modello scalato (`_SCALED.osim') e le informazioni del le `.mot' del task da questo simulato.

Nella funzione del le 'btk_loadc3d.m' è stata tolta la parte relativa alle piattaforme di forza poichè non presenti in questo studio. In tale le è sta-to, inoltre, settato il nome del soggetto (`Dalia') nella sezione relativa alle informazioni del soggetto.

Nel le 'btk_c3d2trc.m' è stato solamente commentata la parte relativa alla trasformazione tra il sistema di riferimento del laboratorio e sistema di riferimento di OpenSim. In questo lavoro sono state denite appositamen-te due funzioni per eseguire la trasformazione tra il sisappositamen-tema di riferimento del PhaseSpace e quello di OpenSim. Una funzione di trasformazione è sta-ta scritsta-ta per l'acquisizione ssta-tatica (`sdrstella.m') e una per la registrazione dinamica del task (`sdrstella_din.m').

Scaling

Nel le 'setup_scale.m' sono stati annullati i campi `Massa' e 'Altezza' relativi ai dati del soggetto per poterli settare direttamente da `M-le' dove viene lanciata tale funzione (`Statico.m').

In input alla funzione 'setup_scale.m' devono essere forniti: - l'oggetto struttura contenente i dati del le `.c3d' statico; - il modello `.osim' da scalare (ad esempio `upper_limb.osim');

- les `.xml' di setting dello Scale Tool, come il `_MeasurementSet.xml' per impostare la modalità di scalatura e lo `_Scale_Tasks.xml' per indicare i marker utili a valutare la posa statica;

- parametri addizionali (ad esempio massa, altezza, nome).

Il software OpenSim consente di eseguire tre metodi di scalatura del model-lo muscomodel-lo-scheletrico: scalatura basata sulle misure, scalatura manuale e scalatura delle masse.

Durante il processo di scalatura basata sulle misure, le dimensioni di ciascun segmento del modello sono scalate in modo che le distanze dei marker virtuali del modello (ad esempio `upper_limb.osim') siano corrispondenti a quelle dei marker sperimentali. In questo modo, le distanze tra coppie di LEDs messe in relazione alle distanze delle coppie corrispondenti di marker virtuali, consentono di determinare un fattori di scala. Le coppie di marker

(26)

da utilizzare per calcolare il fattore di scala vengono indicate allo Scale Tool nel le `_MeasurementSet.xml'.

Il fattore di scala complessivo è la media dei fattori di scala di tutte le coppie denite nel le `_MeasurementSet.xml'.

Lo Scale Tool scalando il modello, porta i Marker virtuali a coincidere con quelli sperimentali (LED).

Il modello viene posizionato in modo da rappresentare al meglio la po-sizione statica del soggetto. Si ha la risoluzione di un problema di cine-matica inversa, ossia vengono determinare le variabili di giunto (angoli per le varie articolazioni) che deniscono la static pose del modello. Nel le `_Scale_Tasks.xml' vengono indicati i Marker virtuali su cui eseguire tale operazione.

Le linee di comando Matlab utilizzate per lanciare lo Scale Tool, sono riportate di seguito.

com=['scale -S' RA_static_pose.Name '_Setup_Scale.xml']; system(com);

Nella variabile 'com' deve essere indicato: il tipo di Tool che si vuole utilizzare ('scale -S' per lo Scale Tool), il nome contenuto nella struttura dove sono sono caricati i dati del le `.c3d' (RA_static_pose.Name) e il le di setup del Tool OpenSim ('_Setup_Scale.xml') creato in precendenza dalla funzione Matlab 'setup_scale'.

La stringa 'system(com)' consiste, invece, nel vero comando il grado di lanciare la Tool di OpenSim.

Linee di comando analoghe si possono utilizzare per gli altri Tool. Per far girare alcuni Tool di OpenSim è stata utilizzata la modilità `Command-line Execution' in Matlab, per poter monitorare il processo di calcolo del Tool ed eventualmente poter manipolare i dati. Ciò non è possibile quando viene utilizzato il Tool mediante l' interfaccia graca.

Cinematica Inversa (IK)

Per quanto riguarda il 'setup_InverseKinematics.m' sono invece richiesti: * l'oggetto struttura contenente i dati del le `.c3d' dinamico;

* il modello `_SCALED.osim' ottenuto in output dalla processo di sca-lature (ad esempio `Dalia_SCALED.osim');

* le `.xml' di setting del Inverse Kinematics Tool,

come il `_Setup_InverseKinematics.xml' per denire i marker su cui basare la cinematica inversa;

(27)

* parametri addizionali (ad esempio accuratezza, istante iniziale o nale). L'Inverse Kinematics Tool ad ogni frame calcola i valori delle coordinate che permettono al modello di assumere la `migliore posa' che consenta di far combaciare i valori dei marker virtuali con i marker sperimentali (coordinate dei LED fornite da PhaseSpace per ogni frame del task registrato). La mi-gliore corrispondenza si ottiene mediante un metodo di minimizzazione dei quadrati tra le posizioni dei marker sperimentali e i corrispondenti marker del modello.

Nel le 'setup_InverseKinematics.m' devono essere deniti i marker vir-tuali sui quali eseguire la cinematica inversa.

Anche l'esecuzione del Tool di cinematica inversa di OpenSim avviene mediante modalità `Command-line Execution' in Matlab.

1.4.2 M-le Custom

Per questo lavoro di tesi sono stati creati appositamente due M-le uno per lo studio statico (`Statico.m') e l'altro per lo studio del task (`Dinami-co.m'):

I `Statico.m': riceve in input un le `.c3d' statico e consente di ottenere il modello scalato (`_SCALED.osim') e il le `.mot' della `static pose'; II `Dinamico.m': riceve in input un le `.c3d' dinamico e il modello

`_SCA-LED.osim' e fornisce in output il le `.mot' che riproduce il task da simulare.

Durante l'acquisizione con il sistema di motion capture PhaseSpace sono state fatte registrazioni statiche e dinamiche.

La registrazione `.c3d' statica è utilizzata con lo Scale Tool, mentre i `.c3d' dinamici vengono utilizzati con Inverse Kinematics Tool.

`Statico.m'

Il le `Statico.m' prevede i seguenti step:

Step 1 S: caricare il modello generico `upper_limb.osim' e i dati contenuti nel le `.c3d' della prova statica con la funzione 'btk_loadc3d' della Matlab OpenSim Pipeline Tool, in una struttura;

Step 2 S: caricare le nuove label da attribuite alle coordinate dei LED e sostituire le IDs dei LED con le nuove label (`Labels.m' e `labmark.m');

(28)

Step 4 S: controllare se le informazioni sui LED sono presenti nel le statico per tutti i LED e per tutti i frame e fare la media su tutti i frame della prova statica (`Mkavg.m');

Step 5S: trasformazione delle coordinate dal sistema di riferimento del laborato-rio (PhaseSpace) al sistema di riferimento di OpenSim (`sdrstella.m'); Step 6 S: selezione manuale dei LED che hanno valori medi non realistici per

eseguire una buona scalatura del modello;

Step 7 S: creazione del le `.trc' con la funzione 'btk_c3d2trc' della Matlab Open-Sim Pipeline Tool;

Step 8 S: lancio dello Scale Tool in Matlab per mezzo delle apposite funzioni e linee di comando (come descritto nel paragrafo 1.4.1).

Generalmente si preferisci etichettare con nuove labels i LED forniti dal le `.c3d' per agevolare il riconoscimento e la gestione dei dati.

`

E stato scritto un le `Labels.m' dove sono riportate tre diverse liste. La prima lista contiene le nuove label di tutti i LED acquisiti; la seconda solo le label dei punti di repere anatomici; la terza è costituita dalle label non utilizzate.

La funzione `labmark.m' sostituisce le IDs attribuite ai LED dal Pha-seSpace con label che si riferiscono a punti di repere anatomici o che sono semplicemnte 'più comprensibili'.

Per ripulire i dati acquisiti è stato scelto un ltro FIR con N=100, in seguito ai risultati ottenuti in studi preliminari riportati in Appendice A.

PhaseSpace attribuisce valore nullo quando non si ha acquisizione. Lo Step 3 prevede il controllo degli zeri, quindi dei frame non acquisiti durante la prova statica.

Per risolvere tale problema, ad ogni LED della prova statica, è stato associato un unico frame con il valore medio di tutti i frame acquisiti. La media dei LED della prova statica viene calcolata con la funzione `Mkavg'.

Per eseguire le traformazioni dei sistemi di riferimento nel caso statico, è stata creata la funzione `sdrstella'. Questa consente di passare dal sistema di riferimento del laboratorio al sistema di riferimento di OpenSim.

La trasformazione prevede un passaggio intermedio. `E stato creato un sistema di riferimento locale su un cluster di LED posti sul torace mediante un supporto stella. Questo è stato considerato il ground del corpo del soggetto. Le coordinate dei LED sugli altri corpi del soggetto, sono state convertite dal sistema di riferimento di PhaseSpace al sistema di riferimento locale della stella.

(29)

Successivamente è stato eseguito il passaggio da sistema di riferimento della stella a sistema di riferimento di OpenSim.

Il sistema di riferimento locale sul torace per la prova statica (`SdRStel-laStatico'), è stato costruito utilizzando le medie dei valori delle coordinate dei LED appartenenti a tale cluster. Si è cercato di creare un sistema di riferimento locale che assomigliasse il più possibile alla terna di OpenSim.

Oltre alla presenza di molti zeri, si possono avere valori di acquisizione distorti a causa ad esempio del distaccamento del LED dalla posizione (so-pratutto nei task dinamici) o oscuramento di LED da una parte del corpo del soggetto. `E possibile, quindi, indicare in una apposita lista i LED da non prendere in considerazione durante l'analisi di scalatura del modello.

Prima di lanciare il comando dello Scale Tool è necessario creare il le `.trc'. Questo fornisce a OpenSim i valori medi delle coordinate dei LED del le statico nel sistema di riferimento dello stesso software.

In conclusione le `Statico.m': INPUT  `.c3d della prova statica;

 '`upper_limb.osim' del modello OpenSim;

 `_Scale_Tasks.xml' e `_MeasurementSet.xml' les di setting dello Scale Tool.

OUTPUT  `_SCALED.osim' modello scalato;

 le `.trc' con i dati dei LED considerati nella prova statica;  le `.mot' per simulare la posa statica;

 le `.xml' di setup dello Scale Tool lanciato mediante `Command-line Execution'.

`Dinamico.m'

Lo studio del task dinamico richiede una procedura dierente dall'analisi statica. `E stato considerato opportuno creare un le Matlab dierente per la

(30)

prova dinamica. Nonostante ciò in alcuni casi sono state richiamate le stesse funzioni della parte statica.

Il le `Dinamico.m' prevede i seguenti step:

Step 1: caricare il modello scalato `_SCALED.osim' e i dati del le `.c3d' della prova dinamica con la funzione 'btk_loadc3d' della Matlab OpenSim Pipeline Tool, in una struttura;

Step 2 D: caricare le nuove label da attribuite alle coordinate dei LED (`La-bels.m');

Step 3 D: primo ltraggio dei dati con ltro FIR con N=100 (`ltroFIRwindow.m'); Step 4 D: ricerca e conta degli zeri e interpolazione tra i dati (`zero_sm.m'); Step 5 D: secondo ltraggio dei dati interpolati con ltro FIR con N=100

(`ltro-FIRwindow.m');

Step 6 D: trasformazione delle coordinate dal sistema di riferimento del labo-ratorio (PhaseSpace) al sistema di riferimento di OpenSim (`sdrstel-la_din.m');

Step 7 D: selezione manuale dei LED non voluti o segnalati con la stringa `rimo-zione raccomandata!' mediante una lista apposita di elimina`rimo-zione; Step 8 D: creazione del le `.trc' con la funzione 'btk_c3d2trc' della Matlab

Open-Sim Pipeline Tool;

Step 9 D: lancio dello Inverse Kinematics Tool in Matlab per mezzo delle apposite funzioni e linee di comando (in modo analogo allo Scale Tool);

Step 10 D: salvataggio delle informazioni contenute nel le `.mot', variabili di giun-to ad ogni frame che riproducono il task dinamico da simulare, mediante la funzione 'load_st_le' della Matlab OpenSim Pipeline Tool;

Step 11 D: lancio dello Static Optimization Tool in Matlab (analogo allo Step 9:). I primi tre step compiuti nel le `Dinamico.m' sono analoghi a quelli eseguiti nel le `Statico.m'. Nel caso dinamico si ha, però, a che fare con dei dati che variano ad ogni frame quindi l'analisi è più complessa.

`

Enecessario valutare le coordinate ad ogni frame, di tutti i LED utilizzati durante l'esecuzione del task dinamico. Per avere una riproduzione il più fedele possibile del movimento è opportuno eseguire un controllo dei frame nulli (dato non acquisito).

(31)

Nel caso dinamico al frame che ha coordinate zero viene attribuito un valore ottenuto da un processo di interpolazione.

Per avere un check generale che consente di valutare se i dati di un LED sono considerabili `buoni', è possibile ssare due soglie riguardanti il numero di zeri presenti. La prima indica in numero massimo di zeri accettabili in tutti i frame del LED indagato, la seconda indica gli zeri consecutivi massimi tollerabili.

I LED le cui coordinate superano anche una sola di queste due soglie ssate dall'utente, vengono segnalati a schermo mediante la stringa `rimozio-ne raccomandata!' ( o `R!' `rimozio-nella matrice dove vengono salvati i dati). Tali LED verranno inseriti successivamente dall'utente, nella lista che consente di eliminare i LED non voulti.

In particolare la funzione custom `zero_sm.m' analizza un LED alla volta. Calcola il numero di zeri totali presenti, ed esegue il primo check globale confrontando il valore trovato con il numero totale di zeri accettabili. Se la soglia viene superata viene segnalato di rimuovere il LED, altrimenti l'analisi continua andando a controllare i valori ad ogni frame. Appena viene trovato uno zero, viene salvato l'indice di tale frame in un vettore (`T_zero').

Dopo aver controllato tutti i frame registrati del determinato LED, si controlla se il vettore `T_zero' non è vuoto.

A questo punto, viene eseguito il secondo check; si valuta se la successione di zeri trovata supera la soglia del numero di zeri consecutivi tollerabili. Se la soglia è superata viene raccomandata la rimozione del LED indagato. Se, invece, sono sotto tale soglia il programma prosegue cercando di sostituire al valore nullo trovato un valore ragionevole.

Per cercare di raccordare le coordinate in modo più realistico possibile, viene eseguito prima uno smoothing di tutti i valori delle coordinate (`ltro Savitzky-Golay'). Successivamente si fa una interpolazione di tipo spline cu-bica a tratti (`Piecewise cubic Hermite interpolation'), tra il frame precedente e successivo al gap non nulli. Il valore risultate da tale processo di interpola-zione viene associato ai frames con valore nullo. Dopo aver sistemati i valori non acquisiti, viene eseguito un secondo ltraggio dei dati sempre con ltro FIR (N = 100).

Ripuliti i dati acquisiti dal sistema PhaseSpace, si procede con la trasfor-mazione dei sistemi di riferimento.

`

E stata implementata la funzione `sdrstella_din' dierente dal caso sta-tico, il sistema di riferimento locale del cluster stella solidale al torace nel caso dinamico varia ad ogni frame del task. Nella funzione `sdrstella_din' si ha la trasformazione tra il sistema di riferimento del laboratorio e il sistema di riferimento locale del cluster stella solidale al torace, per ogni frame della registrazione.

(32)

Si ipotizza che il sistema di riferimento del cluster stella nel caso dinami-co (`SdRStellaDinamidinami-co') sia lo stesso di quello valutato in base alla media di valori dei LED della prova statica (`SdRStellaStatico'). Le coordinate di tutti i LED nei `SdRStellaDinamico' coincidono quindi, con le coordinate nel `SdRStellaStatico', e sono note. Per completare la trasformazione tra sistema di riferimento del PhaseSpace e OpenSim, resta l'ultima trasformazione tra il sistema di riferimento locale della stella e quello di OpenSim. Avendo le coordinate nel sistema di riferimento desiderato, si procede con l'eliminazio-ne, mediante apposita lista manuale, dei LED segnalati dalla fase dei check sugli zeri precedente. I dati a questo punto sono idonei per andare a creare i le leggibili da OpenSim.

Il le `.trc' ottenuto allo Step 8:, riporta i valori delle coordinate corrette e trasformate nel sistema di riferimento di OpenSim ad ogni frame. Que-ste informazioni devono essere fornire al Inverse Kinematics Tool per poter eseguire cinematica inversa e valutare i valori degli angoli ai giunti ad ogni frame del task (le `.mot').

I dati contenuti nel le `.mot' vengono salvati in una apposita struttura in modo da garantire l'esecuzione delle funzione di setup degli altri Tool di OpenSim, ad esempio `setup_StaticOptim.m'.

In conclusione le `Dinamico.m': INPUT  `.c3d della prova dinamica;

 '`_SCALED.osim' del modello OpenSim scalato in base alle di-mensioni del soggetto;

 `_IK_Tasks.xml' le di setting dello Inverse Kinematics Tool. OUTPUT  le `.trc' con i dati dei LED considerati nella prova dinamica;

 le `.mot' per simulare il movimento del task eseguito in labora-torio;

 le `.xml' di setup del Inverse Kinematics Tool e vari Tool dinamici lanciati mediante `Command-line Execution'.

Riferimenti

Documenti correlati

Questo mio lavoro vuole innanzitutto analizzare lo stato dell’arte in materia di flessibilità lavorativa secondo la pratica europea e mondialista della

Statistics confirm a vigorous increase of economic activity that has an ample basis, driven by the strong manufacturing progression (56.8 points, +0.4 since January, highest

Developments in technology are encouraging all universities to consider how they can enhance the student experience – learning analytics are becoming

The 1,885 resulting questions indicated that workers were most preoccupied by “food, apartments, the cost of transportation, in other words, the price of consumer goods in general.”

L’allargamento del circuito della legalità costituzionale, con la possibilità del Consiglio di sindacare la costituzionalità delle leggi a posteriori su attivazione dell’autorità

In particular, the right of access to legal counsel will remain insufficient unless EU institutions and Member States implement, interpret, and apply directives relating to

Mulligan and Sala-i-Martin (1992) calibrate the same model and report that computer experimentation has not found any balanced growth equilibrium which does not display

Thus, in an economy satisfying both Assumptions 1 and 2S, convexified in­ terdependence with survival of all agents is a sufficient condition for a particular