Sei sulla pagina 1di 61

GEOMETRIA

Introduzione:

Verranno richiamati una serie di concetti utili per descrivere posizione e


orientazione di insiemi di corpi rigidi che compongono le strutture robotiche e i corpi
manipolati/movimentati.

Preliminari notazionali e richiami di teoria dei vettori geometrici e punti


geometrici

Sistemi di coordinate:

Essendo un robot una struttura meccanica, usiamo un punto di vista classico


meccanico: vi sono degli osservatori che pongono nello spazio un sistema base di
coordinate, al fine di parametrizzare lo spazio, supposto di natura euclidea.
Useremo un sistema di assi:

ortogonali non ortogonali

oppure coordinate:
sferiche

Ogni punto sarà rappresentato da tre numeri.


Possiamo poi posizionare altre terne e quindi rappresentare un punto con coordinate
su uno qualsiasi dei sistemi usati.

<a> <b>
<0>

Per descrivere un punto :


- stabilire il sistema di coordinate in uso
- dare la terna
Si può passare da un sistema all'altro purché si conosca la terna rispetto a quella
base.
Avendo più riferimenti, si parla di "universo convenuto" tra più . L'originario
sistema viene a perdere il carattere di privilegio: uno qualsiasi dei sistemi può essere
pensato come sistema base.
Punto geometrico:

Definito l'universo convenuto, posso astrarre da questo e identificare un punto P


nello spazio come l'intera classe delle triple di coordinate che si trasformano l'un l'altra
nell'universo .
Un punto così inteso prende il nome di "punto geometrico", che indicheremo con
lettera maiuscola: P P1 Pk P 2.
La notazione è detta "libera da coordinate" poiché prescinde dall'universo
convenuto.

Segmento orientato:

P'

Q' P

Q
<0>

Il segmento orientato che va da Q a P è detto segmento orientato ed è indicato con


[P - Q].
Il segmento parallelo e con lo stesso verso [P' - Q'] è detto equipollente a [P - Q].

Vettore geometrico:

Definiamo: dato un segmento orientato qualsiasi [P - Q] si indica con il termine


"vettore geometrico"associato a [P - Q] l'oggetto matematico rappresentato dall'intera
classe dei segmenti orientati equipollenti a [P - Q] e lo si indica con (P - Q).
Una notazione alternativa è usare lettere minuscole sottosegnate (usate quando è
evidente quale sia il segmento orientato): v v1 vk.
I vettori si possono traslare.
Vettori geometrici applicati:

Per i vettori geometrici applicati si deve fissare il punto P da cui essi partono. Non
posso traslarli.

P [v , P]

è la notazione

Il segmento orientato sarà:


[P - Q] = [(P - Q) , Q]

Convenzione di Grossman:

P
v

Se parto da Q e seguo v, allora trovo P: lo indico come somma:


P=Q+v

Operazioni tra vettori geometrici:

Ø Prodotto fra un vettore e uno scalare


|m v | = | m | | v|
mv stessa direzione di v
stesso verso se m>0, verso opposto se m<0
Ø Somma di vettori geometrici
v1 + v 2 + ………. + vn r (P n - P 0)

P2
P1
P n-1

P0 Pn
(P n - P 0)

Ø Combinazione lineare di vettori geometrici


È la somma pesata attraverso costanti reali:
c1v1 + c2 v 2 + ……… + cnvn

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

Il prodotto vettoriale non è commutativo, vale la forma anticommutativa


v1 ∧ v2 = - v2 ∧ v1
È distributiva rispetto alla somma:
v1 ∧ (v2 + v 3) = v1 ∧ v2 + v1 ∧ v3

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

Ø Doppio prodotto vettore


a ∧ (b ∧ c)
le parentesi sono importanti, poiché:
a ∧ (b ∧ c) = (a • c) b - (a • b) c

"Espressione" e "proiezione" dei vettori geometrici

Dato un universo convenuto di sistemi di coordinate:

<b>

v
<a>

Le terne sono caratterizzate dai versori:


