http://www.windizio.altervista.org/appunti/
File distribuito con licenza Creative Commons BY­NC­SA 2.5 IT
Copyright © 2007 ­ Michele Tartara
Definizioni
Un robot è un manipolatore multifunzionale riprogrammabile, comandato automaticamente.
Deve avere tre o più assi. Può essere fisso oppure spostarsi su un carrello o rotaia.
Un robot mobile è un sistema in grado di spostarsi in ambienti più o meno strutturati tramite vari apparati di locomozione (ruote o zampe). Di solito questi robot sono dotati di sensori che permettono di esplorare l'ambiente.
Un robot manipolatore è una catena cinematica sequenziale aperta composta da corpi rigidi (link) uniti da giunti (senza diramazioni e con un'estremità libera)
Sottosistemi
●
Meccanica
Principale fonte di distinzione tra un robot e un computer. Comprende il braccio, la mano, le ruote, ecc.
●
Azionamenti (attuatori)
Esistono due tipi di attuatori.
○
Tradizionali: elevata rigidità all'interfaccia col carico (per permettere la precisione del movimento)
pro: precisione, stabilità, larghezza di banda del “controllo in posizione”
contro: ingranaggi ingombranti, problemi di attrito, inerzia additiva, rumore (rovinano la precisione del
movimento). Per risolvere sono stati inventati i motori direct drive, senza ingranaggi di riduzione ma con una
scarsa densità di forza (difficile sollevare pesi)
○
●
Nuovi: elastici, leggeri, alti rapporti forza/massa, potenza/massa (una persona solleva più del 10% / 20% del
proprio peso. Un robot tradizionalmente può sollevare solo piccole percentuali del proprio peso). Es: attuatori
di McKibben, con le proprietà dei muscoli reali, che tuttavia richiedono aria compressa.
Controllo
Riceve input nello spazio cartesiano e li converte nello spazio dei giunti. Talvolta tuttavia (soprattutto per robot
industriali) la conversione può essere fatta dal sottosistema di programmazione. In tal caso il controllore
Può attuare controllo in posizione (per precisione anche inferiore al millimetro, utile in ambienti controllati) o
controllo in forza (maggior adattamento all'ambiente, ma richiede molti più sensori e controlli e maggior capacità
di elaborazione. Spesso si usano euristiche). E' fisicamente a bordo del robot.
●
Processo
Non è propriamente parte del robot: è la parte di ambiente esterno che interagisce direttamente con il robot
●
Sensori
Permettono di misurare i parametri del robot, trovare oggetti, rilevare collisioni, monitorare le interazioni con
l'ambiente, ispezionare il risultato del processo. Spesso servono elaborazioni complesse per estrarre informazioni
dai dati (es: elaborazione e riconoscimento delle immagini).
I sensori possono agire a vari livelli (in ordine decrescente di complessità):
●
○
percettivo (stato del mondo, conseguenza delle azioni)
○
del modello (formazione del modello geometrico, fusione sensoriale)
○
della misura (conversione del segnale)
○
fisico (trasduttore)
Pianificazione e programmazione
Relativa ai percorsi da seguire o alle azioni da svolgere. Se effettuata ad alto livello, permette di vedere il robot
come agente (fisico) che usa i sensori per costruire un modello dell'ambiente e poi costruisce piani, cioè sequenze
di azioni motorie e percettive per raggiungere uno scopo.
Il sistema di programmazione in genere risiede su un computer esterno. Solo il programma viene caricato sul
1
http://www.windizio.altervista.org/appunti/
File distribuito con licenza Creative Commons BY­NC­SA 2.5 IT
Copyright © 2007 ­ Michele Tartara
controllore (a bordo del robot).
La programmazione di un robot può essere svolta con appositi linguaggi, oppure “superata” con nuove forme di
interazione tramite l'uso di esempi (imitazione), interfacce grafiche, linguaggio parlato.
Mobilità
Ogni corpo rigido ha 3 gradi di mobilità nel piano  x , y ,  , 6 nello spazio  x , y , z ,  ,  , (tre traslatori e tre
rotatori).
Numero di gradi di libertà nello spazio per una catena di N link:
6N−# vincoli
Per raggiungere ogni punto dello spazio sono necessari almeno 3 gradi di libertà. Per raggiungere ogni punto con un
orientamento qualsiasi ne servono 6 (spesso, 3 nel braccio e 3 nel polso).
Se si hanno più di 6 gradi di libertà, essi vengono usati per migliorare le prestazioni in condizioni particolarmente difficili.
Spazio di lavoro: insieme dei punti dello spazio che il robot può raggiungere con la mano.
Spazio raggiungibile: dove la mano può essere posta con almeno un orientamento
Spazio di destrezza: dove la mano può essere posta con qualsiasi orientamento
Giunti
Possono essere di rotazione (R – detti sferici) o di traslazione (T – detti prismatici).
E' possibile individuare vari tipi di robot in relazione alla tipologia dei giunti
Cartesiano (TTT)
3 giunti prismatici ortogonali. Lo spazio di lavoro è un parallelepipedo.
Cilindrico (RTT)
R e poi due T ortogonali. Lo spazio di lavoro è un cilindro. Minor libertà di movimento (lo spazio di lavoro lungo l'asse è
ostruito dal robot stesso), minor costo di realizzazione dei giunti.
Sferico o polare(RRT) – Stanford arm
Ha due giunti di rotazione perpendicolari e poi un giunto prismatico. Lo spazio di lavoro è una semisfera. Spesso usato in
operazioni di saldatura: può lavorare facilmente con la mano orientata verso l'esterno.
Articolato (RRR) - Puma
Lo spazio di lavoro è una parte di una semisfera. E' detto antropomorfo perchè simile al braccio umano. Il primo giunto è
perpendicoloare agli altri due, che sono paralleli fra loro. La presenza di sole rotazioni rende il robot meno costoso e più
agile, ma la trasformazione tra lo spazio di attuazione e quello reale risulta più complessa.
SCARA (RRTR)
Tre giunti di rotazione paralleli e un giunto di traslazione rivolto verso il basso. Molto usato per le operazioni di
assemblaggio (grazie alla discesa verticale).
Link
Sono i collegamenti tra due giunti. A seconda di come sono disposti gli assi dei giunti, i link si dividono in paralleli e
ortogonali.
2
http://www.windizio.altervista.org/appunti/
File distribuito con licenza Creative Commons BY­NC­SA 2.5 IT
Copyright © 2007 ­ Michele Tartara
Rotazioni
Vengono rappresentate con tre angoli detti Roll (rollio), Pitch (beccheggio) e Yaw (imbardata).
E' possibile esprimere ogni orientamento nello spazio attraverso tre rotazioni che avvengono attorno agli assi
A2 , A3 , purchè A1 ≠A2 e A2 ≠A3 .
A1 ,
Le terne di assi più usate sono: zxz oppure zyz (nel sistema mobile) e xyz (nel sistema fisso).
Gli angoli di tali rotazioni vengono detti angoli di Eulero.
Mano
Può essere semplice (a pinza) o complessa (umana).
Problemi delle mani a pinza: garantire tenuta della presa, garantire che l'oggetto sia bloccato nella mano, non perdere il
riferimento della posizione dell'oggetto.
Problemi della mano umana: diverse prese possibili, importanza dei sensori.
Sistemi di riferimento e coordinate omogenee
[]
X
Coordinate omogenee: indichiamo le coordinate cartesiane di un punto P tramite il vettore p= Y . Si definiscono
Z
x
y
z
coordinate omogenee una quaterna di numeri x , y , z , w tali che X =
, Y=
, Z=
. Si può quindi
w
w
w
x
y
definire un vettore di coordinate omogenee p=
.
z
w
[]
Traslazione
[]
a
b
Una traslazione è indicata dal vettore P=
c
1
[][ ]
x
x a
y
y b
H⋅ =
z
zc
1
1
. Una matrice di traslazione è una matrice H così definita:
[ ]
1
0
. Quindi H=
0
0
0
1
0
0
0
0
1
0
a
b
=Trasl a , b ,c 
c
1
Rotazione
Si considera il caso di rotazione di un angolo  attorno all'asse z. Preso un punto
ruotandolo, un punto Q= x q , y q  .
P= x p , y p  si vuole ottenere,
In coordinate polari: da x p=cos 
y q=sin 
y p=sin  a x q = cos
Applicando le formule trigonometriche di somma si ottiengono
x q = cos  cos− sin sin=x p cos − y p sin 
3
x q e y q espressi in funzione di x p e y p :
http://www.windizio.altervista.org/appunti/
File distribuito con licenza Creative Commons BY­NC­SA 2.5 IT
Copyright © 2007 ­ Michele Tartara
y q= sin cos cos sin=x p sin y p cos 
[
cos  −sin 
sin  cos
da cui deriva: H=Rot  z ,=
0
0
0
0
[
0
0
1
0
0
0
0
1
1
0
0
0 cos  −sin 
Analogamente: H=Rot  x , =
0 sin  cos 
0
0
0
]
0
0
0
1
]
[
cos 
0
e H=Rot  y , =
−sin 
0
[
nx o x a x
n oy ay
Quindi, in generale, la rotazione attorno a un asse qualsiasi è: H= y
n z oz az
0 0 0
[] [] []
nx
Detti i= n y
nz
ox
j= o y
oz
ax
k = ay
az
una matrice
R=[ i
0
0
0
1
0 sin  0
1
0
0
0 cos  0
0
0
1
]
]
j k ] è una matrice di rotazione se
T
i × j=0
i T ×i=1
T
T
j ×k =0 e j × j=1
k T ×i=0
k T ×k =1
Rototraslazione
[
nx o x a x P x
n oy ay Py
H= y
n z oz az P z
0 0 0 1
]
Cinematica
Abbreviazioni utilizzate di seguito:
S =sin 
C =cos 
Cinematica: legame fra le variabili generalizzate indipendenti q (variabili dei giunti) e le variabili cartesiane x
Cinematica diretta: passaggio dalle variabili di giunto alle variabili cartesiane. Ammette sempre una e una sola soluzione, che viene ottenuta mediante il calcolo della matrice T . Può presentare indeterminatezza sul segno per le componenti dell'orientamento  . Per risolvere questa indeterminatezza si utilizza, invece della {
0 °≤≤90 °
90°≤≤180 °
funzione arctan la funzione atan2, definita come: atan2 y , x =
−180°≤≤−90°
−90°≤≤0 °
Definita la matrice T della mano come T =
[
xi yi zi p i
0 0 0 1
4
]
:
per
per
per
per
x
−x
−x
x
e
e
e
e
y
y
−y
−y
http://www.windizio.altervista.org/appunti/
File distribuito con licenza Creative Commons BY­NC­SA 2.5 IT
Copyright © 2007 ­ Michele Tartara
xi è il vettore della normale alla mano
● yi è il vettore di apertura della mano
● zi è il vettore di avvicinamento della mano
● pi è il vettore di posizione della mano
Cinematica inversa: passaggio dalle variabili cartesiane alle variabili di giunto. Non è detto che ammetta soluzioni: il goal potrebbe essere fuori dallo spazio di lavoro. Oppure, ci potrebbero essere soluzioni multiple (il numero dipende dal numero di parametri di Denavit­Hartenberg diversi da 0). La molteplicità delle soluzioni può essere sfruttata per evitare ostacoli.
Per trovare le soluzioni si può:
● (metodo generale) eguagliare la matrice T della mano con la sua espressione simbolica
si ottengono 6 equazioni trascendenti in 6 incognite. La soluzione di questo sistema non è banale. Esistono delle formulazioni ad hoc che cercano di ridurre il problema a sottoproblemi più semplici.
● Soluzioni iterative
metodo basato su approssimazioni successive che permette di trovare soluzioni approssimate (con errore indefinito in tempi definiti oppure con errore definito in tempi indefiniti)
● Soluzioni in forma chiusa (i cui risultati sono espressi da formule esatte: sono il metodo preferibile, ma non sempre esistono. Ci sono diversi metodi per ottenerle:
○ Metodo di Pieper: applicabile se sono verificate determinate condizioni:
■ il robot deve avere 3 giunti di rotazione consecutivi con gli assi che si intersecano in un punto (la costruzione dei polsi è fatta in questo modo)
■ il robot deve avere 3 giunti di rotazione consecutivi con gli assi paralleli (condizione sfruttata dal robot SCARA)
Se vale una di queste condizioni, esiste la soluzione al problema cinematico inverso in forma chiusa, che si riduce alla soluzione di una equazione di 4° grado in una sola incognita e di un sistema in forma chiusa.
○ Metodo di Paul: trova la soluzione mediante premoltiplicazioni o postmoltiplicazioni con matrici 4x4. Non garantisce di trovare una soluzione. Procedimento:
1. Uguagliare la matrice di trasformazione generale (espressa in termini di variabili cartesiane) alla matrice T del manipolatore (espressa in termini di variabili di giunto)
2. Cercare nella seconda matrice:
● Elementi che contengono una sola variabile di giunto
● Coppie di elementi che diano un'espressione in una sola variabile quando divisi fra loro
● Elementi o combinazioni di elementi semplificabili usando identità trigonometriche
sin±=sin cos ±cos sin 
cos±=cos  cos∓sin sin 
3. Identificati tali elementi, li si eguaglia ai corrispondenti della matrice in variabili cartesiane. Si ottiene un'equazione la cui soluzione permette di trovare il legame tra una variabile di giunto ed elementi della matrice di trasformazione generale.
4. Al passo 2 non si trovano elementi, si premoltiplicano entrambi i membri dell'equazione matriciale per l'inversa della matrice A del primo link, o si postmoltiplicano per l'inversa della matrice A dell'ultimo link, poi si riparte dal punto 2. L'operazione può essere ripetuta per ogni link.
○ Altri metodi: basati su algebra elicoidale, matrici doppie, quaternioni, ecc...
●
5
http://www.windizio.altervista.org/appunti/
File distribuito con licenza Creative Commons BY­NC­SA 2.5 IT
Copyright © 2007 ­ Michele Tartara
Dinamica: studia le equazioni che caratterizzano il moto dei robot. Ci serve quando non siamo interessati solo alle posizioni iniziali e finali, ma anche alle caratteristiche del moto stesso.
Calcolo delle traiettorie: metodo per determinare e fornire al controllore del robot l'insieme dei punti per spostarsi da un punto all'altro con opportune velocità e accelerazioni.
La cinematica diretta e inversa sono necessarie perchè il controllore lavora nello spazio dei giunti, mentre il sistema di pianificazione (e, in generale, gli esseri umani) nello spazio del task (cartesiano). E' quindi necessario applicare trasformazioni tra i due tipi di variabili.
Esempio di cinematica diretta per un robot RR planare
2
x=l1cos  1l2cos12
y=l1sin  1l2sin12
Cinematica inversa:
2
2
2
2
Si usa la regola del coseno: x y =l 1l 2 2⋅l 1⋅l 2⋅C2 quindi  x 2 y 2−l 21 −l 22 
 x 2y 2−l 21−l 22 
C2=
⇒ 2 =arccos
2⋅l 1⋅l 2
2⋅l 1⋅l 2
l2
l1
y
1
x
 1=tan−1
[

l 2⋅S 2
y
−tan−1
x
l 1 l 2⋅C2

]

Composizione di trasformazioni di sistemi di riferimento
h, i, k sono sistemi di riferimento. In apice, è indicato il sistema rispetto a cui è descritta la trasformazione, in pedice i
sistemi da cui si parte e in cui si arriva.
Per comporre le trasformazioni:
H hh,i =H hk , i⋅H hh,k Premoltiplicazione. Per matrici espresse rispetto allo stesso sistema di riferimento
h
h
k
H h, i =H h , k⋅H k , i Postmoltiplicazione. Per matrici espresse rispetto al relativo s.d.r di partenza.
Per trovare le matrici mancanti a partire da quelle note:
−1
H kk ,i=[ Hhh ,k ] ⋅H hk ,i⋅H hh ,k
−1
H k ,i=H h, k⋅H k ,i⋅[ Hh ,k ]
h
h
k
h
Denavit-Hartenberg
Convenzione utilizzata per poter calcolare più agevolmente la cinematica diretta e inversa, senza dover utilizzare metodi
ad-hoc per ogni robot.
Parametri
i : angolo fra l'asse x i−1 e x i attorno a z i −1
d i : distanza fra
x i−1 e x i misurata lungo la direzione di z i −1
ai : lunghezza del link: distanza fra z i−1 e z i lungo l'asse x i
i : angolo fra gli assi
z i−1 e z i intorno a x i
6
http://www.windizio.altervista.org/appunti/
File distribuito con licenza Creative Commons BY­NC­SA 2.5 IT
Copyright © 2007 ­ Michele Tartara
Definire i sistemi di riferimento
1) Il sistema di riferimento X0Y0Z0 è posto alla base della catena cinematica del robot.
2) Per ogni giunto:
1. L'asse z del sistema di riferimento del giunto è parallelo all'asse del giunto. L'origine del sistema di riferimento
è all'intersezione tra Zi e Zi-1 oppure nel punto di intersezione del segmento di minima distanza tra gli assi (se
sghembi) e Zi.
2. L'asse x è sulla direzione del segmento di minima distanza (se gli assi sono sghembi) oppure o in direzione
x i=z i−1×z i oppure orientato verso la mano del robot (in posizione di riposo).
3. L'asse y è determinato secondo una terna destrorsa (regola della mano destra) a partire dagli altri due.
Matrici di Denavit-Hartenberg

