Introduzione
Il presente progetto nasce dall'esigenza di integrare dati di movimento acquisiti tramite sensori inerziali all'interno dell'ambiente di simulazione biomeccanica OpenSim, con l'obiettivo di ottenere una ricostruzione affidabile del gesto della pedalata. Nelle fasi iniziali del lavoro non erano disponibili protocolli operativi consolidati né procedure standardizzate per la conversione e l'elaborazione dei dati, rendendo necessario lo sviluppo di un workflow dedicato.
I primi tentativi di importazione hanno evidenziato significative criticità legate all'incompatibilità tra il formato dei dati acquisiti e i requisiti strutturali richiesti da OpenSim. In particolare, il disallineamento tra i sistemi di riferimento utilizzati dai sensori e quello adottato dal software di simulazione determinava un'errata configurazione spaziale del modello biomeccanico, compromettendo la corretta riproduzione della postura del ciclista sulla bicicletta. Parallelamente, la presenza di anomalie nella lettura e nell'interpretazione dei dati grezzi generava movimenti discontinui e privi della necessaria coerenza cinematica, limitando la possibilità di effettuare analisi biomeccaniche attendibili.
Alla luce di tali problematiche, il progetto si è orientato verso la definizione di una pipeline di elaborazione in grado di convertire, correggere e ottimizzare i dati acquisiti, garantendo la compatibilità con OpenSim e la qualità delle successive analisi del movimento.
Obiettivo
L'attività svolta ha avuto come obiettivo generale la realizzazione di una procedura affidabile per l'importazione e l'analisi di dati cinematici all'interno di OpenSim, applicata allo studio del gesto della pedalata. A tal fine, il lavoro si è concentrato sul raggiungimento di tre obiettivi specifici.
In primo luogo, è stata sviluppata una procedura di scaling personalizzato del modello biomeccanico, finalizzata a riprodurre in modo accurato le caratteristiche antropometriche del soggetto analizzato, superando l'utilizzo di modelli generici e consentendo una rappresentazione più realistica della configurazione corporea del ciclista.
Successivamente, è stato affrontato il problema del disallineamento tra i sistemi di riferimento dei sensori e quello di OpenSim, attraverso la definizione di una strategia di correzione e allineamento spaziale che permettesse di ricostruire correttamente la posizione di guida all'interno dell'ambiente virtuale.
Infine, sono state implementate tecniche di elaborazione del segnale volte a ridurre il rumore presente nelle acquisizioni strumentali e a minimizzare le discontinuità cinematiche. L'obiettivo finale di questa fase è stato ottenere un'animazione fluida e biomeccanicamente coerente, priva di artefatti, idonea alle successive analisi quantitative del movimento.
Sviluppo del progetto
a. Script MATLAB per la conversione dei file
Sviluppo dell’algoritmo da .mvn a .mot
Per superare l’incompatibilità dei file nativi generati dai sistemi di Motion Capture inerziale e consentire l’animazione dello scheletro virtuale, è stato utilizzato e adattato uno script MATLAB originariamente sviluppato per la conversione dei dati cinematici Xsens in file .mot compatibili con OpenSim. Questo script funge da vero e proprio ponte tecnologico, automatizzando la traduzione dei dati cinematici grezzi (formato .mvn o .mvnx esportato dal software Xsens) nel formato nativo richiesto dall’ambiente di simulazione OpenSim (file di movimento con estensione .mot).
L’obiettivo primario dell’algoritmo è convertire e mappare matematicamente gli angoli definiti nel software Xsens in modo che siano coerenti con i gradi di libertà e le convenzioni geometriche dei modelli muscolo-scheletrici di OpenSim.
Analisi strutturale e geometrica dei formati La necessità di sviluppare un convertitore dedicato risiede nelle profonde differenze strutturali e fisiche dei due formati di file:
-
Il File Sorgente (.mvn/.mvnx): Contiene i dati grezzi registrati dai sensori inerziali (IMU) posizionati sul corpo del soggetto. Queste informazioni descrivono le traiettorie, le accelerazioni e le rotazioni spaziali relative ai singoli segmenti corporei isolati.
-
Il File di Output (.mot): È un file di movimento (Motion file) caratterizzato da una struttura a matrice estremamente rigida. Esso non esprime i dati dei singoli segmenti sciolti, ma descrive i gradi di libertà angolari dei giunti cinematici del modello in funzione del tempo. OpenSim richiede una struttura rigorosa del file, con intestazione correttamente formattata, numero coerente di righe e colonne e nomenclatura delle coordinate conforme al modello utilizzato.
Fasi logiche dell’elaborazione nello Script
Per convertire con successo il movimento e popolarne la struttura, l’algoritmo segue una sequenza logica divisa in tre macro-operazioni:
-
Estrazione e Inizializzazione della Struttura Dati: Lo script si appoggia a funzioni di basso livello (come load_mvnx_v2) per trasformare l’albero XML del file inerziale in una struttura MATLAB manipolabile (tree). Viene eseguito un ciclo di scansione per raccogliere le etichette dei giunti (joint_names), creando una mappatura che consenta di individuare programmaticamente le colonne necessarie ed escludere i dati ridondanti.
-
Logica di Fail-Safe: Nel caso in cui una determinata articolazione non sia stata registrata dai sensori o presenti dati corrotti, l’algoritmo non interrompe l’esecuzione; alloca invece un vettore di zeri di lunghezza pari ai fotogrammi totali (nSamples). Questa operazione
di salvataggio è vitale, poiché OpenSim rifiuta l’importazione o crasha se riscontra una colonna mancante rispetto a quelle dichiarate nell’header.
-
Riallineamento della Pelvi e Trasformazione Angolare: L'orientamento globale della pelvi viene ricavato a partire dai quaternioni registrati da Xsens e convertito in angoli di Eulero. La pelvi funge da “ancora” e centro di massa per l’intero scheletro virtuale (6 gradi di libertà della radice). Lo script estrae l’orientamento della pelvi convertendo i quaternioni grezzi in angoli di Eulero (tramite la funzione q_to_euler) per ricavare i parametri di list, tilt e rotation. Simultaneamente, per la posizione nello spazio (pelvis_tx, pelvis_ty, pelvis_tz), viene eseguito un riallineamento manuale degli assi cartesiani, associando ad esempio la coordinata verticale di OpenSim (Y) alla corretta colonna di campionamento di Xsens, risolvendo l’errore geometrico iniziale del manichino capovolto o steso.
-
Mappatura delle Convenzioni di Segno (Polarità): Poiché ogni software adotta arbitrariamente una propria direzione positiva o negativa per le rotazioni anatomiche (pur seguendo la regola della mano destra), lo script implementa una matrice di correzione chiamata signs. Senza questo blocco, si verificherebbero gravi anomalie dinamiche e movimenti innaturali (come il ginocchio che si flette in avanti o le braccia che compenetrano il torace).
Attraverso una logica condizionale (if-elseif strcmp), il vettore signs (inizialmente composto da soli valori 1 viene modificato inserendo un valore -1 in corrispondenza degli indici critici per invertire chirurgicamente la polarità cinematica in base al modello OpenSim selezionato:
L’operazione matematica finale si traduce in una moltiplicazione elemento per elemento (operatore matriciale .* di MATLAB) tra il vettore dei segni e la matrice globale dei movimenti, a cui viene successivamente concatenata la colonna temporale convertita in secondi:
"Angles_Matrix"="signs".*("Angles_Matrix")
Il file finale .mot viene infine scritto fisicamente stampando riga per riga l’header testuale rigoroso, rendendo i dati pronti, puliti e digeribili per il risolutore di cinematica inversa di OpenSim.
b. Analisi e filtraggio del segnale
Dopo aver convertito il file dal formato nativo .mvn a .mot seguendo la procedura descritta, i dati di movimento sono stati filtrati mediante uno script MATLAB. Prima di procedere con il filtraggio, è stato condotto uno studio del segnale nel dominio della frequenza: applicando la Trasformata Rapida di Fourier (FFT) a una componente cinematica, sono state identificate le componenti armoniche del movimento della pedalata per isolarle dal rumore di fondo.
Come si nota dal grafico, a frequenze molto basse è presente un picco di ampiezza elevato. Questo picco rappresenta la componente continua (l'offset medio del segnale nel tempo) che, nel nostro specifico setup, custodisce l'informazione biomeccanica fondamentale sulla posizione geometrica reclinata iniziale del soggetto.
Durante la conversione dei dati per OpenSim, si è riscontrato un ulteriore problema: un artefatto visivo consistente in una rotazione istantanea di 360° del modello. Questo fenomeno è legato al wrapping (avvolgimento) degli angoli di Eulero, i cui valori vengono matematicamente limitati nell'intervallo [-180°, +180°], generando discontinuità artificiali quando il movimento reale supera tale soglia. Per risolvere questo errore numerico, è stata applicata la funzione di unwrap sul segnale cinematico prima dell'importazione in OpenSim. L'algoritmo ha identificato i salti in prossimità dei ± 180° e vi ha sommato algebricamente multipli di 360° (2π rad). Questo intervento ha rimosso i picchi fittizi di velocità angolare, garantendo la continuità della traiettoria e una simulazione coerente.
Per quanto riguarda la pulizia dei dati, è stato preferito un filtro passa-basso rispetto a un filtro passa-banda. I movimenti volontari del corpo umano sono infatti fenomeni a bassa frequenza, il cui contenuto informativo si attesta generalmente sotto i 6-10 Hz, mentre il rumore di misura si concentra alle alte frequenze; il filtro passa-basso permette quindi di eliminare il disturbo preservando il segnale utile. La scelta di un filtro passa-banda è stata scartata poiché l'introduzione di una frequenza di taglio inferiore avrebbe eliminato proprio le frequenze molto basse, azzerando l'offset posturale di partenza e inficiando i successivi calcoli di dinamica inversa in OpenSim.
Criticità
Le criticità che abbiamo riscontrato sono state:
-
Formattazione dei file di input: OpenSim richiede una struttura estremamente rigorosa dei file .mot e .trc. Anche minime incongruenze nella formattazione, come errori nei nomi delle coordinate articolari, differenze tra il numero di colonne dichiarato e quello effettivamente presente o spazi indesiderati nell’header, possono impedire l’importazione dei dati o causare il fallimento dell’elaborazione;
-
Gestione dei sistemi di riferimento:Una delle principali difficoltà ha riguardato la corretta conversione dei dati cinematici tra il sistema di riferimento utilizzato da Xsens e quello richiesto da OpenSim. In particolare, OpenSim adotta un sistema di coordinate destrorso in cui l'asse Y è orientato verticalmente verso l'alto, l'asse X rappresenta la direzione di avanzamento del soggetto e l'asse Z la direzione laterale. I dati esportati da Xsens, invece, sono espressi in un sistema di riferimento globale differente, con convenzioni sugli assi e sulle rotazioni che non coincidono direttamente con quelle di OpenSim. Di conseguenza è stato necessario applicare opportune trasformazioni geometriche e rotazioni degli assi per garantire la corretta corrispondenza tra i due sistemi di riferimento. Nelle fasi iniziali dello sviluppo, errori nella definizione di tali trasformazioni causavano orientamenti non corretti del modello biomeccanico, con il manichino visualizzato in posizione sdraiata, capovolta o con direzioni di movimento incompatibili con quelle registrate durante l'acquisizione;
-
Conversione delle coordinate articolari: La trasformazione dei dati ottenuti dallo script MATLAB in coordinate articolari compatibili con OpenSim ha richiesto diverse fasi di
-
validazione. È stato necessario verificare che le informazioni cinematiche rispettassero i vincoli biomeccanici del modello senza introdurre gradi di libertà non realistici o ridondanti;
-
Debug e identificazione degli errori: L'individuazione delle cause degli errori è stata resa complessa dalla limitata diagnostica fornita da OpenSim. In molti casi è stato necessario effettuare verifiche iterative sui file generati e sulle trasformazioni applicate ai dati per identificare e correggere le anomalie presenti nel flusso di elaborazione;
Conclusioni e sviluppi futuri
Mediante il lavoro svolto è stato possibile ottenere un'animazione biomeccanica stabile e coerente con il gesto reale della pedalata, un movimento del modello più fluido e realistico all'interno di OpenSim, migliorando la qualità dell'animazione e la robustezza delle analisi
successive.
In prospettiva futura, il workflow potrà essere ulteriormente migliorato mediante l'automazione delle procedure di conversione e filtraggio, rendendo la pipeline più rapida, standardizzata e
facilmente replicabile per acquisizioni differenti.
La disponibilità di dati cinematici affidabili in OpenSim apre inoltre la strada ad analisi biomeccaniche avanzate, quali la Dinamica Inversa, la stima delle forze muscolari tramite Static
Optimization, l'analisi dei carichi articolari e lo studio dell'influenza della postura sulla performance del ciclista. Tali strumenti potranno supportare l'ottimizzazione ergonomica del veicolo e future attività di progettazione integrate con simulazioni multidisciplinari.