Torna al menù

 

UNIVERSITA’ DI PADOVA

Corso di Laurea in Ingegneria Meccanica

 

 

 

LABORATORIO DI PROGETTAZIONE ASSISTITA DAL CALCOLATORE:

ANALISI FUNZIONALE

Prof. V. Cossalter e Ing. S. Garbin

 

 

 

Simulazione di un robot a tre gradi di libertà mediante l'uso dei codici 'Visual Nastran' e 'Matlab Simulink'

 

 

 

 

 

BAGLIVO LUCA  411661

DEGANELLO DAVIDE  409570

 

 

1.       Introduzione

 

In questa esercitazione si è voluto simulare il comportamento di un robot tipo "Puma", con struttura a sole coppie rotoidali. Il robot ha nella realtà 6 gradi di libertà ma si sono studiati e modellizzati solo i primi 3 gradi di libertà, ossia quelli responsabili del posizionamento del polso; esso a sua volta, con le restanti 3 rotazioni disponibili, genera l'orientazione desiderata per l'utensile (pinza di presa, testa di saldatura o end effector in genere)

1.1           Obiettivi

 

-          Verifica dell'analisi cinematica inversa di posizione del manipolatore mediante simulazione del raggiungimento, a partire dalla posizione iniziale (home), di una posizione desiderata nello spazio cartesiano tridimensionale.

-          Generazione di una traiettoria desiderata mediante raggiungimento di punti di precisione interpolanti la traiettoria stessa.

-          Controllo della coppia dei motori applicati ai giunti del robot mediante retroazione di posizione di tipo PID (proporzionale, integrativo, derivativo). Integrazione con SIMULINK.

 

2.       Analisi cinematica inversa di posizione del manipolatore. Cenni ed equazioni risolutive.

Figura 1: Posizione delle terne di riferimento.

 

 

Se si desidera che l'organo finale della catena cinematica del robot assuma una posizione e un orientamento specificati è necessario determinare per ogni giunto le posizioni angolari relative tali da portare l'end effector nella posizione e nell'orientamento desiderati. L'analisi cinematica inversa di posizione consente di risolvere questo problema.

In questo caso è stato utilizzato un metodo matriciale che consente la soluzione in forma chiusa del problema, ossia di trovare delle relazioni analitiche risolutive per tutti i 6 gradi di libertà del robot. Inoltre, immaginando che il nostro robot supporti un polso con giunto sferico, ossia che gli assi degli ultimi 3 giunti coincidano in un punto, il problema del posizionamento diventa indipendente da quello dell'orientamento e ciò ha consentito di utilizzare solo 3 equazioni indipendenti (del sistema complessivo di 12 equazioni) per calcolare gli angoli di nostro interesse:

 della colonna,  del braccio,  dell'avambraccio.

Chiamando  la matrice di rototraslazione dal sistema  al sistema , la soluzione cercata si ottiene da :

 

 

e, giacché  e  sono note poiché descrivono rispettivamente posizione e orientamento dell'end effector rispetto alla terna 6 e rispetto al sistema fisso 0:

 

dove  sono le coordinate che si desidera vengano raggiunte dall'origine della terna 6 (coincidente con il centro della sferetta rossa nel modello in VisualNastran).

Le terne di riferimento solidali ai giunti (Figura 1) sono state scelte utilizzando la notazione di Denavit-Hartenberg che consente notevoli semplificazioni computazionali, infatti la trasformazione  (per il passaggio di coordinate dal giunto al giunto  del membro ) si esprime tramite 2 sole rotazioni e 2 sole traslazioni.

La tabella riassuntiva per i primi 4 g.d.l. della configurazione scelta secondo D-H è la seguente:

 

(mm)

(mm)

1

0

0

0

2

-90°

0

0

3

0

600

45

4

(-90°)

0

550

()

()

 

La terna 4 non è rappresentata in Figura 1 ma  (distanza tra l'asse  e l'asse ) è stato utilizzato nei calcoli (Figura 2). In Appendice sono riportate le matrici di rototraslazione per le prime 4 terne di riferimento solidali al robot che si sono utilizzate nei calcoli..

Il sistema la cui soluzione consente di calcolare  si ottiene da :

 

 

infine il sistema che porta alle equazioni risolutive:

 

 

 

Figura 2: Disposizione di assi di rotazione, normali orientate, e parametri per notazione D-H.

 

 

 

 

Le formule finali utilizzate nelle simulazioni sono state ottenute dalle 3 equazioni non banali del sistema sopra:

 

 

Si fa presente che il sistema porta a 4 possibili soluzioni, ossia a 4 possibili  terne di angoli.


3.       Procedimento e strumenti utilizzati

 