(ia, ja, ka) (ib , jb, kb)
Essendo i versori linearmente indipendenti, allora v si può indifferentemente
rappresentare da una delle seguenti:
v = ia xa + ja ya + ka za
v = ib xb + jb yb + kb zb
Quando un vettore v è espresso come combinazione lineare di una assegnata terna,
allora si dice che v è "espresso" rispetto all'assegnata terna.
Consideriamo l'espressione di v rispetto ad <a>, estraiamo le componenti xa, ya, za e
organizziamole in un vettore algebrico
xa (Vettore algebrico = terna di numeri in colonna)
a
v r ya
za
Quando si fa questo, si dice che v è proiettato sulla terna <a>.
Analogamente:
xb
v r
b
yb
zb
v è proiettato su <b>.
Differenza fra espressione e proiezione: le operazioni fra vettori geometrici
possono essere fatte anche se i vettori geometrici vengono espressi su terne diverse; le
operazioni fra vettori geometrici proiettati richiedono invece che tutti i vettori siano
proiettati sulla stessa terna.

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.

Proiezione dei punti geometrici

Consideriamo un universo convenuto:

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

Proiezione delle operazioni tra vettori geometrici

La notazione in termini di vettori/punti geometrici, cioè libera da coordinate, è utile


nella derivazione di leggi di natura generale, la cui validità è indipendente dalla natura
specifica del sistema di coordinate. Questa notazione è utile per manipolazioni simboliche.
La motazione in termini di vettori/punti geometrici serve a fornire valori quantitativi ai
calcoli che si effettuano, i quali possono dipendere dai sistemi di coordinate usati. Per
operazioni quantitative si devono usare vettori proiettati sulla stessa terna.
Per questo occorre sapere come proiettare le operazioni. Vedremo in vari casi:
• Terne di assi qualsiasi, anche non ortogonali e con versori non unitari
• Terne di assi ortonormali (ortogonali e con versori unitari)
§ Terne destrorse (k = i ∧ j)
§ Terne sinistrorse (k = - i ∧ j)
Vediamo le varie operazioni:
Ø Combinazione lineare:
a
(a1 v1 + ….. + an vn) = c1av 1 + ….. + cnavn
espressione valida per qualsiasi terna.
Ø Prodotto scalare:
v • w = avT aw
questa è valida esclusivamente per terne ortonormali.
Ø Prodotto vettoriale:
a
(v ∧ w) = [ av ∧] aw = - [aw ∧ ] av
dove abbiamo che:
0 -za ya
[av ∧] r za 0 -x a matrice emisimmetrica (o antisimmetrica)
-ya xa 0

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

Matrici di orientazione, cambio di coordinate per vettori proiettati,


calcolo delle matrici di orientazione in alberi di posizionamento

Posizionamento e orientazione di terne

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>

la freccia indica la nuova terna e la coda quella di partenza

Per conoscere la posizione di <a> rispetto a <0> servirà:


{0Oa , 0ia , 0 ja , 0k a}
0
- Oa dice dove si trova l'origine di <a> rispetto a quella di <0>
0
- ia , 0ja , 0 ka danno l'orientazione della terna

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.

Grafo completo di posizionamento

Posto di aver costruito l'albero, ci interessa costruire il grafo completo di


posizionamento: ricavare cioè le mutue relazioni fra tutte le coppie di terne che
costituiscono un albero.

<a>
<b>

<0>

<c>

dati
aggiunti

Servono per determinare:


- matrice di orientazione tra terne
- matrice di trasformazione tra terne
Matrice di orientazione

Consideriamo due terne:

<b>

<a>

Concentriamoci sulle sole informazioni di orientazione:


(a i b , a j b , a k b)
a
b [
R ∆ i bMa j bM k
a a
b ]
che raggruppiamo in:

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.

Matrici di orientazione per cambio di proiezioni

Date due terne:

a
bR

<b>
<a> v

Posto che b v sia nota, quanto vale av?


Basterà allora scrivere:
v = ib x b + jb y b + k b z b
e proiettare su <a>:
a
v = a i b xb + a j b y b + a kb zb
| | |
sono le tre colonne di abR
a
v = abR b
v
Si userà allora R per cambiare la proiezione tra terne. Analogamente:
b
v = abRT a
v
ma poiché esiste anche b aR. si ha:
b
v = b aR a v
b
a R = ba R T
ed essendo v arbitrario, si ha:
in cui baR è la matrice di orientazione di <a> rispetto a <b>.
 b i Ta 
 LL
 
