Controllo di un robot mediante sistema di acquisizione ad infrarossi

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