...

Pianificazione Ottima del Moto

by user

on
Category: Documents
2

views

Report

Comments

Transcript

Pianificazione Ottima del Moto
Pianificazione Ottima del Moto
Dott. Lucia Pallottino, Ing. Adriano Fagiolini
October 2005
2
Indice
1 Introduzione
5
2 Pianificazione discreta
7
2.1
2.2
Formalizzazione del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.1.1
Esempio di pianificazione discreta: il labirinto . . . . . . . . . . . . . . . . . . .
7
Ricerca di traiettorie ammissibili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.2.1
9
2.2.1.1
Algoritmo di Dijkstra . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.2.1.2
Algortimo A-Star . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
Altri metodi di ricerca generali . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.2.2.1
Algoritmo di ricerca all’indietro . . . . . . . . . . . . . . . . . . . . .
12
2.2.2.2
Algortimo bidirezionale . . . . . . . . . . . . . . . . . . . . . . . . . .
12
Pianificazione ottima discreta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.3.1
Pianificazione discreta ottima a lunghezza fissata . . . . . . . . . . . . . . . . .
13
2.3.1.1
Backward value iteration . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.3.1.2
Forward value iteration . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.3.2
Pianificazione discreta ottima a lunghezza variabile . . . . . . . . . . . . . . . .
16
2.3.3
Algoritmo di Dijkstra e programmazione dinamica . . . . . . . . . . . . . . . .
17
2.2.2
2.3
Metodi di ricerca in avanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 Controllo Ottimo
19
3.1
Il Principio del Massimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.2
Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.2.1
Sistemi Meccanici Hamiltoniani . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.2.2
Percorso minimo tra due punti . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.2.3
Posizionamento di una massa inerziale in tempo minimo . . . . . . . . . . . . .
24
3.2.4
Massimo spostamento di una massa con costo quadratico del controllo . . . . .
25
3.2.5
Percorsi minimi di veicoli a raggio di sterzo limitato . . . . . . . . . . . . . . .
26
3
4
INDICE
Capitolo 1
Introduzione
Questa parte del corso di Robotica riguarda il problema della pianificazione ottima delle traiettorie.
Queste dispense si basano in gran parte sul testo del Prof. Steve M. LaValle “Planning Algorithm”
disponibile in rete. Dopo una introduzione al problema verrano illustrati alcuni tra i metodi risolutivi classici noti in letteratura. Si inizierà con il problema della pianificazione su spazi discreti nel
capitolo 2 con i relativi metodi risulutivi. Nel capitolo 3 si analizzerà invece il problema della pianificazione ottima nel caso si spazi continui e si mostreranno alcuni casi in cui i metodi risolutivi descritti
consentono di determinare una soluzione del problema in forma analitica.
5
6
CAPITOLO 1. INTRODUZIONE
Capitolo 2
Pianificazione discreta
In questo capitolo vengono descritti alcuni metodi per la ricerca di traiettorie ammissibili su spazi
discreti. Il problema della pianificazione delle traiettorie viene formalizzato come problema di ricerca
di cammini ammissibili su un grafo. Si illustreranno dapprima diversi metodi di ricerca di soluzioni
ammissibili, in cui si è interessati a raggiungere la configurazione desiderata. Successivamente verranno
descritti metodi per la ricerca di soluzioni ottime.
2.1
Formalizzazione del problema
Sia X lo spazio di stato discreto, cioè numerabile o anche finito. Sia U lo spazio dei controlli ammissibili
che in generale può dipendere dallo stato particolare in cui si trova il sistema. In tal caso lo spazio
dei controlli associato ad uno stato viene indicato con U(x) mentre lo spazio dei controlli risulta
U = ∪x∈X U (x). Sia f : X × U(x) → X la funzione di transizione degli stati, i.e. ogni controllo u
applicato ad uno stato x produce un nuovo stato x0 = f (x, u). Sia infine XG ⊂ X lo spazio degli stati
di arrivo.
Lo scopo degli algoritmi di pianificazione è quindi quello di determinare una sequenza finita di
controlli che trasformano uno stato iniziale xI in uno stato in XG .
Spesso è conveniente modellizzare il problema della pianificazione ammissibile come il problema
della ricerca di cammini su un grafo orientato. Si considerino infatti gli stati in X come nodi di un
grafo, un arco tra gli stati x e x0 esiste nel grafo se e soltanto se esiste u ∈ U (x) tale che x0 = f (x, u). Lo
stato di partenza e gli stati di arrivo sono dei particolari nodi del grafo. Il problema della pianificazione
ammissibile diventa quindi il problema di determinare se esiste un cammino sul grafo a partire dal
nodo iniziale sino ai nodi finali.
2.1.1
Esempio di pianificazione discreta: il labirinto
Si consideri il labirinto riportato in figura 2.1 per il quale si vuole trovare una traiettoria dallo stato
iniziale xI sino allo stato finale xG1 o allo stato finale xG2 . Si procede col numerare tutti gli stati del
problema come riportato nella figura 2.2. Ogni stato del sistema viene rappresentato, come riportato
in figura 2.3, come un nodo del grafo. Infine si determinano gli archi che appartengono al grafo.
Per l’esempio considerato, il grafo associato al problema della pianificazione discreta ammissibile è
riportato in figura 2.4. Si noti che non esiste una traiettoria ammissibile che porti lo stato xI nello
7
8
CAPITOLO 2. PIANIFICAZIONE DISCRETA
Figura 2.1: Esempio di pianificazione discreta
Figura 2.2: Numerazione degli stati discreti
stato xG1 , cosı̀ come non esiste un cammino sul grafo che connetta i rispettivi nodi. Lo stato xG2 è
invece raggiungibile tramite due diverse traiettorie, cosı̀ come esistono due cammini distinti sul grafo
che connettono il nodo xI con il nodo xG2 .
2.2
Ricerca di traiettorie ammissibili
Presentiamo ora alcuni metodi di ricerca su grafi per trovare la soluzione al problema delle traiettorie
ammissibili. Ogni algoritmo di ricerca sul grafo deve essere sistematico. Se il grafo è di dimensione
finita questo vuol dire che l’algoritmo deve visitare ogni stato raggiungibile e quindi deve essere in
grado di determinare in tempo finito se esiste o meno una soluzione. Per essere sistematico l’algoritmo
deve tenere traccia degli stati già visitati in modo tale da evitare di visistare ciclicamente gli stessi
stati.
Nel caso di grafi infiniti si richiede agli algoritmi di ricerca che se la soluzione esista questa venga
trovata in tempo finito altrimenti si accetta che l’algoritmo possa procedere per un tempo infinito.
2.2. RICERCA DI TRAIETTORIE AMMISSIBILI
Figura 2.3: Ad ogni stato discreto si associa un nodo del grafo
Figura 2.4: Si determinano quali sono gli archi presenti nel grafo
2.2.1
Metodi di ricerca in avanti
Lo schema generale per gli algoritmi di ricerca risulta
Ricerca in avanti
1 Q.Insert(xI )
2 while Q not empty do
3
x ←Q.GetFirst()
4
if x ∈ XG
5
return SUCCESS
6
forall u ∈ U (x)
7
x0 ← f (x, u)
8
if x0 not visited
9
Mark x0 as visited
10
Q.Insert(x0 )
11
else
12
Resolve duplicate x0
13 return FAILURE
Durante la ricerca nel grafo ci sono tre diversi tipi di stato:
9
10
CAPITOLO 2. PIANIFICAZIONE DISCRETA
Non visitato: Stato che non è ancora stato visitato. Inizialmente ogni stato, con l’esclusione di xI ,
è di questo tipo.
Morto: Stato che è stato visitato e per il quale ogni possibile stato successivo è stato visitato. Lo
stato successivo di x è uno stato x0 per cui esiste un ingresso u ∈ U(x) tale che x0 = f (x, u).
Vivo: Stato che è già stati visitati ma ancora non tutti gli stati successivi lo sono stati. Inizialmente
l’unico stato vivo è xI .
L’insieme degli stati vivi viene ordinato secondo una coda di priorità Q.
L’unica differenza
sostanziale tra i vari algoritmi di ricerca è la funzione utilizzata per ordinare la coda Q. La coda
più utilizzata è quella FIFO (First-In First-Out) per la quale lo stato che è stato inserito per primo
nella coda è anche il primo ad essere scelto quando Q.GetFirst() viene chiamata.
Tale algoritmo è soltanto in grado di determinare se una soluzione esiste o meno. Se si vuole anche
ottenere una traiettoria ammissibile è necessario associare allo stato x0 lo stato genitore x.
Alcuni algoritmi richiedono di calcolare un certo costo e associarlo ad ogni stato. Se uno stesso
stato viene raggiunto più volte il costo potrebbe essere modificato. Questo costo può essere utilizzato
per ordinare la coda Q oppure per consentire la ricostruzione della traiettoria una volta che l’algoritmo
è completato. Un algoritmo di questo tipo è l’algoritmo di Dijkstra descritto nel prossimo paragrafo.
2.2.1.1
Algoritmo di Dijkstra
Un algoritmo che consente di trovare sia le traiettorie che le traiettorie ottime è l’algoritmo di Dijkstra.
Questo algoritmo consente la ricerca di cammini minimi su grafi a partire da un nodo sorgente ed è
una particolare forma di programmazione dinamica.
Si supponga che, nella rappresentazione a grafo del problema della pianificazione del moto, ad ogni
arco e ∈ E sia associato un costo l(e) non negativo. Tale costo rappresenta il costo per applicare
l’azione u che porta uno stato x in x0 = f (x, u). Per questo motivo il costo l(e) si rappresenta anche
come l(x, u). Il costo totale del cammino sul grafo risulta quindi pari alla somma dei costi sugli archi
che a partire dal nodo iniziale portano a quello finale.
La coda di priorità Q è ordinata secondo una funzione C : X → [0, ∞] detta cost-to-come. Per
ogni stato x, C ∗ (x) viene detta cost-to-come ottima di cammini che partono dallo stato iniziale xI e
arrivano sino a x. Ovviamente, il costo ottimo si ottiene considerando il minimo tra i costi di tutti i
cammini che connettono xI con x.
Il cost-to-come viene calcolato incrementalmente durante l’esecuzione dell’algoritmo di ricerca.
Inizialmente si ha che C ∗ (xI ) = 0. Sia x0 = f (x, u) allora C(x0 ) = C ∗ (x) + l(e), dove e è l’arco che
connette il nodo x con il nodo x0 . In questo caso C(x0 ) rappresenta il cost-to-come conosciuto per x0
ma non sappiamo ancora se sia il valore ottimo. Quello che può succedere è infatti che, come previsto
dalla riga 12 dell’algoritmo generale in 2.2.1, il nodo x0 è già in Q e viene raggiunto attraverso un
nuovo cammino a costo minore. In tal caso il costo C(x0 ) viene aggiornato e Q viene riordinato di
conseguenza.
Una volta che il nodo x0 viene restituito dalla funzione Q.GetFirst() allora diventa un nodo morto e
per induzione è possibile far vedere che non è possibile raggiungere il nodo a costo minore del corrente
valore C(x0 ). Infatti, per induzione, il caso base è dato da C ∗ (xI ) = 0 e supponiamo che tutti i nodi
morti hanno associato il proprio cost-to-come ottimo che non può più essere modificato. Sia x il nodo
2.2. RICERCA DI TRAIETTORIE AMMISSIBILI
11
restituito dalla funzione Q.GetFirst(), il valore C(x) è ottimo perchè ogni altro cammino con costo
minore deve passare prima attraverso ad un altro nodo in Q che però ha sicuramente costo maggiore di
x. Tutti i cammini che passano soltanto attraverso stati morti sono stati già considerati per produrre
C(x). Quindi se il nodo x è morto C(x) = C ∗ (x).
Si consideri ora il grafo riportato in figura 2.5. Inizialmente Q = {xI } e C ∗ (xI ) = 0. I nodi
Figura 2.5: Determinare i cammini minimi a partire da XI .
successori di xI sono 1 e 2 che hanno associato un cost-to-come pari a C(1) = 0 + 4 = 4 e C(2) =
0 + 1 = 1, da cui Q = {2, 1}. Il nodo da esaminare è quindi 2 i cui successori sono 1 e 3 mentre il
costo del nodo 3 risulta C(3) = C(2) + 2 = 3 il costo di 1 va aggiornato in quanto prima valeva 4
mentre ora C(1) = C(2) + 2 = 3. Si elimina quindi 2 dalla coda e si pone C ∗ (2) = 1. Si ha ora che
Q = {1, 3} e si esamina il nodo 1 il cui unico successore è 3 per il quale non si deve aggiornare il costo
in quanto ora risulta maggiore C(3) = C(1) + 1 = 4 > 3. Si elimina 1 dalla coda e si pone C ∗ (1) = 3.
Infine Q = {3} e quindi C ∗ (3) = 3. Si sono cosı̀ ottenuti tutti i cammini minimi a partire da xI .
2.2.1.2
Algortimo A-Star
L’algoritmo A∗ è una variante della programmazione dinamica che tenta di ridurre il numero totale
di stati esplorati incorporando una stima euristica del costo per raggiungere lo stato finale da un dato
stato. Sia C(x) il cost-to-come da xI a x e G(x) il cost-to-go da x a qualche stato in XG . Sebbene C ∗ (x)
si possa calcolare in modo incrementale tramite la programmazione dinamica, non ci sono possibilità
di conoscere in anticipo il valore del cost-to-go ottimo G∗ . È comunque spesso possibile ottenere una
buona stima inferiore di G∗ , l’obiettivo è quello di trovarne una che sia più vicina possibile a G∗ . Sia
Ĝ∗ (x) tale stima.
La differenza tra l’algoritmo A∗ e Dijkstra sta nella funzione utilizzata per ordinare la coda Q.
Nell’algoritmo A∗ si usa la somma C(x0 ) + Ĝ∗ (x0 ), pertanto la coda di priorità è ordinata in base
alle stime del costo ottimo tra xI e XG . Se effettivamente Ĝ∗ (x) è una stima inferiore del cost-to-go
ottimo per ogni x ∈ X allora l’algoritmo A∗ trova cammini minimi. Se Ĝ∗ (x) = 0 per ogni x ∈ X
allora l’algoritmo A∗ coincide con l’algoritmo di Dijkstra.
2.2.2
Altri metodi di ricerca generali
Analizziamo ora due altri particolari algoritmi di ricerca, un metodo di ricerca all’indietro e un
approccio bidirezionale.
12
CAPITOLO 2. PIANIFICAZIONE DISCRETA
2.2.2.1
Algoritmo di ricerca all’indietro
Si consideri il caso in cui ci sia un solo stato di arrivo xG , può essere più efficiente procedere all’indietro
a partire da xG per arrivare a xI .
Sia U −1 = {(x, u)|x ∈ X , u ∈ U} l’insieme di tutte le coppie stato-ingresso, questo può anche
essere visto come il dominio della funzione di transizione f . Sia invece U −1 (x0 ) = {(x, u) ∈ U −1 |x0 =
f (x, u)}. Per semplicità denotiamo con u−1 una coppia stato-ingresso in qualche U −1 (x0 ). Per ogni
u−1 ∈ U −1 (x0 ) esiste un unico stato x ∈ X . Sia f −1 una funzione di transizione degli stati all’indietro,
possiamo scrivere x = f −1 (x0 , u−1 ). Lo schema per questo algoritmo è simile a quello proposto in
2.2.1.
Ricerca all’indietro
1 Q.Insert(xG )
2 while Q not empty do
3
x0 ←Q.GetFirst()
4
if x = xI
5
return SUCCESS
6
forall u−1 ∈ U −1 (x)
7
x ← f −1 (x, u−1 )
8
if x not visited
9
Mark x as visited
10
Q.Insert(x)
11
else
12
Resolve duplicate x
13 return FAILURE
2.2.2.2
Algortimo bidirezionale
Negli algoritmi bidirezionali un albero viene generato a partire dallo stato iniziale xI e uno a partire
dallo stato finale xG . La ricerca termina con successo quando i due alberi si incontrano, mentre fallisce
se una delle code di priorità si esaurisce. Lo schema di questi algoritmi è la cominazione dei due schemi
già riportati.
2.3
Pianificazione ottima discreta
Consideriamo ora il caso in cui non si è semplicemente interessati a trovare una traiettoria ammissibile
ma si vuole determinare la traiettoria ammissibile che ottimizza un dato criterio come il tempo di
percorrenza o l’energia consumata. Per poter estendere la formalizzazione introdotta nel paragrafo
2.1 devono essere introdotte altri concetti:
1 un indice associato al passo della pianificazione;
2 una funzione costo che rappresenta il costo accumulato durante l’esecuzione della traiettoria;
3 una azione di terminazione dell’algoritmo.
Si inizia con il considerare il caso in cui si cercano cammini ottimi di lunghezza fissata. Successivamente lo si estende al caso di cammini ottimi di lunghezza variabile. Infine verrà messo in relazione
l’algoritmo proposto in questo paragrafo con l’algoritmo di Dijkstra proposto in 2.2.1.1.
2.3. PIANIFICAZIONE OTTIMA DISCRETA
13
Per semplicità considereremo come criterio di ottimizzazione quello della minimizzazione della funzione costo.
Moltiplicando la funzione costo per il fattore −1 si ottiene un problema di
massimizzazione.
2.3.1
Pianificazione discreta ottima a lunghezza fissata
Sia πK una pianificazione a K passi, i.e. una sequenza (u1 , u2 , . . . , uK ) di K azioni di controllo.
Dati πK e xI è possibile ricostruire, tramite la funzione di transizione f , la sequenza degli stati
xI , x2 , . . . , xK+1 dove xk+1 = f (xk , uk ).
Sia L una funzione costo a valori reali che sia additiva rispetto al passo K della pianificazione e
che sia definita su una pianificazione a K passi πK . Se si denota con F il passo finale, F = K + 1 si
ha che la funzione costo è data da
L(πK ) =
K
X
l(xk , uk ) + lF (xF ).
k=1
Il termine lF (xF ) è tale che lF (xF ) = 0 se xF ∈ XG e lF (xF ) = ∞ altrimenti. In questo modo L è
definita su ogni traiettoria, quelli che non consentono di raggiungere stati in XG vengono penalizzati
da un costo infinito.
Se si è interessati soltanto a traiettorie ammissibili di lunghezza K è sufficiente porre l(x, u) ≡ 0.
Se invece si vuole minimizzare il numero di passi è sufficiente porre l(x, u) ≡ 1.
Gli algoritmi che descriveremo in seguito si basano sul principio di ottimalità secondo il quale ogni
porzione di una traiettoria ottima è essa stessa ottima. Questo principio induce un algoritmo di tipo
iterativo detto value iteration in grado di risolvere una vasta gamma di problemi e non soltanto quelli
discussi in questo corso (ad esempio pianificazione con incertezze stocastiche o con misure degli stati
non perfette). L’idea è quella di calcolare iterativamente le funzioni cost-to-go e cost-to-come ottime.
2.3.1.1
Backward value iteration
Sia G∗k per 1 ≤ k ≤ F il costo che si accumula dal passo k al passo F lungo un cammino ottimo:
G∗k (xk ) =
(K
X
min
uk , ..., uK
)
l(xi , ui ) + lF (xF ) .
(2.1)
i=k
Per k = F = K + 1 si ha G∗F (xF ) = lF (xF ). Partendo da xF si ottiene
G∗K (xK ) = min {l(xK , uK ) + lF (xF )} = min {l(xK , uK ) + G∗F (f (xK , uK ))} ,
uK
uK
che risulta facilmente calcolabile per ogni xK ∈ X .
Mostriamo ora come calcolare G∗k a partire da G∗k+1 . La 2.1 può essere riscritta nel seguente modo
(
G∗k (xk )
=
min
min
uk uk+1 , ..., uK
l(xk , uk ) +
uk
(
l(xi , ui ) + lF (xF )
min
uk+1 , ..., uK
K
X
(2.2)
)#
l(xi , ui ) + lF (xF )
(2.3)
i=k+1
©
ª
= min l(xk , uk ) + G∗k+1 (xk+1 ) .
uk
)
i=k+1
"
= min l(xk , uk ) +
K
X
(2.4)
14
CAPITOLO 2. PIANIFICAZIONE DISCRETA
L’ultimo membro della catena di uguaglianze dipende soltanto da xk , uk e G∗k+1 . Si prosegue sino ad
ottenere G∗1 da cui poi si ottiene G∗ (xI ) che rappresenta il costo ottimo per andare da xG a xI .
Per ottenere anche la sequenza di controlli ottima è necessario mantenere in memoria il controllo
che minimizza la 2.2.
Esempio 1: Dato il grafo in figura 2.6, si consideri xI = a, XG = {d} e K = 4. Calcolando all’indietro
Figura 2.6: Determinare il cammino a costo minimo di 4 passi.
il cost-to-go ottimo si ottiene la seguente tabella.
G∗5
G∗4
G∗3
G∗2
G∗1
a
b
c
d
e
∞
∞
∞
0
∞
∞
4
1
∞
∞
6
2
∞
2
∞
4
6
3
∞
∞
6
4
5
4
∞
Infatti inizialmente K + 1 = 5 e xF = d per cui G∗5 (d) = 0 e tutti gli altri valgono ∞. Il nodo d in un
passo si può raggiungere soltanto dai nodi b e c pertanto si aggiornano i rispettivi valori di G∗4 a 4 e
1 rispettivamente. Questi nodi sono raggiungibili in un passo (e quindi d lo è in due passi) dai nodi
a, b e d. Si procede in questo modo sino ad ottenere G∗1 . In figura 2.7 sono riportati i vari passi con
i costi dei cammini. I costi ottimi per ogni passo sono riportati in grassetto. Il cost-to-go del nodo e
non viene mai aggiornato e pertanto rimane infinito. Infatti dal nodo e non è possibile raggiungere
mai il nodo d e tanto meno in 4 passi.
2.3.1.2
Forward value iteration
L’iterazione in avanti può essere usata per calcolare tutti i cammini ottimi per raggiungere ogni stato
di X a partire da un xI fissato. Sia Ck∗ il cost-to-come ottimo dal passo 1 al passo k ottimizzato su
2.3. PIANIFICAZIONE OTTIMA DISCRETA
15
Figura 2.7: Procedimento per il calcolo del cammino a costo minimo di 4 passi all’indietro.
tutti i cammini di k − 1 passi. Per escludere cammini che non partono da xI si pone C1∗ (xI ) = lI (xI )
dove lI (xI ) = 0 mentre lI (x) = ∞ per x 6= xI . In generale il cost-to-come ottimo è dato da
(
Ck∗ (xk )
=
min
lI (x1 ) +
u1 , ..., uk−1
k−1
X
)
l(xi , ui )
(2.5)
i=1
e al passo finale F si ha
(
CF∗ (xF )
=
min
u1 , ..., uK
lI (x1 ) +
K
X
)
l(xi , ui )
(2.6)
i=1
∗
Per ottenere una formula ricorsiva supponiamo di conoscere Ck−1
:
Ck∗ (xk ) =
min
©
u−1 ∈U −1 (x
k)
ª
∗
Ck−1
(xk−1 ) + l(xk−1 , uk−1 ) ,
(2.7)
−1
−1
dove xk−1 = f −1 (xk , u−1
(xk ).
k ) e uk−1 ∈ U(xk−1 ) è l’ingresso a cui corrisponde uk ∈ U
Esempio 2: Si consideri nuovamente il grafo in figura 2.6 ma si ponga xI = a e K = 4. Le funzioni
cost-to-come ottime calcolate con l’iterazione in avanti sono riportate nella seguente tabella.
a
b
c
d
e
C1∗
0
∞
∞
∞
∞
C2∗
C3∗
C4∗
C5∗
2
2
∞
∞
∞
4
4
3
6
∞
6
6
5
4
7
6
6
5
6
5
In figura 2.8 sono riportati i vari passi con i costi dei cammini. I costi ottimi per ogni passo sono
riportati in grassetto.
16
CAPITOLO 2. PIANIFICAZIONE DISCRETA
Figura 2.8: Procedimento per il calcolo del cammino a costo minimo di 4 passi in avanti.
2.3.2
Pianificazione discreta ottima a lunghezza variabile
I metodi visti nel paragrafo precedente si possono facilmente estendere al calcolo di traiettorie ottime di
lunghezza non specificata. È necessario introdurre una azione terminale uT tale che quando applicata
ad uno stato xk lo stato non cambierà per i passi successivi. In altre parole per ogni i ≥ k, ui = uT ,
xi = xk e l(xi , uT ) = 0.
Con questa azione terminale è possibile utilizzare i metodi iterativi introdotti precedentemente
con passo K e ottenere camini ottimi di lunghezza minore o uguale a K. Infatti se si ha un cammino
ottimo in 2 passi si può applicare per tre passi successivi l’azione terminale e si ottiene un cammino
ottimo in 5 passi per lo stesso stato.
Il passo successivo da compiere, nella estensione degli algoritmi, è quello di eliminare la dipendenza
da K. Se si considera l’iterazione all’indietro, una volta calcolato G∗1 è possibile continuare il procedimento e calcolare G∗0 , G∗−1 eccetera. Il procedimento si interrompe nel momento in cui la situazione
diventa stazionaria e cioè quando per ogni i ≤ k G∗i−1 (x) = G∗i (x) per tutti gli stati x ∈ X . Nel
momento in cui ci si trova in una sistuazione stazionaria il cost-to-go non dipende più dal particolare
passo k. È importante osservare che se la funzione l(x, u) non è mai negativa allora prima o poi ci si
trova in condizione di stazionarietà.
Lo stesso risultato si ottiene nel caso di iterazione in avanti. Inoltre con entrambi gli approcci
è possibile ottenere tramite l’algoritmo anche la sequenza dei controlli che determina la traiettoria
ottima.
Esempio 3: Si consideri nuovamente il grafo in figura 2.6, le funzioni cost-to-come ottime calcolate
con l’iterazione all’indietro sono riportate nella seguente tabella.
2.3. PIANIFICAZIONE OTTIMA DISCRETA
G∗0
G∗−1
G∗−2
G∗−3
G∗−4
17
a
b
c
d
e
∞
∞
∞
0
∞
∞
4
1
0
∞
6
2
1
0
∞
4
2
1
0
∞
4
2
1
0
∞
Si noti che dopo 4 passi si è in condizione di stazionarietà.
Nel caso dell’iterazione in avanti si consideri xI = b:
C1∗
C2∗
C3∗
C4∗
∗
C
a
b
c
d
e
∞
0
∞
∞
∞
∞
0
1
4
∞
2
0
1
2
5
2
0
1
2
3
2
0
1
2
3
Anche in questo caso dopo 4 passi si è in condizione di stazionarietà.
2.3.3
Algoritmo di Dijkstra e programmazione dinamica
Il metodo iterativo in avanti e l’algoritmo di Dijkstra sono molto simili. In particolare però l’algoritmo
di Dijkstra etichetta come morti i nodi per i quali il costo non verrà modificato e tali nodi non verranno
più rivisitati dall’algoritmo. In generale però l’algoritmo di Dijkstra può risultare computazionalmente
costoso nella gestione delle code.
18
CAPITOLO 2. PIANIFICAZIONE DISCRETA
Capitolo 3
Controllo Ottimo
3.1
Il Principio del Massimo
Consideriamo un sistema dinamico nonlineare nella forma piuttosto generale
ẋ = f (x, u), x ∈ IRn , u ∈ IRm , x(0) = x0
Consideriamo anche un indice obiettivo
Z
T
J = Ψ(x(T )) +
L(x(t), u(t))dt
0
che considera i valori ottenuti dallo stato ad un tempo finale T , oltreché l’andamento dello stato e
del controllo lungo tutto l’intervallo tra t = 0 e t = T . Si noti che la funzione obiettivo è interamente
determinata, per un dato sistema dinamico e per date condizioni iniziali, dalla funzione di ingresso
u(t). Consideriamo il problema di massimizzare J, che rappresenta un funzionale in quanto funzione
di funzioni, rispetto alle possibili scelte del controllo. In generale, i valori istantanei del controllo potranno essere soggetti a restrizioni (ad esempio, valori limitati in modulo), nel qual caso restringeremo
opportunamente u ∈ U .
Quello posto è un problema di calcolo variazionale, cioè un problema di ottimizzazione in cui la
incognita è una funzione invece che semplicemente una variabile incognita. Un particolare ingresso
û(t) è ottimo se J(û) ≥ J(u), ∀u ∈ U. Essendo la minimizzazione di J sottoposta al vincolo tra
l’andamento di x(t) e quello di u(t) espresso dalla dinamica, possiamo procedere, secondo una tecnica
analoga a quella dei moltiplicatori di Lagrange nel caso di ottimizzazione di funzioni con vincoli, a
scrivere un indice modificato
Z
J0 = J −
T
pT (ẋ − f (x, u))dt, p ∈ IRn
0
per il quale vale ovviamente J0 = J, ∀t, ∀u, qualsiasi sia la scelta del moltiplicatore p ∈ IRn , che potrà
anche essere variabile nel tempo (cioè una funzione p : [0, T ] → IRn , t 7→ p(t)).
Riscriviamo
¤
RT £
L(x, u) + pT f (x, u) − pT ẋ) dt
0
¤
RT £
:= Ψ(x(T )) + 0 H(p, x, u) − pT ẋ dt
J0 = Ψ(x(T )) +
dove si è definito implicitamente il funzionale
H(p, x, u, t) = pT f (x, u) + L(x, u, t)
19
20
CAPITOLO 3. CONTROLLO OTTIMO
che viene detto Hamiltoniano del problema.
Cercando di dare condizioni necessarie affinché un ingresso û(t) sia ottimo, consideriamo il problema localmente, cioè confrontiamo l’indice ottenuto da û(t) rispetto a quello ottenuto da funzioni
u(t) che differiscano “poco” da û(t). Considereremo quindi funzioni u per cui valga kû − uk :=
RT
maxi 0 |ûi (t) − ui (t)|dt < ², con ² opportunamente piccolo (si noti che sono ammesse differenze
anche grandi tra le componenenti di ingresso, purché per tempi brevi).
Per la continuità delle soluzioni delle equazioni differenziali ordinarie, anche le soluzioni x(t, x0 , u)
differiranno poco dalla soluzione x(t, x0 , û), e scriveremo x(t, x0 , û) − x(t, x0 , u) = δx(t), con kδx(t)k
infinitesimo dello stesso ordine di ². La funzione obiettivo è corrispondentemente modificata da
δJ0 = Ψ(x(T ) + δx(T )) − Ψ(x(T ))
RT
+ 0 [H(p, x + δx, u) − H(p, x, û)] dt
i
RT h
˙ − pT ẋ dt
− 0 pT (ẋ + δx)
Approssimando al primo ordine, e indicando con un pedice le derivate parziali, si ha
Ψ(x(T ) + δx(T )) − Ψ(x(T )) ≈ Ψx (x(T ))δx(T ),
e
RT
[H(p, x + δx, u) − H(p, x, û)] dt
RT
= 0 [H(p, x + δx, u) − H(p, x, u) + H(p, x, u) − H(p, x, û)] dt
RT
≈ 0 [Hx (p, x, u)δx + H(p, x, u) − H(p, x, û)] dt.
0
Usando invece la regola di integrazione per parti, si ha che il terzo addendo in δJ0 vale
RT
0
˙
pT δxdt
=
£ T ¤T R T T
p δx 0 − 0 ṗ δxdt
= p(T )T δx(T ) − p(0)T δx(0) −
RT
0
ṗT δxdt.
Osservando che δx(0) = 0 (le variazioni del controllo non hanno influenza sulle condizioni iniziali),
possiamo scrivere
δJ0 ≈
£
¤
Ψx (x(T )) − pT (T ) δx(T )
¤
RT £
+ 0 Hx (p, x, u) + ṗT δxdt
RT
+ 0 [H(p, x, u) − H(p, x, û)] dt
a meno di infinitesimi di ordine superiore rispetto a ². Possiamo adesso semplificare δJ0 usando la
libertà che ci è concessa nella scelta di p(t). Ponendo infatti
ṗ(t) = −HxT (p, x, u) e
si ottiene
Z
δJ0 =
p(T ) = ΨTx (x(T )),
T
[H(p, x, u) − H(p, x, û)] dt.
0
Si noti che le scelte fatte per p(t) equivalgono a definire una equazione differenziale ordinaria
aggiunta al problema, con condizioni non iniziali come consueto, bensı̀ terminali.
Se û(t) è ottima, come supposto, allora deve essere δJ0 < 0, ∀u(t) nell’insieme considerato. Questo
implica che per ogni t, valga
H(p, x, u) ≤ H(p, x, û).
3.1. IL PRINCIPIO DEL MASSIMO
21
Questa affermazione, molto più forte della precedente, discende dal fatto che, se esistesse una u
per la quale, anche in un solo istante t∗ , valesse H(p, x, u(t∗ )) > H(p, x, û(t∗ )), allora si potrebbe
costruire un nuovo ingresso w(t) = û(t), ∀t 6= t∗ , ma w(t∗ ) = u(t∗ ), per la quale risulterebbe δJ0 > 0,
contro l’ipotesi che û sia ottima.
E’ ovvio che la relazione H(p, x, u) ≤ H(p, x, û), quando fossero noti lo stato ed il co-stato ad
un tempo t, permetterebbe di trovare il valore ottimo u con la soluzione di un normale problema di
massimizzazione di una funzione rispetto ad una variabile. In particolare, se gli ingressi non sono
soggetti a vincoli, una condizione necessaria affinché û(t) sia ottimo è che esso sia un estremo di
H(x, p, u), cioè che
Hu (x, p, u)|û = 0.
Un contributo importante che generalizza la applicabilità di questa osservazione al caso (praticamente molto importante) in cui i valori del controllo siano limitati in un insieme compatto u(t) ∈ U,
è il seguente
Principio del Massimo di Pontryagin: se û(t) è il controllo ottimo, allora H(x(t), p(t), û(t))
assume il valore massimo tra quelli ottenuti da u(t) ∈ U
Si osservi esplicitamente come i massimi di una funzione continua su un compatto possono essere
ottenuti non solo nei punti estremali ma anche sulla frontiera dell’insieme.
Riassumendo, abbiamo trovato che:
Se û(t) e x(t) sono la funzione di ingresso e la corrispondente traiettoria di stato soluzioni del
problema di controllo ottimo sopra definito, allora esiste una traiettoria (detta di co-stato) p(t) che
soddisfa le seguenti condizioni:
ẋ = f (x, u);
dinamica dello stato
x(0) = x0 ;
condizioni iniziali in x
ṗ = −fxT (x, u)p(t) −
p(T ) = ΨTx (x(T ));
LTx (x, u);
dinamica del co-stato
condizioni finali sul co-stato
ed inoltre vale
H(x, p, û) ≥ H(x, p, u), ∀u ∈ U.
Questo sistema di equazioni definisce completamente l’ottimo, nel senso che si hanno tante equazioni
quante incognite: queste ultime sono le 2n+m funzioni u(t), x(t) e p(t), determinate dalle 2n equazioni
differenziali ordinarie dello stato e del co-stato, con le loro rispettive condizioni agli estremi, e dalle
m condizioni di massimizazzione dell’Hamiltoniano.
La soluzione di questo sistema di equazioni non è peraltro facile nel caso generale. Una delle cause
principali di tali difficoltà deriva dal fatto che le condizioni agli estremi sono miste iniziali e finali.
Anche le soluzioni numeriche possono risultare molto impegnative.
Si dà talvolta una formulazione diversa del problema del controllo ottimo, detta Hamiltoniana, che
gode di una maggiore compattezza ed eleganza. Si introduce un nuovo stato definito da
ẋL (t) = L(x(t), u(t)), xL (0) = 0
e lo si giustappone a x in un nuovo vettore n + 1 dimensionale xTe = [xT , xTL ], talché l’indice obiettivo
diviene
J = Ψ(x(T )) + xL (T ) := Φ(xe (t))
22
CAPITOLO 3. CONTROLLO OTTIMO
La funzione hamiltoniana viene parimenti ridefinita da
H = pTe (t)ẋe (t) = pTL (t)ẋL (t) + pT (t)ẋ(t)
da cui si ha
"