a
b [
R = ib M j b M k b
a a a
] =  ja 

b T


 LL
 b kT 
 a
Per cui si ha:

Combinazione di matrici di orientamento

Generalizziamo a n terne:

<1>
<n-1>
<0>

<n>

Dato n v, voglio trovare 0 v.

R = ( 10R 21R Lnn −−21 R n −n1R ) v


0 n
n

Quindi, in un albero di posizionamento di terne si avrà:

Matrice di orientazione tra terne qualsiasi


Possiamo generalizzare il problema del posizionamento di una coppia di terne in un
generico albero di posizionamento.

<1> <i>

<0> <j>

h
<h> kR=?

<k>

Voglio trovare hkR.

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:

L'algoritmo è fatto in modo da procedere per premoltiplicazioni.


Da dedurre l'algoritmo che procede per postmoltiplicazioni; si parte dalla terna
riferita a quella referente. [L'algoritmo è analogo, con la sola differenza che si dovranno
invertire le matrici corrispondenti ad archi percorsi in senso inverso].

Cambio di coordinate per gli operatori di prodotto vettore

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.

Cambio di coordinate per punti proiettati

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

Esempio con più terne:

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

Coordinate omogenee e matrice di trasformazione

Allo scopo di mantenere più semplice la notazione, si usa un artificio: si


rappresenta la posizione dei punti anziché tramite le tre coordinate standard, attraverso le
coordinate omogenee (con fattore di zoom unitario).
Consideriamo:

 xb 
a
P ∆  yb 
 
 zb 
non ho né perdita né guadagno se uso:
 xb 
y 
P = b 
a

 zb 
 
1 fattore di zoom

Questa scrittura è una forma particolare delle coordinate omogenee. Se si


rappresentano così le proiezioni dei punti geometrici, la forma:
a
P = aOb + abRbP
si può scrivere:
a b
P = abT P
dove: abT è una matrice 4x4 detta matrice di trasformazione della terna <b> rispetto ad
<a> ed è così strutturata:

 | 
 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.

Proprietà della matrice di trasformazione

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 

Combinazione di matrici di trasformazione

Si può generalizzare:

1
2T
0
1T <1> <2>

<0> <1> <2> <n-1>


n-1
nT

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

Matrice di trasformazione di terne qualsiasi

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

Se rT è fitto, allora la scalinata si comporta come rumore alle alte frequenze.


Oltre a questo, si ha il problema che il robot è un sistema non lineare; in questo
caso, il problema è la fatica da fare off.-.line. Posso lavora re così se:
- l'ambiente è invariante
- gli oggetti sono sempre nella stessa posizione
- devo compiere milioni di volte la stessa operazione
Questo va bene in catene di montaggio robotiche. Questa programmazione può dare
luogo a movimenti poco naturali; per avere movimenti più naturali si possono usare
tecniche di programmazione nello spazio cartesiano effettuate su base geometrica.

Regole pratiche per il posizionamento delle terne

Preliminari

Abbiamo due terne:

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.

Interpretazione geometrica della post-moltiplicazione

a
bT i

<b> ≡ <b'>

<a>

Marchiamo con <b'> la <b> iniziale. Adottiamo come punto di osservazione un


osservatore solidale con <a>. Vediamo cosa darà la postmoltiplicazione:

T <b>
a
bTi

<a> <b'>
a
bTi+1

L'operazione di post -moltiplicazione effettua un trasferimento della terna referente


<b> rispetto alla posizione precedente.
Interpretazione geometrica della pre -moltiplicazione

<a> ≡ <a'>
<b>
a
bTi

Marchiamo con <a'> la posizione iniziale di <a> e spostiamo <a'> secondo la T,


supponendo che <a> trascini con sé <b>

<a'>
a
T bTi

<a> <b>

a
bT i+1

Si dice che la pre-moltiplicazione effettua un trasferimento rispetto alla terna


riferit a (secondo il punto di vista di un osservatore solidale con <a>).
[Interpretare dualmente con osservatore solidale con <b>].

Metodi elementari di assegnazione della "matrice T"

Sia che consideri la 2) oppure la 3) e, ovviamente, la 1), il problema di fissare T si


