navigazione di robot
Transcript
navigazione di robot
NAVIGAZIONE DI ROBOT
• La navigazione di robot implica la pianificazione del
movimento
– trovare il cammino più corto dalla posizione iniziale alla
posizione finale
• Semplificazione: mondo diviso in celle.
– Posizione iniziale: nota
– Posizione finale: nota
– Ostacoli: parzialmente noti
1
NAVIGAZIONE DI ROBOT
• Se la mappa è nota si può usare l’algoritmo A*
– Per ogni nodo n calcoliamo
• g(n): costo del cammino percorso
• h’(n): distanza stimata dal goal
– Espandiamo quindi i nodi in ordine crescente di
f(n) = g(n) + h'(n)
• Trova sempre il cammino più corto
– Ipotesi: euristica ottimistica
2
NAVIGAZIONE DI ROBOT
1"
2"
3"
4"
A"
5"
6"
7"
St:Start node"
G: Goal node"
B"
C"
G"
D"
E"
F"
G"
St"
H"
I"
3
NAVIGAZIONE DI ROBOT
1"
2"
3"
4"
A"
5"
6"
7"
St:Start node"
G: Goal node"
B"
C"
G"
D"
E"
F"
G"
St"
H"
I"
4
RIPIANIFICAZIONE CON A*
• Se il dominio è parzialmente noto, si pianifica tramite
A*, e in caso di cambiamenti del mondo, è necessario
ripianificare.
• Tramite A* si deve ripianificare da zero:
– inefficiente su grandi domini in cui i cambiamenti
avvengono di frequente
– molte risultati della precedente pianificazione si
possono riusare.
5
NAVIGAZIONE DI ROBOT
1"
2"
3"
4"
A"
6"
7"
St:Start node"
G: Goal node"
B"
C"
5"
"
G"
PIANO NON
PIU’ VALIDO"
D"
E"
F"
G"
St"
H"
I"
6
NAVIGAZIONE DI ROBOT
1"
2"
3"
4"
A"
6"
7"
St:Start node"
G: Goal node"
B"
C"
5"
"
G"
NUOVO PIANO
RICALCOLATO
DA ZERO"
D"
E"
F"
G"
St"
H"
I"
7
LIFELONG PLANNING A*
• Lifelong planning A* ripianifica più efficientemente di
A* perché ri-utulizza parti del piano precedente
• Perché riutilizzare parti del piano
– Perché i cambiamenti sono in genere piccoli
– Per migliorare l’efficienza
• Quali parti del piano si possono riutilizzare?
– quelle che non sono modificate
8
LIFELONG PLANNING A*
1"
2"
3"
4"
A"
5"
6"
7"
Piano di partenza"
B"
C"
D"
E"
G"
F"
G"
St"
H"
I"
9
LIFELONG PLANNING A*
1"
2"
3"
4"
A"
5"
6"
7"
Piano di partenza"
Riutilizzo 10
mosse"
B"
C"
D"
E"
G"
F"
G"
St"
H"
I"
10
LIFELONG PLANNING A*: algoritmo
Variabili:
LPA* mantiene una distanza dallo start g*(n) come
shortest path dallo start al nodo n
0
if n = start"
g*(n) =
minn’∈pred(n) (g*(n’) + c(n’,n))
otherwise"
Inoltre, LPA* mantiene una STIMA g(n) della distanza
dallo start che viene mantenuta in fase di replanning
dalla search precedente
11
LIFELONG PLANNING A*: algoritmo
LPA* mantiene una seconda distanza dallo start
rhs(n) con un passo di look ahead
rhs(n) =
0
if n = start"
minn’∈pred(n) (g(n’) + c(n’,n))
otherwise"
Un vertice n e’ detto LOCALLY CONSISTENT se
g(n) = rhs(n)
LPA* non rende tutti i vertici locally consistent. Usa
una euristica per aggiornare SOLO i g-values che
sono rilevanti per calcolare un cammino minimo
12
LIFELONG PLANNING A*: algoritmo
LPA* mantiene una lista di OPEN nodes su cui
calcolare la f(n) e selezionare sempre il nodo con
minore f(n)
Gli f(n) in LPA* vengono detti key. Ogni nodo ha una
key k(n) in forma di vettore [k1(n), k2(n)] dove
k1(n) = min[g(n), rhs(n)] + h(n)
A parita’ di f(n) si
k2(n) = min[g(n), rhs(n)]
scelgono nodi
con minore g(n))"
comparazione lessicografica tra keys
k(n) ≤ k(n’) se k1(n) < k1(n’) oppure se
k1(n) = k1(n’) e k2(n) < k2(n’)
13
LIFELONG PLANNING A*
procedure Main()
Inizializza i g(n) a infinito e i rhs(n) con
Initialize();
espressione precedente "
forever
ComputeShortestPath();
Prima volta A*"
wait for changes in edge costs;
for all directed edges (u; v) with changed edge costs
Update the edge cost c(u; v);
Aggiorna gli rhs-values e le keys dei vertici
UpdateVertex(v);
potenzialmente interessati dal cambio di edge
cost"
14
LIFELONG PLANNING A*
procedure ComputeShortestPath()
while (U.TopKey()<CalculateKey(sgoal) OR
rhs(sgoal) ≠ g(sgoal))
u = U.Pop();
if (g(u) > rhs(u)) /* vertice overconsistent */
g(u) = rhs(u); /* lo rende consistente*/
for all s ∈ succ(u) UpdateVertex(s);
else
g(u) = ∞;
for all s ∈ (succ(u) U {u}) UpdateVertex(s);
15
LIFELONG PLANNING A*: algoritmo
procedure CalculateKey(s)
return [min(g(s), rhs(s)) + h(s); min(g(s), rhs(s))];
procedure Initialize()
U=∅
for all s ∈ S rhs(s) = g(s) = ∞;
rhs(sstart) = 0;
U.Insert(sstart; [h(sstart); 0]);
procedure UpdateVertex(u)
if (u ≠ sstart) rhs(u) = mins’∈pred(u) (g(s’) + c(s’; u));
if (u ∈ U) U.Remove(u);
if (g(u) ≠ rhs(u)) U.Insert(u; CalculateKey(u));
16
D* LITE
• I robot si muovono su una mappa (grafo)
parzialmente nota
• Quando viene rilevato un nuovo ostacolo i pesi sugli
archi del grafo cambiano.
• D* lite è una versione di LPA* che aggiorna il valore
del cammino più corto a partire dalla posizione del
robot: aggiorna sstart
• Non fa ipotesi restrittive su come cambiano i pesi
degli archi:
– Crescente-decrescente
– Vicino o lontano al robot
– Cambiamento del mondo o rivisitazione della
conoscenza del robot
17
D* LITE
• Usato nei Mars Rover prototype nel 2002
• Lavoro: Sven Koenig, Maxim Lickhacev AAAI 2002
http://idm-lab.org/bib/abstracts/papers/aaai02b.pdf
• LPA*: Applet e articolo su AIJ
AIJ http://www.cs.cmu.edu/~maxim/files/aij04.pdf
http://homepages.dcc.ufmg.br/~lhrios/applet_lpa/index.html
18