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