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