riconduce al problema di avere due <α >, <β> inizialmente coincidenti e di spostare <β>
secondo T

<β> T
<β>
<α> ≡ <β> <α>

Noi consideriamo quelli che possiamo ottenere come composizione dei


trasferimenti elementari.
a) posizionamento di <β > tramite traslazione parallelamente a se stessa, assegnata
lungo il versore geometrico v (inizialmente supposto appartenente allo spazio rigido di
<α>) secondo una lunghezza "l" anche negativa

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 δ
<β >
<α> ≡ <β> <α>

Per il modo in cui si è ruotato, si ha: a


v = b v r 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

Vediamo due casi:


1) P e v siano noti nei termini delle loro proiezioni su <b>
b
P e bv noti nella configurazione iniziale
a
Posso dedurre bT i scomponendo il trasferimento globale, che non è elementare,
come sequenza di trasferimenti elementari:
a) trasferimento di <b> in P

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

T 1 ,T 2 , T 3 sono le stesse T 1, T 2 , T 3 con proiezione su <a>.

Osservazione 1: Notare che qualora, effettuando successioni di trasferimenti elementari,


si arrivi a determinare una matrice di trasferimento finale costituita dal prodotto di
sottomatrici:
abT f = T1 T2 T 3 ….. T n-1 Tn
non è più possibile ricostruire univocamente l'adottata successione di movimenti che l'ha
originata, questo perché esistono più successioni che originano la stessa T; infatti potrei
pensare ad una successione con post-moltiplicazione, oppure con pre-moltiplicazione.
Tutte queste sequenze non alterano l'ordine del prodotto fra matrici.
Osservazione 2: Anche una singola matrice di trasformazione T

 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

Consideriamo la matrice R a 9 elementi, che deve soddisfare i vincoli di


ortogonalità fra colonne e unimodularità delle colonne.
Ho 6 vincoli:
# elementi - # vincoli = 9 - 6 = 3
cosa che fa intuire che per specificare R bastano 3 parametri.
Esistono diverse rappresentazioni con soli 3 parametri. Noi vedremo tre
rappresentazioni:

• rappresentazioni "angolo - asse equivalente"


• rappresentazioni tramite "angoli di Eulero"
• rappresentazioni tramite "angoli roll - pitch - yaw"

Rappresentazione "angolo - asse equivalente" o "rap presentazione esponenziale"

È la più generica ed è importante. Parlando di trasformazioni elementari, si è


parlato di R(v,δ).
Mostreremo che una matrice di orientazione così ottenuta è esprimibile come
segue:

R( v, δ ) = e[ v∧ ]δ = I + [v∧ ]sen δ + [v ∧] 2 (1 − cos δ )


la seconda è la "formula di Rodrigues" e deriva dall'emisimmetria. È notevole che
l'esponenziale di una matrice sia dato da una formula semplice.
Soddisfa:
→ simmetria R(v, δ ) = R(-v, -δ)
→ periodicità R(v,δ) = R(v, δ±2nπ)
→ identità R(v, ± 2nπ ) = I
(v, δ) sono detti "angolo - asse equivalente". Una rappresentazione alternativa, ma
equivalente, è la seguente:
ρ r vδ vettore equivalente di rotazione
avrò:
R(ρ ) = e [ρ∧]
Ma in questo caso non vale la formula di Rodrigues.

Dimostrazione delle formule


La si vede perché è costruttiva.
Passo1:
Si considerano prima le matrici di rotazione ottenute ruotando attorno agli assi
coordinati:

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 

cos δ − sinδ 0 0


R( k ,δ ) =  sinδ cos δ 0 k ∆ 0
   
 0 0 1 1
Dimostriamo che:
a) R(i , δ) = e[i ∧]
b) R(j , δ ) = e[j ∧]
c) R(k , δ) = e[k∧]
Vediamo la a):

 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)!

portiamo dentro la sommatoria I e M, per scoprire che:

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

Algoritmo 1 (soluzione del problema inverso angolo - asse equivalente)


