Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduzione:
Sistemi di coordinate:
oppure coordinate:
sferiche
<a> <b>
<0>
Segmento orientato:
P'
Q' P
Q
<0>
Vettore geometrico:
Per i vettori geometrici applicati si deve fissare il punto P da cui essi partono. Non
posso traslarli.
P [v , P]
è la notazione
Convenzione di Grossman:
P
v
P2
P1
P n-1
P0 Pn
(P n - P 0)
Indipendenza lineare
v1 , v 2, …… , vn sono linearmente indipendenti se e solo se:
c1v1 + c2 v2 +…….+ cnvn = 0 c1 = c2 = ……. = cn = 0
Nota: nello spazio euclideo il massimo numero di vettori linearmente
indipendenti estraibili è 3. Allora v1 , v2 , v3 sono linearmente indipendenti se
e solo se non sono tutti complanari.
Terne e componenti
Se si prendono v1, v2 , v3 linearmente indipendenti si può
espr imere v come combinazione lineare di v1, v2 , v 3 :
v = c 1 v1 + c2 v2 + c3v3
c1, c2, c3 sono le componenti di v rispetto alla terna v1 , v2 , v3.
Operazioni tra vettori
Ø Prodotto scalare
v1 • v2 r | v1 | | v2 | cos δ ∈ ℜ (con: δ = angolo minimo fra i vettori)
v2
δ
v1
Il prodotto scalare è distributivo rispetto alla somma:
v1 • (v2 + v3) = v 1 • v2 + v1 • v3
Ø Prodotto vettoriale
| v 1 ∧ v 2 | = | v1 | | v 2 | sin δ
v1 ∧ v2 r ⊥ al piano definito da v1 , v2
verso definito dalla regola della mano destra da v1
verso v2
v2
v1 ∧ v2
δ
v1
Ø Prodotto misto
a • (b ∧ c) = (b ∧ c) • a ∈ℜ
soddisfa la proprietà ciclica : cambiando l'ordine dei fattori non cambia il
risultato
a • (b ∧ c) = b • (c ∧ a) = c • (a ∧ b)
<b>
v
<a>
Es.:
v + w = (ia xa + ja ya + k a za) + (ib xb + jb yb + kb zb )
v w
a
v+ bw = ? non ha senso se a e b sono terne diverse.
b
Useremo: v = b( av) per indicare v prima proiettato su a e quindi su b.
<b>
Ob
<a>
Oa P (punto geometrico)
Qual è la posizione di P rispetto alle terne? Cerchiamo le coordinate di P.
a
Pr a(P -Oa)
coordinate di P in <a>
Diremo che P è proiettato sulla terna <a>. Analogamente avremo su <b>:
b
P r b(P -Ob)
Da notare che:
( P) ≠ aP
a b
poiché: a( bP) = a(b(P-Ob)) = a(P-Ob)
r S(av)
questa è valida solo per terne ortonormali destre. Ques ta matrice è la matrice che
rappresenta la proiezione sulla terna <a> dell'operatore v ∧.
La matrice S soddisfa le proprietà:
♦ S + ST = 0
♦ S ammette sempre un autovalore nullo, essendo i restanti due puramente
immaginari, se non anch'essi nulli
♦ La matrice è nulla se e solo se tutti i suoi autovalori sono nulli
♦ La matrice è sempre diagonalizzabile
♦ Lo spazio degli autovettori corrispondente all'autovalore nullo (quando S≠ G) è uno
spazio di autovettori reali monodimensionali ed avente la stessa direzione del
vettore caratterizzante S, av
[av ∧] ∝ av = 0
Abbiamo già visto la convenienza di usare più sistemi di coordinate. D'ora in poi
considereremo solo terne ortonormali destrorse.
Posto sia <0> la terna base, ci si può chiedere come si possono posizionare altre
terne rispetto alla <0>.
<a>
<0>
<b>
Per la <b>:
{0Ob , 0ib , 0 jb , 0k b}
Posso posizionare le terne anche non tutte rispetto alla <0>; potrei posizionare la
<b> rispetto alla <a>.
<a>
<0>
<b>
Le informazioni:
{0Oa , 0ia , 0 ja , 0k a}
{0Ob , 0ib , 0 jb , 0k b}
permettono di costruire l'"albero di posizionamento" fra le terne.
<a>
<b>
<0>
<c>
dati
aggiunti
<b>
<a>
matrice di orientazione della terna <b> rispetto ad <a>, detta anche matrice di
rotazione di <b> rispetto ad <a>.
Gli elementi soddisfano 6 condizioni di vincolo derivanti:
- 3 da di ciascuna colonna
- 3 restanti da ortogonalità tra colonne
a
i bT a i b = 1 a
i bT a j b = c
a
j bT a j b = 1 a
i bT a k b = c
a
k bT a k b = 1 a
j bT a k b = c
∃ baR −1 = baR T
quindi questo fa sì che R sia ortonormale, cioè:
(è invertibile e l'inversa è la trasposta).
Inoltre, per lo stesso motivo, si ha che:
1
det ba R T =
− 1
+1 se le terne <a> e <b> hanno lo stesso verso, -1 se sono di verso discorde.
Valgono le proprietà:
♦ I tre autovalori di abR hanno sempre modulo unitario e ricadono in uno dei seguenti
casi:
a) λ1 = 1 λ 2 = λ3* |λ 2| = | λ 3| = 1
b) λ1 = 1 λ 2 = λ3 = 1
c) λ1 = 1 λ 2 = λ3 = -1
I tre casi corrispondono a:
a) caso generale
a
b) bR =I cioè <b> ha assi paralleli ad <a>
c) diag (1 , -1 , -1)
a
bR = diag (-1 , 1 , -1)
diag (-1 , -1 , 1)
Ciascuno di questi casi corrisponde a una rotazione di 180° di <b> rispetto ad assi
ortogonali.
a
bR
<b>
<a> v
LL
b kT
a
Per cui si ha:
Generalizziamo a n terne:
<1>
<n-1>
<0>
<n>
<1> <i>
<0> <j>
h
<h> kR=?
<k>
Algoritmo hkR
1) Si individua un percorso (non chiuso) che collega la terna referente <k> alla terna
riferita <h>
2) Si procede lungo il percorso premoltiplicando via via per le matrici di orientazione
che si incontrano, ricordando che:
a) Se il tratto di percorso elementare è seguito in senso opposto alla freccia , la
corrispondente matrice resta inalterata
b) Se il tratto di percorso elementare è seguito in senso concorde alla freccia,
la matrice va trasposta.
k
h
R = hi R T ji R kj R
Quindi:
a
bR
<b>
<a> v
w
Consideriamo v ∧ w
E di questo le proiezioni su <a> e su <b>
b
(v ∧ w) = [ b v ∧ ] b w
a
(v ∧ w) = [a v ∧] a w
Vogliamo stabilire la relazione che sussiste tra [b v ∧] e [a v ∧].
a
(v ∧ w) = a ( b (v ∧ w)) = abR b (v ∧ w) =
= abR [ b v ∧] b w =
= abR [ b v ∧] abRT aw = [a v ∧] a w
siccome w è arbitrario avremo:
[a v ∧] = abR [b v ∧] abRT
Matrice di trasformazione, cambio di coordinate per punti proiettati,
calcolo delle matrici di trasformazione in alberi di posizionamento.
a
Cb informazioni di
(O b - O a) <b> posizione
<a> (P - Ob) e di rotazione
(P - Oa)
P
b
Supponiamo noto: P = b (P - Ob)
Vediamo di trovare: aP = a (P - O a) = ?
Avremo: (P - Oa) = (Ob - Oa) - (P - Ob)
a
Allora: P = aOb + a (P - Ob) =
= aO b +abRb P
a
Quindi: P = aOb +abRbP
<b>
<a>
<c>
(P - Oc
P
c
P noto
a
P=?
Allora avremo:
a
P = aOb + abRbO c + abR bcR cP
Se ho n terne, procedo in questo modo ottenendo le formule via via più complesse.
xb
a
P ∆ yb
zb
non ho né perdita né guadagno se uso:
xb
y
P = b
a
zb
1 fattore di zoom
|
a
R | Ob a
a
T ∆ b
b
− − − − −
(è una matrice omogenea)
0 0 0 | 1
La T contiene tutte le informazioni di posizionamento di <b> rispetto ad <a>; abT
è sempre invertibile perché a blocchi, con blocchi non singolari.
Si ha allora:
b a
P = ab T −1 P
b a
P = baT P
e quindi:
b
aT = abT −1
L'inversa di T non è la trasposta di T.
Invertire una matrice di questo tipo è semplice:
|
a
R T
| − R Ob
a T a
a −1
T = b b
b
− − − − −
0 0 0 | 1
Si può generalizzare:
1
2T
0
1T <1> <2>
(P-Ob) <n>
(P -O n)
P
n
P = n (P - On) noto
0
P = 0 (P - O 0) = ?
Si conclude che:
0
( )
P = 01T 12T .....nn−−21 T n −1nT n P
e quindi, poiché P è arbitrario:
0
n T = 01T 12T .....nn−−12 T n −1nT
Questa generalizza quella vista per matrici di orientazione.
Enunciamo l'algoritmo per trovare T tra una qualunque coppia di terne all'interno di
un albero di posizionamento. Questo è del tutto simile a quello per le matrici di
orientazione, fatte salve le seguenti sostituzioni:
Matrici di orientazione à Matrici di trasformazione
Trasposta à Inversa
Se ne può dedurre una versione con postmoltiplicazioni; nel caso si passa da riferita
a referente.
Preso il caso precedente:
h
k T = hi T −1 ij T kjT
Un esempio (molto) introduttivo di pianificazione su base geometrica
Immaginiamo di avere:
0
eT
g
eT
<e>
<g>
<p>
0
<0> pT
Individuare tutti gli elementi e i metodi da utilizzare perché il robot raggiunga l'oggetto.
<0> è la terna base di coordinate.
Serve una terna solidale all' end effector. Il robot cambia la sua configurazione a
seconda dei valori assegnati alle sue coordinate di giunto .
q1
q
q∆ 2
qi = escursione angolare della cerniera i-sima a partire da un certo zero
M (hp.: sono tutti a cerniera).
q n
La matrice 0eT sarà parametrizzata da q:
0
e T = 0eT ( q )
Vedremo poi come si individua, ma è comunque nota.
0
Ci interessa sapere dove è il piano di lavoro <p>. Servirà conoscere pT, poiché il
0
tavolo è fisso, pT è costante.
p
Per l'oggetto sul tavolo, inserisco una terna <g> (g = goal) e conosco gT.
Se il robot deve prendere l'oggetto, allora deve conoscere come è posizionato l'end-
effector; per ogni postura del robot deve conoscere geT
g
e T ( q) = pgT −1 0pT −1 0eT (q)
Posto che io sappia la postura di partenza q0 , allora : q0 → geT (q0 ) ∆ geT0
eT 0 ≠
g
Essendo I non sono nei pressi dell'oggetto.
Posso tradurre il raggiungimento e l'afferramento in:
g
e T ( q) = I
Devo estrarre i valori delle coordinate di giunto perché valga la precedente
g
T (q f ) = I
e con: qf = postura finale
Risolvere questo significa risolvere il problema geometrico inverso. Questo, a
seconda della struttura robotica considerata e a seconda del contorno, può:
a) Non avere soluzione
b) Avere un numero finito di soluzioni
c) Avere una continuità infinita (compatta) di soluzioni [ha molti più gradi di libertà
del necessario].
Es.: Il braccio umano ha 7 cerniere (3 alla spalla, 1 al gomito, 3 al polso)
Questa osservazione indica i problemi insiti in un generico problema inverso;
supponiamo che qui esista almeno una soluzione:
q0 → q f
Da questo punto in poi, il modo più semplice è impostare la pianificazione del moto
nello spazio dei giunti su base geometrica
qi qit
qi0
i = 1, 2, …,n
T t
∆T
Pianifichiamo un andamento dolce fino da qif. Dovremo poi campionare e, per ogni
giunto, si ha la sequenza:
qi(k∆ t) k = 0, 1, ....., n
Purché rT sia sufficientemente fitto; mando i campioni memorizzati su file, come
riferimenti ad anelli di retroazione che comandano i giunti. Avremo un segnale a gradini
Si approssima
con scalini
Preliminari
a
bT i
<b>
<a>
che sono ne lla configurazione i-sima: vogliamo cambiare questa configurazione per
passare alla (i+1)-sima. Ho a disposizione tre metodi:
1) Assegnazione diretta
a
Basterà porre: bTi+1 = T
con: T = matrice assegnata
2) Assegnazione per post-moltiplicazione
a a
bTi+1 = bTi T
con: T = matrice omogenea
3) Assegnazione per premoltiplicazione
a
bTi+1 = T abTi
Il problema che tratteremo è quello di fissare criteri per assegnare T in modo che
abbia significato.
Interpretiamo le ultime due dal punto di vista geometrico.
a
bT i
<b> ≡ <b'>
<a>
T <b>
a
bTi
<a> <b'>
a
bTi+1
<a> ≡ <a'>
<b>
a
bTi
<a'>
a
T bTi
<a> <b>
a
bT i+1
<β> T
<β>
<α> ≡ <β> <α>
v vl <β>
notiamo che: a
v = bv r v ; ∀l
v appartiene agli spazi rigidi di entrambe le terne.
I | vl
− − | − −
0 | 1
Allora avremo: Tt(v,l) = matrice di pura traslazione; t =
traslazione
b) rotazione di <β> attorno ad un asse passante per l'origine comune di entrambe le
terne, individuato dal versore v, supposto appartenente allo spazio rigido di <α >,
secondo un angolo δ.
Applicando la regola della mano destra:
v
v δ
<β >
<α> ≡ <β> <α>
R (v,δ ) | 0
− − − | − −
0
| 1
La matrice che realizza questo è: T r(v, δ ) =
La forma analitica di R(v,δ) la determineremo successivamente parlando della
"rappresentazione angolo - asse equivalente"
Es.:
v
P
a
bT0 <b> δ
<a> <b>
a
bT f
b
bP I | P
Tt b , P = − − | − − ∆ T1
b
P
0 | 1
versore
b) rotazione di <b> attorno a v di un angolo δ
Tr (bv , δ ) r T2
c) traslazione di <b> della quantità - bP
bP
Tt − b , b P ∆ T3
P
La terna <b> si muove ad ogni passo rispetto all'ultima posizione occupata.
Effettuiamo dei trasferimenti rispetto alla terna referente
a a
bT f = bT 0 (T1 T2 T 3)
2) P e v siano noti nei termini delle loro proiezioni si <a>
a
P e av noti nella configurazione iniziale
Si pone <a'> inizialmente sovrapposta ad <a> e su questa <a'> effettuo movimenti
analoghi a quanto fatto in 1) per <b>, ipotizzando che <b> sia solidale con <a'>, ragion per
cui:
a'
bT = abT 0 ∀ movimento
Allora:
a
bT f = ( T1 T 2 T 3 ) abT0
(premoltiplico abT0 con trasferimenti fatti da <a'> rispetto ad <a>).
R | ρ I | ρ R | 0
T = − − | − − = − − | − − − − | − −
0 | 1 0 | 1 0 | 1
la posso interpretare come:
• traslazione e rotazione (rispetto alla rifer ita)
• rotazione e traslazione (rispetto alla riferita)
Osservazione 3: Il prodotto di matrici di trasformazione non è commutativo:
T 1 T 2 ….. T i T i+1 ..... Tn ≠ T1 T2 …. Ti+1 T i .....Tn
A meno che non si ricada in uno dei seguenti casi:
- matrici cont igue di pura traslazione (Tt)
- matrici contigue di pura rotazione attorno allo stesso asse (T r)
Nota: Le osservazioni 1 e 3 sono importanti.
Rappresentazione a tre parametri delle matrici di orientazione
Introduzione
1 0 0
R(i ,δ ) = 0 cos δ − sin δ
0 sin δ cos δ <b> δ
<a>
1
i ∆ 0
dove: 0
inoltre:
cos δ 0 − sin δ 0
R( j, δ ) = 0 1 0 j ∆ 1
sinδ 0 cos δ 0
1 | 0
R(i ,δ ) = − − | − −
0 | H dove: H = I cos δ + M sin δ e
0 − 1
M∆
1 0
Espandiamo in serie seno e c oseno presenti nell'espressione di H:
+∞
( −1) n 2 n +∞
( −1) n
H =I∑ δ +M ∑ δ 2 n +1
n =0 2 n! n =0 (2 n + 1)!
M 2 n = (− 1) n I
2 n +1
M = ( −1) n M
Quindi nel secondo termine ho potenze dispari di M, nel primo ho invece potenze
pari di M; allora:
+∞
Mn
H =∑ δ n = e Mδ
n =0 n!
Quindi si ha:
0 | 0 0
1 | 0 0 e 0 δ | 0 0 −− | −− −−
δ
− − 0
− − − −
| M
| −− | −− − − 0
R(i ,δ ) = = =e |
= e [ i ∧ ]δ
0 | e Mδ
0 | e Mδ
0 | 0 |
Quindi abbiamo dimostrato la validità della rappresentazione esponenziale per
rotazioni attorno agli assi coordinati.
Estendiamo la validità della rappresentazione alla forma R(v , δ ). Consideriamo
ora:
R~ v <c>
δ
<a> ≡ <b>
considero <c> terna ausiliaria arbitraria, salvo avere uno degli assi lungo v (ad esempio
supponiamo che sbbia z lungo v).
Ora muoviamo <b> attorno a v di un angolo δ e supponiamo di trascinare <c> con
questa. Allora, se:
R~r bcR 0 = acR0 nel caso iniziale
b
cR = R~ ; ∀ δ
Poiché <b> trascina <c>, supposto di avere ruotato, vediamo come calcolare la
matrice
R(v, δ ) = acR0 e[k∧]δ cbR f
dove:
c
bR f : matrice di orientazione tra <b> e <c> nella configurazione finale
e[k∧] : matrice di rotazione di <c> rispetto a se stessa nella configurazione finale
a
cR0 : matrice di orientazione tra <c> e <a> nella configurazione iniziale
ora:
a
cR0 = R~
c T
bR f = R~
cioè:
R(v, δ ) = R~e[k∧]δ R~
T
Espandiamo in serie:
~ +∞ [k ∧ ] δ ~ T ~ ~
n n
R ∑
+∞
R[ k ∧] n R T n
= n !
R
∑ n!
δ
R(v,δ) = n 0 = n =0
Ora però:
R~[k∧]n R~
T T n
= (R~[k∧] R~)
T
la prova la otteniamo espandendo e osservando che: R~ R~= I
cioè:
~ ~
+∞
(R [k ∧ ]R T ) n n
R( v, δ ) = ∑ δ
n =0 n!
T
Nel generico termine: R~[k∧] R~
k è la proiezione di k c su <c>, e allora questa è la formula del cambio di coordinate
dell'operatore prodotto vettoriale; cioè:
T
R~[k∧] R~ = [v∧] (cambio di coordinate)
Allora:
+∞
[ v∧] n
∑ δ
R(v, δ ) = n =0 n! = e[v∧]
Qualunque R(v,δ) è rappresentabile come esponenziale; vale poi la formula di
Rodrigues poiché [v∧] è emisimmatrica:
R(v,δ) = e[v∧]δ = I + [v∧] sin δ + [v∧] 2 (1-cos δ )
Passo 2:
Si tratta di dimostrare che una matrice di orientazio ne R tra <b> e <a> qualsiasi
ammette una rappresentazione esponenziale angolo - asse equivalente.
R r abR
Condizione necessaria affinché R possa essere interpretata come rotazione attorno a
v di un angolo δ è che esesta un v tale che:
a
v = bv r v
cioè che:
v=Rv (perché questo è un cambio di coordinate) ⇒ (I - R) v = 0
cioè v è un autovettore unitario in modulo collegato all'autovalore unitario di R. R ammette
sempre un solo autovetture unitario, tale da dar luogo ad uno spazio di autovalori
monodimensionali. Quindi v esiste ed è uno qualsiasi dei due autovettori (opposti) unitari
in modulo collegati all'autovalore 1. Questo in generale: se R=I, ogni versore unitario è
autovetture.
Ora prendiamo il v: procediamo in modo opposto alla seconda parte del Passo 1.
R v
<a> <b>
1) introduciamo una terna ausiliaria <1> con asse z coincidente con v e i restanti due
versori u 1, w1 largamente arbitrari:
<1> → {u1 , w 1, v}
Allora si ha:
a
1R = [ au1 | aw 1 | v]
Introduciamo una terna ausiliaria <2> con asse z coincidente con v ed avente i
restanti versori u2, w2 :
<2> → {u2 , w 2, v}
presi in modo che le proiezioni su <b> coincidano con le proiezioni che u1 e w1 avevano su
<a>:
b
u 2 = au1
b
w2 = aw2
Il risultato è che:
b
2R = [bu2 | bw2 | v] = [au 1 | aw 1 | v] = a1R r R~
La terna <2>, avendo l'asse z in comune con <1> risulterà ruotata attorno a z,
rispetto a <1>, di un angolo δ necessariamente coincidente con l'angolo tra u1 e u2 secondo
la regola della mano destra:
v
u2
δ
u1
Avremo allora che:
1
2R = e[k∧]δ
e quindi che:
R r abR = a1R 1 2R 2bR = R~e[kr ]δ R~
T
= (introducendo un cambio di
coordinate)
= e[v∧]δ
⇒ Qualunque matrice di rotazione ammette rappresentazione esponenziale
Se prendessimo -v, si otterrebbe -δ.
La dimostrazione consente di trovare un algoritmo per risolvere il problema inverso
angolo - asse equivalente.
cos δ = u1T u2
sen δ = v [u1 ∧] u2
T
1) (R - RT ) = 2 [v∧] sen δ
2) tr R = 1 + 2 cos δ
con: R = abR e v = proiezione asse di rotazione.
In questa forma, il lemma segue dalla formula di Rodrigues. Questo traduce il
precedente su <a> e <b>.
1) si valuta il primo membro della seconda uguaglianza del lemma dei versori
deducendo:
δ r cos δ
a. se δ = 1 si pone: (v, δ ) = (∀, ±2nπ )
b. se |δ| < 1 si valuta il primo membro della prima uguaglianza del lemma dei
versori deducendo da esso
σ r v sen δ σ non nullo
Allora:
σ
(v, δ ) = ± , A tan( σ ; δ ) ± 2 nπ
σ
c. se δ = -1 evidentemente <b> è ruotato di un angolo multiplo dispari di π
attorno a v, però in questo caso non so valutare v tramite la prima formula.
Allora il versore "v" lo ottengo ponendo:
ha + hb
v0 ∆
ha + hb
essendo ha e hb due qualsiasi versori omologhi (ia, ib oppure ja, jb oppure k a,
kb ) a somma non nulla ; si ottiene:
(v, δ ) = ± [ v0, ±(2n+1)π]
Il passo c) si giustifica osservando che:
v → v0
ia ib
semicirconferenza
una diversa terna: ϕ ,δ , Ψ ∈ [− π , π ] , che porta <3> nella stessa configurazione.] Questo
pone in evidenza che quando si dovrà risolvere il problema inverso agli angoli di Eulero
esisteranno almeno due soluzioni diverse con angoli in [-π. π ].
0
Data una matrice di rotazione 3R r R, trovare se esistono le terne di angoli di
Eulero che la realizzano. L'algoritmo procede come segue:
1) Date <0> e <3> si posiziona la terna <2>. Ora abbiamo che:
k2 = k 3 (k 3 è l'ultima colonna di 03R)
Si devono poi fissare:
i 2 ∈ piano( x3 , y3 ) ⇒ i 2 ⊥ k 3 k0 ∧k3
i2 = ±
i 2 ∈ piano( x0 , y0 ) ⇒ i 2 ⊥ k 0 k0 ∧k3
a seconda del segno scelto
ottengo una delle due
soluzioni
j2 = k2 ∧ i2
Ho posizionato la <2>. Da qui nasce la biforcazione, scegliendo il "+" o il "-". Il
posizionamento di <2> si può fare solo se k0 e k3 non sono paralleli, ipotesi assunta
0
implicatamente. Mi accorgo del parallelismo qualora l'ultima colonna di 3R sia:
0
0
± 1
Calcoliamo l'angolo:
cos Ψ = i 2 ⋅ i 3
⇒ Ψ = A tan(sen Ψ, cos Ψ )
sen Ψ = j 2 ⋅ j 3
cos δ = k 1 ⋅ k 2
δ = A tan(sen δ , cos δ )
senδ = − ( j 1 ⋅ k 2 )
3) Calcolo di f
cos ϕ = i 0 ⋅ i1
ϕ = A tan(sen ϕ , cos ϕ )
senϕ = i 1 ⋅ j 0
(ϕ, δ , Ψ)
∈ [ −π ,π ]
(ϕ, δ , Ψ)
a queste aggiungo le infinite soluzioni aggiungendo ± 2nπ .
Tutto ciò va bene purché k0 e k3 non siano paralleli.
0
δ =
Se lo fossero, l'ultima colonna fosse [0 0 ±1]T e, allora, ± π
δ ∈ [-π,π ]
E inoltre: δ =0 se [0 0 1] T
δ = ±π se [0 0 -1]T
in questi casi avremo che si può verificare che f e ? possono assumere infiniti
valori che soddisfano la:
cos ξ = i 0 ⋅ i 3
δ =0 ⇒ f + ? =ξ senξ = j 0 ⋅ i 3
δ = ±π ⇒ f - ? =ξ
Questo algoritmo è di fondamentale impiego robotico nella pianificazione su
base geometrica ed è usualmente implementato nel software di gestione.
L'algoritmo è facilmente automatizzabile e deve dedurre entrambe le soluzioni
oltre che segnalare i casi k0/k3 paralleli o antiparalleli, fornendo ξ .
Attenzione: <b> è referente <a> è riferita
Rappresentazione "Roll - pitch - yaw" (z - y - x)
Consideriamo due terne <0> e <3> coincidenti e introduciamo due terne <1> e <2>
ausiliarie inizialmente coincidenti.
Si eseguono:
1) Rotazione di <1> attorno all'asse z di un angolo α (angolo roll = rollio),
trascinando anche <2> e <3>
2) Rotazione di <2> attor no all'asse y di un angolo β (angolo pitch = di
attacco), trascinando anche <3>
3) Rotazione di <3> attorno all'asse x di un angolo γ (angolo yaw = di
imbardata)
Ottengo:
0
3R = R(α,β,γ) = e[k∧]α e [j∧]β e[i∧]γ
j 2 ∈ piano ( y3 , z 3 ) → j 2 ⊥ i 3 k 0 ∧ i3
⇒ j2 = ±
j 2 ∈ piano ( x0 , y0 ) → j 2 ⊥ k 0 k 0 ∧ i3
Quindi: k2 = i2 ∧ j2
" ± " ha biforcato le soluzioni
Posso calcolare γ:
cos γ = ( j3 ⋅ j2 )
⇒ γ = Atan (senγ, cos γ)
sin γ = ( j3 ⋅ k2 )
2) Posizionamento della terna <1>
j1 = j2
k1= k0
Quindi si avrà: i1 = j1 ∧ k1
Posso calcolare β:
cos β = ( k2 ⋅ k1 )
⇒ β = Atan (sen β, cos β)
sen β = ( k2 ⋅ i1 )
3) Calcolo di α :
cos α = ( i0 ⋅ i1 )
⇒ α = Atan (sen α, cos α)
sen α = ( j0 ⋅ i1 )
Nota: Questo percorso si può seguire purché k0 e i3 non siano paralleli.
0
Ci si accorge della condizione di parallelismo quando la prima colonna di 3R è
uguale o meno a [0 0 ± 1]T .
Dall'analisi della figura è facile verificare che la condizione: k0 || i3 si ha solo
quando β = ±π e, in particolare:
β = π/2 ⇔ [0 0 1]T
β = -π /2 ⇔ [0 0 -1]T (prima colonna di 03R)
Ora avremo che:
π cos ξ = − (k 3 ⋅ i 0 )
β = α +γ = ξ con sen ξ = −( k ⋅ j )
2 3 0
π cos ξ = (k 3 ⋅ i 0 )
β =− α −γ = ξ con
2 sen ξ = (k 3 ⋅ j 0 )
Pseudo - commutatività delle matrici di rotazione
Introduzione
Pseudo-commutatività a sinistra
0 1
1R σ 2R σ
<1>
<0> <2>
σ
(con σ ci si riferisce agli specifici valori numerici assegnati alle due matrici di rotazione
che lo caratterizzano)
Ora si ha:
[*h 1 ∧]σ [*h 2 ∧]σ
0
2 R = 10Rσ 21Rσ = e e
Nella seconda rappresentazione è stata evidenziata la forma geometrica dei vettori
equivalenti (vettore x angolo) che caratterizzano le due matrici ed è stato usato il simbolo *
(dummy) per indicare indifferentemente le proiezioni
*hi = i -1hi = ihi
(è la stessa perché è comune).
[* h 2 ∧ ]σ
Evidenziamo la forma esponenziale della seconda matrice e .
Allora:
[*h2 ∧]σ
0
2 R= 10Rσ 21Rσ = 01Rσ e ⊗
Desideriamo adesso sostituire gli effetti sull'orintazione finale introdotti da 12R γ con
equivalenti effetti prodotti da una opportuna matrice Q posta quale primo fattore.
Vogliamo cioè che valgano le seguenti uguaglianze numeriche:
0
2R = Q 01R σ r 01R σ ' 12R σ '
La prima è un'uguaglianza numerica; la seconda ridetermina le terne e passa ad un
nuovo albero σ '. Porsi questo problema non significa commutare le matrici, ma solo
sostituire una matrice successiva con una precedente.
Si può dedurre Q con l'uguaglianza:
[* h 2 ∧ ] 0
Q = 01 R σ 1
2 R σ 01 R σT = 01 Rσ e 1 R σT
(*h 2 è proiettata o su <1> o su <2>).
Quindi si deduce che c'è un ca mbiamento di coordinate dell'operatore prodotto
vettoriale: da <1> viene proiettato su <0>.
[ 0 h2 ∧ ]
Q=e
e quindi:
[ 0 h2 ∧] 0
0
2 R=e 1 σ R = 10 Rσ ' 21Rσ ' ⊗⊗
Per procedere vediamo il significato geometrico.
Interpretazione geometrica
1
2R σ
<2>
0
1R σ <1>
<0>
<1> ≡ <2>
<0> ≡ <0'>
0
1R σ <1> ≡ <2>
<0'>
<0>
Trasferimento a sinistra
Pseudo-commutatività a destra
Si vogliono sostituire gli effetti di e[#] con una matrice P posta a secondo fattore.
0
2R = 12R σ P r 01R σ " 01R σ "
Quindi:
[* h1 ∧ ] 1
P = 21RσT 01Rσ 21 Rσ = 21RσT e 2 σ R =
[* h1 ∧ ] 2
= 21 Rσ e RσT = ( poiché h 1 è proiettato o su < 1 > o su < 0 >
*
1
[* h1 ∧ ] 2
= 21 Rσ e 1 RσT
Quindi:
[ 2 h1 ∧ ]
P=e
Allora:
[2 h1 ∧ ]
0
2 R = 12Rσ e ∆ 01 Rσ " 21Rσ "
Trasferimento a destra
Schema mnemonico
[a−1 hi ∧]
k
[ hi ∧]
e e
I
Quindi si ridenominano le terne.
Un altro schema: se indichiamo con "p " il numero di posizioni di cui si vuol traslare
una matrice di rotazione:
p > 0 traslazione a sinistra
p < 0 traslazione a destra
La regola pratica sarà:
p>0 p<0
i-1-p
hi ← i -1
hi = *hi = i hi → i -p
hi
Se gli assi sono gli stessi, il concetto di pseudo-commutabilità resta analogo: è
quello di commutabilità.
Rotazioni infinitesime
Commutatività approssimata
≅ [ I + [v1 ∧] dδ 1 + [v2 ∧] dδ 2 ]
Se avessimo considerato il prodotto commutato, con gli stessi passaggi avrei
ottenuto ancora la stessa relazione; parimenti se avessi considerato:
[(v1 dδ1+v2 dδ 2 )∧]
R=e
Quindi, in questa ipotesi:
[ v1 ∧] dδ1 [ v2 ∧]dδ 2 [ v2 ∧] dδ2 [v1 ∧]dδ1 [ v1 dδ1 +v2 dδ 2) ∧]
e e ≅e e ≅e
e allora, per matrici di rotazione infinitesime, vale la commutatività approssimata: e[u∧]dα
⊗⊗
v1 dδ 1 + v2 dδ 2
u∆
v1 dδ 1 + v2 dδ 2
dove: d α = v1 d δ 1 + v 2 d δ 2
Osservazione 1:
Le uguaglianze ottenute precedentemente sono state ricavate con cons iderazioni
algebriche. Se riscriviamo la ⊗⊗ evidenziando i loro versori di rotazione con i loro versori
geometrici:
[* v1 ∧ ] d δ 1 [*v 2 ∧ ] dδ 2
0
2 R=e e ≅
[* v 2 ∧ ] d δ 2 [* v1 ∧ ] d δ 1
≅e e ≅
≅ e [(*v1 d δ 1 + * v 2 d δ 2 )∧ ]
Notiamo, nell'ultima, che , a seconda dell'indice di terna negli *: 1 oppure 0 per v 1 e
2 oppure 1 per v2, potremmo ottenere:
0 1
[( v1dδ 1 + v2 dδ 2 ) ∧
0
2 R ≈e
Questa pare dia origine a un paradosso, poiché trovo vettori geometrici proiettati su
terne diverse, ma sommati fra loro, il che non è lecito. Questo paradosso è soltanto
apparente e rientra nelle conseguenze delle approssimazioni fatte fra infinitesimi;
trattandosi di rotazioni infinitesime <0>, <1>, <2> sono ruotate di poco.
<0>
v <1>
<2>
2 R ( Ψ ) ∆ e[* k 3 ∧ ]Ψ = e [* k 3 ∧ ]Ψ = 2 R (Ψ )
3 3'
Ora notiamo che nella ⊕ ci sono prodotti di matrici in parte finite e in parte
infinitesime; immaginiamo allora di voler portare totalmente a sinistra tutti gli effetti
perturbativi sull'orientazione introdotti dalle matrici infinitesime. Sappiamo già come fare:
1) applicare la pseudo-commutatività spostando le matrici a sinistra
2) fondere le tre matrici in una sola, avente il vettore pari alla somma dei vettori di
rotazione, poiché si tratta del prodotto di tre matrici di rotazione infinitesime
0
3 R (ϕ + dϕ , δ + dδ , Ψ + d Ψ ) ≅
≅ e [( ° k 1 d ϕ + °i 2 d δ + ° k 3 d Ψ ) ∧ ] 10'R (ϕ ) 21'R (δ ) 32'R (Ψ ) =
[( ° k 1 dϕ + ° i 2 dδ + ° k 3 dΨ ) ∧ ] 0
=e 1 R (ϕ ) 21R (δ ) 32 R ( Ψ )
In questa scrittura, l' ≅ è conseguenza dell'aver conglobato le tre matrici
infinitesime in una sola, mentre l' = è dovuto alle uguaglianze viste precedentemente.
Si ha allora:
0
3 R (ϕ + d ϕ , δ + d δ , Ψ + d Ψ ) ≅
[( 0 k 1 d ϕ + 0
i 2 dδ + 0
k 3 dΨ ) ∧ ]
≅e 0
3 R (ϕ , δ , Ψ )
Quanto fatto si interpreta come rotazione infinitesima della terna riferita <0>.
Ovviamente, se si fosse trasferito il tutto a destra, si sarebbe ottenuto:
0
3 R (ϕ + d ϕ , δ + d δ , Ψ + d Ψ ) ≅
[( 3 k 1 d ϕ + 3
i 2 dδ + 3
k 3 dΨ ) ∧ ]
≅ 30R (ϕ , δ , Ψ ) e
e si sarebbe interpretata come rotazione infinitesima rispetto alla terna referente.
Osserviamo però che le proiezioni dei vettori k1 , i2 e k3 si riferiscono a versori
presenti nell'albero σ'', i quali versori hanno orientazioni rispetto a <0> in generale diverse
da quelle che gli stessi hanno nell'albero originario σ. Noteremo però come in realtà le
proiezioni di questi versori (all'interno di σ'') possano essere sostituite (ancora in termini di
approssimazione fra infinitesimi) dalle loro proiezioni calcolate sull'albero σ originario.
Invece delle proiezioni su σ'', che è perturbato, si usano le proiezioni si σ , il che
introduce una seconda approssimazione.
Proviamo a considerare, a titolo di esempio, il "cammino proiettivo" che deve
seguire k 3 per trasferire la sua proiezione da <3> a <0> all'interno di σ'':
3
k 3 → 3'
k3 → k3 − − −
2'
= 2
3'R(? )= 23R(? ) ≅
[stesso asse [perché la rotazione
di rotazione è infinitesima]
(sono uguali)]
k 1 dϕ + i 2 d δ + k 3 d Ψ
0 0 0
u∆
0
k 1 d ϕ + i 2 d δ + k 3 dΨ
0 0 0
d α ∆ k 1 dϕ + i 2 dδ + k 3 dΨ
0 0 0
<3>
0
3R
<0>
dove u e dα sono versore e angolo piccolo assegnati. Come devo variare gli angoli q1, q2 ,
q3?
Se pensiamo che le perturbazioni agli angoli q1, q2 , q3 debbano essere infinitesime,
allora si risolve imponendo:
d q1
0
[
u dα = k 1 M
0 0
i2 M
0
]
k 3 d q2
d q3
Θ
vettore equivalente di rotazione portando
a sinistra le perturbazioni
Si risolve quindi in dq1 , dq2, dq3. Accade però che udα può essere assegnato
arbitrariamente dando origine alle corrispondenti soluzioni dq1, dq2, dq3 solo se la matrice
Θ è non singolare, fatto che si verifica qualora k1e k3 non siano paralleli, o solo se q2 = 0, ±
π.
Qualora k1 e k3 fossero paralleli, è evidente che il problema ammette soluzioni
infinitesime solo in corrispondenza di quei vers ori u che giaciono nel rango della matrice;
quando k1 e k3 sono paralleli l'immagine è il piano (k1 , i2).
La struttura ha k1//k3. Vediamo che udα ortogonale al piano k1, i2 non può essere
assegnato con dq1 , dq2, dq3 infinitesimi. Si tratta di una configurazione singolare.
Questo vale nell'ipotesi di volere le perturbazioni tutte infinitesime; se pensassi di
ottenere una perturbazione infinitesima con rotazioni interne finite, lo potrei fare:
q1 = − π / 2 così perturbo la <3>, ma a prezzo di ampi movimenti interni.
q2 = dα
q =π / 2
3
Notiamo che questa soluzione è comunque una tra quelle esistenti qualora il
problema venga risolto in modo globale, risolvendo il problema inverso degli angoli di
Eulero:
0
3 [
R ' = e [ u ∧ ]d α 30R (ϕ , δ , Ψ )
0
]
Un altro giunto rotazionale a tre gradi di libertà è il giunto ad angoli roll-pitch-yaw.
La sua struttura è la seguente:
<3>
α r q1
β r q2
q3
γ r q3
q2
q1
<0>
q1
q3
udα
Ora posso assegnare una rotazione in udα con perturbazioni infinitesime ai giunti.
Anche qui si possono ottenere con ampie escursioni, ottenibili risolvendo il problema
inverso degli angoli roll-pitch-yaw:
0
3 [ 0
]
R' = e[ u ∧]dα 30R(q1 q2 q3 )
Nonostante questi giunti presentino le configurazioni …….. sono molto usati in
campo robotica. Tra i due sarebbe preferibile il giunto r-p-y, la cui configurazione
singolare si ottiene alla massima escursione del polso, però questo è più voluminoso del
giunto ad angoli di Eulero. La maggiorparte dei robot usa come polso un giunto ad angoli
di Eulero.
Giunto sferico
<b>
0
bT
<0>
qi(0)
rT
Questo è un controllo punto a punto . Supponiamo di voler seguire l'andamento
0
assegnato per 3R(t) t∈ [0,T]
Si sceglie un intervallo di campionamento sufficientemente piccolo e si trasforma
questo problema a tempo discreto
0
3R(krt) k = 0, 1, 2, ….., N
0
rt deve essere sufficientemente piccolo; la differenza fra 3R(krt) e 0 3R((k+1)rt) sia la
rotazione infinitesima.
A partire da k=1 si risolve, ad ogni ista nte, il problema inverso agli angoli di
Eulero. Al generico k si avranno almeno due soluzioni:
q1 ( k∆ t ) q1 (k∆t )
q2 ( k∆t ) q 2 ( k∆t )
q (k∆t ) q (k∆t )
3 3 q i ∈ [-π ,π ]
Questo nell'ipotesi che 0 3R(krt) non sia in configurazione singolare.
Trovate le soluzioni occorre decidere quali scegliere: si scelgono quelle che "si
discostano il meno possibile" dalle soluzioni all'istante (k-1).
q i [k∆ t] = π − ε
q i [ k∆ t ]
q i [(k − 1)∆t ] = − (π − ε )
Il giunto va mosso per raggiungere la configurazione più vicina. Per il giunto i-simo
si assegna:
q~ q (k∆t ) − 2π = − π − ε
i(krt) = i
0
3R[(k-1)r t] → 0 3R(krt)
k-1 k T
passa per una
configurazione
singolare
In questo caso si dovrebbe chiedere al giunto di assumere velocità grandissime; non
c'è molto da fare: si riconosce che non si può seguire 03R(t); l'unica possibilità è andare nel
punto che ha causato il problema, aumentare rt e congiungere.