³
´T


∂H

ẋ
(t)
=

e
∂pe

xe (0) =
"
³
´T


∂H


 ṗe (t) = − ∂xe
pe (T ) =
0
#
x(0)
1
#
Ψx (x(T ))
che definiscono interamente il problema assieme alla condizione di massimizzazione dell’hamiltoniano
û = arg maxu∈U H(x, p, u).
Si noti che, non essendo H funzione esplicita di xL , dalle equazioni differenziale per il costato
esteso si ricava ṗL = 0, pL (T ) = 1, da cui pL (t) ≡ 1, per cui la funzione hamiltoniana coincide con
quella precedentemente definita.
Sussiste infine la notevole relazione
d
dt H(x, p, t)
=
HpT ṗ + HxT ẋ + Ht
=
−HpT Hx + HxT Hp + Ht = Ht
da cui, se l’Hamiltoniano non dipende esplicitamente dal tempo (ovvero se il costo e la dinamica sono
tempo-invarianti), si ha che, in corrisopndenza di traiettorie ottimali, l’Hamiltoniano stesso è costante,
vale a dire è un integrale primo del moto.
Vi sono ovviamente altre possibili posizioni dei problemi di controllo ottimo.
In alcuni casi non ci si accontenta di pesare la distanza della configurazione finale da un valore
desiderato come fatto con Ψ(x(T )), ma si vuole imporre esattamente a x(T ) un dato valore. In
tal caso, la caratterizzazione sopra fornita della soluzione è ancora valida, laddove si rimuovano le
condizioni finali sul co-stato (il numero di equazioni totale non cambia). In problemi in cui solo
alcune componenti dello stato siano assegnate al tempo finale, saranno assegnate condizioni terminali
solo alle componenti del co-stato di indice diverso da quelle.
Un altro caso di particolare interesse è quello in cui il tempo finale T sia libero, e rappresenta
quindi una ulteriore variabile da determinare. Si noti dalla espressione dell’indice obiettivo
Z T
£
¤
J0 = Ψ(x(T )) +
H(p, x, u) − pT ẋ dt
0
che, in corrispondenza di un valore ottimo T̂ , la variazione di J0 dovuta ad una modifica dell’estremo
superiore di integrazione deve essere nulla.
Valendo la condizione di trasversalità al tempo finale pT (T )ẋ(T ) = 0, si trova la ulteriore condizione
necessaria per il tempo finale ottimo
³
´
H x(T̂ ), p(T̂ ), u(T̂ ) = 0.
3.2
3.2.1
Esempi
Sistemi Meccanici Hamiltoniani
Come primo esempio, per mostrare la generalità delle relazioni trovate, useremo la tecnica variazionale
appena descritta per ricavare le equazioni dinamiche del moto di un sistema conservativo, descritto
da coordinate generalizzate q.
3.2. ESEMPI
23
Si consideri dunque un sistema con Lagrangiana L(q, q̇) = T (q, q̇) − U (q), dove T (q, q̇) è l’energia
cinetica, e U (q) l’energia potenziale del sistema. Ci si propone di trovare la legge del moto di questo
sistema che minimizza l’integrale della Lagrangiana, seondo quello che in fisica viene detto “principio
di minima azione”. Assimiliamo quindi le velocità da determinare alla funzione di controllo incognita
u in un problema di controllo ottimo, cioè poniamo q̇ = u, e scriviamo
Z T
J=
(T (q, u) − U (q))dt
0
ovvero
H(q, u, p) = T (q, u) − U (q) + pT u
da cui
ṗT = −
∂L
∂H
=−
,
∂q
∂q
∂H
∂L
=
+ pT .
∂u
∂u
Differenziando rispetto al tempo e combinando le due equazioni si ottiene
µ
¶
d ∂L
∂L
−
= 0,
dt ∂ q̇
∂q
0=
ovvero le equazioni di Eulero-Lagrange per il moto di sistemi conservativi.
Se il lagrangiano L non è funzione esplicita del tempo, H è un integrale primo, quindi è una
costante del moto. Osservando che
H =T −U −
∂T
q̇
∂ q̇
e che l’energia cinetica è una forma quadratica omogenea delle velocità, del tipo T = q̇ T I(q)q̇, e che
quindi
∂T
∂ q̇
q̇ = 2T , si ottiene
−H = T + U = cost.
cioè, l’energia meccanica si conserva nel moto di un sistema conservativo.
Con piccole modifiche del procedimento precedente, è possibile trattare il caso in cui siano presenti
forze generalizzate non conservative Qnc , arrivando alla nota equazione
µ
¶
d ∂L
∂L
−
= Qnc .
dt ∂ q̇
∂q
3.2.2
Percorso minimo tra due punti
Ancora a livello illustrativo, si consideri il problema di trovare la più breve curva nel piano che unisca
due punti dati, ad esempio la origine del piano con un punto di coordinate (1, 1). Questo problema
può essere scritto in termini di controllo ottimo con alcuni semplici artifici.
Poniamo le coordinate del piano uguali a (t, x), e imponiamo le condizioni iniziali x(t = 0) =
0, x(t = 1) = 1. Sia inoltre ẋ(t) = u(t) la pendenza della curva da determinare. La lunghezza
p
√
dell’arco infinitesimo di curva corrispondente ad un incremento dt vale dx2 + dt2 ovvero (1 + u2 )dt.
Scriviamo quindi
ẋ
= u
x(0) =
0
x(1) =
1
R1√
J
=
0
1 + u2 dt
24
CAPITOLO 3. CONTROLLO OTTIMO
Si noti che il problema è qui di minimizzazione, e non di massimizzazione come discusso in precedenza.
Ciò non altera sostanzialmente la natura del problema: si può procedere o cambiando il segno del
funzionale J e massimizzando, ovvero semplicemente procedendo come detto in precedenza eccetto
per la ricerca del controllo ottimo, che sarà quello che minimizza l’Hamiltoniano.
L’Hamiltoniano del problema di minimizzazione vale
p
H = pT u + 1 + u2
L’equazione aggiunta è ovviamente ṗ = Hx = 0. Essendo fissato il valore terminale di x(1), non
è fissata la p(T ) (che dovrebbe essere determinata dalle altre condizioni, se necessario). Sappiamo
comunque che si avrà p(t) = cost.
Anche senza conoscere p, né risolvere Hu = 0, osserviamo che l’unico termine in H che dipende dal
tempo è u stesso. Dovendo u(t) minimizzare H per ogni t, ne risulta che û(t) = u = cost. Quindi la
pendenza della curva è costante, cioè la curva più breve è un segmento di retta. Trovatane la natura ,
la specifica soluzione si trova a partire dalle condizioni ai tempi iniziale e finale: si tratta ovviamente
della retta passante per i punti dati.
3.2.3
Posizionamento di una massa inerziale in tempo minimo
Consideriamo il problema di portare un corpo di massa m = 1 mobile su una retta senza attrito, da
una posizione iniziale x(0) = x0 all’origine nel minimo tempo possibile. Naturalmente, il problema ha
senso solo se la forza con cui si può agire sull massa è limitata.
Scrivendo la dinamica ẍ = u in forma di stato, si vuole dunque minimizzare il problema
ẋ1
= x2
ẋ2
= u
x(0)
= x0
x(T ) =
−1 ≤
0
u
≤1
RT
= 0 1dt
J
L’Hamiltoniano vale H = 1 + p1 x2 + p2 u, da cui immediatamente si ha
∂H
=0
ṗ1 = − ∂x
1
ṗ2 =
∂H
− ∂x
2
= −p1
⇒
p1 = const.
⇒
p2 (t) = pf2 + p1 (T − t)
Il controllo ottimo è dunque quello che minimizza
H = 1 + p1 x2 + p2 (t)u
e quindi vale
(
u = 1,
p2 < 0;
u = −1,
p2 > 0;
La condizione dei problemi a tempo minimo H(tf ) = 0, impone poi che pf2 u(T ) = −1 (si ricordi
che x(T ) = 0), quindi

f


 p2 > 0, u(T ) < 0
ovvero


 pf < 0, u(T ) > 0
2
3.2. ESEMPI
25
Si noti che il controllo ottimo non è definito negli istanti in cui si ha p2 (t) = 0. D’altronde,
l’andamento lineare di p2 (t) mostra che, eccettuato il caso in cui fosse p1 = 0 e p2 = pf2 = 0, che è da
escludere, si ha p2 (t) = 0 solo per un valore isolato t = t∗ nell’intervallo [0, T ]: il controllo ottimo è
quindi discontinuo in t∗ .
Si osserva anche che il segno del controllo può cambiare una sola volta nel corso di una esecuzione
del controllo.
Questo tipo di controllo, che usa solo i valori massimo e minimo dell’intervallo ammissibile, viene
detto bang-bang. La funzione p2 (t), i cui attraversamenti dello zero stabiliscono le commutazioni del
valore del controllo, viene detta funzione di switching.
Il controllo ottimo risulta quindi in una fase di accelerazione massima seguita da una fase di
decelerazione massima, o viceversa, a seconda delle condizioni iniziali.
La curva di switching può essere disegnata esplicitamente nel piano di stato, integrando all’indietro
le equazioni del moto ottimo nei due casi:
(tf −t)2
⇒ x1 = −x22 /2
2
2
(t−t )
− 2f ⇒ x1 = x22 /2
a) u(tf ) = −1 ⇒ x2 (t) = tf − t, x1 (t) = −
b) u(tf ) = 1 ⇒ x2 (t) = t − tf , x1 (t) =
La curva di switching è data dunque da due rami di parabola, uniti nell’origine.
Le curve ottime sono anch’esse archi di parabola, paralleli alle precedenti.
3.2.4
Massimo spostamento di una massa con costo quadratico del controllo
Consideriamo ancora una massa unitaria in moto rettilineo, ma sottoposta adesso a una spinta il cui
costo è proporzionale al quadrato della intensità. Si desidera massimizzare la distanza raggiunta dalla
massa, contemperando però tale obiettivo con la riduzione del costo, secondo opportuni pesi relativi.
26
CAPITOLO 3. CONTROLLO OTTIMO
Scriviamo dunque
ẋ1
=
x2
ẋ2
=
u
x(0) =
0
J
=
x1 (T ) −
Rt
0
2
w u2 dt,
dove w rappresenta il peso del costo del controllo relativamente al valore dell’obiettivo da massimizzare.
Si ha facilmente
H = p1 x2 + p2 u − w
u2
2
e le equazioni aggiunte
ṗ1 = −Hx1 = 0,
p1 (T ) = Ψx1 (x(T )) = 1;
ṗ2 = −Hx2 = −p1 , p2 (T ) = Ψx2 (x(T )) = 0.
da cui immediatamente p1 (t) ≡ 1 e p2 (t) = T − t. Dalla massimizzazione dell’hamiltoniano risulta
quindi
Hu = p2 − wu ⇒ û =
1
(T − t).
w
Il controllo ottimo decresce quindi linearmente nel tempo.
3.2.5
Percorsi minimi di veicoli a raggio di sterzo limitato
Consideriamo il modello cinematico di un veicolo su ruote



 ẋ(t) = u cos θ(t)