Dato R → (v, δ )
1) se: R = I si pone v = ∀ e δ = 2nπ ; n = 0, 1, 2, …
2) se: R ≠ I allora
a. si risolve il sistema sottodeterminato
(I - R) v = 0
nel vettore v, scegliendo una qualsiasi delle due soluzioni a modulo unitario
b. ponendo u1 r au1 si risolve il sistema sottodeterminato
vT u1 = 0
scegliendo una qualsiasi soluzione a modulo unitario
c. ponendo u2 r au2 si calcola tale versore nel modo seguente:
a
u2 = R u1 u2 = abR bu 2
(infatti b u2 = au 1 per scelta iniziale; non si è fatto altro che riportare su <a> la
proiezione su <b> , del fatto che u1 = b u2). Ciò corrisponde a proiettare su
<a> il versore u2 , la cui proiezione bu2 deve coincidere con u1 r u1.
All' uscita di c) ho due versori u1 e u2 proiettati su <a>. Non resta che calcolare
l'angolo δ.
d. si calcola δ ∈ [-π, π] nel modo seguente

 cos δ = u1T u2

sen δ = v [u1 ∧] u2
T

ha modulo sinδ e quindi proietta su v


allora:
δ = Atan [sen δ, cos δ ] ∈ [-π , π ]
(Atan = arcotangente a due argomenti, tiene conto dei segni).
L'algoritmo 1 è facilmente implementabile, ma presenta la difficoltà di risolvere
due sistemi sottodeterminati. Devo avere un criterio di scelta fra le infinite soluzioni.
Questo allora suggerisce di non usarlo in applicazioni automatiche. Possiamo superare
questa difficoltà con un altro algoritmo che fa uso di formule dirette. Questo algoritmo 2 si
basa sul lemma dei versori.

Lemma dei versori (forma geometrica)


Date due terne <a> e <b> sussistono le seguenti uguaglianze:
1) ½[(ia ∧ ib ) + (ja ∧ jb) + (k a ∧ kb)] = v sen δ
2) (ia · ib) + (ja · jb ) + (k a · kb) = 1 + 2 cos δ

Questa è la forma con vettori geometrici; posso renderla quantitativa proiettandola


su qualsiasi terna, Se si proietta su <a> o <b> si ottengono "piccoli" vantaggi
computazionali. Quella data è la forma geometrica del lemma dei versori.
Esiste anche la forma algebrica.

Lemma dei versori (forma algebrica)


Date due terne <a> e <b>, sussistono le seguenti uguaglianze:

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

Algoritmo 2 (soluzione del problema inverso angolo - asse equivalente)

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

purché ia non sia opposto a ib, si ha che v è bisettrice.


Vantaggi: è stato descritto in forma geometrica e quindi si può implementare
proiettando i vettori su qualunque terna; si usano solo formule dirette.

Rappresentazione con angoli di Eulero (z - x - z)

Rotazioni con angoli di Eulero (z - x - z)

Per giungere a costruire una matrice di rotazione con angoli di Eulero, si


considerano una terna <3> e una <0>, inizialmente coincidenti, e si introducono due terne
ausiriarie <1> e <2>, inizialmente coincidenti con le altre.
Si esegue la sequenza di movimenti elementari:
1. si ruota la <1> attorno a z di un angolo f , supponendo, nel far ciò, di
trascinare anche le terne <2> e <3>
2. si ruota la <2> attorno a x di un angolo δ, trascinando anche la terna <3>
3. si ruota la <3> attorno a z di un angolo ?
Questa successione viene interpretata come trasferimenti di <3> rispetto alla
posizione iniziale. Quindi la R finale è ottenuta per post -moltiplicazioni:
0
3R = e[k∧]? e[i∧]δ e[k∧]f
[Questa successione è riportata nella fotocopia 1. Nella figura è riportata una terna di
angoli f , δ , ? c he portano alla posizione finale, con: f , δ, ? ∈ [-π, π]. Nella figura 2 si ha

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 [-π. π ].

Problema inverso agli angoli di Eulero

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 

2) Posizionamento terna <1>; avremo che:


• i1 = i2
• k1 = k0
• j1 = k1 ∧ i1
vedremo che:

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 

Operando così ottengo due terne:

(ϕ, δ , Ψ) 

 ∈ [ −π ,π ]
(ϕ, δ , Ψ) 
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)

Rotazioni con angoli roll - pitch - yaw

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∧]γ