C i −C  i S  i S  i S  i ai C i
S  i C i C i −S i C i ai S i
i−1
Giunto di rotazione: Ai−1,i=
0
S i
C i
di
0
0
0
1
Giunto di traslazione
ai=0 :


C i −C  i S i S  i S  i 0
S  i C i C i −S i C i 0
Ai−1
i−1,i =
0
S i
C i
di
0
0
0
1

La matrice T rappresenta la trasformazione che permette di passare dal sistema di riferimento della base della catena
cinematica al sistema di riferimento dell'n-esimo link (l'ultimo) della catena e viceversa. Lo scopo è, dato un punto nel
sistema mobile, ottenerlo nel sistema fisso.
0
0
1
n−1
T = A0,n= A0,1⋅A1,2⋅⋅An−1,n
T può anche essere vista come una sottomatrice di rotazione R i unita ad un vettore di traslazione
T=
[
Ri p i
0 1
pi :
]
Programmazione
Accuratezza: differenza tra la posizione cartesiana comandata e quella effettivamente raggiunta al termine del moto. E'
tanto più importante quanto più piccole sono le tolleranze.
Influiscono sull'accuratezza fattori ambientali (temperatura, umidità), parametri cinematici (lunghezza dei link), parametri
dinamici (cedevolezza della struttura, attrito), problemi di misura (risoluzione e non linearità di encoders o resolvers),
problemi di calcolo (arrotondamenti), aspetti dell'applicazione (errori nell'installazione e nella definizione dei riferimenti).
Ripetibilità: variabilità della posizione raggiunta mandando ciclo dopo ciclo lo stesso comando al controllore. Importante
quando il robot è programmato sul campo. In questo caso si lavora in variabili di giunto. E' più facile costruire robot
ripetibili che accurati. Dipende dall'accuratezza del modello cinematico.
Risoluzione spaziale: la distanza minima che può essere rilevata o comandata. Dipende dalla risoluzione dei sensori
interni.
Tutte le caratteristiche indicate in precedenza, dipendono dall'accuratezza del modello cinematico inverso.
Massimo payload: massimo peso che può essere trasportato dal robot a velocità ridotta mantenendo la precisione. Il
nominal payload invece è misurato alla velocità massima mantenendo la precisione. All'interno del payload deve essere
considerato anche il peso della mano, che per il costruttore del robot è un “optional” in quanto allo stesso robot possono
essere attaccate mani differenti a seconda dei compiti da affrontare.
7
http://www.windizio.altervista.org/appunti/
File distribuito con licenza Creative Commons BY­NC­SA 2.5 IT
Copyright © 2007 ­ Michele Tartara
Massima velocità: la velocità massima a cui si può muovere l'estremità del robot completamente esteso.
Tempo di ciclo: tempo necessario ad eseguire il ciclo standard di pick and place di 12 inches.
3
4
6
1
5
1 inch
2
12 inches
Gestione traiettorie
Stop-to-stop: viene svolta in anello aperto tramite attuatori pneumatici che si spostano da un'estremità all'altra del loro
possibile movimento. Non richiede calcoli real-time. La programmazione si ha a livello fisico, muovendo i fine corsa. La
versatilità è limitata. Usata quasi esclusivamente per compiti di pick and place.
Point-to-point: definita sul campo: si posiziona il robot manualmente in posizione 1, si memorizzano i valori dei giunti, si
sposta manualmente il braccio in posizione 2 e si salvano i valori dei giunti, ecc ecc. In fase di esecuzione, la traiettoria
viene definita per interpolazione. Richiede poca memoria. Usata quasi esclusivamente per compiti di pick and place.
Traiettoria controllata: possibilità di specificare le caratteristiche della traiettoria da seguire e di integrare sensori per
evitare ostacoli e risolvere altri problemi che possono presentarsi durante l'esecuzione. Gli algoritmi sono molto complessi
e lo è quindi anche il controllore. Al momento attuale, non è possibile realizzarla ottenendo tutti i vantaggi descritti. Utile
per assemblaggio, saldatura, ecc.
Traiettoria continua: la programmazione viene eseguita spostando manualmente il robot in tutte le posizioni che deve
raggiungere. Nel frattempo, le posizioni che i giunti vengono ad assumere viene memorizzata con un campionamento
sufficientemente fitto. Rieseguire i movimenti risulta quindi semplice, in quanto si riduce ad una sequenza di spostamenti
point-to-point, ma con punti molto fitti. Non servono quindi funzioni di calcolo della traiettoria o della cinematica inversa.
Richiede molta memoria. E' possibile solo la programmazione sul campo. Usi simili alla traiettoria controllata. Utile anche
per verniciatura.
Problematiche
Ragioni che rendono problematica la programmazione di robot e particolarmente lungo il testing:
●
Le azioni non sono reversibili (in genere)
●
E' difficile individuare le cause degli errori (soprattutto se dipendono da fenomeni esterni)
●
Le situazioni sono difficilmente ripetibili (è difficile riprodurre la combinazione di eventi che ha portato ad un
errore)
E' importante che i linguaggi di programmazione possano gestire processi concorrenti, perchè sono tipici della produzione
industriale.
Costrutti appositi devono semplificare la gestione delle operazioni nello spazio.
Esistono molti linguaggi di programmazione per i robot. Non c'è un vero e proprio standard. Molti derivano da BASIC o
Pascal. Tuttavia, quasi tutti i robot mettono a disposizione delle librerie che consentono di richiamare i loro comandi
dall'interno di programmi in linguaggio C (approccio molto usato per la ricerca).
Livelli di astrazione dei linguaggi di programmazione dei robot
●
Livello del task: permette di definire il compito da svolgere tramite il linguaggio naturale. Il robot deve
comprendere tale linguaggio ed essere in grado di preparare un piano di azioni da eseguire per portare a termine il
task.
●
Livello degli oggetti: modellizza in modo più accurato gli oggetti con cui il robot deve interagire.
●
Livello del manipolatore: si danno comandi precisi al manipolatore, indicandogli quali azioni compiere (livello del
8
http://www.windizio.altervista.org/appunti/
File distribuito con licenza Creative Commons BY­NC­SA 2.5 IT
Copyright © 2007 ­ Michele Tartara
linguaggio AL)
●
Livello dei giunti: il controllo è svolto a livello della posizione del singolo giunto. Non sono accettate nemmeno le
variabile cartesiane o le traiettorie.
Il linguaggio ARM-BASIC
Sviluppato nel 1980 per il robot didattico Minimover (5gld, bassa precisione, piccole dimensioni).
Ricalca interamente il linguaggio BASIC, a cui sono state aggiunte solo le istruzioni per il controllo del robot.
●
STEP D, J1, J2, ..., J6
Muove i giunti specificando il numero di passi da far compiere a ogni motore. J1, ..., J5 sono i giunti del braccio. J6 è
l'apertura della mano. D è la velocità con cui deve avvenire il movimento tra un passo e il succesivo.
Tutti i giunti iniziano e terminano il movimento assieme (la traiettoria è calcolata per interpolazione lineare nello spazio dei
giunti).
●
CLOSE D
Chiude la mano. D è un ritardo opzionale.
●
SET D
Impone il controllo manuale del robot (possibile tramite tastiera oppure teach mode). D è un ritardo opzionale.
●
RESET D
Azzeramento del robot. Il robot ritorna al movimento automatico.
●
READ V1, V2, ..., V6
Legge le posizioni attuali dei giunti e le memorizza nelle variabili V1, ..., V6.
●
ARM N
Nel caso ci siano più robot collegati, seleziona quello da controllare indicando la porta a cui è collegato. N=(0,1).
Note
Pur non prevedendo comandi per interagire nello spazio cartesiano, è possibile implementarle a mano come funzioni
BASIC. ARM-BASIC è fortemente robot-dependent.
Il linguaggio AL
Creato per la programmazione dello Stanford Arm. Permette di controllare anche robot diversi (PUMA) quindi è
abbastanza robot-independent. La sintassi deriva da Algol.
Esistono delle unità di misura predefinite: sec, ounces, deg, inches, ecc.
Dichiarazione di variabili:
TIPOVARIABILE VAR1, VAR2, ..., VARN;
Scalari (SCALAR): indicano numeri. Possono esseregli assegnate delle dimensioni (DISTANCE, VELOCITY,
ANGULAR_VELOCITY, TORQUE). In tal caso la dichiarazione è del tipo: DISTANCE SCALAR DS1;
Assegnamento: VAR1 ← Valore;
Vettori (VECTOR): servono a gestire coordinate spaziali in tre dimensioni. Sono possibili le operazioni: somma,
sottrazione, prodotto scalare, prodotto vettoriale. Anche al tipo vettore è possibile associare una dimensione.
Assegnamento: VAR1 ← VECTOR(2,5,3);
V1⋅V2=prodotto scalare
∣V∣=modulo del vettore
9
http://www.windizio.altervista.org/appunti/
File distribuito con licenza Creative Commons BY­NC­SA 2.5 IT
Copyright © 2007 ­ Michele Tartara
xhat  VECTOR1,0,0 ; Versore dell'asse x
yhat  VECTOR0,1,0 ; Versore dell'asse y
Esistono vettori predefiniti:
zhat  VECTOR0,0,1 ; Versore dell'asse z
nilvect  VECTOR0,0,0 ; Origine
Rotazioni (ROT): esprimono una rotazione intorno ad un asse.
Assegnamento: R1 ← ROT(xhat, 90*deg);
V ← AXIS(R);
Restituisce l'asse di rotazione di R
a ← |R|;
Restituisce l'angolo di rotazione di R
E' predefinita la rotazione nulla: nilrot ← ROT(zhat,0*deg);
Frame (FRAME): Serve a specificare una posizione e un orientamento nello spazio rispetto a un sistema base.
Assegnamento: F1 ← FRAME(ROT(zhat, 90*deg), 2*xhat*inches);
La definizione è data rispetto al sistema di riferimento predefinito station.
Funzioni definite per i frame:
ORIENT(F)
Restituisce l'orientamento di F
POS (F)
Restituisce la posizione di F
V1 ← V WRT F;
WRT costruisce un vettore V1 in station con lo stesso orientamento di V in F
Frame predefiniti:
Sistema di riferimento della base (assoluto)
station
barm, yarm, ... Sistema di riferimento del braccio del robot. AL può gestire più bracci.
bpark, ypark, ...
Posizioni di parcheggio dei vari bracci.
Trasformazioni (TRANS): rappresenta la trasformazione di un vettore o frame da un sistema di riferimento all'altro. Si
possono comporre fra loro moltiplicandole. La trasformazione più a destra nell'espressione è la prima ad essere eseguita,
perchè tutte le trasformazioni sono espresse rispetto al sistema di riferimento assoluto (quindi si premoltiplica). Come le
frame, le trasformazioni hanno un componente di rotazione (rispetto all'origine del sistema) e uno di traslazione (rispetto a
station). La traslazione viene eseguita prima della rotazione.
Assegnamento (uguale a FRAME): F1 ← TRANS(ROT(zhat, 90*deg), 2*xhat*inches);
Funzioni definite per le trasformazioni:
T2 ← F1→F2;
Date due frame F1 e F2 l'operatore → restituisce la trasformazione che permette di passare
da F1 a F2
T3 ← INV(T2);
Restituisce la trasformazione inversa di T2
Struttura dei blocchi: ogni programma è organizzato in una serie di blocchi, racchiusi tra BEGIN e END. I blocchi
possono essere innestati e contenere dichiarazioni di variabili locali.
Movimento del braccio:
MOVE <braccio> TO <posizione> [WITH APPROACH=appr] [WITH DEPARTURE=depr] [VIA
<punto_di_via> {,<punto_di_via>}*] [DIRECTLY];
<braccio>: identificativo del braccio da muovere (barm, yarm). E' un sistema di riferimento posizionato tra le dita della
mano, con l'asse Z diretto nella direzione di approccio.
<posizione>: frame in cui verrà spostato il sistema di riferimento della mano. Se si desidera prendere un oggetto,
<posizione> deve essere la posizione di grasp, non quella in cui l'oggetto si trova.
<punto_di_via>: punto da cui bisogna passare durante il movimento (indicato nel sistema assoluto).
Il simbolo
(grinch) identifica la posizione attuale del braccio.
10
http://www.windizio.altervista.org/appunti/
File distribuito con licenza Creative Commons BY­NC­SA 2.5 IT
Copyright © 2007 ­ Michele Tartara
appr e depr indicano punti da cui il braccio deve passare, rispettivamente, avvicinandosi al target e allontanandosi dalla
posizione di start. Possono essere frame, vettori di avvicinamento, o scalari (lungo l'asse Z).
DIRECTLY impone al braccio di andare direttamente al punto indicato. Se non è utilizzato, la traiettoria viene calcolata
passando attraverso un punto di approach e uno di deproach predefiniti.
Uso delle dita:
OPEN <hand> TO <scalar_exp>
CLOSE <hand> TO <scalar_exp>
CENTER <arm>
OPEN e CLOSE permettono di aprire e chiudere la mano di una quantità determinata da uno scalare.
CENTER sfrutta dei sensori sulle dita per fare in modo che la mano si chiuda esattamente attorno all'oggetto senza spostarlo
(se un dito lo tocca prima dell'altro), ma muovendo invece il braccio per centrare la presa.
Modellizzazione di oggetti mediante affixment:
quando bisogna definire una relazione tra due oggetti (ad es, due facce di un cubo) si usa il comando:
AFFIX <sis_rif1> TO <sis_rif2> [AT TRANS (...)] {RIGIDLY | NON RIGIDLY};
<sis_rif1> e <sis_rif2> sono due frame. Quando uno viene spostato, anche l'altro viene aggiornato di
conseguenza, finche la AFFIX rimane valida.
Se il secondo sistema di riferimento è stato dichiarato ma non definito, è possibile darne direttamente la definizione
relativamente al primo con la clausola AT.
Per annullare una AFFIX si usa:
UNFIX <sis_rif1> FROM <sis_rif2>;
Controllo in forza:
Per controllare le forze applicate dal robot si può utilizzare il costrutto monitor:
ON <condizione> DO <azione>;
aggiunto al termine di un'istruzione MOVE.
Come condizioni, sono possibili misurare sei grandezze: tre forze lungo gli assi (FORCE(<asse>)) e tre momenti
(TORQUE(<asse>)).
Un'azione possibile è STOP barm;
E' anche possibile introdurre una clausola WITH {FORCE|TORQUE} (<vettore>) =<intesità> al termine
dell'istruzione MOVE.
Parallelismo e sincronizzazione:
Per eseguire più istruzioni in contemporanea si può usare il costrutto COBEGIN:
COBEGIN BEGIN <istruzioni>END
[BEGIN <istruzioni>END]+ COEND
Ogni blocco BEGIN-END è un processo svolto in parallelo agli altri.
E' possibile sincronizzare tali blocchi dichiarando un evento:
EVENT <nomeevento>;
e poi mettendo un processo in attesa di tale evento
WAIT <nomeevento>;
oppure facendo emettere da un processo il segnale che un evento si è verificato
SIGNAL <nomeevento>;
Utilizzo di strumenti:
E possibile far utilizzare al robot degli strumenti esterni tramite l'istruzione:
11
http://www.windizio.altervista.org/appunti/
File distribuito con licenza Creative Commons BY­NC­SA 2.5 IT
Copyright © 2007 ­ Michele Tartara
OPERATE <device> {WITH <setting>}+
<device> è il nome dello strumento da utilizzare. Generalmente, prima del suo uso, dovrà essere preso con la mano (ed
eventualmente unito ad essa con un AFFIX).
<setting> è la definizione di qualche caratteristica d'uso dello strumento. Ad esempio, per un cacciavite si potrebbero
utilizzare:
WITH VELOCITY=200*rpm
WITH DURATION=3*sec
Strutture di controllo di flusso:
IF <condizione> THEN <statement> ELSE <statement>;
FOR <svar> <- <sexp> STEP <sexp> UNTIL <sexp> DO <statement>;
WHILE <condizione> DO <statement>;
DO <statement> UNTIL <condizione>;
Procedure:
<type> PROCEDURE <nome> (<lista_parametri>);
<body>;
Se si deve restituire un valore, all'interno della procedura si usa:
RETURN (<value>);
Rilevamento posizioni di grasp (usando POINTY):
Per rilevare la posizione:
<var> <- INPUT <arm>
oppure
<var> <- INPUT <pointer>
Calibrazione del puntatore:
Si punta il braccio ad un riferimento noto, detto fiducial:
fiducial <- INPUT barm;
Si fissa il puntatore nella mano, poi:
pointer <- fiducial;
AFFIX pointer TO barm RIGIDLY;
12
Scarica

Riassunto - 1 - WinDizio