ẏ(t) = u sin θ(t)


 θ̇(t) = ω(t),
dove ξ(t) = (x(t), y(t), θ(t)) rappresentano le coordinate del veicolo e la direzione di moto corrente, u
e ω rappresentano, rispettivamente, le velocità lineari e angolari. Si considererà il caso in cui il veicolo
proceda a velocità costante u = U > 0.
La limitatezza dell’angolo di sterzata del veicolo si può modellare con una limitazione della velocità
angolare |ω| ≤
U
R.
Si suppongano note una configurazione iniziale del veicolo ξi = (xi , yi , θi ) e una
configurazione finale ξf = (xf , yf , θf ).
Vogliamo determinare il cammino di lunghezza minima tra le due configurazioni.
Il problema di controllo ottimo è posto come segue:

RT

min J = 0 1dt,





ẋ(t) = U cos θ(t),






 ẏ(t) = U sin θ(t),
θ̇(t) = ω(t),




|ω| ≤ U

R,




ξ(0)
=
ξi ,



 ξ(T ) = ξ .
f
L’Hamiltoniano del sistema risulta
H(p, ξ) = 1 + p1 U cos(θ) + p2 U sin(θ) + p3 ω
(3.1)
3.2. ESEMPI
27
Per il principio del minimo di Pontryagin, si ha che i controlli ottimi sono quelli che minimizzano
l’Hamiltoniano
ω̂ = arg
min
U
ω∈[− U
R,R]
H(p, ξ).
Una condizione necessaria per l’ottimalità è:
ṗ = −
∂H
∂ξ
Esplicitando la condizione sulle derivate del co-stato si ha che
ṗ1 = − ∂H
∂x = 0 ⇒ p1 = const. := d cos φ
ṗ2 = − ∂H
∂y = 0 ⇒ p2 = const. := d sin φ
ṗ3 = − ∂H
∂θ = p1 U sin θ − p2 U cos θ = U d sin(θ − φ)
Dalla condizione di ottimalità si ha che, all’interno dell’intervallo − U
R <ω <
U
R,
deve valere:
∂H
= p3 = 0
∂ω
Quindi se, lungo una traiettoria ottima, si ha controllo non saturato |ω| <
U
R,
allora ṗ3 = U d sin(θ −
φ) = 0 da cui segue che θ = φ ± π, quindi θ costante. Si ottiene quindi che, se |ω| 6=
U
R,
allora ω = 0,
e il tratto percorso dal veicolo è rettilineo.
Altrimenti, essendo l’Hamiltoniano funzione lineare di ω, il suo minimo non potrà trovarsi che sui
bordi dell’intervallo ammissibile per ω, e si avrà
(
U d sin(θ − φ) > 0 ⇒ ω = − U
R
U d sin(θ − φ) < 0 ⇒ ω =
U
R
In queste circostanze, quindi, il veicolo percorre tratti curvilinei di circonferenze di raggio massimo,
curvando a destra o a sinistra a seconda del segno della funzione di switching U d sin(θ − φ).
• Denotiamo con CR e CL un tratto di traiettoria corrispondente ad un arco di circonferenza di
raggio minimo (R) e pewrcorso in senso orario o antiorario, e con S un tratto rettilineo.
• Le traiettorie ottime vanno quindi cercate tra “parole” candidate costruite con le “lettere”
CR , CL , S. Ogni tratto ha una propria lunghezza, che deve essere trovata sulla base delle condizioni
al contorno e di ottimalità.
28
CAPITOLO 3. CONTROLLO OTTIMO
• Nel 1957, Dubins ha dimostrato il seguente teorema: Ogni curva continua con derivata continua
e derivata seconda continua a tratti, che colleghi due punti orientati nel piano con curvatura limitata,
è di lunghezza non inferiore a quella di una curva di tipo CR CL CR , o CL CR CL , oppure CSC, con
C ∈ {CR , CL }.
• Reeds e Shepp hanno esteso il risultato al caso in cui U possa variare in un intervallo |U | ≤ 1,
nel qual caso i percorsi minimi possono essere scritti come 46 diverse possibili parole di non più di
cinque lettere tra CR , CL , S, intervallate da non più di due inversioni di velocità.
Fly UP