Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Appunti Robotica
Appunti di robotica
Author:
Simone Giusso
14 gennaio 2019
ii
Indice
1 Introduzione 5
1.1 Evoluzione della Robotica . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Robot Manipolatori . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Robot Mobili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Maggiori settori di impiego dei Robot . . . . . . . . . . . . . . . 7
iii
iv INDICE
6 Motion Control 35
6.1 Pose controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2 Differential Drive pose control . . . . . . . . . . . . . . . . . . . . 35
6.3 Omnidirectional pose control . . . . . . . . . . . . . . . . . . . . 37
6.4 Trajectory Following . . . . . . . . . . . . . . . . . . . . . . . . . 38
7 Obstacle Avoidance 39
7.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
7.2 Bug Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
7.3 Vector Field Histogram . . . . . . . . . . . . . . . . . . . . . . . 40
7.4 Basic Curvature Velocity Methods . . . . . . . . . . . . . . . . . 41
7.5 Dynamic Window Approach . . . . . . . . . . . . . . . . . . . . . 41
7.6 CostMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
7.7 Metodo dei campi potenziali . . . . . . . . . . . . . . . . . . . . . 42
8 2D Map Building 45
8.1 Errori e rumori nella misurazione . . . . . . . . . . . . . . . . . . 46
8.2 Motion Blur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
8.3 Mapping a breve e lungo termine . . . . . . . . . . . . . . . . . . 47
8.4 Mappe 2D geometriche . . . . . . . . . . . . . . . . . . . . . . . . 48
8.4.1 Telemetro laser . . . . . . . . . . . . . . . . . . . . . . . . 48
8.4.2 Retta nel piano . . . . . . . . . . . . . . . . . . . . . . . . 48
8.4.3 Segmentazione dei punti . . . . . . . . . . . . . . . . . . . 49
8.4.4 Mappa Locale e Globale . . . . . . . . . . . . . . . . . . . 50
8.5 Mappe di occupazione 2D . . . . . . . . . . . . . . . . . . . . . . 50
8.5.1 Modello dato da un sensore laser . . . . . . . . . . . . . . 50
8.5.2 Modello dato da un sensore sonar . . . . . . . . . . . . . . 51
8.6 Quadtree per mappe di occupazione 2D . . . . . . . . . . . . . . 52
8.6.1 Griglia di occupazione 2D . . . . . . . . . . . . . . . . . . 52
8.7 Mapping Topologico . . . . . . . . . . . . . . . . . . . . . . . . . 53
9 Robot Localization 57
9.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
9.2 Localizzazione probabilistica . . . . . . . . . . . . . . . . . . . . . 57
9.3 Sensor aliasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
9.4 5 passi per la localizzazione basata su mappa . . . . . . . . . . . 58
9.4.1 1. Calcolo dell’odometria . . . . . . . . . . . . . . . . . . 58
9.4.2 2. Osservazione . . . . . . . . . . . . . . . . . . . . . . . . 58
9.4.3 3. Predizione delle misure . . . . . . . . . . . . . . . . . . 59
9.4.4 4 e 5. Matching e stima . . . . . . . . . . . . . . . . . . . 59
INDICE v
10 SLAM 65
10.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
10.2 Localizzazione e Mapping: Elementi . . . . . . . . . . . . . . . . 65
10.3 Localizzazione e Mapping: Definizioni Generali . . . . . . . . . . 66
10.4 Il problema della localizzazione e del mapping . . . . . . . . . . . 66
10.4.1 Problema della localizzazione . . . . . . . . . . . . . . . . 67
10.4.2 Problema del mapping . . . . . . . . . . . . . . . . . . . . 67
10.5 Problema della localizzazione e del mapping simultaneo . . . . . 68
10.6 Filtro di Kalman Esteso - Introduzione . . . . . . . . . . . . . . . 68
10.6.1 Modelli . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
10.6.2 Modello del movimento . . . . . . . . . . . . . . . . . . . 69
10.6.3 Modello dei sensori . . . . . . . . . . . . . . . . . . . . . . 70
10.7 EFK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
11 Motion Planning 2D 71
11.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
11.2 Composizione dell’ambiente . . . . . . . . . . . . . . . . . . . . . 71
11.3 Spazio di configurazione . . . . . . . . . . . . . . . . . . . . . . . 71
11.4 Somme di Minkowski . . . . . . . . . . . . . . . . . . . . . . . . . 73
11.5 Conceptual Framework . . . . . . . . . . . . . . . . . . . . . . . . 74
11.6 Approcci per il Path Planning . . . . . . . . . . . . . . . . . . . . 74
11.7 Vincoli tipici per il Path Planning . . . . . . . . . . . . . . . . . 75
11.8 Metodi di Path Planning . . . . . . . . . . . . . . . . . . . . . . . 75
12 Roadmap probabilistiche 79
12.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
12.2 Completezza di un planner . . . . . . . . . . . . . . . . . . . . . 79
12.3 Roadmap probabilistiche . . . . . . . . . . . . . . . . . . . . . . . 79
12.3.1 Fase di apprendimento . . . . . . . . . . . . . . . . . . . . 80
12.3.2 Fase di Query . . . . . . . . . . . . . . . . . . . . . . . . . 82
12.3.3 Rapidly-Growing Random Trees . . . . . . . . . . . . . . 82
12.4 Strategie di Sampling per Motion Planning . . . . . . . . . . . . 82
12.4.1 Sampling Gaussiano . . . . . . . . . . . . . . . . . . . . . 83
12.4.2 Bridge Test . . . . . . . . . . . . . . . . . . . . . . . . . . 84
12.4.3 Scelta dell’algoritmo . . . . . . . . . . . . . . . . . . . . . 84
12.5 Vincoli cinematici e dinamici . . . . . . . . . . . . . . . . . . . . 85
12.5.1 Robot sottoattuati . . . . . . . . . . . . . . . . . . . . . . 85
12.5.2 Controllo basato su campionamento . . . . . . . . . . . . 86
vi INDICE
INDICE vii
18 Mapping 3D 123
18.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
18.2 Scanner 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
18.2.1 Flight scanner . . . . . . . . . . . . . . . . . . . . . . . . 124
18.2.2 Scanner basati su triangolazione . . . . . . . . . . . . . . 124
18.2.3 Structured light scanner . . . . . . . . . . . . . . . . . . . 125
18.3 Visione stereoscopica . . . . . . . . . . . . . . . . . . . . . . . . . 125
18.3.1 Geometria epipolare . . . . . . . . . . . . . . . . . . . . . 125
18.4 Compressione dei dati . . . . . . . . . . . . . . . . . . . . . . . . 127
18.4.1 OctTree . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
18.5 Generazione di Mesh 3D . . . . . . . . . . . . . . . . . . . . . . . 128
18.5.1 Triangle meshes . . . . . . . . . . . . . . . . . . . . . . . . 128
18.5.2 Lo standard Collada . . . . . . . . . . . . . . . . . . . . . 129
viii INDICE
INDICE ix
x INDICE
Capitolo 1
Introduzione
• 1921: Karel Capek realizza un’opera teatrale in cui si aveva una macchina
(chiamata «robot» dal ceco «robota» - cioè «lavorare») che aiutava il
padrone.
• 1954: Nasce il primo braccio automatico che viene subito utilizzato nelle
industrie. La nascita del braccio meccanico si ha in questo periodo grazie
all’introduzione dei computer.
• 1961: Nasce la prima azienda nel mondo della robotica fondata da Joseph
F. Engelberger e George Devol.
6 CAPITOLO 1. INTRODUZIONE
• Elevata precisione.
• Elevata velocità.
• Elevata efficacia.
Alcuni robot mobili sono utilizzati anche in agricoltura oppure nel caso dei
veicoli spaziali. Questo secondo tipo di veicoli è parecchio complesso perché
deve essere completamente autonomo. Infatti, un segnale dalla Terra a Marte
impiegherebbe dai 5 ai 20 minuti per essere ricevuto, perciò è impensabile poterli
pilotare. Anche le auto autome, precedentemente discusse, sono un esempio di
robot mobili.
• Manipolazione.
• Assemblaggio.
• Verniciatura di prodotti.
• Saldatura ad arco.
• Taglio laser.
• Medicale.
• Agricoltura.
• Militare.
8 CAPITOLO 1. INTRODUZIONE
• Robot medicali.
• Pulizia della casa.
• Taglia erba.
• Industria alimentare.
• Guida museo.
• Lotta anticendio.
• Ispezione e sorveglianza.
Capitolo 2
Questi blocchi incidono sulla qualità del robot e possono essere realizzati in
diversi modi in base allo scopo del robot.
2.2.4 Localization
Anche la localizzazione del robot nello spazio può avvenire in maniera diversa.
Infatti essa può essere:
• Personificazione
• Collocazione
• Intelligenza
Tutti questi fattori devono essere considerati nello sviluppo del software di con-
trollo del robot e dipendono fortemente dal tipo di compito che il robot deve
eseguire.
2.3.1 Personificazione
La personificazione del robot si riferisce alla consapevolezza che esso possiede un
corpo (una struttura meccanica con sensori e attuatori) che consente al robot
di sperimentare ed interagire con il mondo. Le azioni di controllo imposte al
robot dipendono fortemente dal tipo di attuatori e dalla struttura cinematica
del robot. Ad esempio in base a com’è fatto il robot si possono sviluppare diversi
algoritmi per pianificare un percorso e controllare i movimeni del robot lungo
tale percorso.
2.3.2 Collocazione
La collocazione del robot si riferisce all’esistenza di un ambiente complesso, di-
namico e non strutturato che influenza fortemente il comportamento del robot.
La collocazione indica che il robot è consapevole della propria postura, in un
punto in un dato momento e della presenza di oggetti (ostacoli, pezzi di lavo-
ro o collaboratori) nella sua area di lavoro. A seconda dell’ambiente operativo
il robot può utilizzare diversi sensori e tecniche per la percezione e la localiz-
zazione 3D. Ad esempio, un GPS non può essere utilizzato all’interno di un
edificio, mentre bisogna tenere in considerazione che un sistema di visione viene
influenzato dalle condizioni di luce ambientale.
2.3.3 Intelligenza
L’intelligenza di un robot si riferisce alla capacità di esprimere comportamenti
adeguati e utili mentre interagisce con un ambiente dinamico. L’intelligenza di
un robot generalmente è definita in termini di:
• Autonomia: cioè la capacità del robot di controllare le proprie attività
e di svolgere compiti senza l’intervento dell’uomo.
• Deliberatività: ovvero la capacità di pianificare e rivisionare le azioni
future al fine di raggiungere un determinato obiettivo tenendo conto delle
mutevoli condizioni dell’ambiente esterno.
• Adattabilità: cioè la capacità di cambiare il proprio comportamento in
risposta agli stimoli esterni in base alle iterazioni passate con il mondo
reale.
Capitolo 3
15
3.2.1 Ruote
L’analisi del componente ruota, dal punto di vista cinematico, si basa sull’as-
sunzione che le ruote di un robot non possano slittare. Le ruote possono seguire
due movimenti:
Una volta fatte le dovute assunzioni, una ruota può essere analizzata in base ai
suoi 4 parametri:
• t = velocità di sterzata.
• Ruote fisse: Sono le classiche ruote posteriori delle auto, ovvero ruote
che non possono sterzare. Dei parametri visti in precedenza avranno tutto
tranne la t che sarà ovviamente nulla.
Nel caso a in Figura 3.5, che presenta la struttura di una tipica automobile, tutti
i punti del veicolo si muovono intorno all’ICR. Il movimento è di puro rotola-
mento, poichè la velocità è tangenziale alla circonferenza. In questo caso si può
notare come le ruote anteriori, che sterzano, non sono in realtà parallele tra di
loro perché altrimenti i loro assi non sarebbero paralleli e non si incontrerebbero
in un unico punto e ciò causerebbe lo slittamento del veicolo. La velocità con
cui tale veicolo ruota dipende dalla velocità delle ruote, che a sua volta dipende
dalla distanza dall’ICR. Nel caso b di Figura 3.5 invece, l’asse delle ruote coin-
cide, quindi l’ICR si trova su tale asse. La posizione del punto, ipotizzandolo
sempre su quest’asse, dipende dalla velocità con cui girano le ruote:
In un robot sono inoltre presenti vincoli sulla velocità detti anche vincoli non-
holimici. Questi vincoli servono a modellare il fatto che un robot può muoversi
in alcune direzioni (ad esempio in avanti e indietro) ma magari non in altre (ad
esempio lateralmente). Da questa semplice spiegazione emerge come un robot
omnidirezionale è, invece, holomo poichè non ha vincoli riguardanti le direzioni
in cui può muoversi.
(
V = R · ω : velocità lineare
T wist =
ω : velocità angolare
L
VR = ω(R + )
2
L
VL = ω(R − )
2
Dove R − L2 è la distanza dall’ICR rispetto alla ruota sinistra mentre R + L2 è la
distanza dall’ICR rispetto alla ruota destra. Da queste due equazioni è possibile
ricavare:
VR − VL
ω=
L
VR + VL
V =
2
Dal Twist quindi è possibile passare alle velocità delle ruote (operazione fatta
dal motor control) e viceversa (utile per stimare la posizione del robot). Inoltre
da VL = VR è possibile ricavare R come:
L V R + VL
R=
2 V R − VL
Da notare che per VL = VR si ottiene R = ∞ mentre per VL = −VR si ottiene
R = 0. Dato il raggio della ruota r è possibile ricavare dal twist anche le velocità
angolari delle singole ruote:
1 L
ωL = (V − ω )
r 2
1 L
ωR = (V + ω )
r 2
Dove V − ω L2 e V − ω L2 non sono altro che VL e VR rispettivamente.
3.5. TRICICLO 21
3.5 Triciclo
Un triciclo presenta 3 ruote:
• Una ruota posteriore o anteriore che è azionata tramite due motori uno
per lo sterzo e uno per il rotolamento.
Quando la ruota sterzante viene girata di un angolo α(t) rispetto alla direzione
che il triciclo stava percorrendo, il robot girerà con una velocità ω(t) intorno
al suo ICR che si troverà ad una distanza R dalla perpendicolare passante per
l’asse delle ruote posteriori (in questo esempio):
Anche qui possiamo definire il modello cinematico del robot, data Vs (t) la
velocità lineare della ruota sterzante, come:
Vx (t) = Vs (t)cosα(t)
Vy (t) = 0 : senza slittamento
θ̇(t) = Vsd(t) sinα(t)
d
Dove i = sinα(t) e Vx (t) la velocità perpendicolare all’asse delle ruote fisse.
Considerando la Figura 3.8 è possibile determinare dalla velocità della ruota
sternzante il Twist:
ẋ(t) = Vs (t)cosα(t)cosθ(t)
T wist = ẏ(t) = Vs (t)cosα(t)sinθ(t)
θ̇(t) = Vsd(t) sinα(t)
3.7. CARRELLO 23
3.7 Carrello
Il triciclo già analizzato non presenta nessuna novità. Il carrello invece può
essere anch’esso modellato come un triciclo data la presenza del gancio che
può essere considerato come una ruota sterzante (dato che può ruotare intorno
all’asse verticale) il cui asse per trovare l’ICR coincide con l’asse delle ruote fisse
del triciclo a cui è collegato. Con un po’ di passaggi trigonometrici è possibile
determinare quindi il Twist del carrello.
Z
VL + VR 1 ωL + ωR
D= dt = r (t3 − t0 + t2 − t1 )
2 2 2
D r
ϕ= = (ωR − ωL )(t3 − t0 + t2 − t1 )
R 2L
Dove per il calcolo di D è stata utilizzata l’area media dei due profili di velocità
contando per comodità di scrittura t2 − t1 due volte in quanto nella formula è
presente un 21 mentre t1 − t0 e t3 − t2 solo una volta in quanto triangoli. ϕ è
R +VL L r(ωR +ωL ) L (ωR +ωL )
stato calcolato sostituendo R con L2 VVR −VL = 2 r(ωR −ωL ) = 2 (ωR −ωL ) .
Dato che nella realtà il profilo non si presenterà come quello in Figura 3.13 a
causa del rumore è necessario determinare una distanza instantanea:
1
dD = r(ωR (t) + ωL (t))dt
2
Z
r
θ(t) = (ωR (t) − ωL (t))dt
L
vista nel differential drive) mentre le coordinate vengono calcolate tramite Vx (t)
e Vy (t). Considerando nel breve periodo le velocità constanti ωR (t) = ωR e
ωL (t) = ωL :
r
θ(t) = (ωR − ωL )t
L
L ωR + ωL r
x(t) = sin[ (ωR − ωL )t]
2 ωR − ωL L
L ωR + ωL r
y(t) = − cos[ (ωR − ωL )t]
2 ωR − ωL L
(ωR +ωL )
Dove L2 (ω R −ωL )
= R. E’ inoltre possibile calcolare altre due informazioni
importanti:
L DRk + DLk
rk =
2 DRk − DLk
R +VL
Dove il raggio di curvatura viene determinato da R = L2 VVR −VL (t si semplifica).
Queste due informazioni sono semplici da determinare ma calcolare l’odometria
tramite le formule riportate sopra può essere abbastanza complicato. Può al-
lora essere utilizzato un algoritmo «approssimato» che permette di stimare la
posizione del robot all’istante tk :
DRk −DLk
θk = θk−1 + θ(tk ) = θk−1 + L
xk = xk−1 + rk [sin(θk−1 ) − sin(θk )]
yk = yk−1 − rk [cos(θk−1 ) − cos(θk )]
Gli errori che si possono avere nel calcolo dell’odometria possono essere suddivisi
in:
• Errori sistematici / deterministici: sono errori che possono essere
eliminati tramite una buona calibrazione del sistema. Ad esempio sono
errori meccanici o di costruzione.
• Errori non sistematici / non deterministici: sono errori che devono
essere descritti da un modello di errore, che sarà caratterizzato da una sua
incertezza. Questi errori, in quanto non deterministici, non possono essere
eliminati ma possono essere ridotti con l’utilizzo di alcune tecniche ad
esempio con l’utilizzo di ruote ausiliarie sottili (punto di appoggio preciso)
non motrici in cui viene posizionato un encoder (ad esempio aggiungento
un carrello). In questo caso le ruote non subiscono alcuno slittamento
poichè vengono solamente trascinate.
Le maggiori cause di errore sono:
• Risoluzione limitata dei valori che vengono integrati. Questi errori si
suddividono in:
– Range error: la distanza calcolata dal robot non coincide con quella
effettivamente percorsa.
– Turn error: il robot crede di aver girato di una certa quantità, che è
in realtà diversa da quella effettiva.
– Drift error: il robot sbaglia a capire quale sia il suo orientamento.
Con il passare del tempo gli errori di Turn e Drift aumentano di gran
lunga rispetto agli errori di Range.
Gli errori nella stima dell’odometria possono essere anche parecchio significativi.
In alcune applicazioni, però, basta anche solamente sapere in che intorno del
punto stimato si trova il robot.
Capitolo 4
4.1 Arduino
Arduino è un circuito stampato progettato per facilitare l’utilizzo di un parti-
colare microcontrollore, su di esso montato. In Arduino troviamo:
• Pin per la fornitura di alimentazione.
• Presa USB per la connessione con il computer.
• Bus seriale I2C.
• Pin digitali di I/O.
• Pin analogici di Input.
La programmazione di Arduino è effettuata attraverso un ambiente fornito da
Arduino stesso, e può essere effettuata in C. Il programma per Arduino si sud-
divide in:
1 void setup ( ) {
2 // Codice che v i e n e e s e g u i t o d u r a n t e l ’ i n i z i a l i z z a z i o n e
3 // una v o l t a s o l a
4 }
5
6 void loop ( ) {
7 // Codice che v i e n e continuamente e s e g u i t o ,
8 // f i n o a l l o spegnimento d i Arduino
9 }
29
• Serial.begin(_baudrate_);
permette di avviare la comunicazione seriale, specificandone il baudrate.
• Serial.avaiable();
ritorna TRUE qualora siano disponibili caratteri ricevuti in seriale.
• Serial.read();
ritorna i caratteri letti dalla seriale.
• Serial.println();
permette di inviare i caratteri passati per argomento sulla seriale.
• altri componenti...
1 c l a s s MD25Driver {
2 public :
3 /∗ Metodo che c o n s e n t e d i s p e c i f i c a r e l a v e l o c i t a ’
4 d e l l e ruote destra e s i n i s t r a . I v a l o r i di
5 v e l o c i t a ’ p o s s i b i l i sono t r a −125 e +125 ∗/
6 v o i d s e t S p e e d L e v e l ( i n t sx , i n t dx ) ;
7 /∗ Metodo che c o n s e n t e d i f e r m a r e entrambi i
8 m o t o r i ∗/
9 v o i d s t o p Motors ( ) ;
10 /∗ Metodo che c o n s e n t e d i l e g g e r e l ’ e n c o d e r d i
11 s i n i s t r a ∗/
12 l o n g readEncoder_L ( ) ;
13 /∗ Metodo che c o n s e n t e d i l e g g e r e l ’ e n c o d e r d i
14 d e s t r a ∗/
15 l o n g readEncoder_R ( ) ;
16 /∗ Metodo che c o n s e n t e d i r e s e t t a r e g l i e n c o d e r
17 d e i due m o t o r i ∗/
18 void encoderReset ( ) ;
19 };
1 c l a s s RoverDriver {
2 private :
3 d o u b l e ox , oy , o t ; // I n f o r m a z i o n i s u l l a p o s i z i o n e
4 // c o r r e n t e
5
6 public :
7 /∗ C o s t r u t t o r e d e l l a c l a s s e ∗/
8 RoverDriver ( ) ;
9
10 /∗ Metodo che c o n s e n t e d i f e r m a r e i l r o b o t ∗/
11 void stop ( ) ;
12 /∗ Metodo che c o n s e n t e d i i m p o s t a r e i l TWIST d e l
13 r o b o t m o b i l e . I due v a l o r i p a s s a t i a l metodo
14 r a p p r e s e n t a n o l a v e l o c i t a ’ v d i avanzamento e l a
15 v e l o c i t a ’ w d i r o t a z i o n e a t t o r n o a l l ’ ICR ∗/
16 void setTwist ( long v , long w) ;
17 /∗ Metodo che p e r m e t t e d i a g g i o r n a r e l e
18 i n f o r m a z i o n i s u l l ’ o d o me t r i a n o t e a l r o b o t . ∗/
19 v o i d getOdometry ( d o u b l e &x , d o u b l e &y , d o u b l e &t )
20 /∗ Metodo che c o n s e n t e d i r e s e t t a r e l ’ o d o m e t r i a
21 d e l r o b o t ∗/
22 v o i d resetOdometry ( ) ;
23 };
1 c l a s s Navigator {
2 private :
3 d o u b l e ox , oy , o t ; // I n f o r m a z i o n i s u l l a
4 // p o s i z i o n e c o r r e n t e
5
6 public :
7 /∗ C o s t r u t t o r e d e l l a c l a s s e ∗/
8 Navigator ( ) ;
9
10 /∗ Metodo che imposta l a p o s i z i o n e d e s i d e r a t a
11 che i l r o b o t deve r a g g i u n g e r e ∗/
12 void setTarget ( double x , double y , double t ) ;
13 /∗ Metodo che c o n s e n t e c a l c o l a r e l ’ o d om e t r i a
14 d e l r o b o t ∗/
15 v o i d setOdometry ( d o u b l e x , d o u b l e y , d o u b l e t ) ;
16 /∗ Metodo che c o n s e n t e d i o t t e n e r e i l TWIST ∗/
17 v o i d g e t T w i s t ( d o u b l e &v , d o u b l e &w ) ;
18 };
Capitolo 5
5.1 Introduzione
33
• Nodi.
• Librerie.
• Set di dati.
• File di configurazione.
• Software di terze parti.
• ...
Capitolo 6
Motion Control
Dato che, come abbiamo visto, il calcolo dell’odometria da parte del robot è spes-
so influenzato da disturbi e/o errori, generalmente si chiedono degli spostamenti
piccoli, per ridurre la possibilità di errore.
35
Lo scopo del movimento del rover è quello di portare il suo sistema di riferimento
in coincidenza con quello del punto target eventualmente con un determinato
orientamento. Data la posizione corrente e quella target è possibile determinare
l’arco di circonferenza che li unisce tangente alla direzione corrente del robot,
e con ciò è possibile determinare il centro (ICR) e il raggio. Da ciò può essere
calcolato il Twist, v = r · θ, fissando v o θ.
In realtà, l’arco di circonferenza percorso non sarà mai quello calcolato all’inizio
(per slittamenti, irregolarità del pavimento, ...) quindi il thread di pose control,
e con esso il calcolo del Twist, deve essere eseguito ciclicamente. Data la Figura
6.3:
Chiamiamo:
p
• ρ = ∆x2 + ∆y 2 la distanza tra il punto iniziale e finale.
∆y
• α = −θ + arctan( ∆x ) la differenza di orientamento tra sistema di riferi-
mento iniziale e retta congiungente punto iniziale e finale.
• β = −θ − α la differenza di orientamento tra sistema di riferimento finale
e retta congiungente punto iniziale e finale.
le coordinate polari con origine nella posizione target. Guardando questo sche-
ma, è possibile implementare due tentativi di pose control:
Capitolo 7
Obstacle Avoidance
7.1 Introduzione
L’obbiettivo dell’algoritmo di obstacle avoidance è quello di evitare le collisioni
del robot con eventuali ostacoli. Generalmente, questi algoritmi sono basati su
delle mappe locali, ovvero si fornisce al robot una mappa dell’ambiente in cui si
muove. Nonostante il robot abbia la mappa, esso deve essere in grado comunque
di rilevare gli ostacoli aggiuntivi ed eventualmente evitarli, anche ripianificando
il percorso che deve essere eseguito.
Figura 7.1: Due esempi di utilizzo del Bug algorithm. Tale algo-
ritmo risulta spesso inefficiente come mostrato dalla figura più a
destra.
39
Figura 7.2: Due esempi di utilizzo del Bug algorithm. Tale algo-
ritmo risulta spesso inefficiente come mostrato dalla figura più a
destra.
• Viene considerata, nel planning del percorso, anche la forma del robot.
7.6 CostMap
L’algoritmo basato su map grid utilizza una mappa di costo locale: per ogni
ciclo di controllo viene creata una mappa locale attorno alla zona in cui si trova
il robot. Ogni «cella» della mappa viene mappata con un valore che rappresenta
il costo della cella stessa (calcolato in base alla presenza o meno di un ostacolo,
ed anche in base alla distanza dal punto target da raggiungere). L’obbiettivo
globale di questo algoritmo è quello di riuscire a trovare un percorso, in grado
di evitare gli ostacoli, che sia a minimo costo totale.
forte quanto più il veicolo si trova in vicinanza degli ostacoli. Si possono quindi
ottenere diversi tipi di campi potenziali:
Questi campi potenziali possono essere tra di loro combinati, ottenendo un «per-
corso guidato dai campi» dal punto in cui si trova attualmente il robot ed il punto
target. I vantaggi del metodo dei campi potenziali sono:
• Facile da visualizzare.
Il metodo dei campi potenziali, però, presenta anche dei problemi. Infatti in
alcuni punti il robot potrebbe sentirsi sottoposto ad un campo nullo (a causa di
due campi uguali ed opposti) e quindi non sapere più dove muoversi. Inoltre il
movimento del robot potrebbe non essere fluido.
Capitolo 8
2D Map Building
Un robot deve potersi muovere in un certo ambiente in cui è inserito e, per fare
questo, può avere la necessità di costruirsi delle mappe. Diversi tipi di mappe
sono:
• Mappe Geometriche: sono mappe tipo planimetrie che per essere rea-
lizzate richiede che il robot sia dotato di sensori precisi (telimetro laser).
45
• Sono approssimati.
e = x · cos(θ) + y · sin(θ) − r
• Soglia di distanza tra due punti troppo elevata: Due punti che non
appartengono allo stesso segmento nella realtà (ad esempio perché tra di
loro vi è una apertura) vengono visti come su di un unico segmento.
• Soglia di distanza tra due punti troppo bassa: Due punti che ap-
partengono allo stesso segmento nella realtà (ad esempio su di un angolo
tra due pareti) vengono visti come separati da un’apertura.
Inizialmente la mappa risulta tutta grigia e poi, con le varie misurazioni del
robot, viene colorata. Tramite le celle è possibile ricavare la posizione del robot.
p(z|mx,y )
Dalla Figura 8.9 si può notare che all’aumentare della distanza diminuisce la
probabilità che una cella sia libera (nel caso non venga rilevato nessun ostacolo).
Invece nel caso in cui venga rilevato un ostacolo ad una certa distanza, la cella
con la probabilità di rilevare un ostacolo più elevata sarà quella frontale. In
particolare, supponendo di lavorare su di una mappa di occupazione, il modello
probabilistico del cono sarà come quello rappresentato in figura 8.10.
Oltre alla possibilità di indicare occ e free nella griglia di occupazione, è possibile
anche rappresentare esplicitamente l’informazione «ancora ignoto» con la parola
chiave Unk (unknown). Il problema dell’inserimento della terza voce Unk sta
nel fatto che bisogna trovare un modo efficiente per rappresentare in codifica
binaria questo terzo simbolo. Alcune soluzioni possono essere:
• Utilizzare sempre una codifica a 2 bit per ogni simbolo utilizzando questa
volta la codifica 11 per indicare valori misti nel nodo padre (ovvero c’è
almeno un figlio diverso dagli altri):
Una volta che il robot si trova nelle vicinanze di un luogo distintivo, applica
l’Hill-climbing per trovare una massimo locale considerando ad esempio la ca-
ratteristica geometrica citata. Si noti quindi che non è necessario che un luogo
sia globalmente distintivo ma è necessario che si distingua dai punti vicini.
I percorsi che collegano luoghi distinti sono definiti in termini di strategie di
controllo locali (LCS). Il robot applica tali strategie per spostarsi e mentre
Capitolo 9
Robot Localization
9.1 Introduzione
L’utilizzo di una localizzazione basata sulle mappe note al robot sfrutta un
approccio probabilistico basato sulle informazioni sensoriali ricavate dal robot.
Quando il robot si muove può sfruttare una:
• Localizzazione assoluta.
• Localizzazione relativa.
57
st = See(it , s′t )
• Matrice di covarianza
P che descrive l’incertezza sulla posizione del robot
all’istante k p (k|k).
9.4.2 2. Osservazione
Il secondo passo è quello che permette di ottenere l’osservazione Z(k + 1) ri-
guardante le misure effettuate dal robot. Queste misure sono generalmente
un insieme di osservazioni estratte da diversi sensori, tipicamente informazioni
grezze che poi vengono elaborate per estrarne delle linee o delle features.
b + 1) = {b
Z(k zi (k + 1)|(1 ≤ i ≤ ni )}
.
S = {si |i = 1...N }
dove ogni si è nella forma << x, y, θ >, p > e:
• < x; y; θ > rappresenta la posizione del robot.
P
• p rappresenta il «peso», e pi = 1
La stima della posizione fatta dal robot può essere fatta con Monte Carlo,
utilizzando due diversi modelli:
• Robot Motion Model: quando il robot si muove, con Monte Carlo
vengono generati N nuovi campioni che approssimano la posizione l del
robot dopo il comando di movimento a. Ogni campione viene generato
in modo randomico utilizzando il precedente set di campioni, il comando
di movimento e tenendo conto, per ciascuno, del suo peso p. Quindi il
modello del robot è modellabile con la probabilità P (l|l′ , a) dove l′ è la
posizione precedente.
• Robot Sensing Model: Viene ri-pesato il set dei campioni in base alla
verosimiglianza con i dati forniti attualmente dai sensori.
Con la stima Monte Carlo il numero N dei campioni viene determinato durante
l’esecuzione, tramite comparazione delle informazioni possedute prima e dopo la
lettura dei sensori. Se queste informazioni sono molto distanti verrà utilizzato
un N elevato, altrimenti più ridotto.
• θv
• θ 1 = θ v + b1
• θ 2 = θ v + b2
Le incognite che devono essere calcolate sono le coordinate (x; y) in cui il robot
si trova. Le equazioni vincoli a cui siamo sottoposti sono le due seguenti:
(
y1 −y
tanθ1 = sinθ
cosθ1 = x1 −x
1
y2 −y
tanθ2 = sinθ
cosθ2 = x2 −x
2
Le quali hanno sempre una soluzione a parte nel caso in cui le rette siano
parallele (−s1 c2 + s2 c1 = 0). La massima precisione di un metodo come questo
si ottiene quando i due marcatori vengono visti a 90◦ . Se, invece questi sono
quasi paralleli, o vengono visti da lontano, l’ imprecisione è abbastanza alta.
• r1
• r2
Le incognite che devono essere calcolate sono le coordinate (x; y) in cui il robot
si trova. Le equazioni che determinano i due raggi sono le seguenti:
( p
r1 = (x − x1 )2 + (y − y1 )2
p
r2 = (x − x2 )2 + (y − y2 )2
L’area di incertezza è quindi data dall’area di intersezione dei due cerchi. Nel
caso invece ci fosse solo un marcatore l’area in cui il robot si può trovarsi è pari
all’intera area dell’unico cerchio generato.
Capitolo 10
SLAM - Simultaneous
Localization And Mapping
10.1 Introduzione
Il problema dello SLAM riguarda un robot che viene acceso in una posizione
ignota in un ambiente ignoto e che, quindi, deve incrementare la sua conoscenza
costruendo una mappa dell’ambiente stesso, mentre la utilizza anche per orien-
tarsi. Risolvere il problema dello SLAM significa rendere il robot veramente
autonomo. I primi tentativi di approccio a questo problema si sono basati sul-
la descrizione geometrica delle incertezze e sui tentativi di disaccoppiare il più
possibile il problema della costruzione della mappa da quello di localizzazione.
65
m = {m1 , m2 , ..., mM }
Dati quindi la pozione dei marcatori e le distanze dai marcatori stessi si può
stimare la posizioine del robot.
• Suppone che l’errore dello stato da calcolare sia unimodale (ha un solo
valore che si ripete alla frequenza massima - moda) con media nulla.
• Suppone che l’errore delle misure fatte dai sensori sia unimodale con media
nulla.
10.6.1 Modelli
I modelli devono essere costruiti in modo di tenere conto delle varie incertezze
che possono affliggere le misure e le stime. I modelli utilizzati sono:
10.7 EFK
Tramite le considerazioni fatte quindi il filtro di kalman esteso permette di
aggiornare lo stato del robot e la sua incertezza dato il modello del veicolo
composto da:
• Posizione: xv (k) = [x(k), y(k), φ(k)]T
• Input di controllo (Twist): u(k) = [ω(k), γ(k)]T
Capitolo 11
Motion Planning 2D
11.1 Introduzione
Con motion planning si intende il determinare dove il robot (visto come un
corpo rigido) deve andare, senza che durante il suo spostamento si scontri con
degli ostacoli (visti come oggetti statici). Gli input dell’algoritmo di motion
planning sono:
• La geometria del robot e degli ostacoli.
• La cinematica del robot (ad esempio quanti gradi di libertà ha).
• La configurazione iniziale e quella finale che deve assumere il robot.
L’algoritmo deve fornire in output una sequenza continua di configurazioni in
cui il robot si deve trovare per raggiungere la configurazione finale senza avere
collisioni.
71
Per un robot che può solamente traslare nel piano lo spazio di configurazioni è
2D:
Cspace : (x, y)
mentre per un robot che può traslare e ruotare lo spazio di configurazioni è 3D:
Cspace : (x, y, θ)
Il vantaggio è che questo algoritmo risulta semplice e poco costoso dal punto di
vista computazionale ma è troppo conservativo.
Dal punto di vista pratico un motion planner ritorna sempre un piano risolutivo
del problema, quando esiste, oppure indica che il piano di path planning non
esiste. In ogni caso, la maggior parte dei problemi di path planning hanno
una crescita esponenziale del tempo in base al numero di gradi di libertà o al
numero degli oggetti che occupano lo spazio. Gli algoritmi teorici si sforzano
per avere una massima completezza ed una minima complessità, specialmente
nel caso peggiore. Per questo motivo sono molto difficili da implementare e poco
robusti. Invece, gli algoritmi euristici cercano di avere la massima efficienza nelle
situazioni più comuni, senza però avere garanzia di performance (mancanza di
completezza, assunzioni semplificative e utilizzo di algoritmi esponenziali).
Questo approccio richiede meno memoria ma alcune celle potrebbe risultare par-
zialmente occupate (quindi vengono considerate totalmente occupate) e questo
potrebbe portare il robot ad essere incapace di raggiungere l’obiettivo anche se
in realtà un percorso c’è.
Capitolo 12
Roadmap probabilistiche
12.1 Introduzione
Quando, nel capitolo precedente, abbiamo introdotto il motion-planning, abbia-
mo anche definito come fosse possibile suddividere il problema in tre parti:
• Rappresentazione continua.
• Discretizzazione.
• Ricerca su grafo.
79
Dal punto di vista computazionale risulta oneroso individuare gli ostacoli (do-
vrei generare molte configurazioni e questo comporta un aumento del tempo di
calcolo). E’ possibile però controllare le configurazioni campionate e le connesio-
ni tra i campioni in modo efficiente controllando solo un numero relativamente
piccolo di milestone in quanto i percorsi locali sono sufficienti per trovare una
connessione nello spazio libero. In questo metodo «generico» di discretizzazione
individuiamo:
4. Se c1 ∈ Cf ree and c2 ∈
/ Cf ree , aggiunge c1 al grafo.
5. Se c1 ∈
/ Cf ree and c2 ∈ Cf ree , aggiunge c2 al grafo.
La scelta viene spesso dettata dallo specifico problema. In generale questo tipo
di campionamento risulta molto più efficiente di un campionamento classico
casuale.
fatta a monte, che non può quasi mai (allo stato attuale della conoscenza) essere
fatta in modo indipendente dal robot.
• Planning diretto:
– Costruisce un albero di milestones fino a che non è abbastanza vicino
all’obiettivo.
Non richiede che il robot sia controllabile e risulta più efficiente in spazi
ad alte dimensioni.
In entrambe le tecniche ogni volta che si genera una nuova configurazione bisogna
sempre verificare che questa nuova configurazione «target» per lo spostamento
corrente sia libera da ostacoli. Inoltre, dato che con le configurazioni generia-
mo anche dei parametri di controllo, bisogna tener conto non solo dei vincoli
cinematici ma anche dei vincoli dinamici:
• Accelerazione del robot massima.
• Coppia massima erogabile dai motori.
• ...
Capitolo 13
13.1 Introduzione
Un robot è una struttura meccanica articolata che si muove nello spazio. Biso-
gna però capire come esso si muove e rispetto a cosa si muove, oltre che sapere
dove sono e come sono composti altri elementi che si trovano nello spazio di
lavoro del robot. La posizione di un robot può essere data in modo assoluto, ri-
spetto ad un sistema di riferimento comune con altri oggetti, o in modo relativo,
ovvero si fornisce la posizione del robot relativamente al sistema di riferimento
dell’ambiente, e quella di tutti gli altri oggetti al sistema di riferimento proprio
del robot.
13.2 Traslazione
La traslazione è un movimento lungo uno o più assi. Supponiamo di avere un
sistema di riferimento e di conoscere le coordinate di un punto in questo sistema
di riferimento. Possiamo voler traslare il tutto, rispetto ad un altro sistema di
riferimento. Questa è la tipica situazione che si deve affrontare quando si ha
una telecamera e, quindi si vuole sapere dove si trova l’oggetto vero e proprio,
partendo da dove è posizionata la telecamera e da dove risulta l’oggetto per la
telecamera.
89
Q0 = T10 + Q1
o invertendo:
Q1 = T01 + Q0
con T01 = −T10
13.3 Rotazione
La rotazione è un movimento attorno ad uno o più assi. In questo capitolo la
rotazione viene definita in modo antiorario mentre la rotazione inversa in modo
orario.
13.3. ROTAZIONE 91
Q0 = R10 · Q1
o invertendo:
Q1 = R01 · Q0
Qx = ρsin(θ + ϕ) = ρsinθcosϕ + ρcosθsinϕ = Px cosϕ + Pz sinϕ
Q = ρcos(θ + ϕ) = ρcosθcosϕ − ρsinθsinϕ = −P sinϕ + P cosϕ
z x z
p
ρ = Q 2 + Q2
x z
α=θ+ϕ
13.3. ROTAZIONE 93
P = R · P′
La matrice di rotazione R gode della proprietà di ortogonalità, ovvero la matrice
di rotazione inversa è uguale alla sua trasposta. E’ possibile quindi ottenere
le coordinate del punto P ′ partendo da quelle del punto P , con la seguente
relazione:
P ′ = (R)−1 · P = RT · P
Il calcolo della matrice trasposta è molto più veloce di quella inversa, quindi si
tende a fare quella. Le rotazioni dirette attorno ai tre assi sono rappresentate
dalle seguenti matrici:
cosϕ −sinϕ 0 cosϕ 0 sinϕ
R(z) = sinϕ cosϕ 0 R(y) = 0 1 0
0 0 1 −sinϕ 0 cosϕ
1 0 0
R(x) = 0 cosϕ −sinϕ
0 sinϕ cosϕ
in cui rispetto alle matrici a due dimensioni è stata aggiunta un ulteriore di-
mensione che permette di far rimanere inalterate le coordinate del punto appar-
tenente all’asse attorno a cui si ruota. Ad esempio la rotazione attorno all’asse
y a tre dimensioni risulta:
Qx cosϕ 0 sinϕ Px Px cosϕ + Pz sinϕ
Qy = 0 1 0 · Py = Py
Qz −sinϕ 0 cosϕ Pz −Px sinϕ + Pz cosϕ
Da queste matrici, è possibile ottenere le matrici per le rotazioni inverse, sem-
plicemente facendo la trasposta:
cosϕ sinϕ 0 cosϕ 0 −sinϕ
RT (z) = −sinϕ cosϕ 0 RT (y) = 0 1 0
0 0 1 sinϕ 0 cosϕ
1 0 0
RT (x) = 0 cosϕ sinϕ
0 −sinϕ cosϕ
13.3. ROTAZIONE 95
Complessivamente :
• Angoli di Tait-Bryan: (x − y − z, y − z − x, z − x − y, x − z − y, z −
y − x, y − x − z)
Si può notare che gli angoli di Tait-Bryan ruotano intorno a tutti i 3 assi della
terna rispetto agli angoli di Eulero propri. I due gruppi possono essere chiamati
con il nome generale di angoli di Eulero.
RRP Y = Rz Ry Rx
cosϕcosθcosψ − sinϕsinψ −cosϕcosθsinψ − sinϕcosψ cosϕsinθ
R10 = sinϕcosθcosψ + cosϕsinψ −sinϕcosθsinψ + cosϕcosψ sinϕsinθ
−sinθcosψ sinθsinψ cosθ
per θ = 0 risulta:
cosϕcosψ − sinϕsinψ −cosϕsinψ − sinϕcosψ 0
R10 = sinϕcosψ + cosϕsinψ −sinϕsinψ + cosϕcosψ 0
0 0 1
Quindi per qualsiasi valore si assegna ad α e ϕ l’asse di rotazione rimane sempre
lo stesso (asse z), quindi con due angoli riesco a ruotare attorno ad un solo asse
perdendo cosi un grado di libertà. In altre parole si possono avere due terne
che portano allo stesso orientamento (90◦ , 0◦ , 0◦ ) e (0◦ , 0◦ , 90◦ ) di conseguenza
dalle coordinate dei punti non è possibile sapere con certezza le rotazioni che
sono state effettuate (ambiguità nel problema inverso).
13.4 Rototraslazione
E’ possibile combinare le trasformazioni di traslazione e di rotazione, ovvero
traslare un punto e ruotarne il sistema di riferimento. L’operazione di ro-
totraslazione può essere ottenuta tramite composizione delle due operazioni
con:
• Matrice di rotazione R.
• Vettore di traslazione T.
oppure tramite un’unica operazione:
qx1 qx0
qy1 T qy0
= R ·
qz1 0 1 qz0
1 1
13.4. ROTOTRASLAZIONE 97
Capitolo 14
14.1 Introduzione
Le immagini possono essere rappresentate come una matrice pxq dove ogni cella
(o pixel). Nelle immagini monocromatiche ogni cella corrisponde ad un bit che
vale 0 per il nero o 1 per il bianco. Nelle immagini in scala di grigio invece
ogni cella contiene un valore a 8 bit (0-255) che indica l’intensità del grigio. In
generale più il numero di bit è elevato più l’informazione riportata dall’immagine
è precisa.
Nelle immagini in formato RGB l’immagine è costituita da tre matrici, una per
ogni colore fondamentale.
14.2 Telecamera
Nelle telecamere digitali il sensore acquisisce solo una scala di grigi e i colori
vengono generati tramite filtri (Figura 14.2).
La scelta della telecamera dipende dal tipo di problema da risolvere. Esistono
infatti diverse telecamere distinguibili da alcuni parametri come:
99
• Risoluzione dell’immagine.
F OV = (Dp + Lv )(1 + Pa )
dove:
14.2.2 Risoluzione
Esistono diversi tipi di risoluzione:
F OV
Rs =
Ri
Rf = Rs · Fp
Normalmente vengono utilizzate delle lenti per focalizzare meglio i raggi e per
raccogliere più energia, in modo da formare immagini più luminose.
u = fz x v = fz y
Quindi le coordinate del punto immagine vengono legate alle coordinate del
punto reale tramite la distanza focale. Dall’immagine non è possibile ricavare la
distanza tra il punto reale e il piano immagine infatti tutti i punti appartenenti
alla stessa retta vengono proiettati sul piano immagine con le stesse coordinate
causando ambiguità.
k · m̃ = P̃ · M̃
dove con P̃ si rappresenta il modello geometrico della telecamera e viene det-
ta matrice di proiezione prospettica(PPM). Per rendere più realistico il
modello è necessario tenere conto della:
• Digitalizzazione dell’immagine.
14.3.3 Digitalizzazione
Un punto tridimensionale viene espresso nel piano immagine tramite un pixel
con una certa dimensione e non tramite un punto. E’ necessario quindi tene-
re in considerazione la risoluzione della telecamera inserendo nelle formule di
proiezione lo scaling lungo i due assi:
1 f
u= x
∆u z
1 f
u= y
∆v z
Dove ∆u e ∆v sono rispettivamente la dimensione orizzontale del pixel e la
dimensione verticale del pixel (caso generale di pixel rettangolari).
La matrice che modella le caratteristiche del sensore è detta matrice dei para-
metri intrinseci A cioè i parametri che rappresentano le caratteristiche della
lente che bisogna stimare nella fase di calibrazione.
Capitolo 15
107
Una tecnica di questo tipo può essere utilizzata, oltre che per la localizzazione
di un robot, anche per classificazioni di oggetti in un immagine. La appaerance-
based localization è una tecnica molto «resistente» alle deformazioni ma ha,
come principale limite, il fatto che richiede di costruire un vocabolario, ovvero
l’insieme delle codewords che non deve essere nè troppo ricco (pena l’over-fitting)
né troppo piccolo (pena la non rappresentatività). Per sfruttare al meglio le
informazioni disponibili si può osservare che molto spesso le codewords che si
possono individuare in un’immagine non sono indipendenti ma sono tra di loro
strettamente correlate.
15.3 OpenFabMap
OpenFabMap è una libreria in grado di implementare la appaerance-based loca-
lization. Questa libreria sfrutta la cosiddetta matrice di confusione, ovvero
una matrice che per ogni feature (o codeword) dice se essa è contenuta nel
dizionario.
Capitolo 16
16.1 Introduzione
In ambito visione artificiale l’elaborazione delle immagini può avvenire su 3
livelli:
16.2.1 Contrasto
Il contrasto è definito come:
Imax − Imin
Contrasto =
Imax + Imin
dove Imax e Imin sono rispettivamente intensità massima e minima. Più il
contrasto è alto e più sono rilevanti i dettagli dell’immagine. E’ una percezione
solo dell’occhio umano in quanto il quantitativo informativo non cambia.
111
16.2.3 Istogramma
L’ istogramma di un’immagine a livelli di grigio è un vettore con un numero di
elementi pari al numero dei livelli di grigio, dove il valore di ciascun elemento è
dato dal numero di pixel dell’immagine che assumono quello specifico livello di
grigio. L’istogramma fornisce informazioni utili per varie operazioni, tra cui il
miglioramento del contrasto e la binarizzazione tramite soglia. Inoltre poiché in
generale diversi oggetti hanno livelli di grigio diversi, l’istogramma fornisce un
primo semplicissimo metodo di classificazione.
16.3 Equalizzazione
L’equalizzazione dell’istogramma è l’elaborazione che idealmente produce un’im-
magine con istogramma uniformemente distribuito su tutti i livelli di grigio
aumentando i contrasti vicino ai massimi e diminuendoli vicino ai minimi.
4. Si mappano i livelli di grigio originali sui valori ottenuti al passo 3 con una
corrispondenza 1 a 1.
16.4.1 Rumore
Il rumore nelle immagini puo’ essere generato in qualsiasi punto della catena del
segnale:
• Rumore gaussiano (termico).
• Speckle noise (elettrico): il rumore e’ proporzionale (correlato) all’im-
magine “sottostante”.
• Rumore “salt&pepper”: pixel “difettosi” nella camera, transienti ano-
mali.
16.4.2 Convoluzione
La convoluzione è un’operazione con cui, presa una limitata matrice di pixel,
la moltiplica, cella per cella, per una matrice kernel. Il risultato ottenuto viene
poi assegnato al pixel centrale della matrice.
In base a come viene costruita la matrice kernel si possono ottenere diverse tipi
di convoluzione:
• Filtro Mediano: sostituisce ogni pixel al valore mediano dei pixel nel-
l’intorno. L’effetto è quello di forzare i pixel ad assumere un valore uguale
a quello di uno dei pixel circostanti, eliminando evetuali spike isolati, cioè
la forma con cui di solito si manifesta il rumore.
Un’immagine può essere rapresentata come una superficie con altezza corrispon-
dente al valore di livello di grigio dove la funzione di luminosità dipende dalle
coordinate nel piano:
I bordi cosi possono essere rilevati nei pixel in cui la luminosità cambia im-
provvisamente. Con questa struttura possiamo descrivere i cambiamenti della
funzione z usando le derivate. Più precisamente, dato che z dipende da due
coordinate, gli operatori che descrivono i bordi vengono espressi utilizzando le
derivate parziali. Possiamo cosi definire il il gradiente di un immagine:
df df
∇f = ,
dx dy
che indica la direzione in cui l’intesità cresce pù rapidamente. La direzione del
gradiente viene definita come:
df df
θ = tan−1 ,
dx dy
mentre la grandezza del gradiente definisce la «forza» del bordo:
s 2 2
df df
||∇f || = +
dx dy
y =m·x+b
Ogni coppia (m, b) quindi definisce una differente linea retta contenente il punto
(x, y). Ogni punto del piano immagine (x, y) viene mappato attraverso una linea
retta (m, b) nello spazio dei parametri mentre ogni linea retta nel piano imma-
gine viene mappata tramite il punto di intersezione delle linee coorrispondenti
ai suoi punti, nello spazio dei parametri.
Quindi una linea formata da M pixel nello spazio delle immagini verrà mappata
come un punto di intersezione di M linee nello spazio dei parametri dove ogni
linea corrisponde ad un pixel nello spazio delle immagini. Il numero di linee
che si intersecano in un singolo punto nello spazio dei parametri rappresenta
la lunghezza della linea originale nello spazio immagine. Una volta eseguita
questa mappatura si divide lo spazio dei parametri in celle. Ogni cella è definita
dalle coordinate (m, b) e contiene il numero di pixel che nello spazio immagine
appartengono alla retta descritta dai coefficienti (m.b).
r = x · cos(θ) + y · sin(θ)
x = r · cos0 + r · sin0 = r
.
L’Hough transform infatti usa le coordinate polari mappando quindi ogni punto
nel piano immagine con una sinusoide nello spazio dei parametri (r, θ). Le
sinusoidi dei punti che appartengono ad una stessa retta nello spazio (x, y) si
intersecano in un punto comune nello spazio (r, θ).
Anche in questo caso lo spazio dei parametri è suddiviso in celle con coordinate
(r, θ). La cella contenente il valore più alto fornisce i parametri (r, θ) della retta
individuata nell’immagine originale. Il numero di celle considerate, fornirà il
numero di rette che verranno disegnate.
Capitolo 17
Line Following
17.1 Introduzione
Uno scenario tipico in cui si ha un line following è l’implementazione di vei-
coli con guida autonoma, che devono rimanere all’interno della loro corsia e
quindi devono continuare a seguire e strisce. In una situazione di questo tipo,
generalmente, si ha una telecamera che acquisisce le immagini che verranno poi
elaborate da un task indipendente in modo da capire quale traiettoria coprire
per seguire la linea.
121
La legge di controllo dovrà definire delle operazioni da compiere, in ogni caso, per
cercare di portarsi nella posizione g. Per far ciò il robot dispone di due controllori
usati singolarmente: il controllore di riga e di colonna. Considerando ancora la
Figura 17.2, nel caso partissimo dalla situazione "a", il controllore di riga dovrà
essere usato per guidare il cerchio rosso affinchè si porti nella situazioine "b". A
questo punto il controllore usato è quello di colonna per portare il cerchio rosso
verso la configurazione "e", e cosi via.
Capitolo 18
Mapping 3D
18.1 Introduzione
Le mappe 3D possono assumere forme diverse a seconda di come esse vengono
costruite:
• Nuvola di punti: è un insieme di vertici posti in un sistema di riferi-
mento tridimensionale. Ogni punto, quindi, è espresso con tre coordinate
(x, y, z) e l’insieme di questi punti rappresenta un sottoinsieme dei punti
appartenenti alla superficie di un oggetto. Spesso, oltre all’informazione
sulla posizione, può essere memorizzata anche l’informazione sul colore o
sul livello del grigio.
• Mappa di elevazione: viene rappresentata la distribuzione delle quote
dell’immagine.
• Mappa di superficie multilivello: rappresenta strutture verticali del-
l’immagine su più livelli.
• Mappa di occupazione: insieme di punti che rappresentano la presenza
di uno stacolo.
123
18.2 Scanner 3D
Uno Scanner 3D acquisisce informazioni relative alla distanza degli oggetti pre-
senti nel suo campo visivo. Per ogni punto rilevato fornisce informazioni in
coordinate sferiche che possono essere convertite in coordinate cartesiane:
p
2 2 2
r = x + y + z x = r · sin(θ)cos(ϕ)
θ = arcos zr → y = r · sin(θ)sin(ϕ)
y
ϕ = arctan x z = r · cos(θ)
• Pattern 1D: La linea che viene proiettata si deforma in base alla su-
perficie dell’oggetto. Attraverso la linea distorta ripresa dalla camera è
possibile triangolare e calcolare la posizione dei punti.
Questo tipo di sensori sono molto più veloci di quelli basati su triangolazione
di un punto e possono acquisire informazioni su oggetti in moto ma hanno un
costo superiore.
Per ogni punto x in un’immagine (proiezione del punto x ∈ R) esiste una linea
corrispondente I ′ nell’altra immagine.
18.4.1 OctTree
L’algoritmo OctTree, per la compressione dati suddivide ricorsivamente un cubo:
• Lo spazio viene diviso in 8 celle, ognuna delle quali conterrà una parte dei
punti.
• Se tutti i punti contenuti nella cella non soddisfano un determinato criterio
di similitudine (ad esempio il colore: se tutti i punti di una cella hanno
colore simile, allora possono essere sostituiti da un solo punto posto al
centro della cella e con un colore pari alla media degli altri), la cella viene
divisa ulteriormente in altre 8 celle.
• Si procede iterando i due passi precedenti fino a che in tutte le celle il
criterio di similitudine è rispettato oppure fino a che si raggiunge una
profondità massima.
Gli OctTree possono essere costruiti tramite la libreria OctoMap che ha come
vantaggi:
• Geometria.
• Materiali.
• Effetti.
• Proprietà Fisiche.
• Animazioni.
• Regole Cinematiche.
Capitolo 19
SLAM monoculare
19.1 Introduzione
Abbiamo visto nel capitolo 10 come la necessità principale per il problema dello
SLAM sia quella di ricostruire una mappa e trovare la localizzazione del robot,
immerso in un ambiente ignoto. Nello SLAM Monoculare si cerca di utilizzare
una sola telecamera (ovvero un sensore non 3D) per costruire una immagine 3D.
Per fare questo, la telecamera scatta due immagini in due posizioni e momenti
diversi, simulando un sistema stereoscopico, componendo poi le due immagini
in base alle posizioni relative dei due punti di scatto.
131
• Spigoli.
• Angoli.
• Ha una convergenza che dipende dalla qualità della stima della trasforma-
zione.
• Angolo di visione.
• Otturatore:
Capitolo 20
20.1 Introduzione
Il sistema di controllo di un robot consiste in un insieme di attività di navigazio-
ne e manipolazione che interagiscono, ovvero compentono per ottenere risorse
computazionali collaborando per lo stesso obbiettivo. Queste iterazioni dipen-
dono dalla specifica architettura di controllo. In genere l’utente specifica la
missione del robot tramite un linguaggio ad alto livello che definisce le attività
da eseguire. Il robot decompone la missione in sotto-attività in modo iterativo
fino a farle diventare semplici azioni di navigazione e manipolazione, che per-
mette al robot di eseguire le attività specificate dall’utente in modo sequenziale
o concorrente. Ad esempio supponiamo di fornire al robot la missione di conse-
gnare dei medicinali ad un dato paziente in un ospedale. Il robot può scomporre
la missione nelle seguenti attività:
3. Pianificare un percorso dalla posizione attuale fino alla stanza del paziente.
135
dalla complessità. Per far ciò richiede che il suo comportamento sia pre-
impostato, oppure imparato dal passato. Questo tipo di soluzione presenta
una flessibilità limitata all’aumentare della complessità.
• Capacità di previsione.
• Può essere migliore dei sistemi reattivi per far fronte a nuovi problemi.
Uno dei paradigmi più influenti del controllo reattivo è il Rodney Brooks
Subsumption Architecture il quale definisce il comportamento tramite una
rete di moduli ognuno dei quali compie una precisa attività e può interfacciarsi
con gli altri moduli. Inoltre i moduli vengono suddivisi per strati, dove ogni
strato deve riflettere l’intelligenza e la compentenza di un modulo:
• Strati inferiori: devono incapsulare le funzioni di soppravvivenza di base.
• Strati superiori: devono svolgere azioni più mirate (es. mappatura) e
possono sovrascrivere o sopprimere l’output fornito dai livelli inferiori.
Inoltre dato che i moduli devono operare in modo simultaneo, è previsto un
meccanismo per gestire i conflitti dove il vincitore (strato più alto) prende tutte
le risorse.
Ad esempio, il controllo reattivo può essere utilizzato per sistemi che implemen-
tano l’obstacle avoidance, in cui non viene data una rappresentazione del mondo
ma le informazioni sono ottenute direttamente dall’ambiente. I moduli interni
potrebbero essere 3:
• Per il rilevameto dell’ostacolo se troppo vicino.
• Per acquisire i dati dai sensori.
• Per fornire la direzione verso la quale muoversi.
i quali inviano informazioni a 2 attuatori:
• Per fornire l’output al motore per far muovere il robot.
• Per fermare e riavviare il movimento del robot.
Per questo tipo di controllo la maggiore sfida risulta essere quella di progettare
il layer intermedio in quanto i livelli reattivo e deliberativo operano su scale
temporali e rappresentazioni molto diverse, oltre al fatto che devono essere in
grado di operare contemporaneamente.
Capitolo 21
Pianificazione automatica
21.1 Introduzione
Con pianificazione si intende il processo di individuazione delle attività richieste
per creare un obbiettivo desiderato. In termini più concreti la pianificazione è
un approccio flessibile per prendere decisioni complesse. Per flessibile si intende
che il problema è descritto nel sistema di pianificazione in un qualche linguaggio
generico, che un buona soluzione può essere trovata in modo automatico e che
se il problema cambia l’unico cambiamento da apportare è relativo alla sua de-
scrizione. Un esempio semplice di pianificazione può essere quello di acquistare
un litro di latte. Questo obbiettivo è suddivisibile in altri sotto-obbiettivi:
• Recuperare il portafoglio.
• Uscire di casa.
• Avviare la macchina.
• ...
141
dove:
• γ = funzione stati-transizioni.
h:S→O
– adiacente(l, l′ )
– occupato(l)
– ...
– Gli atomi rappresentano gli aspetti che sono veri in uno dei possibili
stati del sistema Σ.
– Può esserci un numero grande a piacere (ma finito) di atomi ground,
quindi il sistema avrà un numero finito di stati.
Questo modo di agire è tipico delle reti gerarchiche di task. Esse possono essere
usate per pianificare in un dominio specifico (es. robotica) o per un dominio
configurabile.
• Stati ed operatori: sono uguali, sia per concetto rappresentato che per
notazione, a quelli del planning classico, dove ogni operatore corrisponde
ad uno stato di transizione deterministico.
• Metodi totalmente ordinati: sono insiemi di 4 valori m = (name(m), task(m), precond(m), subtasks(m))
in cui:
X
Pa (s′ |s) = 1
s′ ∈S
Per ogni stato ci sarà una probabilità P (s) di essere lo stato iniziale.
Possiamo assumere che vi sia un unico stato iniziale s0 ovvero poniamo
P (s0 ) = 1 e P (s) = 0, ∀s 6= s0 .
Questi sistemi possono essere rappresentati come un grafo e quindi risolti come
problemi di ottimizzazione.
Definiamo policy una funzione che mappa gli stati nelle azioni. Una policy
viene definita come
h = (s1 , s2 , ...)
21.8.2 Aggiunte
Agli stati ed alle azioni si possono associare alcuni valori:
h = (s0 , s1 , ...)
X
V (h|π) = (R(si ) − C(si , π(si )))
i≥0
X
V (h|π) = γ i (R(si ) − C(si , π(si )))
i≥0
X
E(π) = P (h|π) · V (h|π)
h
• Consideriamo i costi al posto che le utility, negando quello che avevo prima.
Questo rende le equazioni un po’ più semplici, nonostante possano essere fa-
cilmente generalizzate nel caso in cui le ricompense siano diverse da 0. I costi
scontati della storia h sono:
E(π) = Σh P (h|π)C(h|π)
Una policy π è ottimale se per ogni π’ si ha
E(π) ≤ E(π ′ )
Una policy π è ovunque ottimale se per ogni s ed ogni π’ si ha
Capitolo 22
22.1 Introduzione
Un robot industriale è un manipolatore multifunzionale riprogrammabile, co-
mandato automaticamente. Robot di questo tipo sono pensati per essere fissi a
terra e per lavorare in spazi di lavoro recintati. Un robot industriale è composto
da:
153
• Giunti di rotazione: sono giunti che, nella loro versione standard hanno
un solo grado di libertà.
• Paralleli: hanno i due attacchi dei giunti con degli assi che sono paralleli
tra di loro.
• Ortogonali: hanno i due attacchi dei giunti con degli assi che sono
ortogonali tra di loro.
gdl = 3 · (N − 1) − 2 · J1 − J2
Dove nel conteggio vengono rimossi i 3 gradi di libertà della terra tramite il
−1. Quindi per ottenere un robot manipolatore in grado di raggiungere i punti
in uno spazio a tre dimensioni sono necessari almeno 3 gradi di libertà. Per
raggiungere un punto con qualsiasi orientamento sono necessari ulteriori 3 gradi
di libertà.
Generalmente è più semplice costruire robot ripetibili piuttosto che robot accu-
rati.
Per payload si intende tutto quello che viene attaccato al polso del robot, va
quindi considerato anche il peso della mano.
Capitolo 23
Programmazione KR16
• E’ economico.
161
• Spesso costosa.
• Sistema di coordinate specifico per asse: ogni asse del robot può
essere spostato singolarmente in direzione positiva o negativa dell’asse.
Ciò avviene tramite i tasti di spostamento oppure tramite lo space-mouse,
con cui si possono spostare contemporaneamente 3 o 6 assi.
23.3 Movimenti
I movimenti permettono di raggiungere un punto finale, seguendo traiettorie
diverse. I movimenti possibili sono:
Capitolo 24
24.1 Introduzione
Generalmente, nello studio dei robot manipolatori non ci si occupa di studiare
le forze che causano il movimento ma si guardano solo le posizioni e la velocità
dei motori. Parlando di cinematica dei robot si distinguono due tipologie:
• Cinematica diretta: dalle posizioni dei vari giunti si vuole arrivare alla
posizione dell’utensile.
• Cinematica inversa: si conosce la posizione in cui si vuole mandare
l’utensile, quindi si cercano i valori delle posizioni dei vari giunti
In entrambi i valori reali dei giunti vengono forniti al robot tramite sensori.
167
Nei casi in cui si hanno più soluzioni viene scelta quella più adatta (non tutte
le soluzioni sono ammissibili). Per calcolare θ1 non si hanno ambiguità, infatti
guardado la Figura 24.3 si può notare che in tutte e due le configurazioni assume
lo stesso valore. Quindi si può procedere nel seguente modo:
y
l2 · sin(θ2 )
θ1 = (α + θ1 ) − α = arctan − arctan
x l1 + l2 · cos(θ2 )
Non sempre le equazioni della cinematica inversa sono lineari e quindi è possi-
bile determinare direttamente i valori dei giunti. Ciò comporta la necessità di
utilizzare tecniche numeriche che richiedono più tempo computazionale per il
calcolo dei giunti.
• Rotazione Rz di angolo θi (Q
P H).
• Traslazione Tz di lunghezza di (P
i H).
i−1
La matrice i risulta quindi essere fatta nel seguente modo:
H
1 0 0 0 1 0 0 ai−1
0 cos(αi−1 ) −sin(αi−1 ) 0 0 1 0 0
i−1
H=
0 sin(αi−1 ) cos(αi−1 ) 0 · 0 0 1
·
i 0
0 0 0 1 0 0 0 1
cos(θi ) −sin(θi ) 0 0 1 0 0 0
sin(θi ) cos(θi ) 0 0 0 1 0 0
·
0
·
0 1 0 0 0 1 d i
0 0 0 1 0 0 0 1
cos(θi ) −sin(θi ) 0 ai−1
sin(θi ) · cos(αi−1 ) cos(θi ) · cos(αi−1 ) −sin(αi−1 ) −sin(αi−1 ) · di
=
sin(θi ) · sin(αi−1 ) cos(θi ) · sin(αi−1 ) cos(αi−1 ) cos(αi−1 ) · di
0 0 0 1
0
HN =01 H ·12 H · ...N
N −1
H
Questo metodo permette quindi, a partire dai valori dei giunti, di calcolare la
posizione e orientamento dell’end effector (cinematica diretta).
H60 = H(θ1 , θ2 , θ3 , θ4 , θ5 , θ6 )
rappresenta la posizione e l’orientamento dell’end-effector. Per esprimere le
coordinate del punto P6 , espresse nel sistema di riferimento dell’end-effector,
rispetto al sistema fisso si può utilizzare la seguente formula:
P0 = H · P6
24.4 Esempi
Gli esempi riportati in seguito utilizzano una convenzione di Denavit-Hartenberg
diversa da quella illustrata e quindi le matrici di rototraslazione dei link avranno
una forma diversa. In particolare esistono 2 tipi di convenzioni. Per maggiori
informazioni e per visionare la struttura della matrice utilizzata negli esempi vi-
sitare: https://en.wikipedia.org/wiki/Denavit-Hartenberg_parameters
Consideriamo i due link planari di Figura 24.6 con gli assi dei giunti z0 e z1
normali al foglio e stabiliamo il sistema fisso (x0 , y0 , z0 ) che ha origini nell’in-
tersezione tra l’asse z0 e il foglio, come mostrato. Una volta stabilito il sistema
di origine il sistema (x1 , y1 , z1 ) è fissato dalla convenzione D-H, dove l’origine
viene localizzata dall’intersezione tra l’asse z1 e il foglio. Il sistema di riferimen-
to finale (x2 , y2 , z2 ) è fissato all’origine O2 alla fine della link 2. I parametri in
gioco sono quindi i seguenti:
Link ai αi di θi
1 a1 0 0 θ1
2 a2 0 0 θ2
24.4.2 Manipolatore RR
Il manipolatore RR (dove R sta per rotazione) presenta uno spazio di lavoro che
è la superficie interna di una sfera. I parametri in gioco sono i seguenti:
Link li αi di θi
1 0 90◦ d1 θ1
2 l2 0 0 θ2
H = H10 · H21 =
cos(θ1 ) 0 sin(θ1 ) 0 cos(θ2 ) −sin(θ2 ) 0 l2 · cos(θ2 )
sin(θ1 ) 0 −cos(θ1 ) 0 sin(θ2 ) cos(θ2 ) 0 l2 · sin(θ2 )
·
0 1 0 d1 0 0 1 0
0 0 0 1 0 0 0 1
24.4.3 Manipolatore RT
Link li αi di θi
1 0 90◦ d1 θ1
2 0 0 d2 0
24.4.4 Manipolatore TR
Link li αi di θi
1 0 90◦ d1 0
2 l2 0 0 θ2
1 0 0 0 cos(θ2 ) −sin(θ2 ) 0 l2 · cos(θ2 )
0 0 −1 0 sin(θ2 ) cos(θ2 ) 0 l2 · sin(θ2 )
H = H10 · H21 =
0
·
1 0 d1 0 0 1 0
0 0 0 1 0 0 0 1
24.4.5 Manipolatore TT
Link li αi di θi
1 l1 90◦ 0 0
2 l2 0 0 0
Link li αi di θi
1 l1 0 0 θ1
2 l2 π 0 θ2
3 0 0 d3 0
4 0 0 d4 θ4
Capitolo 25
Cinematica inversa
25.1 Introduzione
Data la matrice H delle rototraslazioni dei link, la posizione e l’orientamento
dell’end-effector, bisogna determinare i valori corrispondenti degli angoli dei
giunti θi o delle traslazioni nel caso i giunti traslino. Con questa operazione non
è garantita né l’esistenza ne l’unicità della soluzione cinematica inversa. Infatti
se il punto da raggiungere è nello spazio di lavoro e il robot ha 6 gradi di libertà
allora sappiamo che esiste una soluzione. Nel caso invece il punto è nello spazio
di lavoro ma il robot ha meno di 6 gradi di libertà, occorre verificare che il punto
sia raggiungibile. Determinare con sicurezza se un punto è o meno nello spazio
di lavoro del robot può non essere semplice.
– Metodi analitici.
– Metodi geometrici.
179
cos(θ1 + θ2 + θ3 ) −sin(θ1 + θ2 + θ3 ) 0 l1 · cos(θ1 ) + l2 · cos(θ1 + θ2 )
sin(θ 1 + θ2 + θ3 ) cos(θ1 + θ2 + θ3 ) 0 l1 · sin(θ1 ) + l2 · sin(θ1 + θ2 )
H30 =
0 0 1 0
0 0 0 1
cos(φ) −sin(φ) 0 x
sin(φ) cos(φ) 0 y
=
0
0 1 0
0 0 0 1
Si noti che la direzione z non viene considerata in quanto non c’è una variazione
di quota. Confrontando le due matrici si possono scrivere le seguenti equazioni:
x = l1 · cos(θ1 ) + l2 · cos(θ1 + θ2 )
y = l1 · sin(θ1 ) + l2 · sin(θ1 + θ2 )
φ = θ1 + θ2 + θ3
Si considerino ora le prime due equazioni:
(
x2 = l12 · cos2 (θ1 ) + l22 · cos2 (θ1 + θ2 ) + 2 · l1 · l2 · cos(θ1 ) · cos(θ1 + θ2 )
y 2 = l12 · sin2 (θ1 ) + l22 · sin2 (θ1 + θ2 ) + 2 · l1 · l2 · sin(θ1 ) · sin(θ1 + θ2 )
si ottiene:
x2 + y 2 − l12 − l22
cos(θ2 ) =
2 · l1 · l2
con il vincolo
2
x + y 2 − l12 − l22
≤1
2 · l1 · l2
x = l1 · cos(θ1 ) + l2 · cos(θ1 + θ2 ) =
= l1 · cos(θ1 ) + l2 (cos(θ1 ) · cos(θ2 ) − sin(θ1 ) · sin(θ2 )) =
= (l1 + l2 · cos(θ2 )) · cos(θ1 ) − l2 · sin(θ1 ) · sin(θ2 )
y = l1 · sin(θ1 ) + l2 · sin(θ1 + θ2 ) =
= l1 · sin(θ1 ) + l2 (sin(θ1 ) · cos(θ2 ) + cos(θ1 ) · sin(θ2 )) =
= l2 · cos(θ1 ) · sin(θ2 ) + (l1 + l2 · cos(θ2 )) · sin(θ1 )
In forma matriciale diventa:
x l + l2 · cos(θ2 ) −l2 · sin(θ2 ) cos(θ1 )
= 1 ·
y l2 · sin(θ2 ) l1 + l2 · cos(θ2 ) sin(θ1 )
Invertendo la matrice:
cos(θ1 )
=
sin(θ1 )
1 l + l2 · cos(θ2 ) l2 · sin(θ2 ) x
= · 1 ·
(l1 + l2 · cos(θ2 ))2 + l22 · sin2 (θ2 ) −l2 · sin(θ2 ) l1 + l2 · cos(θ2 ) y
Dal rapporto tra sin(θ1 ) e cos(θ2 ) si ottiene:
−l2 · sin(θ2 ) · x + (l1 + l2 · cos(θ2 )) · y
θ1 = arctan
(l1 + l2 · cos(θ2 )) · x + l2 · sin(θ2 ) · y
E quindi:
θ3 = φ − θ1 − θ2
d2 = x2 + y 2
mentre dal teorema di Carnot si ricava:
x2 + y 2 − l12 − l22
cos(θ2 ) =
2 · l1 · l2
l12 + d2 − l22
cos(β) =
2 · l1 · d
θ
u = tan
2
da cui:
(
1−u2
cos(θ) = 1+u2
2u
sin(θ) = 1+u2
pc = Pxyz − d6 · Rz
dove Pxyz è la quarta colonna di T , Rz è la terza colonna di T e d6 è la distanza
dal punto di lavoro al centro del polso. Successivamente si mette in relazione
pc con la matrice di rototraslazione e si risolvono i primi tre giunti:
Capitolo 26
Cinematica differenziale
26.1 Introduzione
La cinematica differenziale prende in considerazione le velocità dei movimenti.
Conoscendo la velocità dei giunti, con la cinematica differenziale si vuole cal-
colare la velocità dell’utensile. La soluzione di questo problema viene di solito
data sotto forma di una matrice, detta jacobiano del manipolatore.
26.2 Jacobiano
Supponiamo di avere un robot planare RR come in Figura 26.1.
187
∂H
J=
∂θ
Nel caso abbiamo che l’end-effector ha 6 gradi di libertà e il robot presenta 6
giunti possiamo scrivere:
ẋ θ˙1
ẏ
θ˙2
ż
=J · θ˙3
ψ̇
θ˙4
θ̇
θ˙5
ϕ̇ θ˙6
Da notare che nel caso l’end-effector avesse solo 5 gradi di libertà e il robot
presenti 6 giunti otteniamo:
θ˙1
ẋ θ˙
ẏ 2
˙
ż = J · θ3
˙
ψ̇ θ
˙4
θ5
θ̇
θ˙6
Quindi lo Jacobiano risulta una matrice rettangolare (5 × 6)
sin(δθ) = δθ
cos(δθ) = 1
2
δθ , δθ · δϕ, ... = 0
Normalmente, per calcolare la matrice H è fondamentale l’ordine con cui vengo-
no effettuate le moltiplicazioni. Se, però, vengono mantenute valide le appros-
simazioni riportate, allora è indifferente l’ordine di moltiplicazione delle varie
matrici di rotazione.
θ̇ = J −1 ẋ
Nel caso di robot RR rappresentato in Figura 26.1 lo Jacobiano inverso sarà:
1
J −1 = ·
a1 · a2 · sin(θ2 )
·
a2 · cos(θ1 + θ2 ) a2 · sin(θ1 + θ2 )
−a1 · cos(θ1 ) − a2 · cos(θ1 + θ2 ) −a1 · sin(θ1 ) − a2 · sin(θ1 + θ2 )
Anche se la J è quadrata non è detto che essa possa essere invertita. Infatti
considerando il robot RR nella configurazione in Figura 26.2 si può notare che
θ2 = 0 ciò comporta che sin(θ2 ) = 0 non rendendo lo Jacobiano invertibile
(matrice singolare, ovvero il determinante è nullo).
Bisogna quindi prestare attenzione ai movimenti del robot per evitare le singo-
larità.
Capitolo 27
27.1 Introduzione
Come abbiamo già visto non sempre è possibile determinare una soluzione in
forma chiusa. Questo perchè il sistema potrebbe essere descritto da funzioni
trascendenti, ovvero funzioni in cui è difficile isolare la variabile che descrive i
valori dei vari giunti del robot. Possiamo però utilizzare delle tecniche che ci
consentino di trovare una soluzione che si avvicini a quella cercata.
f (x) = g
Per fare questo si parte da un certo valore x0 e, tramite piccoli passi si itera
xi+1 = xi + ∆x
fino a quando si trova un valore xN che soddisfa f (xN ) = g a meno di un certo
errore. Per ogni passo si cerca di scegliere un valore di ∆x che permette di
avvicinarsi sempre di più al valore goal g. Possiamo utilizzare la derivata per
approssimare la funzione nella zona di interesse ed utilizzare questa informazione
per capire la direzione di crescenza e/o decrescenza. Il gradient descent è quindi
un metodo che permette di raggiungere un obbiettivo in modo asintotico.
27.2.1 Esempio
Consideriamo la situazione rappresentata in Figura 27.1 dove abbiamo un solo
link e un solo giunto. Supponiamo che ci interessi solo la coordinata x. Dalla
cinematica diretta determiniamo H:
x = l · cos(q)
191
dx
= −l · sin(q)
dq
da cui:
δx = −l · sin(q)δq
1
δq = − · δx
l · sin(q)
27.3.4 Pseudo-inversa
Se abbiamo un matrice non quadrata, derivante da un sistema sotto-vincolato
o sopra-vincolato, possiamo usare la pseudo inversa:
Jp = (J T J)−1 J T
• Limite dei giunti: i giunti non possono assumere tutti i valori e quindi
le funzioni su cui viene fatta la derivata risultano non essere continue.
• Non ripetibilità: non è frequente che, dato uno stesso obbiettivo, il
sistema lo raggiunga sempre nella stessa posa.
• End-effector multipli: in alcuni casi non si ha a disposizione un unico
utensile ma più di uno. In queste situazioni è molto più difficile trovare
una soluzione.
Capitolo 28
Controllo assi
28.1 Introduzione
Un percorso è definito come una sequenza di configurazioni dei giunti di un
robot in un particolare ordine. Una traiettoria definisce la tempistica con cui
un percorso viene eseguito, cioè gli istanti in cui il robot deve raggiungere le
varie configurazioni del percorso.
28.2 Controllo
Il controllo di un robot può avvenire nello spazio cartesiano o nello spazio dei
giunti. Nel primo caso il sistema viene espresso in termini di coordinate car-
tesiane, nel secondo caso invece viene espresso in termini dei valori assunti dai
giunti.
197
Secondo la cinematica, esiste una sola configurazione con la quale si può rag-
giungere il punto B. Essa però può essere raggiunta tramite due traiettorie
partendo dal punto A. Questo aspetto deve essere mantenuto in considerazione
perché, in alcuni casi, si potrebbe scegliere una traiettoria invece che l’altra al
fine di evitare un ostacolo.
La forma delle traiettorie può essere descritta in termini di funzioni degli angoli
di giunto θ(t). Tali funzioni possono anche essere, come visto in precedenza,
molteplici.
• θ(tf ) = θf , θ̇(tf ) = 0: alla fine il giunto deve valere θf con velocità nulla.
θ(t) = a0 + a1 t + a2 t2 + a3 t3
θ̇(t) = a1 t + 2a2 t + 3a3 t2
Sostituendo i valori dei vincoli nell’equazione si ottiene:
θ(0) = θi → a0 + a1 · 0 + a2 · 0 + a3 · 0 = θi
θ̇(0) = 0 → a + 2a · 0 + 3a · 0 = 0
1 2 3
2 3
⇒
θ(t f ) = θ f → a 0 + a t
1 f + a t
2 f + a 3 tf = θ f
˙
(tf ) = 0 → a1 + 2a2 tf + 3a3 t2f = 0
Nel caso più generale potremmo pensare che le velocità di partenza e di arrivo
non siano nulle. Si ottiene allora:
a0 = θi
a1 = θ˙i
3(θf −θi )−(2θ˙i +θ˙f )·tf
a2 = t2f
a3 = 2(θi −θf )−(θ˙i +θ˙f )·tf
t3f
θ̇(tvia ) = ω
Cioè impone che il giunto deve assumere un certa velocità in un certo istante.
1ω 2
θ(tb ) = θi + t
2 tb b
• Tratto rettilineo: è una retta, quindi la distanza percorsa sarà pari a:
1ω 2
t
2 tb b
Componendo i tre tratti si ottiene la posizione finale:
1ω 2 1ω 2
θf = θi + t + (tf − 2tb ) · ω + t
2 tb b 2 tb b
Data la velocità ω desiderata nel tratto rettilineo e il tempo entro il quale si
vuole compiere il movimento è possibile determinare:
θ i − θ f + ω · tf
tb =
ω
Capitolo 29
Controllo in forza
29.1 Introduzione
Un robot, tramite l’utensile, può interagire con l’ambiente:
• Modificando lo stato del sistema (es. operazioni di spostamento oggetti).
• Scambiando forze (es. operazioni di assemblaggio o rifinitura superficiale).
Si può classificare il robot in base a come lavora in:
• Attivi: il robot viene mosso da una legge di controllo in modo che pos-
sa reagire in un modo appropriato a forze che vengono ad esso applica-
te. Generalmente tali forze vengono prima misurate tramite un sensore
o tramite rilevazioni di coppia. Tipicamente queste misure vengono fat-
te perché si vuole controllare la forza/coppia scambiata con l’ambiente o
semplicemente mantenerla limitata.
• Passivi: l’utensile del robot è equipaggiato con dispositivi meccatronici
che compensano le forze generalizzate applicate al robot che quindi non
necessità di sensori.
203
Alcuni compiti svolti da un robot che richiedono interazioni con l’ambiente sono:
Un aspetto molto importante, oltre alle interazioni del robot con l’ambiente, so-
no le Human-Robot interaction: il robot non deve opporsi alle forze esterne.
Questo deve essere garantito anche per questioni di sicurezza.
Tra questi due approcci risulta evidente che il livello di conoscenza della geome-
tria dell’ambiente risulta diverso. Inoltre per il controllo in impedenza la misura
delle forze di contatto può non essere necessaria.
29.3.3 Retro-guidabilità
Dal punto di vista meccanico la retro-guidabilità consiste nel trasferire la po-
tenza al motore dall’ambiente. Può succedere però che parte della potenza
trasmessa viene persa nel sistema di trasmissione. Quando questo avviene la
retro-guidabilità può essere raggiunta tramite un controllo in anello chiuso per
trasferire le forze rilevate all’ingresso del motore.
Capitolo 30
30.1 Introduzione
I robot oggi svolgono diversi compiti anche molto diversi tra loro (guida turistica,
auto autonome, logistica, ecc...). Uno dei maggiori interessi è quello di trovare
quegli aspetti che li accomunano. Nei robot odierni il costo per lo sviluppo del
software è una parte molto significativa del costo totale. Questo significa che,
essendo il costo di sviluppo software un costo elevato, per forza di cose anche
il costo dell’intero robot deve essere elevato. Allora, l’idea che si preferisce
seguire è quella di rendere economicamente vantaggioso lo sviluppo software
sfruttandone il riutilizzo, ovvero progettare già in partenza il SW per renderlo
adatto ad utilizzi futuri.
207