[Nella fotocopia 3 ne è riportato l'andament o con (α, β, γ); nella 4 ho (α , β , γ ) , che


portano però alla stessa configurazione finale.]
Per il problema inverso ci si devono aspettare due soluzioni.

Problema inverso agli angoli di roll-pitch-yaw

Data R, trovare le terne (α , β , γ) c he la costruiscono secondo roll-pitch-yaw.


Anche in questo caso si segue la procedura inversa:
1) Posizionamento della terna <2>
i2 = i3

 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

Abbiamo visto, dal punto di vista geometrico, che il prodotto di R è non


commutativo, a meno che le R non si riferiscano allo stesso asse. Ora che conosciamo la
rappresentazione esponenziale, ci si rende conto della non commutatività, poiché:
eA eB ≠ eB eA ≠ eA+B
Quindi, a meno che non sia: B=αA ( con α scalare)
Si avrà:
[ρ 2 ∧] [ρ 2 ∧] [ρ1 ∧]
e [ρ1 ∧] e ≠e e ≠ e [(ρ1+ρ 2)∧]
a meno che le R non siano attorno allo stesso asse.
Nonostante che la non commutatività valga in generale, tale mancanza può essere
sostituita con la pseudo-commutatività , che è sempre valida, e si riduce alla commutatività
se gli assi di rotazione sono coincidenti.

Pseudo-commutatività a sinistra

Si abbia un albero di posizionamento σ a tre terne

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

La ⊗ si interpreta come segue:


h2
0
1R σ ruotando
<1> ≡ <2> inizialmente
<0> h2

1
2R σ

<2>
0
1R σ <1>
<0>

Per la ⊗⊗ si hanno queste operazioni:


h2
0
1R σ

<1> ≡ <2>

<0> ≡ <0'>

metto h2 per far ruotare <0'> (poiché premoltiplico) e quindi:


<0'> ruota e trascina con sé il resto

0
1R σ <1> ≡ <2>
<0'>

<0>

Ora si può ridenominare, per avere σ ':


< 0 > → < 0 >
< 0' > → < 1 > 
 σ'
< 2 > → < 2 >
< 1 > → via! 

Trasferimento a sinistra

Il trasferimento a sinistra di alcune posizioni di una matrice di rotazione nell'ambito


di un prodotto implica:
a) Sostituzione della matrice originaria con la matrice identica
b) Inserimento nella posizione assegnata di una nuova matrice di rotazione il cui
vettore geometrico di rotazione sia lo stesso di quello della matrice originaria ,
salvo il fatto di essere preventivamente proiettato nell'albero σ della terna riferita
(referente) della matrice di rotazione che si trova immediatamente a destra
(sinistra) della posizione in cui avviene l'inserimento
c) Ridenominazione delle terne intermedie
[* h2 ∧] [ h 2 ∧] 0
0
0
2 R = 10R e → 0
2 R= e 1 R
proietto sulla terna riferita
che si trova a destra

Pseudo-commutatività a destra

Consideriamo il caso opposto:


[*h1 ∧] 1
0
2 R= 10Rσ 21Rσ =e R
2 σ

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

La successione delle operazioni è analoga a quanto visto per il trasferimento a


sinistra.

Schema mnemonico

R R .......h−h1Rσ ....... i−1i Rσ . ......k−k1Rσ .......n−n1Rσ


0 1
1 σ 2 σ

