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
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)
- 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.

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:
|
|
|
|
|
|
|
|
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.
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).
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.
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);
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à.
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
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)