I modelli solidi dei membri del manipolatore sono stati creati con il software Pro Engineer e quindi importati in Visual Nastran. I vincoli tra i vari membri sono costituiti da "revolute motor" le cui coppie di coordinate sono orientate come le terne di riferimento adottate secondo la notazione D-H (Figura 1). A seconda degli obiettivi prefissi questi motori sono stati utilizzati come motori di solo posizionamento angolare (nel caso di verifica dell'analisi inversa e della generazione di traiettorie) o come erogatori di coppia (nel caso del controllo retroattivo realizzato ad hoc).

3.1           Verifica della cinematica inversa

 

La correttezza delle formule trovate con l'analisi inversa di posizione è stata verificata con l'ausilio del codice 'Matlab' tramite il quale si sono calcolati  i valori degli angoli incogniti necessari a raggiungere una posizione desiderata all'interno dello spazio di lavoro del robot (file 'Cinerobo.m'). I valori di prova così calcolati sono stati inseriti come posizioni angolari dei tre motori di orientamento applicati ai tre giunti rotoidali. Condizione necessaria per un funzionamento corretto è che la posizione iniziale del robot nel modello, dove si ha lo zero angolare dei motori, coincida con quella utilizzata per scrivere la tabella di Denavit-Hartenberg.

Una volta andata a buon fine la verifica, si sono implementate le formule di cinematica inversa all'interno di Visual Nastran: nel file 'robot_xyz.wm3' si può dare in input la posizione x,y,z di arrivo desiderata e il robot la raggiungerà automaticamente.

 

3.2           Generazione di traiettorie

 

Tramite Matlab sono stati creati dei programmi che generano tre files di testo (tab_teta1,2,3.txt). In essi sono contenute due colonne: nella prima compaiono i tempi in secondi e nella seconda gli angoli in gradi. Questi sono le posizioni angolari che i tre motori devono raggiungere, negli istanti di tempo stabiliti, perché l'origine dell'ultima terna di riferimento (immaginata nel centro della sferetta rossa nel modello in Visual Nastran) descriva la traiettoria desiderata. In Visual Nastran le posizioni angolari vengono date in input ai motori in forma di tabella generata dalla lettura automatica dei files di testo scritti dal programma Matlab.

 

Descrizione dei programmi.

 

Il programma 'circonferenza.m' richiede in input:

-                   la posizione del centro della circonferenza;

-                   il raggio della circonferenza;

-                   il passo angolare e il tempo per la  traiettoria.

 Esso suddivide la circonferenza desiderata (nel piano xy) in un numero di punti intermedi variabile in base al passo angolare impostato e per ogni punto calcola le posizioni angolari dei giunti tramite le formule di cinematica inversa. Ciascuna di queste posizioni viene abbinata ad un opportuno tempo, calcolato in base al tempo complessivo richiesto per la traiettoria; questa verrà percorsa a velocità costante. Il file 'robot_taglio.wm3' contiene un'applicazione di quanto detto sopra.

Il programma 'multitempi_h' è simile al precedente ma genera una serie di traiettorie rettilinee  nello spazio 3D.

 Esso richiede in input:

-          il numero di punti agli estremi dei segmenti;

-          i tempi di percorrenza di ogni segmento;

-          i punti intermedi di precisione per ogni segmento.

Il file 'robot_saldatura.wm3' simula una saldatura sui tre lati di una piastra.

 

Si riporta di seguito come esempio il programma 'circonferenza.m':

 

x0=input('Inserire le coordinate del centro. x0? ')

y0=input('y0? ')

z0=input('z0? ')

R=input('Raggio? ')

dteta=input('Incremento angolare (gradi) ')

tf=input('Tempo complessivo per la traiettoria (secondi)? ')

%Generazione punti interpolati

dimen=360/dteta

x=zeros(1,(dimen+2));

y=zeros(1,(dimen+2));

z=zeros(1,(dimen+2));

for i = 1:(dimen+1)

   teta=i*dteta;

   x(i)=R*cos(teta*pi/180)+x0;

   y(i)=R*sin(teta*pi/180)+y0;

   z(i)=z0;

end

%Punto di ritorno home

x(dimen+2)=600;

y(dimen+2)=45;

z(dimen+2)=-550;

 

%Cinematica inversa:

a2=600;

a3=0;

d3=45;

d4=550;

k=(x.^2+y.^2+z.^2-a2^2-a3^2-d3^2-d4^2)./(2*a2);

t1=atan2(y,x)-atan2(d3,sqrt(x.^2+y.^2-d3^2));

t3=atan2(a3,d4)-atan2(k,sqrt(a3^2+d4^2-k.^2));

a11=-a3*sin(t3)-d4*cos(t3);

a12=a3*cos(t3)-d4*sin(t3)+a2;

a21=-a3*cos(t3)+d4*sin(t3)-a2;

a22=-a3*sin(t3)-d4*cos(t3);

c=x.*cos(t1)+y.*sin(t1);

d=z;

t2=atan2((a22.*c-a12.*d)./(a11.*a22-a12.*a21),(-a21.*c+a11.*d)./(a11.*a22-a12.*a21));

t1=t1*180/pi;

t2=t2*180/pi;

t3=t3*180/pi;

for i = 1:(dimen+1)

   if ((x(i))^2+(y(i))^2-d3^2<0)

      'uno dei punti è irraggiungibile!'

   end

   if (a3^2+d4^2-(k(i))^2<0)

      'uno dei punti è irraggiungibile!'

   end

end  

%Generazione dei file txt

tempo = 0.5:(tf/(dimen)):(tf+0.5);

t_rit=tf+1;

tempo=cat(2,tempo,t_rit);

v1=[tempo;t1];

tab1 = fopen('tab_teta1.txt','w');

fprintf(tab1,'%6.2f %12.8f\n',v1);

status = fclose(tab1);

 

v2=[tempo;t2];

tab2 = fopen('tab_teta2.txt','w');

fprintf(tab2,'%6.2f %12.8f\n',v2);

status = fclose(tab2);

 

v3=[tempo;t3];

tab3 = fopen('tab_teta3.txt','w');

fprintf(tab3,'%6.2f %12.8f\n',v3);

status = fclose(tab3);

 

 

4.       Controllo assi

 

Nelle simulazioni eseguite per la verifica dell'analisi cinematica inversa e per la generazione di traiettorie il controllo della posizione relativa dei giunti viene eseguito internamente dal codice Visual Nastran.

Alla fine dell'esercitazione si è voluto però simulare un controllo dei motori sui giunti di tipo PID , ossia con retroazione di posizione proporzionale, integrativa e derivativa. A tal fine si è utilizzata la possibilità di integrazione di Visual Nastran con Simulink di Matlab, codice per la simulazione di sistemi (anche real-time). La Figura 3 riporta lo schema creato per il controllo del robot da Simulink. In esso è contenuto un blocco chiamato 'vnmodel' che ha la funzione di mettere in comunicazione i due programmi: riconosce le variabili di input e di output create in Visual Nastran e consente di scegliere quali utilizzare all'interno del modello Simulink (chiamato 'controlloassi.mdl').

Descrizione del modello 'controlloassi.mdl'

Questa simulazione usa i due files 'controlloassi.mdl' e 'robot_simulink.wm3'.

Nel nostro caso il blocco 'vnmodel' legge in input le coppie di controllo calcolate nel modello Simulink secondo una retroazione degli output forniti dal modello Visual Nastran, ossia gli angoli . Il blocco in questione funge cioè da funzione di trasferimento del sistema robot e ne integra le equazioni dinamiche caratteristiche.

Nel modello Simulink è stata implementata la cinematica inversa del robot (contenuta nel primo sottosistema con 3 input e 3output, Figura 4): si inseriscono le posizioni di obiettivo e vengono calcolati i tre angoli che colonna, braccio e  avambraccio devono raggiungere. Questi tre angoli rappresentano gli ingressi a gradino imposti al sistema, che parte da posizioni angolari tutte nulle.

Inoltre, per migliorare il controllo, è inserito un sottosistema chiamato compensazione della gravità (Figura 5) che in ogni istante di integrazione legge le posizioni angolari del braccio e dell'avambraccio e calcola le coppie da fornire ai motori per compensare i momenti della forza peso rispetto agli assi dei giunti di braccio e avambraccio.

 

 

 

 

Figura 3: Schema del modello di controllo creato in Simulink.

 

Figura 4: Sottosistema dell'analisi cinematica inversa.


Figura 5: Sottosistema della compensazione della gravità.

 

5.       Considerazioni conclusive

 

Nella simulazione del controllo si è potuto verificare che l'azione proporzionale è responsabile della prontezza di risposta del sistema ma anche di eventuali overshoots che, combinati con una azione integrativa eccessiva, portano ad instabilità (introducendo poli nella funzione di trasferimento). L'azione integrativa rallenta la risposta del sistema mentre l'azione derivativa introduce uno 'smorzamento' della risposta consentendo di aumentare il guadagno proporzionale ma portando anch'essa ad instabilità se la risposta è molto disturbata ,ad esempio, da influenti azioni inerziali.

Si è potuto notare come il grado di precisione richiesto per il posizionamento angolare dei motori sia molto alto: con un errore a regime di circa del controllo su tutti i giunti non si ottiene una precisione migliore di  sul posizionamento dell'end effector

 

6.       Appendice

 

Matrici di trasformazione utilizzate.

 

 

 


Equazioni risolutive:

 

 

Dimensioni del modello utilizzato:

 

 

Elenco dei files creati:

 

·        Per la verifica dell'analisi cinematica inversa di posizione:

-        Robot_xyz.wm3

-        Cinerobo.m

·        Per la generazione delle traiettorie:

-        Robot_taglio.wm3

-        Robot_saldatura.wm3

-        Circonferenza.m

-        Multitempi_h.m

-        Tab_teta1,2,3.txt

·        Per il controllo degli assi:

-        Robot_simulink.wm3, (da usare con:)

-        Controlloassi.mdl

·        Altri files:

-        Taglio.avi (video)

 

Torna al menù