[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

Matrici di rotazione infinitesima

Una matrice di rotazione è detta corrispondente a una matrice di rotazione


infinitesima qualora l'angolo di rotazione attorno ad un assegnato versore (tra -π e π ) sia
assunto comunque piccolo ma non nullo.
R = e[v∧] dδ = I + [v∧] dδ + O(dδ )
≅ I + [v∧] dδ

Commutatività approssimata

Qualora si abbia a che fare con prodotti di matrici infinitesime, la proprietà di


pseudo-commutatività si trasforma in commutatività approssimata, nel senso degli
infinitesimi.
Avremo:

R = e[ v1 ∧ ]dδ 1 e [v2 ∧ ]dδ 2 =


= [ I + [ v1 ∧] dδ 1 + O( dδ 1 )][ I + [ v2 ∧] d δ 2 + O(d δ 2 )] =
≅ [i + [v1 ∧] dδ 1 + [v2 ∧] dδ 2 + [v1 ∧][v2 ∧ ] dδ 1 dδ 2 + O( dδ 1 , d δ 2 )] =
14444442444444 3
O ( dδ 1 ,d δ 2 )

≅ [ 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>

Quindi le proiezioni di v sulle terne sono circa le stesse.


Osservazione 2:
La commutatività approssimata che vale per prodotti di matrici di rotazione
infinitesime non vale per prodotti tra matrici di rotazione di cui una sia finita e l'altra
infinitesima:

e [v1 ∧]δ 1 e [v2 ∧]dδ 2 ≠ e [v2 ∧]dδ 2 e [v1 ∧]dδ 1


In questo caso vale solo la pseudo-commutatività. Questa differenza deriva
dall'espansione in serie: non posso trascurare come infinitesimi gli altri termini.

Un esempio formale di applicazione

Supponiamo di avere 03R descritta in angoli di Eulero:


0
3 R(ϕ,δ , Ψ) =e[*k1 ∧]ϕ e[*i 2 ∧]δ e[*k 3 ∧]Ψ
con i versori geometrici evidenziati dal simbolo *. L'albero σ è caratterizzato dalla tripla:
σ r (f, δ, ? )
Immaginiamo di far variare in modo infinitesimo f , δ , ? in modo da passare a:
0
3 R (ϕ + dϕ , δ + dδ , Ψ + dΨ ) =
[* k 1 ∧ ]ϕ [* k 1 ∧ ] dϕ [*i 2 ∧ ]δ [*i 2 ∧ ] dδ [*k 3 ∧ ] Ψ [* k 3 ∧ ] dΨ
= (e e ) (e e ) (e e )
In questa situazione si ha l'albero
σ' r (f+df , δ +dδ, ? +d? )
Nota: I vettori geometrici assi di rotazione k1, i2 , k3 , proprio a causa delle perturbazioni df ,
dδ, d? hanno orientazioni diverse rispetto a <0> e nell'albero σ', rispetto a quello che
avevamo in σ. [Nell'esempio questo vale solo per i2 e k3].
Togliamo le parentesi e quindi, per essere formalmente corretti, introduciamo le
terne ausiliarie <1'>, <2'> e <3'> al posto di quelle che caratterizzano le proiezioni finite.
0
3 R (ϕ , dϕ , δ , dδ , Ψ, dΨ ) =
[*k '3 ∧]Ψ [*k 3 ∧ ]dΨ
= e[*k1 ∧]ϕ e[*k1 ∧] dϕ e[*i 2 ∧ ]δ e[*i 2 ∧ ]dδ e
' '
e ⊕
Ora si nota un passaggio
f df δ dδ ? d?
<0> → <1'> → <1> → <2'> → <2> → <3'> → <3>
In questo modo si è costruito un nuovo albero σ'':
σ '' r (f, df, δ , dδ , ? , d? )
Notare comunque che all'interno dell'albero σ'' appena definito, continuano a valere
le seguenti uguaglianze numeriche con ciò che è presente nell'originario albero σ:

 10 R (ϕ ) ∆ e[* k1 ∧ ]ϕ = e [* k1' ∧ ]ϕ = 10'R (ϕ ) 


σ  1 [*i ∧ ]δ [* i ' ∧ ]δ
 σ''
 2 R (δ ) ∆ e 2 = e 2 = 2 ' R (δ ) 
1

 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)]

− − − → 1k3 → 1'


k3 → 0 k3
1 1
2'R(δ )= 2R(δ ) ≅ 0
1'R(f )=01R(f )
[rotazione
infinitesima]
Se si tolgono le " ≅ " avremo che:
0
k3 = 3 2 1 3
2R 1R 0R k3 ← non considerando il contributo
infinitesimo si commette un
infinitesimo di ordine superiore
e cioè:
0
k 3 = 03R(f , δ ,? ) 3 k3
la proiezione di k3 valutata sull'albero σ. Sempre all'interno di σ potremo valutare l'angolo-
asse equivalente indotto da questo insieme di perturbazioni:

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

Lo stesso si ottiene trasferendo tutto a destra.


Rappresentazione a tre parametri e giunti rotazionali a tre gradi di
libertà

Si abbia un corpo rigido con una terna <3> ad esso solidale:

<3>
0
3R

<0>

Senza preoccuparci dell'origine di <3>, proviamo a vedere quale struttura


meccanica ar ticolata possa assegnare al corpo rigido qualsiasi sia la R assegnata. Una
struttura che risolve è il giunto rotazionale a tre gradi di libertà con struttura ad angoli di
Eulero. Tale giunto sarà:
Se poniamo:
f r q1
<3> δ r q2
? r q3
k3
q3 La struttura realizza R
attraverso angoli di Eulero
Quindi la struttura può
assegnare qualunque R. Data
la 03R desiderata si risolve il

q2 problema inverso agli angoli


di Eulero:
k1 i2
q1  (ϕ δ Ψ ) = ( q1 q2 q3 )
udα 0
R→
(ϕ δ Ψ ) = (q1 q2 q3 )
3

Nel caso singolare δ = 0, ± π


si scelgono i f e ? possibili.
<0>
Supponiamo assegnata 03R
imponendo angoli q1 , q2, q3 ai
giunti:
Si ha:
0
3R(q1 , q2 , q3)
0
Supponiamo di voler modificare 3R premoltiplicandola per una matrice di
rotazione infinitesima:
0
0
3 R' =e[ u ∧]dα 30R(q1 q2 q3 )
oppure (è la stessa cosa) postmoltiplicando:

R' = 30R(q1 q2 q3) e[ u∧]dα


3
0
3

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>

Realizza la struttura roll-pitch-yaw ⇒ posso assegnare qualunque matrice. Data


0
3R troverò (α , β , γ): due o infinite soluzioni. Anche questo giunto non è esente da
configurazioni singolari. Le ottengo per β = ± π/2, corrispondente a:
q2

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

Esiste poi il giunto sferico (puro), che realizza la paratrizzazione dell'angolo-asse


equivalente, ed è esente da singolarità.
In inglese è detto anche "ball and socket".
È il miglior giunto che
ci sia, facile da costruire, ma
<3> presenta difficoltà nella sua
attuazione, che va fatta con
tiranti.
In tutta una serie di
<0> situazioni naturali possiamo
trovare il giunto, almeno
come elemento modellante.
Esempio: Immaginiamo un robot sottomarino flottante

<b>
0
bT

<0>

Per individuare <b>:


1) tre giunti traslazionali
2) giunto sferico (rappresenta la rotazione)
È evidente che potrei rappresentare <b> con angoli di Eulero, ma andrebbe bene
soltanto se la struttura di giunti ad angoli di Eulero non si trovasse nella sua posizione
singolare, poiché non si possono ottenere rotazioni infinitesime qualsiasi.
Tipicamente, per rappresentare l'orientazione di un aereo in volo si usano gli angoli
di Eulero: si dispone il giunto in modo da avere la configurazione singolare in un punto da
non raggiungere (ad esempio in condizioni di stallo). Se voglio rappresentare anche lo
stallo si usa un giunto sferico oppure sostituisco il giunto ad angoli di Eulero con un giunto
sferico.
Esempio preliminare di pianificazione su base geometrica

Si abbia un giunto rotazionale, ad esempio ad angoli di Eulero. Si abbia, all'istante


zero:
q1 (0), q2 (0), q3 (0) → 0
3R(0)

Supponiamo di voler raggiungere, a T


0
3R(T) ?→ q1(T), q2(T), q3(T)
Questo problema si risolve risolvendo il problema inverso agli angoli di Eulero,
quindi, per passare da una situazione all'altra:
si sceglie un andamento
continuo
qi qi(T)

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

per renderla più vicina all'altra


Queste operazioni vanno fatte epr tutti i giunti e per ogni spostamento. Operare in
questo modo serve a mantenere piccole le variazioni: più rt → 0 e più "infinitesime"
saranno le escursioni.
Però questo non sempre succede. Vi possono essere situazioni per cui, pur
scegliendo configurazioni angolari più vicine e pur riducendo rt, non si riesce a ridurre
tali scostamenti angolari al di sotto di una certa soglia.
Può accadere:
Quello che accade è che il passaggio da
(k-1) a k porta a una configurazione
singolare
qi

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.

Questo modo di procedere va fatto off -line.