UNIVERSITÀ DEGLI STUDI DI ROMA TOR VERGATA FACOLTÀ DI INGEGNERIA CORSO DI LAUREA IN INGEGNERIA DELL’AUTOMAZIONE A.A. 2011/2012 Tesi di Laurea TELEMANIPOLAZIONE TRAMITE EMG RELATORE CANDIDATO Ing. Daniele Carnevale Federica Medici CORRELATORI Prof. Ettore Pennestrı̀ Prof. Luigi Bianchi Ai miei genitori, da sempre miei maestri di vita. Indice Ringraziamenti 1 Introduzione 3 1 Elettrofisiologia muscolare 5 1.1 Il muscolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.1.1 Il muscolo scheletrico . . . . . . . . . . . . . . . . . . . . . . . 6 1.1.2 Le fibre muscolari . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.2 La cellula nervosa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.3 L’unità motoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.4 Il potenziale d’azione . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.5 La contrazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.6 Il segnale EMG superficiale . . . . . . . . . . . . . . . . . . . . . . . 24 2 Acquisizione ed Elaborazione del Segnale 29 2.1 Elettromiografia di Superficie . . . . . . . . . . . . . . . . . . . . . . 29 2.2 Il segnale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.2.1 Il rumore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.2.2 Massimizzazione della fedeltà del segnale . . . . . . . . . . . . 34 Specifiche di progetto . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.3 Indice I 2.4 Geometria degli elettrodi . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.5 Posizionamento degli elettrodi . . . . . . . . . . . . . . . . . . . . . . 40 2.5.1 Elettrodi di rilevazione . . . . . . . . . . . . . . . . . . . . . . 40 2.5.2 Elettrodo di riferimento . . . . . . . . . . . . . . . . . . . . . 41 Il dispositivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.6.1 Gli elettrodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.6.2 Il circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.6.3 Invio dati al calcolatore 48 2.6 . . . . . . . . . . . . . . . . . . . . . 3 Telemanipolazione 51 3.1 Il Robot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.2 Comunicazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.3 Altre Applicazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 3.3.1 Tracciato dello sforzo muscolare . . . . . . . . . . . . . . . . . 58 3.3.2 Gioco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4 Controllo 62 4.1 Il Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 4.2 Controllo Passivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.2.1 Passività . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.2.2 Teoremi di Passività . . . . . . . . . . . . . . . . . . . . . . . 70 4.2.3 Controllore Basato su Passività . . . . . . . . . . . . . . . . . 75 Controllo in feedback linearization . . . . . . . . . . . . . . . . . . . . 87 4.3.1 Feedback Linearization . . . . . . . . . . . . . . . . . . . . . . 87 4.3.2 Controllore . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Confronto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 4.3 4.4 Indice II 5 Conclusioni e Sviluppi futuri 96 Appendice A 98 Appendice B 100 Elenco delle figure 117 Bibliografia 119 Indice III Ringraziamenti Dopo la fine di un lungo cammino, fra tante aspettative, incognite e dubbi, mi ritrovo ad avere un’unica certezza: nulla di tutto ciò sarebbe stato possibile senza l’affetto e l’incoraggiamento delle persone a me più care. Dedico quindi questa tesi ad ognuno di loro. Innanzitutto ai miei genitori, che hanno sempre saputo guidarmi con saggezza nella vita e che so essere orgogliosi di me almeno quanto io lo sono di loro. A Gianluca, che più di ogni altro è riuscito a stami vicino con tanta dolcezza e immenso affetto, questo traguardo è per me particolarmente prezioso anche perchè tagliato insieme. Alla mia Ti per essere cresciuta insieme a me, per le infinite chiacchierate e per la sopportazione reciproca delle paranoie. Ad Auro, tutta quella fastidiosa distanza in realtà non ci ha mai divise. Ad Alessandro, Antonio, Damiano e Lyle un quintetto che non smetterà mai di esistere. A Be e a tutti i nostri caffè e le nostre ansie, ma anche ai festeggiamenti post-esame. A Mavy per essere stata la miglior coinquilina di sempre. Ad Anto per i ripassi e gli incoraggiamenti dell’ultima ora. Ad Alessandra, con me fin dal primissimo giorno. Ma anche a Ste, Giordano, Gepp, Luke, il mitico Pra e tutti i miei cari amici infor- Ringraziamenti 1 Introduzione matici. A Valerio per i consigli sempre sinceri ed estremamente preziosi e a Paola per l’affetto dimostratomi e per la spontanetà delle nostre conversazioni. Ci tengo a ringraziare inoltre il mio relatore che mi ha seguito, come per la tesi triennale, anche in quest’ultimo lavoro, permettendomi di approfondire un ambito di mio grande interesse. Un grazie particolare va infine al mio adorato Gerry, che ha aggiunto una vena di dolcezza alle ultime tappe di questo cammino. Ringraziamenti 2 Introduzione “I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L’insieme dei due costituisce una forza incalcolabile.” -Albert Einstein- Tra i sistemi ad alta complessità, il corpo umano è probabilmente il più misterioso e affascinante che esista. Come un generico sistema dinamico, il suo comportamento è il risultato dell’interazione continua tra le dinamiche dei singoli sottosistemi che lo compongono, riceve in ingresso innumerevoli stimoli dall’ambiente che lo circonda, e risponde a tali stimoli producendo delle uscite che vanno ad influenzare l’ambiente stesso. L’organo più esteso del corpo umano, la pelle, è anche testimone operativo della quasi totalità delle interazioni tra corpo umano e ambiente esterno. Lo studio dei segnali che la attraversano riveste notevole importanza in ambito medico per la diagnosi di diverse patologie. Per il prelievo di tali segnali, ove possibile, è sempre preferibile l’utilizzo di tecniche non invasive per non rischiare di compromettere lo stato di salute del paziente. In particolare, l’elettromiografia di superficie rientra in questa categoria, in quanto Introduzione 3 Introduzione utilizza esclusivamente elettrodi posti al di sopra della superficie cutanea per il prelievo dei miosegnali. Oltre all’utilizzo medico, l’importanza di tali segnali risiede anche nella possibilità di fornire ulteriori gradi di libertà all’interazione umana con l’ambiente. Il presente lavoro di tesi mostra come un miosegnale opportunamente elaborato possa sostituire un generico segnale di ingresso per un sistema esterno. E’ stato infatti realizzato il prototipo funzionante di un dispositivo che permette la gestione in remoto di un robot antropomorfo, sulla base del segnale elettrico proveniente da un muscolo scheletrico. Per la realizzazione del progetto è risultato necessario lo studio preliminare dell’apparato muscolare con particolare attenzione alle caratteristiche dei segnali cutanei prodotti dalla contrazione. Tali informazioni hanno permesso la creazione di un dispositivo capace di rilevare ed elaborare tale segnale in modo da poter essere inviato al calcolatore per l’analisi diretta o per l’invio al dispositivo remoto responsabile della gestione del robot. Introduzione 4 Capitolo 1 Elettrofisiologia muscolare Verrà innanzitutto presentata una descrizione del muscolo, dei fenomeni elettrici che lo interessano ed il conseguente segnale elettromiografico superficiale prodotto. 1.1 Il muscolo Con il termine muscolo si indica un organo composto in prevalenza da tessuto muscolare, ovvero un tessuto biologico con capacità contrattile. L’insieme dei muscoli forma l’apparato muscolare, che fa parte, insieme allo scheletro e alle articolazioni, all’apparato locomotore. Il muscolo ha tre funzioni: protegge le ossa, riscalda il nostro corpo tramite la contrazione e lo sostiene. Ci sono diversi tipi di muscoli. In base alla morfologia, possiamo distinguere: • Muscoli striati scheletrici, che presentano caratteristiche striature trasversali visibili anche ad occhio nudo, meglio ancora al microscopio ottico. Queste striature sono dovute alla disposizione regolare degli elementi contrattili. I muscoli striati scheletrici, si contraggono in seguito a impulsi nervosi provenienti dai motoneuroni del sistema nervoso centrale, ovvero a livello cosciente. Questi muscoli sono 5 Cap.1 Elettrofisiologia muscolare 1.1 Il muscolo connessi a segmenti scheletrici e presentano la caratteristica di essere controllati dalla nostra volontà. • Muscoli striati cardiaci, che costituiscono la componente muscolare del cuore, detta miocardio. Microscopicamente parlando, rispetto alle fibre muscolari scheletriche, oltre alle strie trasversali note, posseggono altre striature trasversali ben evidenti, chiamate strie intercalari, che sono le zone di giunzione delle fibre stesse. Il muscolo cardiaco si contrae indipendentemente dalla volontà. • Muscoli lisci, cosiddetti in quanto non presentano striature trasversali, poichè in essi gli elementi contrattili sono disposti disordinatamente. Si presentano in genere di colore più chiaro rispetto alla muscolatura striata. Sono questi a costituire la componente muscolare dei visceri. Per i nostri scopi sarà utile focalizzare l’interesse sulla prima tipologia di muscoli descritta. 1.1.1 Il muscolo scheletrico Ciascun muscolo è formato da cellule cilindriche allungate, le fibre muscolari serate. Ogni fibra è circondata da un sottile strato di tessuto connettivo (l’endomisio) e le singole fibre sono poi riunite in piccoli fasci da uno strato più spesso, sempre di natura connettivale, il perimisio. L’intero muscolo è poi circondato dall’epimisio. Il tessuto connettivo che circonda il muscolo, separa i fasci e avvolge ciascuna fibra muscolare, è molto più resistente allo stiramento di quanto non lo siano le fibre muscolari, per cui, il grado di allungamento del muscolo, è tanto più limitato, quanto più tessuto connettivo esso contiene. Il muscolo non ha una grande capacità di rigenerazione, per cui qualunque danno 6 Cap.1 Elettrofisiologia muscolare 1.1 Il muscolo importante dà luogo a sostituzione delle fibre muscolari lese con tessuto connettivo e adiposo. Il diametro della fibra varia da 20 a circa 100 micron e la sua lunghezza da pochi millimetri fino a più di 10 cm. La fibra muscolare è rivestita da una membrana, il sarcolemma, e al suo interno sono presenti migliaia di miofibrille, sottilissimi cilindri del diametro di 1 - 3 micron, che decorrono parallele tra loro, come mostrato in figura 1.1. Figura 1.1: Muscolo 7 Cap.1 Elettrofisiologia muscolare 1.1 Il muscolo La striatura, caratteristica del muscolo, è dovuta alla regolare alternanza, nelle miofibrille, di dischi scuri anisotropi e di dischi chiari isotropi. Il singolo segmento di miofibrilla, comprendente una banda scura e due mezze bande chiare, è detto sarcomero ed è mostrato in figura 1.2. I sarcomeri, le unità contrattili del muscolo scheletrico sono costituiti da fasci di filamenti, regolarmente intercalati tra loro, detti miofilamenti. Tali filamenti possono essere di due tipi: quelli sottili di actina e quelli spessi di miosina. I filamenti sottili sono costituiti da due catene proteiche avvolte a spirale, mentre quelli spessi sono costituiti da più fascetti di miosina e sono formati a loro volta da due catene proteiche. Un’estremità dei filamenti di miosina è rigonfia, essa prende il nome di testa della miosina e ha due funzioni: si aggrappa ai filamenti di actina permettendo l’accorciamento del sarcomero e funge, inoltre, da enzima necessario per la scissione dell’ATP in ADP+Pi (fosfato inorganico), essa contribuisce quindi all’apporto di energia necessaria per la contrazione muscolare. Il sarcomero è delimitato da due strie di natura proteica, le linee Z. Ai lati di tali strie vi è una banda chiara detta banda I (isotropa alla luce polarizzata), costituita da filamenti di actina. Andando verso l’interno è possibile notare una banda scura detta banda A (anisotropa alla luce polarizzata) costituita da filamenti di actina e filamenti di miosina interposti tra di loro. Al centro della banda A vi è una banda più piccola detta banda H. Al centro di quest’ultima è presente una linea scura, la linea M, costituita da proteine che interconnettono i filamenti di miosina. Quando le fibre muscolari vengono stimolate, i filamenti di miosina, grazie alle teste, si legano ai filamenti di actina creando dei ponti trasversali, mostrati in figura 1.3. Le teste della 8 Cap.1 Elettrofisiologia muscolare 1.1 Il muscolo miosina spingono verso l’interno i filamenti di actina, accorciando cosı̀ il sarcomero. Figura 1.2: Sarcomero Un muscolo di una data lunghezza è formato da numerose fibre muscolari poste in parallelo, cioè una di fianco all’altra, e ciascuna fibra è composta da numerose miofibrille, poste in parallelo e di lunghezza uguale a quella del muscolo. Ciascuna miofibrilla è formata da un certo numero di sarcomeri, di lunghezza uguale tra loro e posti in serie, cioè uno di seguito all’altro. Quando una singola miofibrilla si contrae sviluppa una tensione uguale a quella unitaria di un singolo sarcomero. Il muscolo, contraendosi in toto, produce una forza complessiva data dalla somma delle forze sviluppate da ogni singolo elemento posto in parallelo. In definitiva, la forza prodotta da un muscolo con la contrazione, è pro9 Cap.1 Elettrofisiologia muscolare 1.1 Il muscolo Figura 1.3: Filamenti di actina e miosina porzionale al numero di miofibrille poste in parallelo, cioè alla sua sezione trasversa. L’accorciamento totale è dato dalla somma degli accorciamenti dei singoli sarcomeri, pertanto è proporzionale al numero di sarcomeri posti in serie, cioè alla sua lunghezza. Poiché ciascun sarcomero, contraendosi, si accorcia di una certa lunghezza nel tempo, la velocità di accorciamento della miofibrilla, e quindi del muscolo, è uguale alla velocità di accorciamento di un sarcomero, moltiplicata per il numero di sarcomeri in serie: la velocità di accorciarnento di un muscolo è, quindi, proporzionale alla sua lunghezza. 1.1.2 Le fibre muscolari Le fibre muscolari rappresentano l’elemento costitutivo del muscolo, ossia le cellule della parte carnosa. Nell’uomo sono presenti due differenti tipi di cellule muscolari scheletriche specializzate, che si caratterizzano per la capacità di contrarsi velocemente, ma per breve tempo, o lentamente ma per un periodo di tempo prolungato. • Le fibre rosse o lente o di tipo I, sono tendenzialmente sottili, fanno principal- 10 Cap.1 Elettrofisiologia muscolare 1.1 Il muscolo mente ricorso al metabolismo ossidativo al fine di acquisire la necessaria energia chimica per la contrazione, hanno buona resistenza e modesta velocità. È possibile rilevare una elevata densità di capillari, esse hanno, quindi, ottima vascolarizzazione. Sono definite anche fibre rosse proprio perchè, la buona vascolarizzazione, le rende ricche di emoglobina e mioglobina, conferendo il caratteristico colore. Avendo un adeguato apporto di ossigeno e metaboliti, tali fibre, mostrano notevole resistenza all’affaticamento, grazie alle cospicue scorte di glicogeno di cui dispongono e dalle quali estraggono energia mediante gli enzimi del metabolismo aerobico. Sono altresı̀ ricche di enzimi con il ruolo di demolire i depositi adiposi per fini energetici. Da un punto di vista dell’innervazione, il loro controllo è demandato ai motoneuroni alfa, neuroni di piccole dimensioni, capaci di inviare impulsi nervosi in maniera costante e continua, in accordo con le funzioni delle fibre lente, deputate anche al continuo controllo posturale. • Le fibre bianche o veloci o di tipo II, sono più spesse e denotano un elevato utilizzo di ATP e dei meccanismi anaerobici di risintesi (glicolisi). Le cellule che le compongono sono caratterizzate da un reticolo sarcoplasmatico particolarmente sviluppato, da un colore pallido, da cui il nome, che deriva dalla carenza di proteine che fissano l’ossigeno, hanno inoltre ridotta presenza di mitocondri e tendono ad affaticarsi rapidamente a causa del consumo di glicogeno, ma sono in grado di esprimere grande potenza. Sono ricche di glicogeno e fosfati energetici che consentono l’adeguato accesso alle fonti energetiche di tipo anaerobico. Nell’ambito delle fibre di tipo II sono rilevabili diverse sottocategorie. 11 Cap.1 Elettrofisiologia muscolare 1.1 Il muscolo – Le fibre di tipo IIa sono fibre veloci caratterizzate da adeguata resistenza aerobica ed anaerobica; – Le fibre di tipo IIb veloci anch’esse ma di tipo glicolitico con scarso potenziale aerobico; – Le fibre di tipo IIc veloci ma con una spiccata predisposizione all’uso del metabolismo aerobico, pur con buona capacità glicolitica. La figura 1.4 riassume quanto detto sulle fibre muscolari. Figura 1.4: Fibre muscolari attive in relazione alla contrazione. 12 Cap.1 Elettrofisiologia muscolare 1.2 1.2 La cellula nervosa La cellula nervosa I muscoli scheletrici sono innervati da grosse fibre nervose, le cui origini sono i motoneuroni somatici, che innervano, cioè, direttamente i muscoli scheletrici. In generale, il neurone, cellula nervosa elementare mostrata in figura 1.5, è formato da numerosi dendriti, dalle sinapsi, da un nucleo e da un corpo cellulare, detto soma, da cui prende origine l’assone che, con la sua arborescenza più o meno pronunciata, forma l’organo di uscita del neurone. L’assone può essere rivestito da una guaina, detta mielina, mentre tutta la cellula nervosa è rivestita da una membrana. Gli stimoli nervosi sono raccolti dal corpo cellulare e dai dendriti e successivamente trasmessi all’assone. I singoli neuroni sono funzionalmente connessi tra loro mediante particolari zone di contatto, dette sinapsi, preposte alla trasmissione dell’impulso nervoso. La trasmissione dell’impulso può avvenire in una sola direzione, il che permette di distinguere, in una sinapsi, la componente pre-sinaptica e post-sinaptica. La componente pre-sinaptica si presenta espansa, costituendo il bulbo pre-sinaptico, ed è caratterizzata dalla presenza di numerosi mitocondri e di vescicole, queste ultime contenenti il mediatore chimico, acetilcolina, responsabile della trasmissione dello stimolo elettrico. I motoneuroni sono situati nelle corna anteriori del midollo spinale e arrivano al muscolo tramite i loro prolungamenti assonali, le cui ramificazioni terminali prendono ciascuna contatto con una singola fibra muscolare come mostra la figura 1.6. Ogni motoneurone somatico che esce dal midollo per andare verso il muscolo relati- 13 Cap.1 Elettrofisiologia muscolare 1.2 La cellula nervosa Figura 1.5: Neurone vo ha un sistema di auto-inibizione, dovuto alla presenza dei neuroni inibitori, che elimina la possibilità di sovrastimolare il muscolo. Tale sovrastimolazione, detta comunemente stimolazione tetanica, in alcuni casi è fisiologica, altrimenti è il sintomo della malattia omonima provocata dalla distruzione dei neuroni inibitori causata dai clostridi del tetano. Due importanti caratteristiche fanno della cellula nervosa un elemento importante nella trasmissione delle informazioni: • l’eccitabilità, cioè la capacità di generare un potenziale d’azione qualora la si ecciti con uno stimolo di ampiezza e durata opportune; • la conduttività, cioè la capacità di propagare tale potenziale per una distanza 14 Cap.1 Elettrofisiologia muscolare 1.3 L’unità motoria Figura 1.6: Motoneurone rilevante e ad una velocità praticamente costante. 1.3 L’unità motoria L’unità funzionale del muscolo è l’unità motoria (UM), essa è l’insieme del motoneurone e delle fibre muscolari che esso innerva. Le fibre muscolari di una unità motoria hanno nel muscolo una disposizione casuale, non contigua, sono, cioè, combinate a mosaico con fibre muscolari appartenenti ad altre unità motorie. Le fibre muscolari di due distinte UM possono differire di diverse unità di grandezza, in particolare possono essere presenti dalle 10 alle 2000 fibre muscolari e ciò influenza la forza generata dall’attività motoria stessa. Generalmente i muscoli preposti al controllo dei movimenti più fini hanno un basso numero di fibre muscolari per unità motoria, invece, i muscoli preposti a movimenti più grossolani sono usualmente carat- 15 Cap.1 Elettrofisiologia muscolare 1.3 L’unità motoria terizzati da un elevato numero di fibre muscolari per unità motoria. I motoneuroni hanno dimensioni diverse: quelli che innervano le unità motorie composte da fibre muscolari a contrazione rapida sono più grandi di quelli delle unità motorie composte da fibre muscolari a contrazione lenta. Il potenziale post-sinaptico eccitatorio ha un’intensità inversamente proporzionale alla grandezza del soma del motoneurone. I motoneuroni delle UM di tipo lento raggiungono prima la soglia di eccitabilità. Dato che la tensione sviluppata da ogni singola fibra muscolare è direttamente proporzionale all’area della sua sezione trasversa, la stimolazione di una unità motoria di tipo veloce, a parità di numero di fibre muscolari, comporta lo sviluppo di una forza maggiore di quella prodotta dalle UM di tipo lento. Il punto di innesto o terminazione della fibra nervosa motrice è detto placca motrice o sinapsi neuromuscolare. La placca motrice è formata da due componenti: una pertinente alla cellula muscolare, l’altra alla fibra nervosa. La componente muscolare è formata da ripetuti ripiegamenti del sarcolemma, dette fessure sinaptiche secondarie, mentre la componente spettante alla fibra nervosa è costituita dalla porzione terminale dell’assone e ramificata nelle fessure sinaptiche primarie. La giunzione neuromuscolare, di cui uno schema è mostrato in figura 1.7, ha dunque l’architettura generale di una comune sinapsi, con l’assolemma come membrana presinaptica, il sarcolemma come membrana post-sinaptica e lo spazio intersinaptico contenente materiale glicoproteico. E’ nell’assoplasma presinaptico che sono presenti le vescicole, contenenti nel caso specifico acetilcolina. 16 Cap.1 Elettrofisiologia muscolare 1.4 Il potenziale d’azione Figura 1.7: Giunzione neuromuscolare 1.4 Il potenziale d’azione La cellula e il suo ambiente sono assimilabili a due soluzioni ricchissime di ioni, separate da una membrana semipermeabile. Le dimensioni dei pori della membrana cellulare sono tali da lasciar passare liberamente gli ioni Cl-, K+, ostacolare quelli Na+ ed impedire il passaggio degli anioni organici A-. Tale membrana è, quindi, selettiva. La non omogenea distribuzione degli ioni determina una differenza di potenziale elettrico ai lati della membrana, con il lato interno negativo e quello esterno positivo. Tale differenza di potenziale è detta potenziale di membrana ed ha in tutte le cellule 17 Cap.1 Elettrofisiologia muscolare 1.4 Il potenziale d’azione un valore costante, compreso tra -70 e -90 mV . All’interno della cellula gli ioni più abbondanti sono quelli K+ e gli anioni proteici, accompagnati da piccole quantità di ioni Na+ e CI-. Nell’ambiente extracellulare vi è un’elevata quantità di Na+ e CI- e piccole quantità di K+. Esistono due metodi fondamentali mediante i quali i potenziali di membrana prendono origine: • la pompa sodio-potassio ATP dipendente, è meccanismo di trasporto attivo di ioni contro il gradiente elettrico e quello di concentrazione, è sostenuta dall’acido adenosin-trifosfato o ATP, che provoca uno sbilanciamento tra cariche negative e positive presenti ai due lati della membrana: gli ioni sodio vengono portati dall’interno verso l’esterno e quelli potassio dall’esterno all’interno. • la diffusione di ioni attraverso la membrana, conseguente ad una differenza di concentrazione tra i due lati della membrana stessa. Le variazioni del potenziale di membrana vengono chiamate potenziali d’azione. Quando varia la tensione al colle dell’assone per effetto delle sinapsi eccitatrici agenti sul neurone si ha una variazione della permeabilità della membrana al sodio e al potassio: un aumento della permeabilità allo ione sodio nello stato di eccitazione, una diminuzione di questa ed un aumento della permeabilità allo ione potassio nel ritorno allo stato di riposo. Il potenziale d’azione è alla base del fenomeno di eccitabilità delle cellule e in particolare di quelle nervose e muscolari, che ne fanno uso rispettivamente per trasmettere messaggi e per rispondere agli stessi. In definitiva, quando uno stimolo adeguato agisce su una cellula nervosa, in quel punto 18 Cap.1 Elettrofisiologia muscolare 1.4 Il potenziale d’azione si ha un passaggio libero di ioni attraverso la membrana ed una conseguente brusca variazione del potenziale di membrana che, in un primo tempo si annulla, poi assume valori positivi ed infine ritorna al valore di riposo. Il fenomeno è detto ‘’depolarizzazione” e si propaga, come mostrato in figura 1.8, lungo tutta la fibra nervosa, in quanto determina un movimento di ioni dalla regione contigua non stimolata verso quella stimolata, con depolarizzazione della regione non stimolata, che a sua volta stimola la regione adiacente e cosı̀ via. Lo stimolo si propaga ad una eventuale cellula muscolare con la quale la fibra nervosa può essere in contatto. Figura 1.8: Conduzione nervosa 19 Cap.1 Elettrofisiologia muscolare 1.4 Il potenziale d’azione L’eccitazione di una fibra nervosa o muscolare dipende sia dall’ampiezza che dalla durata dello stimolo. L’attivazione è possibile con un impulso di durata ridotta solo se la sua ampiezza è abbastanza grande e viceversa. Se la durata dell’impulso permette di avere una differenza di potenziale pari alla differenza tra la soglia e il potenziale di riposo, allora si ha l’eccitazione. Con il termine “soglia” (in genere dell’ordine di 30 mV , ma dipendente dal tipo di cellula e dalla sua storia passata) si indica la quantità di depolarizzazione, rispetto al potenziale di riposo, necessaria per iniziare un potenziale d’azione. Solo gli stimoli uguali o superiori al valore di soglia provocheranno il trasferimento dell’informazione, la propagazione, cioè, del potenziale d’azione per una distanza rilevante lungo la fibra stessa, senza variazione della forma d’onda e ad una velocità praticamente costante (variabile tra 40 - 70 m/s per le fibre nervose, 1.3 - 4.7 m/s per le fibre muscolari). Uno stimolo di intensità superiore a quella di soglia è detto sopraliminare. Due stimoli subliminari, cioè di intensità al di sotto della soglia, possono dar origine ad un potenziale d’azione se si susseguono a breve intervallo (sovrapposizone temporale) o avvengono contemporaneamente, ma in due punti diversi del neurone (sovrapposizone spaziale). Durante il periodo in cui la membrana dà origine al potenziale d’azione in risposta ad uno stimolo sopraliminare, la capacità della membrana di rispondere ad un secondo stimolo di qualsiasi tipo è notevolmente modificata. Nella parte iniziale dell’impulso la membrana non può rispondere affatto, anche se 20 Cap.1 Elettrofisiologia muscolare 1.5 La contrazione lo stimolo è molto forte (refrattarietà assoluta); dopo tale intervallo temporale,ma prima del riposo completo, con uno stimolo sufficientemente forte si può ottenere un potenziale d’azione (refrattarietà relativa). 1.5 La contrazione La meccanica della contrazione muscolare diviene più chiara se si comprende bene la successione nel tempo delle varie fasi che la caratterizzano. La stimolazione del nervo motorio, dopo un periodo latente di circa 2 ms prima che inizi la depolarizzazione del sarcolemma, viene trasmessa alla fibra muscolare a livello della placca motrice. Lo stimolo nervoso, arrivato alla parte terminale presinaptica del nervo, libera quanti di acetilcolina (ACH) che si diffondono attraverso lo spazio sinaptico. A questa fase chimica, della trasmissione neuromuscolare, che può durare tra 0.3 e 0.5 ms, segue la depolarizzazione della zona postsinaptica motoria. Da qui la depolarizzazione si propaga lungo tutta la fibra muscolare e dà origine alla risposta contrattile. Dopo la depolarizzazione, il sarcolemma si ripolarizza gradualmente tornando alla situazione di riposo in 5-10 ms, molto prima che sia raggiunto il picco di tensione della contrazione muscolare. L’accorciamento della fibra muscolare con generazione di forza contrattile è il risultato di uno scivolamento tra loro dei due gruppi di filamenti di ciascuna metà del sarcomero. Tale scivolamento si ripete ciclicamente. Durante la contrazione, ciascun ponte trasversale di miosina si attacca alle molecole di actina del filamento sottile adiacente ed esercita forza fino a quando si distacca, 21 Cap.1 Elettrofisiologia muscolare 1.5 La contrazione dopo aver tirato leggermente il filamento sottile verso il centro del sarcomero, inizia quindi un nuovo ciclo, in cui il filamento si riattacca in un punto poco più lontano del filamento sottile. L’effetto di questi scivolamenti ripetuti, conseguenti all’attaccarsi e al distaccarsi dei ponti trasversali di actina e miosina, è il completo accorciamento del sarcomero (Figura 3.4). Figura 1.9: Ponte actina-miosina La graduazione della contrazione muscolare è ottenuta grazie a due diversi mec- 22 Cap.1 Elettrofisiologia muscolare 1.5 La contrazione canismi: • reclutamento di nuove UM all’aumentare dello sforzo, • aumento della frequenza di scarica della singola UM. Nel caso sia stata già evocata una contrazione, la stimolazione della fibra muscolare da luogo ad una seconda risposta contrattile che si somma alla precedente. Infatti, se il secondo stimolo arriva alla fibra muscolare prima che la tensione del primo stimolo sia decaduta, la seconda contrazione si sommerà alla prima, dando luogo ad un significativo aumento del picco di tensione. Se una fibra muscolare viene stimolata ripetutamente a brevi intervalli di tempo ne risulterà una fusione delle singole scosse, fino a formare la contrazione tetanica, detta anche tetano muscolare, che come già accennato, è di gran lunga maggiore di quella della singola scossa. La tensione del tetano può essere mantenuta ad un livello costante fino a che continua la stimolazione o il muscolo non si affatica. Le fibre muscolari lente dei muscoli rossi richiedono 20 stimoli al secondo per formare il tetano, mentre quelle rapide dei muscoli bianchi da 60 a 100 stimoli al secondo. Per comprendere l’adattabilità delle fibre muscolari nelle varie situazioni di esercizio occorre considerare il funzionamento del motoneurone. Ci sono motoneuroni a bassa e ad alta frequenza di scarica. I primi controllano le unità motorie formate da fibre muscolari a contrazione lenta, i secondi quelle con fibre a contrazione rapida. La frequenza di scarica ottimale del motoneurone è quella minima utile perchè le singole scosse muscolari si fondano a formare una contrazione tetanica, essa è detta 23 Cap.1 Elettrofisiologia muscolare 1.6 Il segnale EMG superficiale infatti, frequenza tetanizzante. Tale frequenza è intorno ai 20 Hz per le UM di tipo lento e sopra i 50 Hz per quelle di tipo rapido. L’ordine di reclutamento dei motoneuroni risponde al principio della grandezza: minore è il loro diametro e più facile risulta la loro attivazione, cioè più bassa è la loro soglia di attivazione. Le fibre muscolari di tipo lento sono innervate da motoneuroni più piccoli e sono le prime ad essere attivate nel movimento volontario. Durante le normali attività i motoneuroni più piccoli, a soglia più bassa, scaricano a bassa frequenza per lunghi periodi di tempo, mentre i motoneuroni a soglia più alta, innervanti le fibre di tipo veloce, vengono attivati solo occasionalmente in brevi scariche ad alta frequenza. Nel caso di esercizi di lunga durata ad intensità massimale, detti allenamenti di resistenza, tutti i motoneuroni scaricano a frequenza moderata, ma appena l’impegno cessa di essere massimale, i motoneuroni a soglia più elevata smettono di scaricare. Al contrario, durante l’esercizio ad impegno massimo ma di breve durata, detto allenamento di forza, tutti i motoneuroni scaricano per lunghe sequenze ad alta frequenza. La scarica sincrona di diverse UM produce la tensione massima, mentre quella asincrona è associata ad un prolungamento massimo della contrazione (resistenza). 1.6 Il segnale EMG superficiale In condizioni normali, un potenziale d’azione si propaga lungo tutto il motoneurone, attivando tutti i suoi rami. Quest’ultimi, a loro volta, attivano tutte le fibre muscolari dell’unità motoria. 24 Cap.1 Elettrofisiologia muscolare 1.6 Il segnale EMG superficiale Quando la membrana post-sinaptica della fibra muscolare è depolarizzata, tale depolarizzazione si propaga in entrambe le direzioni, come mostrato in figura 1.10. Figura 1.10: Propagazione della depolarizzazione. La depolarizzazione della membrana, accompagnata da un movimento di ioni, genera un campo magnetico nelle vicinanze delle fibre muscolari. Un elettrodo localizzato in tale campo rileverà il potenziale, la cui escursione temporale è nota come potenziale d’azione. Nel tessuto muscolare umano, l’ampiezza del potenziale rilevato dipende, in prima approssimazione, dal diametro della fibra muscolare, dalla distanza tra la fibra muscolare e la posizione dell’elettrodo e dalle proprietà filtranti dello stesso. Il decremento dell’ampiezza dipende, in maniera proporzionale, alla distanza tra la singola fibra e l’elettrodo di rilevazione. Il segnale risultante alla superficie cutanea, segnale EMG superficiale, detto anche MUAP (motor unit action potential), è, però, la somma spazio-temporale dei potenziali d’azione prodotti dalle depolarizzazioni delle fibre muscolari delle unità motorie. 25 Cap.1 Elettrofisiologia muscolare 1.6 Il segnale EMG superficiale Infatti, alla dispersione spaziale, dovuta alla diversa contrazione di fibre muscolari appartenenti a diverse unità motorie, si aggiunge quella temporale, poichè tutte le fibre muscolari dell’unità motoria non si contraggono esattamente nello stesso istante. Nella zona di rilevazione degli elettrodi convergono, quindi, i contributi di molte unità motorie distinte. Gli impulsi delle numerose fibre che compongono le diverse unità motorie, possono, in qualche modo, realizzare una sovrapposizione in rapporto alle differenti localizzazioni longitudinali delle placche motrici e ai differenti tempi di arrivo dello stimolo nervoso. Inoltre le unità motorie più vicine agli elettrodi daranno un contributo più grande rispetto a quelle situate ad una distanza maggiore. In generale però, i MUAPs possono avere ampiezza e forma simile, se ogni fibra muscolare appartenente alla rispettiva unità motoria ha la stessa distanza dalla zona di rilevamento. Quindi l’interazione di tutte le UM attive, localizzate nell’area di prelievo degli elettrodi, dà origine al segnale elettromiografico superficiale, altrimenti detto “tracciato di interferenza” e tale effetto diviene ancora più visibile qualora, da una lieve contrazione, si passa ad uno sforzo muscolare elevato. Un esempio di tracciato di interferenza è mostrato in figura 1.11. Inoltre, a seconda dell’elettrodo usato, si riscontrano variazioni sulla forma, la fase e la durata dei MUAPs. L’ampiezza e la forma di un MUAP, di cui la figura 1.12 mostra un esempio, sono, pertanto, funzione della disposizione geometrica dell’UM, del tessuto muscolare e delle proprietà degli elettrodi utilizzati. 26 Cap.1 Elettrofisiologia muscolare 1.6 Il segnale EMG superficiale Figura 1.11: MUAP. 27 Cap.1 Elettrofisiologia muscolare 1.6 Il segnale EMG superficiale Figura 1.12: MUAP. 28 Capitolo 2 Acquisizione ed Elaborazione del Segnale Una volta analizzato il segnale elettrico cutaneo muscolare, è stato necessario realizzare uno strumento atto all’eleborazione di tale segnale al fine di poterlo utilizzare concretamente. 2.1 Elettromiografia di Superficie L’elettromiografia è un esame diagnostico utile per la diagnosi delle malattie dei nervi e dei muscoli. Essa, infatti, fornisce risultati caratteristici che permettono la distinzione tra una malattia muscolare, detta miopatia, come ad esempio distrofie, miositi o la miastenia, e una malattia del sistema nervoso periferico, detta neuropatia, come ad esempio polineuropatie, neuriti o sindromi di compressione di una radice di un nervo periferico da ernia del disco o la sindrome del tunnel carpale. L’elettromiografia di superficie (SEMG) si distingue dall’elettromiografia ad ago perchè quest’ultima prevede l’inserzione di un elettrodo ago nel muscolo da studiare per registrarne l’attività, sia a muscolo rilassato, che durante la contrazione. La SE- 29 Cap.2 Acquisizione ed Elaborazione del Segnale 2.1 Elettromiografia di Superficie MG, invece, utilizza elettrodi applicati sulla cute che riveste il muscolo in esame. L’impiego dell’elettromiografia di superficie sta avendo una notevole diffusione sia per le caratteristiche di non invasività, sia per le potenzialità offerte dalle moderne tecniche di analisi numerica del segnale elettromiografico, che possono fornire utili informazioni quantitative sulle condizioni di attività del distretto muscolare esaminato. Nonostante l’elettromiografia di superficie venga usata soprattutto a scopo diagnostico, recentemente è stata oggetto di studio anche da parte di altri settori clinici, con diversi tipi di applicazioni: valutazione della forza muscolare, test isometrici, studio della fatica muscolare, studio e terapia del dolore, studio del controllo del movimento, studio della balbuzie, analisi prestazionali in medicina dello sport, studio dei tremori muscolari, biofeedback della contrazione muscolare, studio del cammino, analisi della spasticità e valutazioni della attività muscolare in generale. Mentre l’elettromiografia ad ago resta una tecnica di primaria importanza a livello diagnostico, e richiede necessariamente, per il suo impiego, la presenza del neurologo, la non-invasività e la disponibilità di metodi di analisi automatica sempre più potenti, rendono la SEMG una tecnica di indagine dell’attività muscolare molto promettente e di grande interesse per la riabilitazione. Tale tecnica risulta, infatti, particolarmente adatta al monitoraggio degli effetti di un trattamento o di un esercizio per aumentarne l’efficacia, per valutare l’affaticamento muscolare o la qualità del recupero di un’attività muscolare compromessa ed in tutte quelle situazioni in cui sia importante quantificare l’attività mio-elettrica in modo non-invasivo e con un vantaggioso rapporto tra efficacia e costi. Oltre a garantire la non invasività dell’esame diagnostico, l’utilizzo di elettrodi di superficie semplifica sensibilmente le operazioni di prelievo del segnale e rende possibile effettuare registrazioni in condizioni di sforzo sia statico che dinamico, ad esempio 30 Cap.2 Acquisizione ed Elaborazione del Segnale 2.2 Il segnale durante l’esecuzione di esercizi o gesti funzionali. Tuttavia è importante ricordare che, avendo il segnale registrato un’ampiezza inversamente proporzionale al quadrato della distanza dalla sorgente, le unità motorie di cui è possibile registrare l’attività sono quelle situate entro un raggio massimo di circa 15 mm dagli elettrodi. Inoltre, la quantità di tessuto interposto tra la sorgente e gli elettrodi può attenuare le componenti ad alta frequenza del segnale, solitamente in modo proporzionale alla profondità dell’unità motoria. Infine, è importante ricordare che talora, soprattutto nel caso di registrazioni effettuate su muscoli di piccole dimensioni o nel caso di errato posizionamento degli elettrodi, è possibile il sommarsi di contributi indesiderati generati da fibre attive di muscoli prossimi a quello in esame. Successivamente verranno spiegate in maggior dettaglio le specifiche di posizionamento degli elettrodi. Come per altre tecniche di registrazione di segnali bio-elettrici, anche per la SEMG è possibile scegliere tra registrazione di tipo monopolare, cioè tramite un elettrodo attivo in corrispondenza del muscolo da esaminare ed uno di riferimento su un punto neutro, ed una registrazione di tipo bipolare, che si effettua con due elettrodi attivi posizionati ambedue sul muscolo esaminato ed uno di riferimento su un punto neutro. La registrazione bipolare offre una migliore immunità ai disturbi, ma nel caso di muscoli di piccole dimensioni, risulta di difficile impiego, essendo meno selettiva di quella monopolare e richiedendo un’area per il posizionamento degli elettrodi maggiore. 2.2 Il segnale Quando si vuole rilevare il segnale EMG ci sono due principali fattori di interesse che influenzano la fedeltà del segnale. Il primo è il rapporto segnale rumore, cioè il 31 Cap.2 Acquisizione ed Elaborazione del Segnale 2.2 Il segnale rapporto tra l’energia del segnale EMG e l’energia del rumore. In generale, il rumore è definito come l’insieme dei segnali elettrici non facenti parte del segnale EMG desiderato. L’altro fattore è la distorsione del segnale, il contributo relativo di qualsiasi componente in frequenza nel segnale EMG non dovrebbe essere alterato. Per i motivi descritti nel capitolo precedente, l’ampiezza del segnale EMG è stocastica e può essere ragionevolmente rappresentata da una funzione di distribuzione Gaussiana. Il range di variazione dell’ampiezza del segnale è compreso tra 0 e 10 mV pp o tra 0 e 1,5 mV rms. L’energia del segnale utilizzabile è limitata alle frequenze tra 0 e 500 Hz, con energia utile nell’intervallo 50-150 Hz. I segnali utilizzabili sono quelli la cui energia è al di sopra del livello del rumore elettrico. Un esempio dello spettro di frequenza del segnale EMG è mostrato in figura 2.1. 2.2.1 Il rumore Il rumore può essere prodotto da varie sorgenti quali: • Rumore intrinseco nei componenti elettrici utilizzati. Qualsiasi attrezzatura elettrica, intatti, genera rumore, di solito esso ha componenti in frequenza che spaziano tra 0 e diverse migliaia di Hz. Tale rumore non può essere eliminato, ma può essere ridotto utilizzando componenti elettronici ad alta qualità e circuiti dal design intelligente. • Rumore ambientale. Questa tipologia di rumore proviene da fonti di radiazioni elettromagnetiche, come apparecchiature televisive, radio, cavi elettrici lampadine, lampade fluorescenti, ecc. 32 Cap.2 Acquisizione ed Elaborazione del Segnale 2.2 Il segnale Figura 2.1: Spettro in frequenza di un segnale EMG In realtà, qualsiasi dispositivo elettro-magnetico può emettere tale rumore. Le superfici del nostro corpo sono costantemente sottoposto a radiazioni elettromagnetiche ed è praticamente impossibile evitarne l’esposizione sulla superficie della terra. La frequenza più preoccupante di tale rumore è quella proveniente dalle reti elettriche, ossia 60 Hz o 50 Hz. L’ampiezza del rumore ambientale può essere da uno a tre ordini di grandezza maggiore del segnale EMG. • Falso movimento. Ci sono sostanzialmente due principali fonti di falso movimento: una è l’interfaccia tra la superficie di rilevazione dell’elettrodo e la pelle, l’altra è data dal movimento dei cavi che connettono gli elettrodi al sistema di 33 Cap.2 Acquisizione ed Elaborazione del Segnale 2.2 Il segnale amplificazione. Entrambe le sorgenti possono essere sensibilmente ridotte con un accurato progetto del circuito elettrico, considerando che entrambe le sorgenti di rumore hanno la maggior parte della loro energia compresa tra 0 e 50 Hz. • Instabilità intrinseca del segnale. L’ampiezza del segnale EMG è quasi-casuale per natura. Le componenti in frequenza tra 0 e 20 Hz sono particolarmente instabili perché sono influenzati dalla natura quasi casuale della frequenza di scarica delle unità motorie. A causa della natura instabile di queste componente del segnale, è consigliabile considerarle come il rumore indesiderato e rimuoverle dal segnale. 2.2.2 Massimizzazione della fedeltà del segnale Ovviamente sarebbe desiderabile ottenere un segnale che abbia la massima quantità di informazione dal segnale EMG e la minima contaminazione da rumore elettrico. Quindi la massimizzazione del rapporto segnale-rumore dovrebbe esser fatta con la minor distorsione possibile del segnale EMG. Pertanto è importante che ogni dispositivo di rilevazione o elaborazione processi il segnale linearmente, in particolare il segnale non dev’essere limitato in ampiezza, per evitare di troncare il picco, introducendo cosı̀ una distorsione, e non devono essere applicati filtri non necessari. Dato che la rete è una sorgente predominante di rumore elettrico, sembrerebbe ragionevole progettare un dispositivo che abbia un notch-filter alla frequenza di rete. Teoricamente tale filtro dovrebbe eliminare solo le frequenze scelte, in realtà qualsiasi implementazione pratica, rimuoverebbe anche porzioni delle componenti in frequenza adiacenti. Dato che l’energia dominante del segnale EMG è collocata tra i 50 e i 150 34 Cap.2 Acquisizione ed Elaborazione del Segnale 2.3 Specifiche di progetto Hz, l’uso di un filtro notch è sconsigliato. 2.3 Specifiche di progetto I criteri di rilevazione del segnale costituiscono una parte fondamentale del progetto, infatti, negli stadi successivi è praticamente impossibile migliorare la fedeltà e il rapporto segnale rumore. Risulta quindi fondamentale estrarre il segnale con distorsione minima e massimo rapporto segnale rumore. Le seguenti caratteristiche sono importanti per il raggiungimento di questo requisito. • Amplificazione differenziale. Per eliminare il segnale rumoroso potenzialmente maggiore, è utile impiegare una configurazione differenziale per il rilevamento. Il funzionamento di un amplificatore differenziale, il cui schema e mostrato in figura 2.2, è semplice, si rilevano due segnali in due siti differenti, tali segnali vengono poi sottratti e la differenza risultante viene amplificata. I risultati di questa operazione sono: l’eliminazione di qualsiasi segnale comune ad entrambi i siti di rilevamento, l’amplificazione dei segnali non comuni. Ogni segnale che ha origine lontano dai siti di rilevamento apparirà come un segnale comune e sarà, quindi, eliminato, mentre i segnali nelle immediate vicinanze degli elettrodi appariranno diversi quindi saranno amplificati. In definitiva, i rumori delle linee di potenza saranno rimossi, mentre il segnale EMG sarà amplificato. Ovviamente migliore è la precisione del componente sottrattore , migliore sarà il risultato. In pratica però, nonostante l’odierna tecnologia molto avanzata, è molto difficile sottrarre due segnali perfettamente. L’accuratezza con cui un amplificatore differenziale può sottrarre i segnali si 35 Cap.2 Acquisizione ed Elaborazione del Segnale 2.3 Specifiche di progetto misura in CMRR (Common Mode Rejection Ratio). Un CMRR di 90 dB è generalmente sufficiente per eliminare il rumore elettrico esterno, ovviamente un perfetto sottrattore avrebbe CMRR infinito. La tecnologia moderna propone dispositivi con CMRR pari anche a 120 dB, ma ci sono diversi motivi per cui non è consigliato spingere il CMRR fino al limite, in particolare – i dispositivi iniziano a costare di più, – sono difficili da mantenere elettricamente stabili, – i rumori potrebbero non arrivare perfettamente in fase ai due elettrodi e perciò potrebbero non essere riconosciuti come segnali comuni. Figura 2.2: Schema di base di un amplificatore differenziale. • Impedenza d’ingresso. L’impedenza alla giunzione tra la pelle e la superficie degli elettrodi può variare da diverse migliaia a diversi milioni di Ohm con la pelle asciutta. Al fine di prevenire l’attenuazione e la distorsione del segnale rilevato a 36 Cap.2 Acquisizione ed Elaborazione del Segnale 2.3 Specifiche di progetto causa degli effetti di carico in ingresso, l’impedenza di ingresso dell’amplificatore differenziale deve essere il più grande possibile, senza però causare complicazioni accessorie per il funzionamento dell’amplificatore differenziale. Odierni dispositivi elettronici possono fornire facilmente impedenze di ingresso dell’ordine dei KΩ. • Elettrodo attivo. Il requisito per una alta impedenza di ingresso introduce un problema noto come capacità di accoppiamento, all’ingresso dell’amplificatore differenziale. Una piccola capacità tra i cavi che portano i segnali in ingresso all’amplificatore differenziale e quelli dell’alimentazione, può introdurre un rumore all’interno dell’amplificatore. La soluzione a questo problema è posizionare l’amplificatore differenziale più vicino possibile alle superfici di rilevamento dell’elettrodo. Questa soluzione prende il nome di elettrodo attivo. Un altro vantaggio di questa configurazione è che l’impedenza di uscita dell’amplificatore differenziale può essere anche molto bassa, dell’ordine di 10 ohm. In questo modo, qualsiasi movimento di possibili collegamenti successivi all’amplificazione differenziale, non genererà disturbi significativi in ingresso al successivo stadio di amplificazione. • Filtraggio. Anche con le precedenti accortezze, il segnale EMG conterrà del rumore. Il rapporto segnale rumore può aumentare con un corretto filtraggio tra i 20 e i 500 Hz con un roll-off di 12 dB/oct. Tale filtro rappresenta di solito lo stadio successivo all’elettrodo attivo. • Stabilità dell’elettrodo. Quando un elettrodo viene posto sulla pelle, le superfici degli elettrodi vengono in contatto con gli elettroliti nella pelle. Avviene, 37 Cap.2 Acquisizione ed Elaborazione del Segnale 2.4 Geometria degli elettrodi quindi, una reazione chimica che richiede un certo tempo per stabilizzarsi, tipicamente nell’ordine di pochi secondi se l’elettrodo è correttamente progettato. Ma, soprattutto, la reazione chimica dovrebbe rimanere stabile durante tutta la sessione di rilevazione e non dovrebbe cambiare significativamente se le caratteristiche elettriche della pelle cambiano a causa di sudorazione o umidità. 2.4 Geometria degli elettrodi In tutta la storia dell’elettromiografia, la forma e la disposizione della superficie degli elettrodi non hanno ricevuto molta attenzione. Molto probabilmente perché i precedenti utilizzatori del segnale elettromiografico sono stati interessati solo agli aspetti qualitativi del segnale EMG. L’avvento di nuove tecniche di lavorazione per estrarre informazioni quantitative dal segnale EMG richiede maggiore attenzione alla configurazione degli elettrodi. Alcuni fattori importanti da considerare sono: • Il rapporto segnale rumore. Il rapporto segnale-rumore è funzione di complesse interazioni tra gli elettroliti della pelle e il conduttore dell’elettrodo. Ci sono diversi approcci per ridurre il rumore, per esempio si può aumentare la superficie di contatto dell’elettrodo o rimuovere la pelle morta, per natura meno conduttiva, dalla superficie cutanea. In particolare elettrodi con superfici di rilevamento in argento quasi puro o cloruro d’argento sono considerati un buon metodo di rilevamento. L’ampiezza del segnale EMG è direttamente proporzionale alla distanza tra le superfici di rilevamento. Quindi, la distanza dovrebbe essere massimizzata. 38 Cap.2 Acquisizione ed Elaborazione del Segnale 2.4 Geometria degli elettrodi Ma, l’aumentare di questa distanza causa problemi nel progetto degli elettrodi. Infatti, più l’elettrodo diventa grande, maggiore diventa il suo ingombro, di conseguenza non può più essere utilizzato per rilevare segnali EMG dei muscoli più piccoli come quelli della mano o dell’avambraccio. Inoltre, se aumenta la distanza, le caratteristiche filtranti dell’amplificatore differenziale diminuiscono in banda. Risulta quindi necessario trovare un compromesso. • La banda passante del segnale. La larghezza di banda del segnale EMG risente dello spazio tra le superfici di rilevamento e della velocità di conduzione del potenziale d’azione lungo le fibre muscolari. L’amplificatore differenziale deve possedere una caratteristica di filtraggio spaziale esprimibile come un filtro passa-banda nella regione delle frequenze del segnale EMG. • La dimensione del muscolo. Le dimensioni del campione muscolare non devono essere grandi poichè le fibre muscolari delle unità motorie sono distribuite in gran parte nella sezione trasversale del muscolo. Pertanto, non è necessario ricoprire una grande porzione del muscolo con la superficie dell’elettrodo di rilevamento per ottenere un campione rappresentativo del segnale EMG per un particolare insieme di unità motorie attive. • La suscettibilità di crosstalk. Tale fenomeno viene tutt’ora spesso trascurato. Maggiore è la larghezza e la lunghezza della superficie di rilevamento degli elettrodi, più tali elettrodi saranno vicini anche ai muscoli adiacenti. Quindi elettrodi più larghi sono più suscettibili a rilevare segnali dai muscoli adiacenti. In situazioni in cui questo fenomeno risulta essere un problema, si devono ridurre le superfici degli elettrodi 39 Cap.2 Acquisizione ed Elaborazione del Segnale 2.5 Posizionamento degli elettrodi Dalla discussione precedente è evidente che la scelta degli elettrodi è necessariamente un compromesso sulla dimensione e sulle superfici di rilevamento. 2.5 2.5.1 Posizionamento degli elettrodi Elettrodi di rilevazione Gli elettrodi devono essere posizionati tra un punto motore del muscolo, cioè quel punto in cui l’introduzione di una minima corrente elettrica provoca una sensibile contrazione delle fibre muscolari superficiali, e il tendine o tra due punti-motore. Essi inoltre dovrebbero essere collocati lungo la linea mediana longitudinale del muscolo, cioè l’asse longitudinale dell’elettrodo, asse immaginario che passa attraverso entrambe le superfici di rilevamento, dovrebbe essere allineato parallelamente alla lunghezza delle fibre muscolari. Infatti, cosı̀ facendo, entrambe le superfici di rilevamento intersecheranno il maggior numero possibile di fibre muscolari. É preferibile non posizionare gli elettrodi sopra al tendine del muscolo o troppo vicino ad esso, infatti, avvicinandosi al tendine, le fibre muscolari si assottigliano e si riducono in numero, ciò comporta la riduzione dell’ampiezza del segnale. Inoltre, nella regione prossima al tendine, il muscolo si assottiglia, rendendo difficile il posizionamento corretto dell’elettrodo, il rilevamento del segnale diviene, inoltre, suscettibile al fenomeno di cross-talk a causa della probabile vicinanza con muscoli antagonisti. É inoltre sconsigliato posizionare gli elettrodi sopra un punto motore. Tale punto di solito, ma non sempre, corrisponde alla parte della zona di innervazione nel muscolo avente la maggiore densità neurale. Presumibilmente, i punti motori sono stati usati in passato come punti di applicazione degli elettrodi perché erano facilmente identifi- 40 Cap.2 Acquisizione ed Elaborazione del Segnale 2.5 Posizionamento degli elettrodi cabili e fornivano un riferimento anatomico fisso. Purtroppo dal punto di vista della stabilità del segnale, un punto motore è la peggior posizione di rilevazione. Infatti, nella regione di un punto motore, i potenziali d’azione viaggiano, in ambo le direzioni, lungo tutta la fibra muscolare, quindi la fase positiva e quella negativa dei potenziali d’azione, rilevate dall’amplificatore differenziale, verranno sommate e sottratte con minor differenza di fase, questo porta ad ottenere un segnale con componenti più alte in frequenza. In definitiva, esistono dei metodi di ricerca del punto ottimale, ma sono spesso abbastanza complessi, quindi, se non si hanno esigenze particolari, si può posizionare il primo elettrodo più vicino al centro del muscolo e il secondo più vicino alla zona tendinea. 2.5.2 Elettrodo di riferimento L’uso di un elettrodo di riferimento, anche detto elettrodo di massa, è necessario per fornire un riferimento comune all’amplificatore differenziale. Tale elettrodo dev’essere quindi posizionato lontano dagli elettrodi di rilevazione e su di una zona elettricamente neutra, come per esempio una prominenza ossea. É assolutamente necessario che l’elettrodo di massa abbia un buon contatto elettrico con la pelle, spesso tale elettrodo viene infatti scelto di dimensioni maggiori degli elettrodi di rilevazione oppure composto da materiale altamente conduttivo e con forti capacità adesive che lo fissano alla pelle con notevole stabilità meccanica. Gel elettricamente conduttivi sono particolarmente efficaci per questo scopo. La posizione dell’elettrodo di massa è estremamente importante, di fatti, con una scelta appropriata, si può persino ridurre o eliminare il rumore proveniente dalla rete elet- 41 Cap.2 Acquisizione ed Elaborazione del Segnale 2.6 Il dispositivo trica. 2.6 Il dispositivo Il dispositivo realizzato si propone si rilevare, elaborare ed inviare al calcolatore il segnale EMG proveniente dal bicipite brachiale destro. Di seguito, tale dispositivo verrà descritto in dettaglio, con attenzione al soddisfacimento delle specifiche suggerite dalla teoria illustrata nei precedenti paragrafi di questo capitolo. 2.6.1 Gli elettrodi Il dispositivo utilizza, come primo stadio di rilevazione del segnale EMG, degli elettrodi monouso di superficie, di forma quadrata e dimensioni modeste, con parte metallica in cloruro d’argento e gel elettrolitico come interfaccia tra la pelle e la parte metallica dell’elettrodo, tali elettrodi sono mostrati in figura 2.3. Figura 2.3: Elettrodi Utilizzati. 42 Cap.2 Acquisizione ed Elaborazione del Segnale 2.6 Il dispositivo Il gel elettrolitico, oltre a diminuire l’impedenza di ingresso, stabilisce e mantiene il contatto con la cute, grazie alle sue proprietà adesive. La scelta dello strato di cloruro d’argento (AgCl) permette alla corrente di passare con maggior facilità attraverso la giunzione tra l’elettrolita e l’elettrodo. Ciò causa la minor introduzione di rumore elettrico nella misura, rispetto agli equivalenti elettrodi con parte metallica in argento puro. Come dimensioni del singolo elettrodo, 3,5 cm × 4,5 cm sono risultate un buon compromesso, soprattutto al fine di evitare il fenomeno di cross-talk, date le dimensioni relativamente modeste del muscolo. Gli elettrodi gelificati possono essere monouso o riutilizzabili. É stata scelta la prima tipologia sia perché più comune e, di conseguenza, facilmente reperibile, sia per la leggerezza e per la vastità di scelta di forme e dimensioni. Inoltre una corretta applicazione degli elettrodi monouso minimizza il rischio di spostamento, anche durante i movimenti più veloci. La tipologia di elettrodi precedentemente descritta è stata utilizzata sia per gli elettrodi di rilevazione che per quello di riferimento, per il quale la necessaria stabilità meccanica è garantita dal gel adesivo. La figura 2.4 mostra il posizionamento degli elettrodi nel caso di rilevazione del segnale EMG proveniente dal bicipite brachiale, che risulta difatti il muscolo considerato. In particolare la distanza tra i due elettrodi di rilevazione è stata scelta pari a 2 cm, abbastanza grande da non fornire un percorso alternativo per la corrente nel caso di eccessiva sudorazione della pelle, e l’elettrodo di riferimento e stato collocato dalla parte opposta del braccio, poco sotto il gomito. 43 Cap.2 Acquisizione ed Elaborazione del Segnale 2.6 Il dispositivo Oltre a soddisfare la maggior parte dei requisiti precedentemente elencati, questa configurazione ha un altro vantaggio pratico: la scelta di elettrodi sufficientemente piccoli e leggeri ed il loro posizionamento fanno si che l’intero apparato di rilevazione non sia invadente per il paziente. Figura 2.4: Posizionamento degli elettrodi di rilevazione. 2.6.2 Il circuito Verrà ora descritto il circuito elettrico che ha il compito di amplificare, raddrizzare e filtrare il segnale EMG precedentemente rilevato. 44 Cap.2 Acquisizione ed Elaborazione del Segnale 2.6 Il dispositivo Con riferimento alla figura 2.5 verranno ora descritte le caratteristiche e lo scopo dei singoli stadi di cui il circuito si compone, con attenzione al soddisfacimento delle specifiche descritte nei paragrafi 3.3.1 e 2.3. Per i motivi precedentemente descritti, il primo stadio è composto dall’amplificazione differenziale IN A106. Tale componente rispetta i due requisiti fondamentali descritti nel paragrafo 2.3, infatti, esso ha impedenza differenziale di ingresso pari a 100KΩ , riesce quindi a prevenire l’attenuazione e la distorsione del segnale rilevato, ed inoltre è caratterizzato da un valore del CMRR pari a 100dB, precisamente nel range delle specifiche. Questo primo stadio ha guadagno di amplificazione è pari a 110, per cui il segnale in uscita da esso risulta essere la differenza di potenziale desiderata, moltiplicata per il fattore 110. Successivamente sono presenti due operazionali facenti parte dell’integrato T L072. Il primo dei due realizza un amplificatore operazionale, in configurazione invertente, di guadagno −15, all’uscita di tale stadio, quindi, il segnale passa dall’ordine dei mV , con cui entrava nell’amplificatore differenziale, all’ordine dei V . Mentre, il secondo operazionale, forma un filtro attivo passa-alto del primo ordine, anch’esso invertente, con frequenza di taglio intorno ai 100Hz. Quest’ultimo filtro permette di eliminare sia una possibile componente continua residua, sia i rumori a basse frequenze. Infatti, come già pienamente descritto nel paragrafo 2.3, le frequenze da 0 a 20 Hz del segnale sono intrinsecamente instabili e vanno quindi eliminate, ed inoltre la componente più rilevante del rumore, ossia quella proveniente dalle reti di potenza, si presenta a 50 o 60 Hz. Il precedente filtro passa alto ha, anch’esso, un guadagno, che però ha valore di molto 45 Cap.2 Acquisizione ed Elaborazione del Segnale 2.6 Il dispositivo inferiore ai precedenti e non è quindi di particolare rilevanza. Inviando ad un oscilloscopio l’uscita dell’ultimo filtro descritto, si ottiene il tracciato EMG amplificato. Tale tracciato è estremamente utile a livello diagnostico, come spiegato all’inizio di questo paragrafo, però per gli scopi di questo lavoro di tesi, ossia la movimentazione a distanza di un robot, è necessario poter inviare dei dati, caratterizzanti il segnale EMG, al calcolatore. A tale scopo, invece di inviare il segnale all’oscilloscopio, se ne continua l’elaborazione, rettificando il segnale in modo da trasformarlo da alternato a continuo. In particolare, il terzo stadio del circuito 2.5, anch’esso realizzato tramite un integrato T L072, rappresenta un raddrizzatore attivo ad onda intera, il cui effetto sul suo ingresso è mostrato in figura 2.6. Figura 2.6: Effetto di un raddrizzatore ad onda intera. Successivamente, è necessaria la presenza di un filtro attivo passa-basso, per ridurre drasticamente le gobbe che presenta il segnale in uscita dal raddrizzatore. Idealmente l’uscita di tale filtro sarà del tipo mostrato in figura 2.7 (linea nera). 46 Cap.2 Acquisizione ed Elaborazione del Segnale 2.6 Il dispositivo Figura 2.7: Effetto del filtro sull’onda raddrizzata. Il filtro precedentemente descritto è in configurazione invertente, quindi l’ultimo stadio del circuito, per conservare il segno del segnale, dev’essere anch’esso invertente. Quest’ultimo stadio invertente è l’ultimo amplificatore operazionale mostrato in figura 2.5, tale configurazione ha guadagno di amplificazione pari a −R2 /R1 , tali resistenze possono quindi essere scelte arbitrariamente per ottenere l’amplificazione totale desiderata. Ovviamente tutti i circuiti integrati, contenendo elementi attivi, devono essere alimentati, in particolare è stata scelta una alimentazione duale di ±9V , con massa comune a tutto il circuito. Tale circuito è stato inizialmente realizzato su breadbord, successivamente alla verifica del corretto funzionamento, i componenti sono stati saldati su una scheda millefori, come mostrato in figura 2.8. 47 Cap.2 Acquisizione ed Elaborazione del Segnale 2.6 Il dispositivo Figura 2.8: Circuito. 2.6.3 Invio dati al calcolatore I segnali in uscita dal circuito finora descritto devono essere successivamente inviati al calcolatore. É quindi necessario uno strumento che possa ricevere in ingresso un segnale continuo, effettuare una discretizzazzione e infine inviarlo ad un computer. La scelta è ricaduta sulla piattaforma Arduino Duemilanove, mostrata in figura 2.9, 48 Cap.2 Acquisizione ed Elaborazione del Segnale 2.6 Il dispositivo per la flessibilità e la facilità di utilizzo sia a livello hardware che software. Figura 2.9: Arduino Duemilanove. La connessione tra il circuito precedentemente descritto e la piattaforma Arduino, è estremamente semplice, infatti basta collegare l’uscita del circuito ad uno degli ingressi analogici dell’Arduino ed infine mettere in comune il riferimento connettendo la massa del circuito all’ingresso GND. Fatto ciò è necessario caricare un programma che legga l’ingresso analogico scelto e invii i dati al calcolatore tramite la porta usb. Per ulteriori dettagli, il programma è riportato in appendice A. 49 Cap.2 Acquisizione ed Elaborazione del Segnale Figura 2.5: Schema Elettrico. 2.6 Il dispositivo 50 Capitolo 3 Telemanipolazione In questo capitolo verrà descritto come è stato possibile comandare un robot a distanza mediante l’utilizzo del segnale, ottenuto come analizzato nel capitolo precedente. Infine verranno presentate altre due applicazioni che utilizzano tale segnale come ingresso. Una volta ottenuto il segnale continuo rappresentativo dell’ampiezza del tracciato EMG e quindi dello sforzo muscolare, esso può essere adoperato per molteplici scopi. In particolare, l’obiettivo di questo lavoro di tesi è mostrare come un paziente, a cui è stato applicato l’impianto di rilevazione descritto nel capitolo precedente, possa comandare un robot, in modo che esso effettui dei movimenti prestabiliti, con le tempistiche e l’intensità dipendenti dalle caratteristiche del segnale ottenuto dalla contrazione di un muscolo. Si richiede, quindi, il completamento di un impianto di telemanipolazione, il cui primo stadio è il circuito elettrico che rileva il segnale muscolare, analizzato nel capitolo precedente. Si definisce, infatti, sistema di telemanipolazione, un sistema in cui l’operatore umano, 51 Cap.3 Telemanipolazione 3.1 Il Robot tramite un’interfaccia locale, riesce a pilotare un sistema robotico remoto. 3.1 Il Robot Nel caso in questione, l’obiettivo è quello di far riprodurre ad un Robot lo stesso movimento che compie il paziente contraendo il bicipite brachiale, al quale sono stati applicati gli elettrodi superficiali. Un Robot antropomorfo risulta particolarmente adatto allo scopo, esso infatti, come anticipa il nome, é in grado di riprodurre le sembianze e i movimenti di un braccio umano. Gli elementi meccanici che costituiscono la struttura di un robot antropomorfo sono indicati con nomi che richiamano immediatamente la stessa natura umana: considerando la figura 3.1, partendo dalla base si ha il Corpo (Asse 1), la Spalla (Asse 2), il Braccio (Asse 3), il Gomito (Asse 4), il Polso (Asse 5) e la Mano (Pinza). Il robot antropomorfo utilizzato è lo SCORBOT III, mostato in figura 3.2. Questo robot ha 5 gradi di libertà ed è formato solo da giunti rotoidali, esso si compone di una struttura portante, che ne assicura la mobilità, e di un organo terminale costituito da una pinza. La movimentazione del singolo giunto è realizzata tramite un motore in corrente continua collegato a un riduttore ed interfacciato con un calcolatore tramite software e hardware dedicati. Sull’albero dei motori sono montati degli encoders che rilevano la posizione angolare. Sono inoltre presenti dei microswitch che indicano la posizione di riferimento del giunto. 52 Cap.3 Telemanipolazione 3.1 Il Robot Figura 3.1: Robot Antropomorfo Come si può vedere in figura 3.2 la gestione del Robot in questione è affidata ad un calcolatore che, in base ai comandi dell’utente, pilota l’elettronica, contenuta all’interno dell’unità di potenza, e quest’ultima invia i segnali di potenza direttamente ai motori del robot. C’è, inoltre, un feedback continuo dato dai segnali che partono dagli encoder del robot e tornano al calcolatore, in questo modo è possibile conoscere la posizione angolare di tutti i giunti istante per istante, infatti, noti i passi encoder relativi ad un motore, mediante una semplice conversione, si ottiene la variazione angolare del relativo giunto, la tabella 3.1 riporta i fattori di conversione da angoli a passi encoder. La posizione angolare dell’intero robot è nota poichè, per ogni motore, ossia per 53 Cap.3 Telemanipolazione 3.1 Il Robot Motore 1 Motore 2 Motore 3 Pitch Roll K1 K2 K3 K4 K5 0.046554 0.059135 0.059371 0.242677 0.229088 Tabella 3.1: Fattori di conversione da angoli a passi encoder ogni giunto, sono note sia la variazione angolare, sia un valore di riferimento fisso dato dagli switch. Quindi, oltre ad imporre angoli desiderati per tutti i giunti, è anche possibile implementare una legge di controllo in retroazione dalle informazioni degli switch. La legge di controllo utilizzata è caratterizzata da un semplice controllore P, è quindi un feeeback negativo proporzionale all’errore tra l’angolo di riferimento e l’angolo misurato dagli encoder, con costanti di proporzionalità scelti adeguatamente per ogni giunto. Figura 3.2: Gestione Scorbot 54 Cap.3 Telemanipolazione 3.2 3.2 Comunicazione Comunicazione Affinchè il robot possa riprodurre il movimento umano, occorre che il calcolatore che comanda l’unità di potenza del robot riceva i dati rilevati dal sistema di acquisizione. Tale comunicazione può essere instaurata in vari modi. In previsione di un possibile utilizzo a grande distanza, si è preferito usare una comunicazione di tipo client-server basata su socket con internet come dominio di comunicazione. Un sistema client-server è un’architettura di rete nella quale un programma chiamato Client richiede dei servizi ad un altro programma chiamato Server, quest’ultimo è in ascolto di richieste da parte dei client, esegue tali richieste con le risorse che ha a disposizione, e rispedisce, se richiesto, i risultati al client. In definitiva i sistemi client-server sono un’evoluzione dei sistemi basati sulla condivisione semplice delle risorse, infatti, la presenza di un server permette ad un certo numero di client di condividere risorse, lasciando che sia il server a gestire gli accessi, per evitare conflitti di utilizzazione. Il client e il server possono risiedere su computer diversi: qualsiasi operazione è trasparente ad entrambi. Una socket è equivalente ad una porta di comunicazione, tutto ciò che è in grado di comunicare tramite il protocollo standard TCP/IP, può collegarsi ad una socket e comunicare tramite tale porta. Le socket e il protocollo TCP/IP forniscono quindi un’astrazione, che permette di far comunicare dispositivi diversi che utilizzano lo 55 Cap.3 Telemanipolazione 3.2 Comunicazione stesso protocollo. Tale tipologia di comunicazione ha come unico vincolo, che i due calcolatori tra cui è instaurata, devono trovarsi connessi alla stessa rete e il client deve necessariamente conoscere l’indirizzo IP del server. L’interfaccia socket è in linguaggio C ed è per calcolatori Unix, il protocollo TCP/IP garantisce, però, l’interoperabilità tra calcolatori anche se equipaggiati con sistemi operativi differenti. Questo aspetto è importante dal punto di vista della portabilità e della flessibilità d’uso, ma non è rilevante nel contesto considerato, dove entrambi i calcolatori coinvolti hanno sistemi operativi basati su UNIX. Nel caso in esame il server è rappresentato del computer che riceve i segnali dal dispositivo di acquisizione, mentre il client è unico ed è rappresentato dal computer che comanda l’unità di potenza del robot. Come linguaggio di programmazione è stato scelto il linguaggio C, esso mette a disposizione tutte le funzioni necessarie per instaurare il suddetto tipo di comunicazione. Il programma realizzato non può limitarsi solo ad inviare dei dati al client, ma deve, prima di tutto, venire in possesso di tali dati. Per questo motivo è risultato necessario permettere al programma di leggere direttamente i dati presenti sulla seriale USB con cui Arduino comunica. In generale, il server attende che sia instaurata una connessione con un client, crea cioè la socket, si mette in ascolto e appena arriva una richiesta da parte di un client la accetta. Una volta stabilita una connessione stabile, il server tenta di aprire e configurare la porta specificata, e, se tutte le operazioni sono andate a buon fine, invia sulla porta un messaggio che Arduino interpreta come il comando di iniziare ad inviare, su tale porta, i valori rappresentativi l’ampiezza dello stimolo muscolare. Il server, può 56 Cap.3 Telemanipolazione 3.2 Comunicazione quindi ottenere tali valori, semplicemente leggendo dalla porta. Appena letto, al valore viene applicato un filtro numerico del secondo ordine e ciò che si ottiene viene inviato al client tramite la socket precedentemente creata. Parallelamente, il client, dopo aver inviato la richiesta di connessione e dopo che quest’ultima è stata instaurata con successo, aspetta di leggere un dato sulla socket. Una volta letto, successivamente ad una semplice mappatura per far coincidere il valore del dato con un angolo appropriato, invia l’informazione all’unità di potenza a cui spetta il compito di imprimere, al motore del giunto considerato, la giusta tensione per il raggiungimento dell’angolo di riferimento. Per ulteriori dettagli, i listati dei programmi server.c e client.c sono riportati nell’Appendice B, mentre il codice arduino è riportato nell’Appendice A. La figura seguente mostra il sistema di telemanipolazione al completo e ritrae il robot mentre riproduce la contrazione dell’avambraccio destro. 57 Cap.3 Telemanipolazione 3.3 3.3 Altre Applicazioni Altre Applicazioni Verranno ora presentate altre due applicazioni che consentono un diverso utilizzo del segnale muscolare. In particolare, la prima applicazione riguarda l’ottenimento del grafico che rappresenta l’andamento del segnale nel tempo, ed è utile per tener traccia dell’andamento dello sforzo muscolare; la seconda è, invece, un’applicazione grafica con lo scopo di intrattenere il paziente grazie ad un gioco semplice, ma accattivante. 3.3.1 Tracciato dello sforzo muscolare Sarà mostrato ora come sia possibile ottenere un tracciato dello forzo muscolare nel tempo, magari in relazione ad un particolare esercizio fisico che coinvolge tale muscolo. Data la grande compatibilità tra Arduino ed il software Processing, l’uso di quest’ultimo risulta particolarmente semplice e allo stesso tempo molto potente. In particolare, nel caso si voglia realizzare un’applicazione di questo tipo, il software Processing ha un ruolo fondamentale. Infatti, mentre Arduino legge i dati dall’ingresso analogico e li invia sulla seriale, Processing può facilmente leggere da tale porta e riesce, altrettanto facilmente, ad accedere ad uno specifico file di testo dove registra tutti i valori letti, precedentemente filtrati. Una volta ottenuto il file di testo contenente tutti i valori rappresentanti l’andamento dello sforzo muscolare, si può utilizzare l’ambiente Matlab per graficarli. A titolo di esempio, la figura 3.3, mostra quattro contrazioni consecutive del bicipite brachiale destro, mentre la figura 3.4, rappresenta il risultato di un tentativo consi- 58 Cap.3 Telemanipolazione 3.3 Altre Applicazioni stente nel mantenere costante, per alcuni secondi, una contrazione di media intensità. Figura 3.3: Contrazioni consecutive 59 Cap.3 Telemanipolazione 3.3 Altre Applicazioni Figura 3.4: Singola contrazione 3.3.2 Gioco La seguente applicazione grafica, realizzata anch’essa tramite Processing, consiste nel movimentare un sbarretta colorata, mostrata in figura 3.5, al fine di non far uscire la pallina gialla dallo schermo. La posizione della sbarretta è appunto controllata dall’ampiezza del segnale elettrico muscolare, nello specifico, contraendo il muscolo la sbarretta scende, mentre rilassandolo essa risale sullo schermo. 60 Cap.3 Telemanipolazione 3.3 Altre Applicazioni Figura 3.5: Schermata dell’applicazione Ovviamente tale applicazione è stata presentata non tanto fine a se stessa, ma altresı̀ allo scopo di mostrare che, una volta ottenuto il segnale, si riesce facilmente a creare un programma grafico personalizzato per un preciso scopo. Un altro esempio potrebbe essere quello di riprodurre graficamente un insieme di tasti rappresentanti diverse scelte, come per esempio la scelta del canale televisivo o del volume, e permettere al paziente di scegliere il tasto da premere mediante movimenti orizzontali e verticali dettati dalle ampiezze dei segnali derivanti da due muscoli distinti. 61 Capitolo 4 Controllo Nel seguente capitolo verranno applicate, in simulazione, ad un modello semplificato del Robot in esame, due differenti tipologie di controllo. La prima utilizza un controllore basato su passività, mentre la seconda si basa su di un controllo in feedback linearization. Verranno infine presentate le principali differenze tra le due tipologie. 4.1 Il Sistema Il modello a cui ci si riferirà per tutto il seguente capitolo rappresenta un robot a 2-link di tipo RR semplificato. In particolare le equazioni che lo descrivono sono le seguenti M (q)q̈ + C(q, q̇)q̇ + G(q) = u, (4.1.1) dove q è un vettore bidimensionale, delle coordinate generalizzate rappresentanti i due angoli di giunto e u è un vettore bidimensionale che specifica le due coppie di ingresso. q q= 1 , q2 u u= 1 u2 (4.1.2) 62 Cap.4 Controllo 4.1 Il Sistema M (q) è la matrice di inerzia, è simmetrica e definita positiva ∀q ∈ R2 . Le sue componenti sono h11 = I1 + m1 b21 + i2 + m2 (l12 + b22 + 2l1 b2 cos(q2 )) (4.1.3) h12 = I2 + m2 b22 + m2 I2 (b22 + l1 b2 cos(q2 )) (4.1.4) h21 = h12 (4.1.5) h22 = I2 + m2 b22 (4.1.6) Il termine C(q, q̇)q̇ tiene conto della forza centrifuga e di Coriolis. La matrice C(q, q̇) è tale che Ṁ − 2C è una matrice antisimmetrica ∀q, q̇ ∈ R2 , dove con Ṁ si intende la derivata totale M (q) rispetto al tempo. Le singole componenti di C sono le seguenti c11 = −m2 l1 b2 sin(q2 )q˙2 (4.1.7) c12 = m2 l1 b2 sin(q2 )(q˙1 − q˙2 ) (4.1.8) c21 = m2 l1 b2 sin(q2 )q˙1 (4.1.9) c22 = 0 (4.1.10) Infine il vettore G(q) rappresenta l’azione delle forze gravitazionali sui due link g1 = (m1 b1 + m2 l1 )g cos(q1 ) + m2 b2 g cos(q1 + q2 ) (4.1.11) g2 = m2 b2 g cos(q1 + q2 ) (4.1.12) 63 Cap.4 Controllo 4.2 4.2.1 4.2 Controllo Passivo Controllo Passivo Passività Il concetto di passività è utile per lo studio dei sistemi non lineari. Inizialmente verrà definita la passività per le non linearità senza memoria, successivamente le definizioni saranno estese a sistemi dinamici rappresentati nello spazio di stato. Le definizioni verranno motivate tramite esempi di reti elettriche. Verranno inoltre studiate funzioni di trasferimento reali positive e verrà mostrato come esse rappresentino sistemi passivi. Infine verranno presentati i più rilevanti teoremi sulla passività. Funzioni senza memoria Verrà ora definito il concetto di passività per funzioni senza memoria, ossia funzioni del tipo y = h(t, u). Consideriamo come esempio un resistore elettrico con tensione di ingresso u e corrente di uscita y. Il resistore è passivo se l’afflusso di potenza è sempre non-negativo, ossia se uy ≥ 0 per tutti i punti (u, y) della sua caratteristica u − y. Il più semplice resistore di questo tipo è il resistore lineare, infatti il prodotto uy = Gy 2 , dove G è la conduttanza, è sempre non-negativo. Gli elementi Passivi non lineari hanno curve u − y non lineari e giacenti nel primo e terzo quadrante. Per una rete multiporte, dove u e y sono vettori, la potenza che scorre nella rete è il P P prodotto scalare uT y = i ui yi = i ui hi (u). La rete è passiva se uT y ≥ 0, ∀u. Il concetto di passività sarà ora generalizzato ad ogni funzione y = h(t, u). Per quanto riguarda il caso scalare il grafico della relazione ingresso-uscita deve gia- 64 Cap.4 Controllo 4.2 Controllo Passivo cere nel primo e nel terzo quadrante, in tal caso si usa dire che il grafico appartiene all’intervallo [0, ∞], dove 0 e ∞ sono le pendenze dei bordi della regione che comprende primo e terzo quadrante. La rappresentazione grafica è valida anche se h è tempo-variante, in tal caso la curva u − y cambierà nel tempo, ma apparterrà sempre all’intervallo [0, ∞]. Per una funzione vettoriale si può trovare una rappresentazione grafica nel caso speciale in cui y = h(t, u) sia decomponibile in modo tale che hi (t, u) dipenda solo da ui , ossia nel caso in cui si possa scrivere h1 (t, u1 ) h2 (t, u2 ) h(t, u) = .. . (4.2.1) hp (t, up ) In tal caso, il grafico di ogni componente appartiene all’intervallo [0, ∞]. In generale però una rappresentazione grafica non è possibile, quindi è sempre preferibile verificare che uT h(t, u) ≥ 0, ∀(t, u). Un caso particolare di passività è quello in cui uT y = 0, in tal caso il sistema si definisce lossless. Si consideri ora una funzione h(t, u) che soddisfa uT y ≥ uT ϕ(u) per qualche funzione ϕ(u). Se uT ϕ(u) ≥ 0, ∀u 6= 0, allora h è detta strettamente passiva sull’ingresso, la passvità è stretta nel senso che uT ϕ(u) = 0 solo se u = 0, analogamente nel caso scalare il grafico u − y tocca l’asse u solo nell’origine. In tal caso il termine uT ϕ(u) rappresenta l’eccesso di passività. Se invece uT ϕ(u) è negativo per qualche valore di u, allora il termine uT ϕ(u) rappresenta la carenza di passività. 65 Cap.4 Controllo 4.2 Controllo Passivo Eccesso e carenza sono più chiari nel caso in cui h è scalare e ϕ(u) = εu. In tal caso h appartiene all’intervallo [ε, ∞], con eccesso di passività se ε > 0 o carenza di passività se ε < 0. L’eccesso o la carenza di passività possono essere rimossi dal sistema mediante un’ operazione di feedforward. Definendo la nuova uscita come ỹ = y − ϕ(u), si ha uT ỹ = uT [y − ϕ(u)] ≥ uT ϕ(u) − uT ϕ(u) = 0 (4.2.2) Quindi una qualsiasi funzione che soddisfa uT y ≥ uT ϕ(u) può essere trasformata in una funzione che appartiene all’intervallo [0, ∞] tramite feedforward. Tale funzione viene detta input-feedforward passive. Inoltre, supponiamo che uT y ≥ y T ρ(y) per qualche funzione ρ(y), analogamente al caso precedente, si verifica un eccesso di passività se y T ρ(y) > 0, ∀y 6= 0 e carenza di passività se y T ρ(y) è negativo per qualche valore di y. L’eccesso o la carenza di passività possono essere rimossi tramite una retroazione, infatti, ridefinendo l’ingresso come ũ = u − ρ(y), si ha ũT y = [uT − ρ(y)]T y ≥ y T ρ(y) − y T ρ(y) = 0 (4.2.3) Quindi qualsiasi funzione che soddisfa uT y ≥ y T ρ(y) può essere trasformata in una funzione che appartiene all’intervallo [0, ∞] tramite feedback. Tale funzione viene detta output-feedback passive. Inoltre, se y T ρ(y) > 0, ∀y 6= 0, la funzione viene detta strettamente passiva sull’uscita. Si consideri ora una funzione scalare y = h(t, u) che soddisfa la seguente disuguaglianza αu2 ≤ uh(t, u) ≤ βu2 , ∀(t, u) (4.2.4) 66 Cap.4 Controllo 4.2 Controllo Passivo dove α e β sono numeri reali e β ≥ α. Il grafico di questa funzione appartiene ad un settore i cui estremi sono le rette y = αu e y = βu, si dice quindi che h appartiene al settore [α, β], tale settore è l’intersezione dei settori [α, ∞] e [0, β], si dimostra infatti che una funzione di questo tipo può essere trasformata in un’altra, che appartiene al settore [0, ∞], tramite una sequenza di operazione di feedforward e feedback. Prima però è preferibile estendere la definizione di settore al caso vettoriale. A tal fine si noti che la disequazione (4.2.4) è equivalente alla seguente: [h(t, u) − αu][h(t, u) − βu] ≤ 0, ∀(t, u) (4.2.5) Per quanto riguarda il caso vettoriale, si consideri inizialmente una funzione h(t, u) decomposta come in (4.2.17). Si supponga che ogni componente hi soddisfi la condizione (4.2.4) con costanti αi e βi ≥ αi . Prendendo K1 = diag(α1 , α2 , . . . , αp ), K2 = diag(β1 , β2 , . . . , βp ) (4.2.6) Si può facilmente notare che vale la seguente disequazione [h(t, u) − K1 u]T [h(t, u) − K2 u] ≤ 0, ∀(t, u) (4.2.7) Si noti che K = K1 − K2 è una matrice simmetrica definita positiva. In definitiva una funzione senza memoria f : Rp → Rp appartiene al settore • [0, ∞] se uT h(t, u) ≥ 0 • [K1 , ∞] se uT [h(t, u) − K1 u] ≥ 0 • [0, K2 ], con K2 = K2T ≥ 0, se hT (t, u)[h(t, u) − K2 u] ≤ 0 67 Cap.4 Controllo 4.2 Controllo Passivo • [K1 , K2 ], con K = K2 − K1 = K T > 0, se [h(t, u) − K1 u]T [h(t, u) − K2 u] ≤ 0 In ogni caso le disuguaglianze devono valere ∀(t, u). Il settore [0, ∞] corrisponde alla passività. Il settore [K1 , ∞] corrisponde a passività sull’ingresso in feedforward con ϕ(u) = K1 u, mentre il settore [0, K2 ], con K2 = 1δ I > 0 corrisponde a passività sull’uscita in feedback con ρ(u) = δy, ciò spiega come una funzione appartenente al settore [K1 , K2 ] può essere trasformata in una funzione che appartiene al settore [0, ∞]. Sistemi dinamici Si consideri un sistema dinamico nello spazio di stato ẋ = f (x, u) (4.2.8) y = h(x, u) dove f : Rn × Rp → Rn è localmente di Lipschitz 1 , h : Rn × Rp → Rn è continua, f (0, 0) = 0 e h(0, 0) = 0 ed infine il sistema ha lo stesso numero di ingressi e di uscite. Il sistema descritto dalle equazioni (4.2.8) è passivo se esiste una funzione V (x) semidefinita positiva e differenziabile con continuità, tale che uT y ≥ V̇ = ∂V f (x, u), ∂x ∀(x, u) ∈ Rn × Rp (4.2.9) 1 Sia Ω ⊆ Rn aperto. Una funzione f : Ω → Rm si dice localmente lipschitziana se per ogni insieme compatto K ⊂ Ω esiste una costante LK > 0 tale che kf (x2 ) − f (x1 )k ≤ LK kx2 − x1 k, ∀x1 , x2 ∈ K. 68 Cap.4 Controllo 4.2 Controllo Passivo Inoltre il sistema si definisce • senza perdita se uT y = V̇ . • passivo sull’ingresso in feedforward se uT y ≥ V̇ + uT ϕ(u) per qualche funzione ϕ. • strettamente passivo sull’ingresso se uT y ≥ V̇ + uT ϕ(u) e uT ϕ(u) > 0, ∀u 6= 0. • passivo sull’uscita in feedback se uT y ≥ V̇ + y T ρ(y) per qualche funzione ρ. • strettamente passivo sull’uscita se uT y ≥ V̇ + y T ρ(y) e y T ρ(y) > 0, ∀y 6= 0. • strettamente passivo se uT y ≥ V̇ +ψ(x) per qualche funzione ψ definita positiva. In ogni caso le disuguaglianze devono valere ∀(x, u). Tali definizioni ricordano quelle precedentemente enunciate per funzioni senza memoria, l’unica differenza è la presenza della storage function V (x), d’altronde se si adotta la convenzione V (x) = 0 per le funzioni senza memoria, le definizioni precedenti risultano valide sia per sistemi dinamici descritti nello spazio di stato, sia per funzioni senza memoria. Teoremi di Stabilità Con riferimento al sistema caratterizzato dalle equazioni (4.2.8), con f : Rn ×Rp → Rn localmente di Lipschitz, h : Rn × Rp → Rn continua, f (0, 0) = 0 e h(0, 0) = 0. Lemma 1. Se il sistema (4.2.8) è passivo con una storage function V (x) definita positiva, allora l’origine di ẋ = f (x, 0) è stabile. 69 Cap.4 Controllo 4.2 Controllo Passivo Definizione 1. Il sistema (4.2.8) si dice essere zero-state observable se nessuna soluzione di ẋ = f (x, 0) può stare identicamente in S = {x ∈ Rn | h(x, 0) = 0}, tranne la soluzione banale x(t) ≡ 0. Lemma 2. Si consideri il sistema (4.2.8). L’origine di ẋ = f (x, 0) è asintoticamente stabile se il sistema è • strettamente passivo, oppure • strettamente passivo sull’uscita e zero-state observable. Inoltre, se la storage function è radialmente illimitata, l’origine è globalmente asintoticamente stabile. Lemma 3. Si consideri il sistema (4.2.8). Se tale sistema risulta strettamente passivo sull’uscita e zero-state observable, allora le proprietà di stabilità dell’origine descritte nel Lemma 2 si mantengono se si connette in retroazione una funzione senza memoria, non per forza stazionaria, anch’essa strettamente passiva sull’uscita. 4.2.2 Teoremi di Passività Figura 4.1: Connessione Feedback 70 Cap.4 Controllo 4.2 Controllo Passivo Considerando la connessione feedback mostrata in figura 4.1, dove ogni componente, H1 e H2 , del feedback è un sistema dinamico stazionario rappresentato nello spazio di stato dalle seguenti equazioni ẋi = fi (xi , ei ) (4.2.10) yi = hi (xi , ei ) oppure una funzione senza memoria rappresentata da yi = hi (t, ei ) (4.2.11) In questo paragrafo verrà esaminata la stabilità del feedback sulla base delle proprietà di passività delle componenti H1 e H2 . Si richiede che la connessione abbia un modello di stato ben definito. Se entrambe le componenti H1 e H2 sono sistemi dinamici, allora il sistema a ciclo chiuso ha la seguente forma ẋ = f (x, u) (4.2.12) y = h(x, u) con x x= 1 , x2 u u= 1 , u2 y y= 1 y2 (4.2.13) Si assuma f localmente di Lipschitz, h continua, f (0, 0) = 0 e h(0, 0) = 0. La connessione feedback ha un modello nello spazio di stato ben definito se le seguenti equazioni 71 Cap.4 Controllo 4.2 Controllo Passivo e1 = u1 − h2 (x2 , e2 ) (4.2.14) e2 = u2 + h1 (x1 , e1 ) (4.2.15) hanno un’unica soluzione (e1 , e2 ) per ogni (x1 , x2 , u1 , u2 ). Inoltre la (4.2.14) e la (4.2.15) hanno sempre un’unica soluzione se h1 è indipendente da e1 o se h2 è indipendente da e2 . In tal caso le funzioni f e h del ciclo chiuso ereditano le proprietà di continuità sulle derivate delle funzioni fi e hi delle componenti del feedback. In particolare, se fi e hi sono localmente di Lipschitz, allora lo sono anche f e h. Per sistemi lineari, richiedere che hi sia indipendente da ei , equivale a richiedere che Hi sia strettamente propria. Quando una componente, per esempio H1 , è un sistema dinamico, mentre l’altra componente, in questo caso H2 , è una funzione senza memoria, il ciclo chiuso assume la forma ẋ = f (t, x, u) (4.2.16) y = h(t, x, u) con x = x1 , u u= 1 , u2 y y= 1 y2 (4.2.17) Si assuma f continua a tratti in t e localmente di Lipschitz in (x, u), h continua a tratti in t e continua in (x, u), f (0, 0) = 0 e h(0, 0) = 0. 72 Cap.4 Controllo 4.2 Controllo Passivo La connessione feedback ha un modello nello spazio di stato ben definito se le seguenti equazioni e1 = u1 − h2 (t, e2 ) (4.2.18) e2 = u2 + h1 (x1 , e1 ) (4.2.19) hanno un’unica soluzione (e1 , e2 ) per ogni (x1 , t, u1 , u2 ). Questo avviene sempre se h1 è indipendente da e1 . Il caso in cui entrambe le componenti del feedback siano senza memoria è meno rilevante e segue banalmente come un caso speciale dei precedenti in cui lo stato x non esiste, in tal caso la connessione feedback è rappresentata da y = h(t, u). Si consideri il seguente teorema: Teorema 4.2.1. La connessione feedback di due sistemi passivi è anch’essa un sistema passivo. Verrà ora analizzata la stabilità e l’asintotica stabilità dell’origine del sistema a ciclo chiuso quando u = 0. La stabilità dell’origine deriva banalmente dal teorema precedente e del Lemma 2. La stabilità asintotica è invece soggetto del seguente teorema. Teorema 4.2.2. Si consideri la connessione in feedback di due sistemi dinamici stazionari della forma (4.2.8). L’origine del sistema a ciclo chiuso (quando u = 0) è asintoticamente stabile se • entrambe le componenti del feedback sono strettamente passive, 73 Cap.4 Controllo 4.2 Controllo Passivo • entrambe le componenti del feedback sono strettamente passive sull’uscita e zerostate observable, • una componente del feedback è strettamente passiva e l’altra è strettamente passive sull’uscita e zero-state observable. Inoltre se la storage function è radialmente illimitata per ogni componente, l’origine è globalmente asintoticamente stabile. Quando la connessione in feedback è composta da un sistema dinamico e una funzione senza memoria, è possibile analizzare la stabilità del sistema utilizzando il criterio di Lyapunov, considerando la storage function del sistema dinamico come una funzione candidata di Lyapunov. Bisogna però distinguere il caso in cui la funzione senza memoria sia tempo-variante dal caso in cui sia stazionaria, di ciò verrà tenuto conto nei seguenti teoremi. Teorema 4.2.3. Se si considera la connessione in feedback di un sistema dinamico strettamente passivo e stazionario della forma (4.2.8) con una funzione senza memoria passiva, possibilmente tempo-variante, della forma (4.2.11), allora l’origine del sistema a ciclo chiuso (4.3.1) (quando u = 0) è uniformemente asintoticamente stabile. Inoltre se la storage function del sistema dinamico è radialmente illimitata, l’origine diventa globalmente uniformemente asintoticamente stabile. Teorema 4.2.4. Si consideri la connessione in feedback di un sistema dinamico, H1 , stazionario, della forma (4.2.8) con una funzione senza memoria, H1 , stazionaria, della forma (4.2.11). Si supponga che H1 sia zero-state observable e abbia una storage function definita positiva che soddisfa eT1 y1 ≥ V̇1 + y1T ρ1 (y1 ) (4.2.20) 74 Cap.4 Controllo 4.2 Controllo Passivo e che H2 soddisfi eT2 y2 ≥ eT2 ϕ2 (e2 ) (4.2.21) Allora l’origine del sistema a ciclo chiuso (4.3.1) (quando u = 0) è asintoticamente stabile se v T [ρ1 (v) + ϕ2 (v)] > 0, ∀v 6= 0 (4.2.22) Inoltre, se V1 è radialmente illimitata, l’origine diventa globalmente asintoticamente stabile. In generale, nel caso in cui una componente della connessione in feedback non sia passiva, o in qualche modo non soddisfi le condizioni necessarie per i teoremi precedenti, si può agire sulle singole componenti con delle operazioni di feedforward e di feedback atte ad ottenere le proprietà richieste. Infine, il seguente teorema racchiude l’idea di base del controllo basato su passività Teorema 4.2.5. Se il sistema descritto dalle (4.2.8) è • passivo con storage function definita positiva e radialmente illimitata, • zero-state observable, allora l’origine x = 0 può essere stabilizzata globalmente dal controllo u = −φ(y), dove φ è una qualsiasi funzione di Lipschitz tale che φ(0) = 0 e y T φ(y) ≥ 0, ∀y 6= 0. 4.2.3 Controllore Basato su Passività Si prenda ora in considerazione il modello semplificato del Robot descritto nel paragrafo 4.1. 75 Cap.4 Controllo 4.2 Controllo Passivo Si vuole trovare una soluzione al problema di regolazione che consiste nel progettare una legge di controllo in modo che q insegua asintoticamente un riferimento costante qr . Sia e = q − qr l’errore tra gli angoli ai giunti e i rispettivi riferimenti. Tale errore soddisfa le equazioni differenziali M (q)ë + C(q, q̇)ė + G(q) = u (4.2.23) L’obiettivo è quello di stabilizzare il sistema nel punto (e = 0, ė = 0), ma tale punto non è un equilibrio del sistema a ciclo aperto, si consideri quindi u = G(q) − Kp e + v1 (4.2.24) dove Kp è una matrice simmetrica e definita positiva e v è una componente addizionale del controllo che sarà scelta in seguito. Sostituendo u nell’equazione di ë si ottiene M (q)ë + C(q, q̇)ė + Kp e = v1 (4.2.25) Considerando la seguente 1 1 V1 = ėT M (q)ė + eT Kp e 2 2 (4.2.26) come candidata a storage function. La funzione V1 è definita positiva e la sua derivata soddisfa 76 Cap.4 Controllo 4.2 Controllo Passivo 1 V˙1 = ėT M ë + ėT Ṁ ė + eT Kp ė 2 = ėT (Ṁ − 2C)ė + ėT v1 (4.2.27) ≤ ėT v1 Definendo come uscita y = ė, si può notare che il sistema con ingresso v e uscita y è passivo con V1 come storage function. Inoltre, se v1 = 0 si ha y(t) ≡ 0 ⇔ ė ≡ 0 ⇒ ë ≡ 0 ⇒ Kp e(t) ≡ 0 ⇒ e(t) ≡ 0 (4.2.28) il sistema è quindi zero-state observable, per cui può essere stabilizzato globalmente dal controllo v1 = −φ(ė) dove φ è una qualsiasi funzione tale che φ(0) = 0 e y T φ(y) > 0, ∀y 6= 0. La scelta più semplice sembra essere v1 = −Kd ė, con Kd matrice simmetrica e definita positiva. Con questo controllo ausiliario la legge di controllo complessivo risulta essere u = G(q) − Kp e − Kd ė (4.2.29) Si è quindi ottenuto un classico controllore PD con l’aggiunta di un termine non lineare che bilancia gli effetti di gravità. Successivamente si è provato ad applicare il Teorema 4.2.4 al caso in esame. Per poter applicare il teorema occorre che tutte le ipotesi, riportate di seguito, siano rispettate • Le due componenti della retroazione sono, un sistema dinamico, H1 , e una funzione senza memoria, H2 . 77 Cap.4 Controllo 4.2 Controllo Passivo • H1 è zero-state observable • H1 ha una storage function definita positiva che soddisfa v T ė ≥ V̇ + ėT ρ(ė) (4.2.30) ėT v ≥ ėT ϕ(ė) (4.2.31) • H2 soddisfa la seguente Innanzitutto, dato che il nostro scopo è quello di stabilizzare il punto (e = 0, ė = 0), bisogna renderlo un punto di equilibrio del sistema d’errore. Quindi considerando la dinamica M (q)ë + C(q, q̇)ė + G(q) = u (4.2.32) u = G(q) − Kp e + v (4.2.33) e ponendo analogamente al caso precedente si ottiene M (q)ë + C(q, q̇)ė + Kp e = v (4.2.34) Si procede ora verificando le ipotesi del teorema. La prima ipotesi è banalmente verificata, poichè, nel caso in esame, la prima componente della retroazione è il sistema d’errore relativo alla dinamica del robot, che quindi è un sistema dinamico. Mentre, affinchè la seconda componente sia una funzione senza memoria, basta imporre che il controllore in feedback sia una funzione 78 Cap.4 Controllo 4.2 Controllo Passivo istantanea. Anche la seconda ipotesi è rispettata, infatti considerando il sistema d’errore (4.2.34) si può facilmente notare che, se u = 0, se l’uscita è identicamente nulla (ė ≡ 0), ne segue che anche ë ≡ 0, quindi anche il termine Kp e dev’essere identicamente nullo, ma dato che Kp è una matrice definita positiva, necessariamente deve valere e(t) ≡ 0, quindi il sistema è zero-state observable. Considerando 1 1 V = ėT M (q)ė + eT Kp e 2 2 (4.2.35) La terza ipotesi è verificata per ρ = 0, infatti 1 V̇ = ėT M ë + ėT Ṁ ė + eT Kp ė 2 = ėT (Ṁ − 2C)ė + ėT v (4.2.36) ≤ ėT v Infine, scegliendo v = σ(ė), l’ultima ipotesi è rispettata con l’uguaglianza scegliendo ϕ(ė) = σ(ė). Il teorema ci fornisce la seguente condizione necessaria per l’asintotica stabilità dell’origine del sistema a ciclo chiuso v T [ρ1 (v) + ϕ2 (v)] > 0, ∀v 6= 0 (4.2.37) affinchè quest’ultima valga, è sufficiente imporre che σ ∈ (0, ∞) Si noti che i risultati sono analoghi a quelli ottenuti precedentemente. 79 Cap.4 Controllo 4.2 Controllo Passivo Verrà ora mostrato come in realtà sia possibile utilizzare, come legge di controllo in feedback, una funzione senza memoria anche se non stazionaria. Si consideri nuovamente il sistema (4.2.23) ed il controllo (4.2.24). Dalle (4.2.27) e (4.2.28) si era dedotto che il sistema era passivo e zero state observable rispettivamente. Applicando a tale sistema un secondo feedback stazionario definito dalla seguente equazione v1 = −Kd ė (4.2.38) con Kd matrice definita positiva, si ottiene M (q)ë + C(q, q̇)ė + Kp e + Kd ė = v2 (4.2.39) Si può dimostrare che l’ulteriore feedback (4.2.38), oltre a mantenere la proprietà di zero state observability, ha reso il sistema a ciclo chiuso strettamente passivo sull’uscita. Per la proprietà di zero state observability la dimostrazione è analoga alla (4.2.28), mentre per la seconda proprietà si consideri la seguente 1 1 V2 = ėT M (q)ė + eT Kp e 2 2 (4.2.40) come candidata a storage function. La funzione V2 è definita positiva e la sua derivata soddisfa 80 Cap.4 Controllo 4.2 Controllo Passivo 1 V˙2 = ėT M ë + ėT Ṁ ė + eT Kp ė 2 = ėT (Ṁ − 2C)ė + ėT v2 − ėT Kd ė (4.2.41) ≤ ėT v2 − ėT Kd ė che può essere riscritta come ėT v2 ≥ V˙2 − ėT Kd ė (4.2.42) Quindi se si considera y = ė, la precedente coincide con la definizione di sistema strettamente passivo sull’uscita. Si è quindi ottenuto un sistema zero state observable e strettamente passivo sull’uscita, per il quale il Lemma 2 garantisce la globale e asintotica stabilità dell’origine, dal momento che la storage function V2 è radialmente illimitata. Si noti inoltre che, grazie alle proprietà cosı̀ ottenute per il sistema in esame e al Lemma 3, è possibile aggiungere in retroazione un ulteriore controllo che non sia vincolato ad essere una funzione stazionaria. Il Lemma 3 infatti, garantisce il mantenimento delle proprietà di stabilità dell’origine nel caso si connetta in retroazione una funzione senza memoria, strettamente passiva sull’uscita e non per forza stazionaria. Ora è quindi possibile considerare l’implementazione di una legge di controllo più generica della (4.2.29), come ad esempio v2 = −Kd (e(t))ė (4.2.43) 81 Cap.4 Controllo 4.2 Controllo Passivo In questo modo il controllo può dipendere anche dai valori dell’errore, non solo della sua derivata. In particolare è stato scelto " Kd = 500 + 1 1+e1 (t)2 0 # 0 100 + 1+e1 (t)2 (4.2.44) 2 Tale legge di controllo fa si che lo smorzamento proporzionale alla derivata dell’errore, sia massimo in caso di errore nullo e diminuisca nel caso in cui i valori dell’errore crescano. La funzione nel complesso è strettamente passiva sull’uscita, quindi, in base al Lemma 3, essa non modifica la proprietà di globale asintotica stabilità dell’origine del sistema a ciclo chiuso. Verranno di seguito mostrati gli effetti dei due controlli. Lo schema Simulink rappresentante la struttura del sistema di controllo è mostrato in figura 4.2. Risultati Simulativi Le figure 4.3, 4.4, 4.5 e 4.6 mostrano gli andamenti nel tempo degli angoli di giunto e dei relativi errori nel tempo, in conseguenza all’applicazione di un riferimento costante e pari a 45◦ , sotto l’azione del controllo (4.2.29). Mentre le figure 4.7, 4.8, 4.9 e 4.10 mostrano gli andamenti nel tempo degli angoli di 82 Cap.4 Controllo 4.2 Controllo Passivo giunto e dei relativi errori nel tempo, in conseguenza all’applicazione di un riferimento costante e pari a 45◦ , sotto l’azione del controllo (4.2.43), (4.2.44). 45 40 35 30 25 20 15 10 5 0 !5 0 0.5 1 1.5 2 Figura 4.3: Andamento del primo angolo di giunto in funzione del tempo 83 Cap.4 Controllo 4.2 Controllo Passivo 50 45 40 35 30 25 20 15 10 5 0 0 0.5 1 1.5 2 Figura 4.4: Andamento del secondo angolo di giunto in funzione del tempo 0 !5 !10 !15 !20 !25 !30 !35 !40 !45 !50 0 0.5 1 1.5 2 Figura 4.5: Andamento dell’errore relativo al primo angolo di giunto in funzione del tempo 84 Cap.4 Controllo 4.2 Controllo Passivo 5 0 !5 !10 !15 !20 !25 !30 !35 !40 !45 0 0.5 1 1.5 2 Figura 4.6: Andamento dell’errore relativo al secondo angolo di giunto in funzione del tempo 45 40 35 30 25 20 15 10 5 0 !5 0 0.5 1 1.5 2 Figura 4.7: Andamento del primo angolo di giunto in funzione del tempo 85 Cap.4 Controllo 4.2 Controllo Passivo 45 40 35 30 25 20 15 10 5 0 0 0.5 1 1.5 2 Figura 4.8: Andamento del secondo angolo di giunto in funzione del tempo 0 !5 !10 !15 !20 !25 !30 !35 !40 !45 !50 0 0.5 1 1.5 2 Figura 4.9: Andamento dell’errore relativo al primo angolo di giunto in funzione del tempo 86 Cap.4 Controllo 4.3 Controllo in feedback linearization 0 !5 !10 !15 !20 !25 !30 !35 !40 !45 0 0.5 1 1.5 2 Figura 4.10: Andamento dell’errore relativo al secondo angolo di giunto in funzione del tempo 4.3 4.3.1 Controllo in feedback linearization Feedback Linearization Il controllo in feedback linearization è una tecnica di controllo utilizzata per la realizzazione di controllori per sistemi non lineari. Questo metodo consiste nella trasformazione di un sistema non lineare in un equivalente sistema lineare, grazie a un cambio di variabili e a un ingresso appositamente scelto. Si consideri un sistema non-lineare della forma ẋ = f (x) + g(x)u (4.3.1) y = h(x) 87 Cap.4 Controllo 4.3 Controllo in feedback linearization dove x ∈ Rn è il vettore di stato, u ∈ Rp è il vettore di ingresso e y ∈ Rm è il vettore di uscita. Lo scopo della feedback linearization è quello di trovare un vettore di ingresso del tipo u = a(x) + b(x)v (4.3.2) che renda lineare la funzione di trasferimento tra il nuovo ingresso v e l’uscita y. Una volta linearizzato, al sistema è possibile applicare una classica strategia di controllo per sistemi lineari. Si noti che diversamente da tecniche di linearizzazione classiche, come l’espansione di Taylor, che approssimano una funzione lineare ad una non lineare in un certo intorno, la feedback linearization trasforma esattamente il sistema a ciclo chiuso in un sistema lineare. 4.3.2 Controllore Nel caso in esame il procedimento per ottenere un controllo linearizzante in feedback è abbastanza semplice. Si considerino le seguenti equazioni del robot scritte come di seguito q̈ = M −1 (q)(−C(q, q̇)q̇ − G(q) + u) (4.3.3) Ipotizzando di conoscere perfettamente tutti gli elementi delle matrici che compongono la dinamica del robot, si può applicare il seguente controllo 88 Cap.4 Controllo 4.3 Controllo in feedback linearization u1 = G(q) + C(q, q̇)q̇ + H(q)u2 (4.3.4) tale controllo, applicato in retroazione dallo stato, permette, non solo di cancellare le non linearità intrinseche del sistema da stabilizzare, ma anche di disaccoppiare le due dinamiche. Finora infatti, i due angoli di giunto non erano indipendenti l’uno dall’altro, ora invece la singola componente del controllo ausiliario u2i agisce sul rispettivi angolo di giunto qi . Il progetto di u2 è utile per assegnare le dinamiche alle due variabili di giunto, in particolare sono state scelte dinamiche lineari del tipo u2 = −Kd (q̇ − q̇rif ) − Kp (q − qrif ) + q̈rif (4.3.5) Nel complesso il controllo è descritto dalla seguente espressione u = G(q) + C(q, q̇)q̇ + H(q)(−Kd (q̇ − q̇rif ) − Kp (q − qrif ) + q̈rif ) (4.3.6) Applicando tale legge di controllo al sistema descritto dalle equazioni (4.3.3) si ottiene q̈ = −Kd (q̇ − q̇rif ) − Kp (q − qrif ) + q̈rif (4.3.7) o, equivalentemente, q̈ − q̈rif = −Kd (q̇ − q̇rif ) − Kp (q − qrif ) (4.3.8) Definendo l’errore come e = q − qrif , si può scrivere il sistema d’errore come 89 Cap.4 Controllo 4.4 Confronto ë = −Kd ė − Kp e (4.3.9) Tramite i valori dei guadagni Kd e Kp si possono assegnare gli autovalori del sistema d’errore, precedentemente reso lineare. Lo schema Simulink rappresentante il sistema ed il controllo applicato è mostrato in figura 4.11. Risultati Simulativi Le figure 4.12, 4.13, 4.14 e 4.15 mostrano gli andamenti nel tempo degli angoli di giunto e dei relativi errori nel tempo, in conseguenza all’applicazione di un riferimento costante 45◦ . Si noti come il sistema disaccoppiato e linearizzato insegue i riferimenti con transitorio accettabile e con piccole sovraelongazioni. 4.4 Confronto La differenza principale fra i controlli utilizzati è che, mentre il controllo passivo cancella solo parte delle non linearità intrinseche nelle equazioni dinamiche del robot, il controllo in feedback linearization, invece, linearizza completamente il sistema d’errore, cancellando l’intera dinamica non lineare ed imponendo una lineare e disaccoppiata. Ovviamente l’uso di un controllo in feedback linearization è possibile solo nel caso in cui la dinamica del sistema sia nota alla perfezione, se cosı̀ non fosse, esso non è applicabile o risulta quantomeno necessario l’uso di un osservatore non lineare per 90 Cap.4 Controllo 4.4 Confronto poter stimare i parametri non noti. Il controllo passivo risulta essere uno strumento molto potente, in quanto, nella pratica, la dinamica del sistema non è mai nota perfettamente, soprattutto se il robot deve svolgere dei compiti particolari come il trasporto di oggetti, che necessariamente ne modificano le inerzie. Il controllore passivo presentato in questo capitolo permette, infatti, di ottenere un sistema di errore avente origine asintoticamente stabile e richiede la conoscenza del solo vettore di gravità. 91 Cap.4 Controllo 4.4 Confronto Figura 4.2: Controllo Passivo 92 Cap.4 Controllo 4.4 Confronto Figura 4.11: Controllo in Feedback Linearization 93 Cap.4 Controllo 4.4 Confronto 45 40 35 30 25 20 15 10 5 0 0 0.5 1 1.5 2 Figura 4.12: Andamento del primo angolo di giunto in funzione del tempo 45 40 35 30 25 20 15 10 5 0 0 0.5 1 1.5 2 Figura 4.13: Andamento del secondo angolo di giunto in funzione del tempo 94 Cap.4 Controllo 4.4 Confronto 0 !5 !10 !15 !20 !25 !30 !35 !40 !45 0 0.5 1 1.5 2 Figura 4.14: Andamento dell’errore relativo al primo angolo di giunto in funzione del tempo 0 !5 !10 !15 !20 !25 !30 !35 !40 !45 0 0.5 1 1.5 2 Figura 4.15: Andamento dell’errore relativo al secondo angolo di giunto in funzione del tempo 95 Capitolo 5 Conclusioni e Sviluppi futuri In definitiva il lavoro di tesi fin qui presentato ha portato all’ottenimento di un sistema fisico che permette la telemanipolazione di un robot antropomorfo grazie alla contrazione muscolare. Tale sistema risulta composto da: un primo stadio che rileva il segnale elettrico muscolare, grazie a degli elettrodi posti sulle cute, e ad un circuito elettrico che elabora tale segnale e lo invia al calcolatore; e da un secondo stadio che si compone di un sistema client-servet, per inviare i dati al computer connesso al robot ed al robot stesso. Infine sono state proposte, a livello simulativo, due diverse tipologie di controllo non lineare per il robot. I possibili impieghi di tale sistema spaziano tra vari campi. Innanzitutto, in ambito medico, si può rimpiazzare un arto di un paziente con una protesi il cui movimento è controllato dal paziente stesso mediante contrazione di un muscolo sano, oppure permettere al paziente di compiere una qualsiasi altra azione prestabilita, come per esempio azionare i motori di una carrozzina o comandare a distanza un impianto domotico. Oppure, in ambito militare, altri possibili impieghi potrebbero riguardare la manipolazione di dispositivi di comunicazione o di navigazione da parte di un conducente, 96 Cap.5 Conclusioni e Sviluppi futuri che non può impiegare le proprie mani perché impegnate nella guida. Alcune applicazioni nel settore chimico potrebbero ad esempio richiedere la possibilità di comandare un dispositivo a distanza con i movimenti delle proprie dita, evitando, cosı̀, il contatto diretto dell’uomo con eventuali sostanze contaminate. Per finire anche il settore dei videogiochi potrebbe essere interessato all’idea. 97 Appendice A server.c 1 2 3 4 int sensorValue=0; long time = 0; unsigned long oldtime = 0; #define Ts 2 5 6 7 8 9 void setup() { Serial.begin(115200); oldtime = millis(); } 10 11 12 13 14 15 16 17 18 19 20 21 void loop() { if(millis()−oldtime>=Ts) { oldtime = millis(); sensorValue = (int)(analogRead(A0)); Serial.print(0xff, BYTE); Serial.print((sensorValue>>8)&0xff,BYTE); Serial.print(sensorValue&0xff,BYTE); } } Appendice A 98 Comunicazione con server.c 1 2 3 4 int isAv = 0; int sensorValue=0; unsigned long oldtime = 0; #define Ts 10 5 6 7 8 9 10 void setup() { Serial.begin(115200); oldtime = millis(); } 11 12 13 14 15 16 void loop() { if(millis()−oldtime >= Ts) { oldtime = millis(); 17 isAv = Serial.available(); if (isAv > 0) { sensorValue = (int)(analogRead(A0)); 18 19 20 21 22 Serial.println(sensorValue); 23 } 24 } 25 26 } Appendice A 99 Appendice B server.c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <sys/types.h> #include <sys/signal.h> #include<sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdlib.h> #include <arpa/inet.h> #include <math.h> #include <unistd.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <termios.h> #include <time.h> #define LASTLOOP 20 #define MAX_BUFLEN 20 #define MAX 4 20 21 extern int ConfiguraPorta(int fd); 22 23 24 25 26 27 28 29 30 int ConfiguraPorta(int fd) { struct termios arduinoSettings; int ret = -1; ret = fcntl(fd, F_SETFL, 0); if (ret < 0) return(ret); ret = tcgetattr(fd, &arduinoSettings); if (ret < 0) return(ret); Appendice B 100 31 32 33 34 ret = cfsetispeed(&arduinoSettings, B115200); if (ret < 0) return(ret); ret = cfsetospeed(&arduinoSettings, B115200); if (ret < 0) return(ret); 35 36 37 38 39 40 41 42 43 44 45 46 //Settaggio flag arduinoSettings.c_cflag |= (CLOCAL | CREAD); arduinoSettings.c_cflag &= ~CSIZE; arduinoSettings.c_cflag |= CS8; arduinoSettings.c_cflag &= ~PARENB; arduinoSettings.c_cflag &= ~CSTOPB; arduinoSettings.c_lflag |= ICANON; arduinoSettings.c_lflag &= ~( ISIG | ECHO | ECHOE); ret = tcsetattr(fd, TCSANOW, &arduinoSettings); return(ret); } 47 48 49 50 51 52 53 int connessione() { int sock , client_sock , c; int reuse=1; struct sockaddr_in server , client; sock = socket(AF_INET , SOCK_STREAM , 0); 54 55 56 57 58 59 60 61 62 if (sock == -1) { printf("Errore nella creazione del socket"); return 1; } server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = htons( 8888 ); 63 64 65 66 67 68 69 70 71 72 73 74 75 if(setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&reuse, sizeof(int))==1) { printf(stderr, "Errore Settaggio Opzioni listen"); return 1; } if(bind(sock,(struct sockaddr *)&server,sizeof(server))<0) { perror("Errore di Comunicazione\n"); return 1; } printf("Aspetto Comunicazione\n"); Appendice B 101 76 77 78 79 listen(sock , 3); c = sizeof(struct sockaddr_in); client_sock=accept(sock,(struct sockaddr*)&client, (socklen_t*)&c); 80 81 82 83 84 85 86 87 if(client_sock == -1) { printf("Problemi nella Comunicazione\n"); } printf("Connessione Avvenuta\n"); return client_sock; } 88 89 struct termios oldterm, newterm; 90 91 92 93 94 95 96 97 void set_unbuffered ( void ) { tcgetattr( STDIN_FILENO, &oldterm ); newterm = oldterm; newterm.c_lflag &= ~( ICANON | ECHO ); tcsetattr( STDIN_FILENO, TCSANOW, &newterm ); } 98 99 100 101 102 void set_buffered ( void ) { tcsetattr( STDIN_FILENO, TCSANOW, &oldterm ); } 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 int kbhit ( void ) { int result; fd_set set; struct timeval tv; FD_ZERO(&set); FD_SET(STDIN_FILENO,&set); tv.tv_sec = 0; tv.tv_usec = 0; set_unbuffered(); result = select( STDIN_FILENO+1,&set,NULL,NULL,&tv); set_buffered(); return result == 1; } 118 119 120 int main() { Appendice B 102 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 int fd, nRead, nWrite, k = 0; char inTxt[MAX_BUFLEN]; char outTxt[MAX_BUFLEN]; int client_sock; int angoli[MAX] = {1,1,1,1}; //Variabili del Filtro double val; double valPrima; double valPrimaPrima; float peso = 0.6; float pesoP = 0.2; float pesoPP = 0.2; //Variabili per il Tempo Di Campionamento clock_t t1, t2; float Ts = 300; float diff; 137 138 139 140 141 142 143 144 145 client_sock = connessione(); //Apre, Inizializza e Scrive sulla porta fd = open("/dev/tty.usbserial-A9007MUH", O_RDWR | O_NOCTTY); if (fd == -1) { perror("Impossibile Aprire La Porta"); return(-1); } 146 147 148 149 150 151 152 if (ConfiguraPorta(fd) == -1) { close(fd); perror("Impossibile Inizializzare La Porta"); return(-1); } 153 154 155 156 157 158 159 160 161 strcpy(outTxt, "Ciao Arduino\n"); nWrite = write(fd, outTxt, strlen(outTxt)); if (nWrite < 0) { close(fd); perror("Impossibile Scrivere Sulla Porta"); return(-1); } 162 163 164 165 //Legge dalla porta while(!kbhit()) { Appendice B 103 166 167 168 169 170 171 t2 = clock(); diff = (((float)t2 - (float)t1) / 1000000.0F ) * 1000; if(diff > Ts) { printf("Time: %f\n\n", time); nRead = read (fd, inTxt, sizeof(inTxt)); 172 173 174 175 176 177 178 179 180 181 182 183 if(nRead == 0) { printf("nRead: %d\n", nRead); continue; } if(nRead < 0) { close(fd); perror("Impossibile Leggere Dalla Porta"); return(-1); } 184 //Invia L’angolo val = atoi(inTxt); val = val * 0.2; 185 186 187 188 val=peso*val+(pesoP)*valPrima+(pesoPP)*valPrimaPrima; valPrimaPrima=valPrima; valPrima=val; 189 190 191 192 if (val < 150) { angoli[0]=0; angoli[1]=0; angoli[2]=val; angoli[3]=val; write(client_sock, angoli, sizeof(angoli)); printf("K: %d\n", k); printf("Ho spedito i seguenti angoli: %d %d %d %d\n", angoli[0], angoli[1], angoli[2], angoli[3]); k++; t1 = clock(); } 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 } } //Angoli Di Fine angoli[0]=-1; angoli[1]=0; Appendice B 104 211 212 213 214 215 216 217 218 219 220 221 angoli[2]=0; angoli[3]=0; write(client_sock, angoli, sizeof(angoli)); printf("Ho spedito i seguenti angoli: %d %d %d %d\n", angoli[0], angoli[1], angoli[2], angoli[3]); sleep(2); close(fd); printf("Chiudo il socket\n"); close(client_sock); return(1); } client.c 1 2 3 4 5 6 7 8 #ifndef __SCORB_H #include "scorb.h" #include <sys/types.h> #include <sys/socket.h> #include <sys/signal.h> #include <netinet/in.h> #include <netdb.h> #endif 9 10 11 12 13 14 15 16 17 #define #define #define #define #define #define #define #define NERO 0 ROSSO 1 VERDE 2 ARANCIONE 3 BLUE 4 VIOLA 5 CELESTE 6 BIANCO 7 #define #define #define #define #define K1 K2 K3 K4 K5 #define #define #define #define ENC1 ENC2 ENC3 ENC4 18 19 20 21 22 23 0.0477 0.0569 0.0571 0.247 0.247 24 25 26 27 28 Appendice B 81 -1924 412 2074 105 29 #define ENC5 1598 30 31 #define MAX 4 32 33 34 35 36 int debugLevel = 10; int angoli[MAX]; double gain[]= {K1,K2,K3,K4,K5}; int primo = 0; 37 38 39 40 41 42 43 44 45 46 47 48 // Colore di primo piano int ikHeader = VERDE, ikFooter1 = ROSSO, ikFooter2 = BIANCO, ikFooter3 = VERDE, ikMotorData = BIANCO, ikSysData = ROSSO, ikTableHeader = ARANCIONE, ikInput = ARANCIONE, ikScreen = BIANCO, ikLegend = CELESTE; 49 50 51 52 53 54 55 56 57 // Colore di fondo int bkHeader = NERO, bkFooter1 = NERO, bkFooter2 = NERO, bkFooter3 = NERO, bkInput = NERO, bkScreen = NERO, bkLegend = NERO; 58 59 struct timespec delay; 60 61 62 63 64 65 66 void InitScreen(void) { // Preparazione FrontEnd initscr(); // Preparazione modalita’ ncurses start_color(); // Preparazione modifica colori } 67 68 69 70 71 void EndScreen(void) { endwin(); } 72 73 void DrawBackground(void) Appendice B 106 74 { init_pair(1,ikScreen,bkScreen); init_pair(2,ikScreen,bkHeader); init_pair(3,ikScreen,bkFooter1); init_pair(4,ikScreen,bkFooter2); init_pair(5,ikScreen,bkFooter3); 75 76 77 78 79 80 attron(COLOR_PAIR(1)); bkgd(COLOR_PAIR(1)); erase(); 81 82 83 84 attron(COLOR_PAIR(2)); mvprintw(1,1,"%80.80s", ""); attron(COLOR_PAIR(3)); mvprintw(22,1,"%80.80s", ""); attron(COLOR_PAIR(4)); mvprintw(23,1,"%80.80s", ""); attron(COLOR_PAIR(5)); mvprintw(24,1,"%80.80s", ""); 85 86 87 88 89 90 91 92 93 } 94 95 96 97 98 99 100 void DrawHeader(char *szText) { init_pair(6,ikHeader,bkHeader); attron(COLOR_PAIR(6)); mvprintw(1,1,szText); } 101 102 103 104 105 106 107 void DrawFooter1(char *szText) { init_pair(7,ikFooter1,bkFooter1); attron(COLOR_PAIR(7)); mvprintw(1,22,szText); } 108 109 110 111 112 113 114 void DrawFooter3(char *szText) { init_pair(9,ikFooter3,bkFooter3); attron(COLOR_PAIR(9)); mvprintw(24,1,szText); } 115 116 117 118 void DrawFooter4(char *szText) { init_pair(9,ikFooter3,bkFooter3); Appendice B 107 attron(COLOR_PAIR(9)); mvprintw(25,1,szText); 119 120 121 } 122 123 124 125 126 127 128 void DrawLegend(char *szText, int x) { init_pair(7,ikLegend,bkLegend); attron(COLOR_PAIR(7)); mvprintw(x,58,szText); } 129 130 131 132 void DrawInputArea(void) { int i; 133 init_pair(10,ikInput,bkInput); attron(COLOR_PAIR(10)); mvprintw(22,1,"%80.80s",""); mvprintw(23,1,"%80.80s",""); mvprintw(24,1,"%80.80s",""); move(22,1); for (i = 0; i < 80; i++) printw("_"); 134 135 136 137 138 139 140 141 142 mvprintw(24,1,"[ENTER]Conferma"); refresh(); 143 144 145 } 146 147 148 149 150 151 void ClearInputArea(void) { init_pair(11,ikScreen,bkFooter1); init_pair(12,ikScreen,bkFooter2); init_pair(13,ikScreen,bkFooter3); 152 attron(COLOR_PAIR(11)); mvprintw(22,1,"%80.80s",""); attron(COLOR_PAIR(12)); mvprintw(23,1,"%80.80s",""); attron(COLOR_PAIR(13)); mvprintw(24,1,"%80.80s",""); 153 154 155 156 157 158 159 refresh(); 160 161 } 162 163 int InputIntegerValue(char *szPrompt) Appendice B 108 164 { char szInput[80+1]; 165 166 DrawInputArea(); mvprintw(23,1,szPrompt); printw(" > "); move(23,strlen(szPrompt)+4); refresh(); nodelay(stdscr,FALSE); getstr(szInput); nodelay(stdscr,TRUE); ClearInputArea(); 167 168 169 170 171 172 173 174 175 176 return atoi(szInput); 177 178 } 179 180 181 182 double InputDoubleValue(char *szPrompt) { char szInput[80+1]; 183 DrawInputArea(); mvprintw(23,1,szPrompt); printw(" > "); move(23,strlen(szPrompt)+4); refresh(); nodelay(stdscr,FALSE); getstr(szInput); nodelay(stdscr,TRUE); ClearInputArea(); 184 185 186 187 188 189 190 191 192 193 return atof(szInput); 194 195 } 196 197 int connessione(){ 198 199 200 int sock, err; struct sockaddr_in client; 201 202 sock = socket(AF_INET , SOCK_STREAM , 0); 203 204 205 206 207 208 if (sock == -1) { printf("Errore nella creazione del socket\n"); return -1; } Appendice B 109 209 210 printf("Creato il socket\n"); 211 212 213 214 client.sin_addr.s_addr = inet_addr("160.80.97.121"); client.sin_family = AF_INET; client.sin_port = htons( 8888 ); 215 216 err = connect(sock , (struct sockaddr *)&client , sizeof(client)); 217 218 219 220 221 222 if(err == -1) { printf("Errore di Connessione\n"); return -1; } 223 224 printf("Connessione Avvenuta\n"); 225 226 227 return sock; } 228 229 230 231 232 int nuoviAngoli(int* ang_DH_ins) { int base=-ang_DH_ins[0]; int shoulder=ang_DH_ins[1]; 233 int elbow=-(ang_DH_ins[2]); int pitch=-(ang_DH_ins[3])-90; // int roll=ang_DH_ins[4]; 234 235 236 237 ROBOTDefCtrlPosReq[0]=base/gain[0]+ENC1; ROBOTDefCtrlPosReq[1]=(shoulder/gain[1])+ENC2; ROBOTDefCtrlPosReq[2]=(elbow/gain[2])+ENC3; ROBOTDefCtrlPosReq[3]=(pitch/gain[3])*2+ENC4; ROBOTDefCtrlPosReq[4]=ENC5; 238 239 240 241 242 243 return 0; 244 245 } 246 247 248 249 250 251 252 253 void muovi(int sock) { erase(); attron(COLOR_PAIR(15)); mvprintw(5,10,"%14.14s","inizio muovi"); refresh(); int fine = 1; Appendice B 110 254 255 256 257 erase(); attron(COLOR_PAIR(15)); mvprintw(5,10,"%14.14s","CONNESSIONE..."); refresh(); 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 do{ read(sock, angoli, sizeof(angoli)); if(angoli[0] == -1) { fine=0; angoli[0] = 0; angoli[1] = 90; angoli[2] = 0; angoli[3] = -90; //refresh(); }else{ attron(COLOR_PAIR(14)); mvprintw(7,10,"%7.7s","Angoli:"); mvprintw(7,30,"%5d %5d %5 %5d",angoli[0],angoli[1],angoli[2],angoli[3]); refresh(); } nuoviAngoli(angoli); }while(fine != 0); primo = 1; mvprintw(5,10,"%10.10s","fine muovi"); 279 280 } 281 282 283 284 285 286 287 288 void DemoLoop(int sock) { int kbKey, kbFunc; int i, nMotor = 0; int iStep = 60; double rtT = 30.0; int fine = 1; 289 290 ROBOTControlStop(); 291 292 293 294 init_pair(14,ikTableHeader,bkScreen); init_pair(15,ikSysData,bkScreen); init_pair(16,ikMotorData,bkScreen); 295 296 297 298 if(ROBOTControlStart(rtT)) { do { Appendice B 111 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 fine=1; DrawHeader(" Universita’ Degli Studi Di Roma Tor Vergata \n Laboratorio Di Robotica 2011"); attron(COLOR_PAIR(14)); mvprintw(4,11,"%9.9s %13.13s %5.5s %4.4s\n\r", "Interrupt", "RealTimeClock", "Passo", "Kp"); printw("-----------------------------------------------------\n\r"); attron(COLOR_PAIR(15)); mvprintw(6,10,"%9ld %13.0lf %5d %4d", RTIntCnt, rtT, iStep, ROBOTDefCtrlKP); attron(COLOR_PAIR(14)); mvprintw(8,1,"%4.4s %6.6s %5.5s %7.8s %7.7s %7.7s %4.4s %6.6s\n\r", "Sel.", "Motore", "mVolt", "Stato", "Encoder", "Errore", "Home", "Switch"); printw("-----------------------------------------------------\n\r"); attron(COLOR_PAIR(16)); 315 316 317 318 319 320 321 322 323 324 for (i = 0; i < ROBOT_MAX_MOTOR; i++) printw("%4.4s %5d %5d %8.8s %7d %7ld %4.4s %5.5s\n\r", (nMotor == i) ? ">" : " ",i, ROBOTMotor[i].mVolt, ROBOTMotorStateString[ ROBOTMotor[i].state ], ROBOTMotor[i].encoder, ROBOTDefCtrlPosError[i], (ROBOTMotor[i].homeOK) ? "#" : "-", (ROBOTMotor[i].home) ? "#" : "-"); 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 attron(COLOR_PAIR(14)); mvprintw(17,1,"%4.4s %6.9s\n\r", "Sel.", "Link"); printw("---------------\n\r"); attron(COLOR_PAIR(16)); for (i = 3; i <= 4; i++) printw("%4.4s %9s\n\r", (nMotor == i + 3) ? ">" : " ", (i == 3) ? "PITCH (6)" : "ROLL (7)"); DrawLegend(" LEGENDA",1); DrawLegend("[ALT-B] Stop",3); DrawLegend("[ENTER] Reset",4); DrawLegend("[PAGE DOWN] Movimento",5); DrawLegend("[PAGE UP] Movimento",6); DrawLegend("[0] Base",7); DrawLegend("[1] Shoulder",8); DrawLegend("[2] Elbow",9); DrawLegend("[3] Mot. Sin. Pinza",10); Appendice B 112 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 DrawLegend("[4] Mot. Des. Pinza",11); DrawLegend("[6] Pitch",12); DrawLegend("[7] Roll",13); DrawLegend("[HOME] Home",14); DrawLegend("[F2] Spedizione",15); DrawLegend("[F3]Kp",16); DrawLegend("[F4]RTClock",17); DrawLegend("[O/C]Pinza",18); DrawLegend("[+/-]Passo",19); DrawLegend("[ESC]Uscita",20); refresh(); if (RTOverRunError) { DrawFooter1("ERRORE di Over Run !"); RTOverRunErrorACK(); getch(); } KeyboardRead(&kbKey, &kbFunc); if (ROBOTUserBreak()) { for (i = 0; i < ROBOT_MAX_LINK; i++) ROBOTDefCtrlPosReq[i] = ROBOTMotor[i].encoder; } while(primo !=1) { muovi(sock); } switch(kbKey) { case ’0’: case ’1’: case ’2’: case ’3’: case ’4’: case ’5’: case ’6’: case ’7’: nMotor = kbKey - 48; break; 383 384 385 386 387 case ’+’: if (iStep < 100) iStep++; break; 388 Appendice B 113 389 390 391 392 case ’-’: if (iStep > 1) iStep--; break; 393 394 395 396 397 case ’o’: case ’O’: ROBOTGripperOpen(); break; 398 399 400 401 402 case ’c’: case ’C’: ROBOTGripperClose(); break; 403 404 405 406 407 case ’\n’: ROBOTReset(); break; } 408 409 410 switch(kbFunc) { 411 412 413 414 415 416 case KEY_HOME: ROBOTHomePulse[ELBOW] *= -1; ROBOTHome(); ROBOTHomePulse[ELBOW] *= -1; break; 417 418 419 420 421 case KEY_F(2): // @ F1 -> F2 ROBOTDefCtrlPosReq[nMotor] = InputIntegerValue("Posizione richiesta per il motore selezionato"); break; 422 423 424 425 case KEY_F(3): // @ F2 -> F3 ROBOTDefCtrlKP = InputIntegerValue("Guadagno del controllo (Kp)"); break; 426 427 428 429 430 431 case KEY_F(4): // @ F3 -> F4 rtT = InputDoubleValue("Periodo di RealTimeClock (ms)"); ROBOTControlStop(); ROBOTControlStart(rtT); break; 432 433 case KEY_PPAGE: Appendice B 114 if ((nMotor != -1)&&(ROBOTGetMotorState(nMotor)!=ROBOT_STATE_ERROR)) { if(nMotor < 6) ROBOTDefCtrlPosReq[nMotor] += iStep; else if(nMotor == 6) { ROBOTDefCtrlPosReq[3] += iStep; ROBOTDefCtrlPosReq[4] -= iStep; } else if(nMotor == 7) { ROBOTDefCtrlPosReq[3] += iStep; ROBOTDefCtrlPosReq[4] += iStep; } } break; 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 case KEY_NPAGE: if ((nMotor != -1)&&(ROBOTGetMotorState(nMotor)!=ROBOT_STATE_ERROR)) { if(nMotor < 6) ROBOTDefCtrlPosReq[nMotor] -= iStep; else if(nMotor == 6) { ROBOTDefCtrlPosReq[3] -= iStep; ROBOTDefCtrlPosReq[4] += iStep; } else if(nMotor == 7) { ROBOTDefCtrlPosReq[3] -= iStep; ROBOTDefCtrlPosReq[4] -= iStep; } } break; } 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 } while(kbKey != 27); ROBOTControlStop(); 465 466 467 } 468 469 } 470 471 472 473 474 475 476 477 478 int main(void) { int sock; InitScreen(); sock=connessione(); DrawBackground(); DrawHeader("Universita’ degli Studi di Roma -Tor Vergata"); Appendice B 115 DrawFooter3("Determinazione tempi di colloquio PC <-> Power Unit."); refresh(); 479 480 481 ROBOTAutoPowerCtrl = FALSE; if (ROBOTInit(NULL, NULL, NULL)) { clear(); if (ROBOTPowerON()) { DemoLoop(sock); } else { erase(); mvprintw(7,22,"Problemi al POWER ON"); refresh(); getch(); } ROBOTPowerOFF(); } else { erase(); mvprintw(7,22,"Problemi al ROBOTInit"); refresh(); getch(); } 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 EndScreen(); 505 506 return 0; 507 508 } Appendice B 116 Elenco delle figure 1.1 Muscolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2 Sarcomero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3 Filamenti di actina e miosina . . . . . . . . . . . . . . . . . . . . . . 10 1.4 Fibre muscolari attive in relazione alla contrazione. . . . . . . . . . . 12 1.5 Neurone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.6 Motoneurone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.7 Giunzione neuromuscolare . . . . . . . . . . . . . . . . . . . . . . . . 17 1.8 Conduzione nervosa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.9 Ponte actina-miosina . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.10 Propagazione della depolarizzazione. . . . . . . . . . . . . . . . . . . 25 1.11 MUAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 1.12 MUAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.1 Spettro in frequenza di un segnale EMG . . . . . . . . . . . . . . . . 33 2.2 Schema di base di un amplificatore differenziale. . . . . . . . . . . . . 36 2.3 Elettrodi Utilizzati. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.4 Posizionamento degli elettrodi di rilevazione. . . . . . . . . . . . . . . 44 2.6 Effetto di un raddrizzatore ad onda intera. . . . . . . . . . . . . . . . 46 2.7 Effetto del filtro sull’onda raddrizzata. . . . . . . . . . . . . . . . . . 47 Appendice B 117 2.8 Circuito. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 2.9 Arduino Duemilanove. . . . . . . . . . . . . . . . . . . . . . . . . . . 49 2.5 Schema Elettrico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.1 Robot Antropomorfo . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.2 Gestione Scorbot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.3 Contrazioni consecutive . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3.4 Singola contrazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.5 Schermata dell’applicazione . . . . . . . . . . . . . . . . . . . . . . . 61 4.1 Connessione Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.3 Andamento del primo angolo di giunto in funzione del tempo . . . . . 83 4.4 Andamento del secondo angolo di giunto in funzione del tempo . . . . 84 4.5 Andamento dell’errore relativo al primo angolo di giunto in funzione del tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6 84 Andamento dell’errore relativo al secondo angolo di giunto in funzione del tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 4.7 Andamento del primo angolo di giunto in funzione del tempo . . . . . 85 4.8 Andamento del secondo angolo di giunto in funzione del tempo . . . . 86 4.9 Andamento dell’errore relativo al primo angolo di giunto in funzione del tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 4.10 Andamento dell’errore relativo al secondo angolo di giunto in funzione del tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Controllo Passivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 4.11 Controllo in Feedback Linearization . . . . . . . . . . . . . . . . . . . 93 4.12 Andamento del primo angolo di giunto in funzione del tempo . . . . . 94 4.2 Appendice B 118 4.13 Andamento del secondo angolo di giunto in funzione del tempo . . . . 94 4.14 Andamento dell’errore relativo al primo angolo di giunto in funzione del tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.15 Andamento dell’errore relativo al secondo angolo di giunto in funzione del tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Appendice B 95 119 Bibliografia [1] Prof. Marcello Bracale, “Appunti del corso di Elettronica Biomedica” [2] Gianluca Spinatonda, “L’elettromiografia di superficie: concetti di base.”, Scienza Riabilitativa, 12 - 1997. [3] “Muscolo”, “Sarcomero”, “Motoneurone”, Wikipidia. [4] Giovanni Magenes, “Tecniche di rilevamento e di Elaborazione di Segnali Biomedici.”. [5] Fabrice Sincère, “Amplificateur de différence & Amplificateur d’instrumentation.”. [6] Lorenzo Bettini, “Introduzione alle Socket.”, MokaByte - Gennaio 2000. [7] Gary Frerking, “Serial Programming HOWTO.”. [8] “Sistema client-server.”, Wikipidia. [9] “EMG Circuit Schematic”, Advanced Technologies. [10] Hassan K. Khalil, “Nonlinear Systems”, Prentice Hall, 2002. [11] J. K. Hedrick and A. Girard, “Control of Nonlinear Dynamic Systems: Theory and Applications.”. [12] “Feedback Linearization”, Wikipidia. Appendice B 120 [13] Jean-Jacquese Slotine, Weiping Li, “Applied Nonlinear Control”, Prentice Hall, Englewood Cliffs, New Jersey. Appendice B 121