• Non ci sono risultati.

• il quaternione unitario quatE

W associato alla matrice di rotazione RWE (4

numeri float);

• la coordinata z della mano sinistra dell’operatore rispetto alla terna W, lef thandheight, (1 numero float).

Sono stati utilizzati i quaternioni unitari per raccogliere le informazioni riguardanti le rotazioni delle terne H e E rispetto alla terna mondo W poiché rappresentavano una struttura dati più compatta per poter essere inviata.

Sia R una generica matrice di rotazione e quat il quaternione ad essa associato:

R =   r11 r12 r13 r21 r22 r23 r31 r32 r33   quat =     qx qy qz qw    

dove la parte vettoriale del quaternione è qx qy qz

T

mentre qw è la parte

scalare.

La conversione dalla matrice al quaternione avviene così: qw = 1 2 √ r11+ r22+ r33+ 1   qx qy qz  =   sgn(r32− r23) √ r11− r22− r33+ 1 sgn(r13− r31) √ r22− r11− r22+ 1 sgn(r21− r12) √ r33− r11− r22+ 1  

I quaternioni ricevuti dal PC Linux vengono poi trasformati nuovamente in matrici di rotazione per poter essere usati nella legge di controllo.

L’indicatore della validità flag segnala al PC Linux se la posizione della terna H è affidabile. Se il Kinect riconosce tutte e 3 le sfere e l’applicazione sul PC Windows determina la posizione della terna H, allora flag = 1, altrimenti, se il Kinect non riconosce ( o non vede) una o più sfere, allora l’applicazione tiene l’ultima misura della posizione di H, ma viene segnalata la non affidabilità ponendo flag = 0. L’altezza della mano sinistra rispetto alla base del robot si ottiene in automatico rototraslando il punto scheletrico corrispondente al polso sinistro dell’operatore dalla terna S alla terna W, questo dato serve nel controllo del Comau.

4.4

Schema di controllo

In questa sezione viene descritto brevemente il funzionamento dell’applicazione implementata nel PC Linux, come utilizza e gestisce le informazioni provenienti dal PC Widows e quali riferimenti di posizione invia al Comau.

L’applicazione sul PC Linux è composta da due thread paralleli; uno riguardante il controllo e la comunicazione con l’unità C4G, e l’altro riguardante la comuni- cazione con il PC Windows.

Figura 4.26: Operazioni del Fidelio

Il tempo di ciclo sono 2 ms, determinato dalla frequenza con cui il C4G deve ri- cevere istruzioni.

Ad ogni ciclo il PC Linux interrompe il thread di comunicazione con il PC Win- dows, copia le informazioni necessarie alla legge di controllo, e quindi riavvia il thread parallelo.

Nonostante sia stato tutto predisposto per l’utilizzo della legge di controllo com- pleta, che definisce la velocità lineare e quella rotazionale dell’end effector, la parte riguardante il controllo della velocità angolare del paraurti (e quindi dell’end effec- tor), pur essendo implementata, non è stata utilizzata. Questo poiché, per vincoli di tempo, si è deciso di focalizzare l’attenzione sui risultati degli esperimenti ese- guiti con il controllo della sola velocità lineare dell’oggetto tenuto dal Comau, per poter trarre delle prime conclusioni sperimentali precise, anche confrontando il risultato con le simulazioni.

Quindi i riferimenti di velocità angolare sono fissi a 0, il paraurti viene solo tra- slato dal Comau, senza la minima rotazione. Per questo motivo, da qui in poi, i dati riguardanti gli orientamenti RE

W e RWH non verranno più considerati, anche

se sono presenti.

Facendo riferimento alla figura 4.26 è possibile vedere che l’applicazione sul Fidelio riceve dal C4G le informazioni riguardo alle variabili di giunto attraverso

4.4 Schema di controllo 85

il vettore 6x1 q. Dal vettore q l’applicazione calcola la posizione del terminale, che coincide con la posizione della terna oggetto O, il vettore 3x1 rO.

q =         q1 q2 q3 q4 q5 q6         rO =   rOx rOy rOz  

A partire dai vettori 3x1 rE e rH che il PC Linux riceve dal PC Windows, l’ap-

plicazione calcola gli incrementi (cioè gli spostamenti) drO da applicare all’end

effector, poichè la modalità di funzionamento del controllo prevede di ricevere il riferimento di posizione relativo.

Riprendendo la parte della velocità lineare della legge di controllo si ha che: vO = KRv(rE − rH)

vO è la velocità lineare dell’end effector, per trovare il suo incremento di posizione

è necessario moltiplicare tale quantità per il tempo di campionamento del Comau, cioè 2 ms. Da qui deriva:

drO = vO· dt = KRv(rE − rH) · dt con dt = 0, 002 s

E’ stato necessario imporre dei limiti agli spostamenti dell’end effector lungo i 3 assi, poiché il paraurti agganciato è ingombrante e lo spazio non è sufficiente a muoverlo ovunque, inoltre tali limiti negli spostamenti evitano che il Comau possa urtare l’operatore oppure il treppiedi su cui è posizionato il sensore Kinect che riprende la scena. Per questo motivo l’applicazione sul PC Linux deve valutare se è possibile applicare lo spostamento drO trovato, oppure se la sua applicazione

comporterebbe il superamento di un limite di corsa.

La valutazione del limite di corsa viene effettuata su tutte e 3 le componenti del vettore rO, nel caso in cui il limite su una componente venga superato allora lo

spostamento lungo quella direzione è nullo:

((rOx < 0, 65 ∩ drOx < 0) ∪ (rOx > 1, 00 ∩ drOx > 0)) → drOx = 0

((rOy < −0, 50 ∩ drOy < 0) ∪ (rOy > 0, 55 ∩ drOy > 0)) → drOy = 0

((rOz < 0, 85 ∩ drOz < 0) ∪ (rOz > 1, 20 ∩ drOz > 0)) → drOz = 0

I limiti di corsa riportati nelle condizioni sono espressi in metri.

E’ stata inserita anche la saturazione della velocità, per evitare che il Comau possa eseguire movimenti troppo bruschi. Viene fissata la velocità massima del- l’end effector (istantanea) pari a 25 cm/s, moltiplicando per 2 ms si ottiene un

incremento istantaneo massimo pari a 5 · 10−4m.

La norma del vettore drO dovrà quindi essere minore o uguale a tale soglia,

altrimenti viene eseguita la saturazione con la seguente operazione: kdrOk > 5 · 10−4 → drO =

5 · 10−4 kdrOk

· drO

Infine l’incremento nella posizione dell’end effector drO viene trasformato nei cor-

rispondenti incrementi delle variabili di giunto dq attraverso l’applicazione della funzione di cinematica differenziale inversa.

Ottenuti gli incrementi delle variabili di giunto dq c’è un’ultima verifica da fare prima di inviarli al C4G, che a sua volta li invierà al manipolatore, bisogna veri- ficare che lefthandheight < 1, 5 m e flag = 1.

Tale condizione è necessaria perché il robot deve muoversi solo se il sensore vede bene lo strumento impugnato dall’operatore, in caso contrario, per sicurezza, il robot si blocca finchè lo strumento non ritorna ad essere visibile e tracciabile per il sensore, ciò significa che tutte e 3 le sfere montate sull’areografo devono essere visibili per il sensore Kinect. La prima condizione, che riguarda l’altezza della mano sinistra dell’operatore, è stata implementata affinché l’operatore potesse bloccare i movimenti del robot in qualsiasi momento, semplicemente alzando il braccio sinistro.

Capitolo 5

Esperimenti e Discussione

In questo capitolo vengono presentati i risultati sperimentali per la verifica della legge di controllo e degli algoritmi presentati in questo lavoro di tesi. In particolare l’effetto dei parametri della legge di controllo è stato verificato quantitativamen- te, considerando due indicatori rappresentativi dell’affaticamento dell’operatore e della precisione di lavorazione risultati dagli esperimenti, e qualitativamente, attraverso un test di utilizzo, coivolgendo un gruppo di persone a cui, dopo la prova, è stato chiesto di rispondere a un questionario.

5.1

Obiettivo degli esperimenti

Come spiegato nella sezione 4.4 per gli esperimenti viene utilizzata solo la legge di controllo sulla velocità lineare della (1.1), cioè:

vO = ˙rO = KRv(rE− rH)

Si vuole ottenere una valutazione della variazione degli indicatori di prestazione (l’errore di posizionamento rispetto alla posa ergonomica ep = rE − rH e l’errore

di tracciamento et = rP − rH) al variare del coefficiente di velocità lineare KRv,

come nella simulazione su Matlab descritta nella sezione 1.5,.

Gli indicatori sono stati valutati in maniera leggermente differente da quanto specificato nel capitolo 1, poiché nell’implementazione pratica non è stato possi- bile valutare tali quantità come nelle simulazioni.

Da questi risultati si vuole identificare una matrice di coefficienti Kv

R che funzioni

in modo tale da ridurre ep rispetto al caso base (la lavorazione con il paraurti

statico), senza che venga compromessa la capacità di tracciamento dell’operatore, cioé senza che et sia troppo elevato.

Riprendendo le definizioni date nel capitolo 1, H è la terna di riferimento del- l’utensile, P è la terna di riferimento che si muove lungo il percorso che l’utente intende seguire, E è la terna di riferimento ergonomica mentre la terna O è quella

Figura 5.1: Tracciato (evidenziato) che l’operatore segue durante gli esperimenti terna mobile solidale con il paraurti (la terna di riferimento dell’end effector). Le posizioni di queste terne sono indicate con rH, rP, rE e rO, tutte rispetto alla

terna mondo W, che ricordiamo essere la base del manipolatore robotico.

Una volta ottenuti i dati desiderati, è stato proposto a un gruppo di persone di eseguire dei test di utilzzo di questa applicazione, lavorando con il robot che muo- ve il paraurti, per poi raccogliere le loro impressioni attraverso un questionario di valutazione.

Documenti correlati