Você está na página 1de 34

.

Machine Translated by Google

O Algoritmo D* para Planejamento em Tempo Real de


Travessias ótimas
Anthony Stentz

CML-RI-TR-94-37

O Instituto de Robótica
Universidade Carnegie Mellon
Pittsburgh, Pensilvânia 15213
setembro de 1994

CC 1994 Carnegie Mellon

Esta pesquisa foi patrocinada pela ARPA, sob os contratos “Perception for Outdoor Navigation” (contrato número DACA76-89-
C-0014. monitorado pelo US Army TEC) e “Unmanned Ground Vehicle System” (contrato número DAAE07-90-C-RO59 ,
monitorado pela TACOM). As opiniões e conclusões contidas neste documento são do autor e não devem ser interpretadas
como representando políticas oficiais , expressas ou implícitas. da ARPA ou do governo dos Estados Unidos.
Machine Translated by Google

Índice _ _

1.0 Introdução 5

2.0 O Algoritmo D* Básico 7


2.1 Intuição 7
2.2 Definiçõ 5 _ _ _
________________
_________

6.0 Conclusões 28
Machine Translated by Google

Lista de Figuras

Figura 1 Estados invalidados no gráfico 7


Figura 2 Propagação dos estados RAIS~ e LOWER
Figura 3 A atualização do gráfico para o robô está concluída 8 9
Figura 4 Propagação de estado RAISE focalizada 14
Figura 5 Estados INFERIORES Focados Alcançam o Estado do Robô 15
Figura 6 Calculando um limite inferior em A”) para o movimento do robô 16
Figura 7 Calculando valores de viés para A”) 17
Figura 8 Ambiente Desordenado 20
Figura 9 Algoritmo D* Básico 21
Figura 10 Algoritmo D* Focado 22
Figura 11 Percurso Óptimo Onisciente 23
Figura 12 Travessia Optimista Optimista 24
Figura 13 Ambiente Típico para Comparação 25
Machine Translated by Google

Abstrato

Encontrar o caminho de menor custo através de um gráfico de estados é fundamental para muitos problemas, incluindo o planejamento de
rotas para um robô móvel. Se os custos do arco mudarem durante a travessia, o restante do caminho pode precisar ser replanejado. Tal é o
caso de um robô móvel equipado com sensores com informações incompletas ou imprecisas sobre seu ambiente. À medida que o robô
adquire informações adicionais por meio de seus sensores, ele tem a oportunidade de revisar seu plano para reduzir o custo total da
travessia. Se as informações anteriores forem grosseiramente incompletas ou imprecisas, o robô poderá descobrir informações úteis em
quase todos os dados do sensor . Durante o processo de replanejamento. o robô deve parar e esperar que o novo caminho seja calculado
ou continuar a se mover na direção errada ; portanto: o replanejamento rápido é essencial.
Este artigo descreve um novo algoritmo, D*, capaz de planejar transições ótimas em tempo real por meio de expansão de estado focalizada.
D' repara os planos rapidamente aproveitando o fato de que a maioria das correções de custo do arco ocorrem nas proximidades do robô e
o caminho precisa apenas ser replanejado para o estado atual do robô. D* pode ser usado não apenas para planejamento de rotas, mas
também para qualquer problema de otimização de custo baseado em gráfico para o qual os custos do arco mudam durante a travessia do
caminho da solução.
Machine Translated by Google

1.0 Introdução

O problema de planejamento de caminho pode ser definido como encontrar uma sequência de transições de estado através de um
grafo de algum estado inicial para um estado objetivo. ou determinar que tal sequência não existe. O caminho é ótimo se a soma dos
custos de transição . também custos de arco callcd. é mínimo em todas as sequências possíveis no gráfico. Se durante a “travessia” do
caminho, um ou mais custos de arco no gráfico forem descobertos como incorretos . a parte restante do caminho pode precisar ser
replanejada para preservar a otimização. Uma travessia é ótima se cada transição na travessia fizer parte de um caminho ótimo para o
objetivo, assumindo que, no momento de cada transição, todas as informações conhecidas sobre os custos do arco estão corretas.

Uma aplicação importante para este problema, e que servirá como exemplo central ao longo do artigo. é a tarefa de planejar o caminho
para um robô móvel equipado com um sensor, operando em uma mudança. ambiente desconhecido ou parcialmente conhecido. Os
estados no gráfico são localizações de robôs e os valores de arco são os custos de movimentação entre as localizações, com base em
alguma métrica, como a distância. tempo, energia gasta. risco. etc. O robô começa com uma estimativa inicial dos custos do arco que
compõem seu “mapa”, mas desde que o ambiente seja apenas parcialmente conhecido ou mutável. alguns dos custos do arco
provavelmente estarão incorretos . À medida que o robô adquire dados do sensor, ele pode atualizar seu mapa e replanejar o caminho
ideal de seu estado atual até a meta. É importante que o replanejamento seja rápido. já que durante este tempo o robô deve parar ou
continuar a se mover ao longo de um caminho abaixo do ideal.

O campo de planejamento de caminhos tem recebido atenção considerável na literatura de pesquisa (ver Latombe [51 para uma boa
pesquisa), mas apenas recentemente o problema de planejamento em ambientes desconhecidos, parcialmente conhecidos ou
dinâmicos foi abordado. Os algoritmos podem ser divididos em duas classes. A primeira classe consiste em algoritmos que são
computacionalmente rápidos e eficientes em termos de memória, mas que produzem percursos abaixo do ideal. Goto e Stentz [2]
geram um caminho “global” usando as informações conhecidas e então tentam contornar “localmente” os obstáculos na rota
detectados pelos sensores. Se a rota estiver completamente obstruída. um novo caminho global pode ser produzido. Lumelsky [7]
inicialmente assume que o ambiente é desprovido de obstáculos e então move o robô diretamente em direção ao objetivo. Se um
obstáculo obstruir o caminho. o robô se move ao redor do perímetro até encontrar o ponto no obstáculo mais próximo do objetivo . O
robô então passa a se mover diretamente em direção ao objetivo novamente. Pirzadeh 191 adota uma estratégia em que o robô
vagueia pelo ambiente até descobrir o objetivo. O robô se move repetidamente para o local adjacente com menor custo e incrementa o
custo de um local cada vez que o visita para penalizar travessias posteriores do mesmo espaço. Korf [4] usa informações iniciais do
mapa para estimar o custo para o deus para cada estado e atualiza-o eficientemente com custos de retrocesso à medida que o robô
se move pelo ambiente. Esses algoritmos são computacionalmente rápidos porque as operações de “replanejamento” são principalmente
decisões locais sobre qual caminho seguir . Pouca ou nenhuma informação de estado é retida durante a travessia, então os algoritmos
são eficientes em termos de memória. Por causa do escopo local desse replanejamento, no entanto. a completude pode ser garantida,
mas a otimalidade não. Essa subotimização pode ser extrema em alguns casos.

A segunda classe de algoritmos garante uma travessia ótima, mas com maior custo computacional e de memória. Um algoritmo planeja
um caminho inicial com A* [SI ou a transformação de distância 131 usando as informações do mapa anterior. move o robô ao longo do
caminho até que ele atinja o objetivo ou seus sensores descubram uma discrepância entre o mapa e o ambiente, atualize o mapa e
replaneje um novo caminho do estado atual do robô até o objetivo. Embora esse replanejador de força bruta seja ideal. pode ser
extremamente ineficiente, especialmente em ambientes expansivos onde o objetivo está distante e há pouca informação de mapa.
Zelinsky 1151 aumenta a eficiência usando uma quad-tree [ll] para representar o espaço livre e o espaço de obstáculos. reduzindo
assim o número de estados a serem pesquisados no espaço de planejamento. Essa abordagem é subótima ou ineficiente, no entanto,
se os custos de estado para estado para mover pelo ambiente variam em um continuum.

Boult [i] mantém um mapa de custo ótimo desde a meta até todos os estados do ambiente. assumindo que o ambiente é perseguido
(finito). Quando discrepâncias são descobertas entre o mapa e o ambiente. o algoritmo atualiza apenas a parte afetada do mapa de
custo. A representação do mapa é limitada a obstáculos poligonais e espaço livre.
Trovato 141 e Ramalingam e Reps 1101 estendem essa abordagem para lidar com gráficos com custos de arco variando ao longo de
um contínuo. A limitação dessa classe de algoritmos é que toda a parte afetada do mapa deve ser reparada antes que o robô possa
retomar o movimento e subsequentemente fazer correções adicionais no mapa. Assim, os algoritmos são ineficientes quando o robô
está próximo ao objetivo e as porções afetadas do mapa possuem longas “sombras”.
Machine Translated by Google

Este artigo apresenta um novo algoritmo, D*, para gerar transversais ótimas em tempo real através de um grafo com custos de arco
alterados ou atualizados. D* aproveita o fato de que a maioria das correções de custo do arco ocorre nas proximidades do robô, e
apenas a parte do caminho dessas correções até a localização atual do robô precisa ser replanejada. D* mantém uma parcial. mapa
de custo ideal limitado aos locais que provavelmente serão úteis para o robô. Da mesma forma, a reparação do mapa de custos é
geralmente parcial. reentrante e limitado apenas aos estados que provavelmente produzirão um novo. caminho ideal para o robô. D*
estabelece condições para determinar quando o reparo pode ser interrompido, seja porque um novo caminho foi concluído ou o
antigo ainda é ótimo. Assim, D* é muito eficiente cumulativamente e de memória. e também funciona em ambientes ilimitados .

O algoritmo é formulado em termos de um problema de encontrar caminho ótimo repetido dentro de um grafo direcionado. onde os
arcos são rotulados com valores de custo de transição que podem variar ao longo de um continuum. As correções de custo do arco
(e.& de um sensor) podem ser feitas a qualquer momento, e o conhecido, medido. e os valores de arco estimados compõem o mapa
do ambiente. O algoritmo pode ser usado para qualquer representação de planejamento, incluindo gráficos de visibilidade [SI e
estruturas de células de grade. O artigo começa com a forma básica do algoritmo introduzido por Stentz [ 131 e então descreve
novas extensões para ele que melhoram sua eficiência computacional e de memória. Seguem exemplos que ilustram o alEorithm em operação.
São apresentados resultados experimentais que comparam diversas variações de D* ao replanejador de força bruta. Finalmente.
conclusões são tiradas.
Machine Translated by Google

2.0 O Algoritmo D* Básico


O algoritmo é denominado D* porque se assemelha a A* [8], exceto que é dinâmico no sentido de que os custos do arco podem mudar
durante a travessia do caminho da solução. Desde que a travessia esteja devidamente acoplada ao processo de replanejamento, é
garantido que ela será ótima. Esta seção começa com a intuição por trás do algoritmo, define a notação usada. e apresenta D* conforme
descrito em Stentz [13].

Figura 1 : Estados invalidados no gráfico

2.1 Intuição

Para entender D*. considere como A* resolve o seguinte problema de planejamento de trajetória de robô. A Figura 1 mostra um
gráfico de oito conexões representando um espaço cartesiano de localizações de robôs. Os estados no gráfico, representados por
cortes. são localizações de robôs e os arcos codificam o custo de movimentação entre os estados. As regiões brancas são locais
conhecidos por estarem em espaço livre. O custo do arco para mover entre estados livres é um pequeno valor denotado por VAZIO.
As regiões cinzas são locais de obstáculos conhecidos, e os arcos conectados a esses estados recebem um valor
proibitivamente alto de OBSTACLE. O pequeno quadrado preto é um portão fechado que se acredita estar aberto (;.e., valor
VAZIO ). O robô é do tamanho de um ponto e ocupa apenas um local por vez . Deve- se notar que o planejamento com tamanho e
forma diferentes de zero pode ser reduzido a um problema de planejamento pontual [6]. Unfocussed A* pode ser usado para computar ,
os custos de caminho ótimo do objetivo, G para todos os estados no espaço dado o conjunto inicial de custos de arco, como mostrado
na figura As setas indicam as transições de estado ótimas; portanto, o caminho ideal para qualquer estado pode ser recuperado
seguindo as setas até o objetivo. Como o portão fechado é considerado aberto, A* planeja um caminho através dele.
Machine Translated by Google

O robô começa em algum local inicial e começa a seguir o caminho ideal para o objetivo. No local R I , o sensor do robô descobre que o
portão entre os dois grandes obstáculos está fechado, Isso corresponde a um valor de arco incorreto no gráfico: em vez de VAZIO, ele tem
um valor muito maior de GATE, representando o custo da primeira abertura do portão e, em seguida, movendo-se através dele. Todos os
caminhos através deste arco são (possivelmente) não ideais, conforme indicado pela região rotulada. A* poderia ser usado para recalcular
o mapa de custos, mas isso é ineficiente se o ambiente for grande e/ou a meta estiver distante . Outra abordagem é marcar os estados
afetados como inválidos e colocar os estados vizinhos válidos na lista OPEN . e desenvolver novos caminhos ótimos na área invalidada por
meio da expansão de estado [l][lO][l4]. Essa abordagem geralmente é melhor do que recalcular o mapa de custo, mas estamos
interessados apenas em reparar os caminhos ideais até a localização atual do robô e, em seguida, continuar a mover o robô. O restante
dos estados invalidados só precisa ser processado se o robô for forçado a se aventurar nessa área; portanto, o reparo deve ser incremental
e reentrante.

Figura 2: Propagação dos estados RAISE e LOWER

D* fornece ambos os recursos. Como A*, ele mantém uma lista ABERTA de estados para expansão; no entanto. esses estados consistem
em dois tipos: RAISE e LOWER (consulte a Figura 2). Os estados RAISE transmitem aumentos no custo do caminho devido a um valor de
arco aumentado, e os estados LOWER reduzem os custos e redirecionam as setas para calcular novos caminhos ideais. Os estados
RAISE propagam o aumento do custo do arco pelos estados invalidados, adicionando o valor de GATE a todos os caminhos que passam
por ele. Os estados RAISE ativam estados LOWER vizinhos que varrem para trás para reduzir custos e redirecionar ponteiros. Os estados
LOWER computam novos. caminhos ótimos para os estados previamente levantados.

Os estados LOWER são colocados na lista OPEN pelo valor de custo do caminho atual (ou seja, custo do estado para o objetivo), e os
estados R.4ISE são colocados na lista pelo anterior. valor de custo de caminho não aumentado. Os estados da lista são processados na ordem
Machine Translated by Google

de valor crescente . A intuição é que os custos de caminho ótimos anteriores dos estados RAISE definem um limite inferior nos custos
de caminho dos estados LOWER que eles podem descobrir. Por isso. se os custos de caminho dos estados LOWER atualmente na
lista OPEN excederem os custos de caminho anteriores dos estados RAISE , vale a pena processar os estados RAISE para
descobrir (possivelmente) um estado LOWER melhor . Observe na figura que a seta da meta para a frente de onda do estado RAISE
é igual em comprimento à seta para a frente de onda do estado LOWER .

Figura 3: O reparo do gráfico para o robô está concluído

O processo pode terminar quando o valor mais baixo na lista OPEN for igual ou superior ao custo do caminho do robô, uma vez que
expansões adicionais não podem encontrar um caminho melhor para o objetivo. Na Figura 3, a propagação do estado LOWER atingiu
a localização do robô e um novo caminho ideal foi calculado para o objetivo. Se o valor de GATE tivesse sido menor. o caminho ideal
do robô até o objetivo poderia ter passado pelo portão, em vez de contornar os obstáculos. Nesse caso, o valor mais baixo na lista
OPEN teria igualado ou excedido o custo de caminho elevado do robô antes que os estados LOWER atingissem o robô. Assim, o
processo teria terminado com o caminho original para a meta intacto.

Depois que um novo caminho ideal é calculado ou o antigo é determinado como válido, o robô pode continuar a se mover em direção
ao objetivo. Observe na figura que apenas uma parte do mapa de custos foi reparada. É possível que, em um ponto posterior da
travessia, o robô descubra obstáculos que o forcem de volta à região invalidada e não reparada. Os estados RAlSE e LOWER
colocados na lista OPEN desses novos obstáculos serão ''misturados'' com os estados OPEN das atualizações de custo de arco
anteriores, mas não totalmente propagadas .
Machine Translated by Google

10

D* suporta várias atualizações de custo parcialmente propagadas classificando os estados na lista OPEN pelo mínimo de todos os
valores de custo de caminho assumidos pelo estado imediatamente antes da inserção na lista OPEN e enquanto residente na lista.
Assim, os estados RAISE e LOWER propagam aumentos e reduções de custo , respectivamente, do valor de custo de caminho mais
baixo para o mais alto no mapa, independentemente da ordem em que as correções de custo de arco são feitas e a extensão em que
são propagadas. É até possível que os estados LOWER se tornem estados RAISE e vice-versa no processo. Se o robô se aventurar
em uma região anteriormente invalidada, o algoritmo propaga todas as atualizações de custo registradas até esse ponto nessa região
para calcular um novo caminho ideal para a meta.

2.2 Definições
Para formalizar essa intuição, introduzimos a seguinte notação e definições. O espaço do problema pode ser formulado como um
conjunto de estrelas denotando localizações de robôs conectadas por am direcional , cada uma com um custo associado. O
robô começa em um determinado estado e se move através de arcos (incorrendo no wst da travessia) para outros estados até
atingir o estado objetivo , denotado por G. Todo estado X, exceto G , tem um ponteiro de retorno Io, um próximo estado Y
denotado por b(X ) = Y. D' usa backpointers para representar caminhos para o objetivo. O custo de percorrer um arco do
estado Y para o estado X é um número positivo dado pela função arco cosr c(X, n, Se Y não tiver um arco para X, então c(X. Yj
é indefinido. Dois estados X e Y são vizinhos no espaço se c(X, y) ou c(Y, XI for definido.

Como A*, D* mantém uma lista ABERTA de estados. A lista OPEN é usada para propagar informações sobre mudanças na função
de custo do arco e para calcular custos de caminho para estados no espaço. Cada estado X tem um rebocador associado rG7. tal
que r(X) = NE\+' se X nunca esteve na lista OPEN , t(X) = OPEN se X está atualmente na lista OPEN , e t(x) = CLOSED se X não
está mais na lista lista ABERTA . Para cada estado X. D* mantém uma estimativa da soma dos custos do arco de X a G dada pela
função pafh cosf h(G, X). Dadas as condições adequadas, essa estimativa é equivalente ao custo ótimo (mínimo) do estado X
para G. Para cada estado X na lista OPEN (ou seja, ftX) = OPEN), a função chave , k(G, Xj , é definido para ser igual ao mínimo
de h(F, Xj antes da modificação e todos os valores assumidos por h(G, X) desde que X foi colocado na lista OPEN . A função
chave classifica um estado X na lista OPEN em um de dois tipos: um estado RAISE se k(G, XI < h(C, Xj, e um estado LOWER se
k(G, Xj = h(G, Xj, D*) usa os estados RAISE na lista OPEN para propagar informações sobre o custo do caminho aumenta e
estados LOWER para propagar informações sobre reduções de custo de caminho. A propagação ocorre através da remoção
repetida de estados da lista OPEN . Cada vez que um estado é removido da lista, ele é expandido para passar as mudanças de
custo para seus vizinhos. Esses vizinhos são, por sua vez, colocados na lista OPEN para continuar o processo.

Os estados na lista OPEN são classificados por seu valor de função chave . O parâmetro kmin é definido como min (k(X)j para
todo X tal que r(Xj = OPEN. O parâmetro kmin representa um limite importante em D*: custos de caminho menores ou iguais a
kn,in são ótimos e aqueles maiores que kmin podem não ser ideais . O parâmetro ko,d é definido para ser igual a kmln antes da
remoção mais recente de um estado da lista OPEN . Se nenhum estado foi removido, k,,ld é indefinido.

Uma ordenação de estados denotada por {X,,XJ é definida como uma sequência se b(Xi+ = Xj para todo i tal que I < ;< N e Xi # X,
para a11 (id7 tal que 1 5 i j < N . Assim, uma sequência define um caminho de backpointers de X,,, para X, . Uma sequência
[X,,X,,j é definida como monotônica se (r(XJ = FECHADO e h(G,Xi)<h (G.Xi+,j) ou (f(Xi) = OPEN e k(C, Xi) < h(G. Xj+ para
todo i tal que 1 5 i < N. D* constrói e mantém uma sequência monotônica {G, W , representando custos decrescentes do caminho
atual ou de limite inferior. para cada estado X que está ou estava na lista OPEN . Dada uma sequência de estados [X,,X,J ,statexi
é um ancestral do estadoX, se l~i<jI.Nandadescendanrofx.se 1 Sjci5N
EU

Para funções de dois slate envolvendo o estado objetivo, a seguinte notação abreviada é usada: h(m h(G, X) e k(X) k(G, x). Da
mesma forma, para sequências a notação (X) = [GX ) é usado. A notação fi"j é usada para se referir a uma função independente
de seu domínio.

2.3 Descrição do Algoritmo O


algoritmo Basic D* consiste basicamente de duas funções: PROCESS-STATE e MODIFY-COST.
PROCESS -STATE é usado para calcular custos de caminho ótimos para o objetivo, e MODIFY-COST é usado para alterar a
função de custo de arco c("j e inserir os estados afetados na lista OPEN . Os algoritmos para PROCESS-STATE e
MODIFY-COST são apresentados abaixo. As rotinas incorporadas são MIN(a, 6) , que retorna o mínimo dos dois valores escalares
a e b; LESS(0, bj , que retorna TRUE se a for menor que b e FALSE caso contrário; COST(X) I que retorna 1107 para o estado
X: MIN-STATE, que retorna o estado na lista OPEN com valor mínimo de k(") (NULL se
Machine Translated by Google

11

a lista está vazia); MIA'- VAL, que retorna kmin para a lista ABERTA (NO- VAL se a lista estiver vazia): DELETEIX), que exclui o
estado X da lista ABERTA e define r(X) = FECHADO; e INSERnX, hnew), que calcula
k(X) = /I,,~~ se r(m = NOVO, k(X) = M/ N(k(X), hn,J se r(X) = ABRIR. e !dx) = MIN( h(X), hnew) se r (X) = CLOSED, define h(X) =
hnew e t(X) = OPEN. e coloca ou reposiciona o estado X na lista OPEN classificada por k(")

Os nomes de função MENOS e COST são usados em vez de < e h("), respectivamente, uma vez que sua semântica é redefinida na
Seção 3.3 para operar em vetores em vez de escalares.

Na função PROCESS-STATE nas linhas LI a L3, o estado X com o menor valor k(") é removido da lista OPEN.Se X for um estado
LOWER (Le., k(X) = h(X)). seu custo de caminho é ótimo, pois h(X) é igual ao antigo k,nin. Nas linhas L8 a L13, cada vizinho Y de X
é examinado para ver se seu custo de caminho pode ser reduzido. Além disso, os estados vizinhos que são NOVOS recebem um
valor de custo de caminho inicial e as alterações de custo são propagadas para cada vizinho Y que tem um ponteiro de retorno para
X, independentemente de o novo custo ser maior ou menor que o antigo. Uma vez que esses estados são descendentes de X.
qualquer alteração no caminho O custo de X também afeta seus custos de caminho . O backpointer de Y é redirecionado, se
necessário, para que a sequência monotônica { Y) seja construída. Todos os vizinhos que recebem um novo custo de caminho são
colocados na lista OPEN , para que possam propagar as mudanças de custo para seus vizinhos.

Função: PROCESS-STATE 0

L1 X = ESTADO MIN( )
L2 se X = NULL então retorne NO- VAL

L3 kold = k(X); APAGAR(X)


LA se k~tld<h(x) então
L5 para cada vizinho Y de X: se
L6 r(Y) #NEW e h(Y) 5 kold e h(Xj > h(n + c(Y, x) então b(X) = Y;
Lll h(X) = h (Y) + c(Y, Xj
L8 se keld = NX) então
L9 para cada vizinho Y de X : se
L10 r(Y) = NOVO ou
L11 (b(0 =Xandh(Y)th(X)+c(X,Yl)ou
L12 (b(Y)tX eh(Y)>h(x)+c(X,Y))então
LI 3 b(Y) = X; INSERT(Y, h(X) + c(X, Y))
L14 mais
L15 para cada vizinho Y de X: se
L16 r(Y) = NOVO ou
L17 (b(n =Xandh(Y)#h(X)+c(X,Yl)então
L18 b(Y) = X; INSERT(Y, h(X) + c(X, Y))
L19 outro

L20 se b(n # X e h(Yl > h(X) + c(X, Y) e t(X) = FECHADO então


L2 1 / NSERT(X, h(X))
L22 outro

L23 ifb(Y)tX eh(X)>h(Y)+c(Y,X) e


L24 r(Y) = FECHADO e h(Y) > kord então
L25 INSERIR(Y, h(Y))
L26 retorna MIN- VAL( )

Se X for um estado RAISE , seu custo de caminho pode não ser ótimo. Antes de X propagar mudanças de custo para seus vizinhos,
seus vizinhos ótimos são examinados nas linhas LA até L7 para ver se h(X) pode ser reduzido. Nas linhas LE a L18, mudanças de custo
Machine Translated by Google

12

são propagados para NOVOS estados e descendentes imediatos da mesma forma que para os estados INFERIORES . Se
X for capaz de reduzir o custo do caminho de um estado que não seja um descendente imediato (linhas L20 e LZI), X é
colocado de volta na lista ABERTA para futura expansão. Esta ação é necessária para evitar a criação de um loop fechado
nos backpointers [ 121. Se o custo do caminho de X puder ser reduzido por um vizinho abaixo do ideal (linhas L23 a L25), o
vizinho é colocado na lista OPE,\' . Assim, a atualização é "adiada" até que o vizinho tenha um custo de caminho ótimo. Para
ajudar o leitor a entender esse processo de propagação de custos, uma versão simplificada, mas menos eficiente
computacionalmente, do PROCESS-STATE está incluída no Apêndice.

Na função MODIFY-COST, a função de custo do arco é atualizada com o valor alterado. Uma vez que o custo do caminho
para o estado Y mudará. X é colocado na lista OPEN . Quando X é expandido via PROCESS-STATE, ele calcula um novo
h(Y) = /r(X)+c(X, v) e coloca Y na lista OPEN . Expansões de estado adicionais propagam o custo para os descendentes de
Y

Função: MODIFY-COST (X, Y, cval)


LIc (X, 0 = cvaf
L2 se r(x) = FECHADO então INSERT(X, h(x))
L3 retorna WIN- VAL( )

A função MOVE -ROBOT ilustra como usar PROCESS-STATE e MODIFY - COST para mover o robô do estado S através
do ambiente para G ao longo de uma travessia ideal. Nas linhas LI a L3 do MOVE-ROBOT. rt") é definido como NEW para
todos os estados, h(G) é definido como zero e G é colocado na lista OPEN . PROCESS-STATE é chamado repetidamente
nas linhas L5 e L6 até que um caminho inicial seja calculado para o robô estado (Le.. r (3 = FECHADO) ou é determinado
que não existe nenhum caminho (ic, vol = NO- VAL e (3 = NOVO). O robô então passa a seguir os ponteiros de hack na
sequência { R) até ele atinge a meta ou descobre uma discrepância (linhas L10 e L11) entre a medição do .wnsor de um
custo de arco s(0) e o custo de arco armazenado c(") (por exemplo, devido a um obstáculo detectado). Observe que
esses discrepâncias podem ocorrer em qualquer lugar, não apenas na sequência {R} , MODIFY - COST é chamado para
corrigir c(0) e colocar os estados afetados na lista OPEN . PROCESS-STATE é então chamado repetidamente na linha
L13 até uulth(R) para propagar custos e calcular uma possível nova sequência {R) para o objetivo. O robô continua
seguindo os ponteiros de volta na sequência em direção ao gol. A função retorna GOAL- REACHED se a meta
for encontrada e NO - PATH se for inalcançável.

Função: MOVE-ROBOT (S, G)


Ll para cada estado X no gráfico:
L2 r(X) = NOVO
L3 /NSERT(C, 0)
L4 Val = 0
L5 enquanto r(S) # FECHADO e volt NO - VAL
L6 "01 = ESTADO DO PROCESSO( )

L7 se for) = NEW então retorne NO- PATH


L8 R=S
L9 enquanto R # C :

LlO para cada (X,n tal que s(X, Y) # c(X, n :


LII ual = MODIFICAR - CUSTO(X, Y, s(X, Y))

L12 while LESS(vaf, COST(.?)) e val # NO - VAL


L13 ,,a1 = ESTADO DO PROCESSO( )
L14 R = b(R)
L15 retorno META ALCANÇADA
Machine Translated by Google

13

11 deve -se observar que a linha Ll em MOVE - ROBOT só detecta a condição de que não exista sequência de arcos do estado
do robô até a meta, se por exemplo, o grafo estiver desconectado. Não detecta a condição de que todos os caminhos para a
meta estejam obstruídos por obstáculos. Para fornecer essa capacidade . arcos obstruídos podem receber um grande valor
positivo de OBSTACLE e arcos desobstruídos podem receber um pequeno valor positivo de E'MPTY. OBSTÁCULO deve ser
escolhido de forma que exceda a maior sequência possível de arcos VAZIOS no grafo. Nenhum caminho desobstruído existe
para o objetivo de S se h(S) > OBSTÁCULO após sair do loop na linha L5. Da mesma forma, nenhum caminho desobstruído
existe para o objetivo de um estado R durante a travessia se h(R) t OBSTÁCULO após sair do loop na linha L12.
Machine Translated by Google

14

3.0 O Algoritmo D' Focado

3.1 Intuição

O algoritmo Basic D* na seção anterior propaga as alterações de custo através dos estados invalidados sem considerar
quais expansões beneficiarão o robô em sua localização atual. Assim como A*, D* pode usar heurísticas para focar a busca
na direção do robô e reduzir o número total de expansões de estado . Deixe o foco funcionar. heuristic gLY R) seja o custo
estimado do caminho da localização do robô R até X. Defina uma nova função. o custo estimado do caminho do robô , para
ser AX. R ) = h(G. X) + g(X. R) e classifique todos os estados INFERIORES na lista ABERTA aumentando o valor de r) . A função
JX, R) é o custo de caminho estimado do estado R através de X para G . Desde que g(") satisfaça a resolução monótona
(Le., g(G, G) = 0 e g(G. - g(G, l7 < c(Y, XI para todo (X, u) tal que é c(Y. X) definido), então, como k(C, AI é ideal quando o
estado INFERIOR X é removido da lista ABERTA , um caminho ideal será calculado para R [SI

Figura 4: Propagação de estado RAISE focada

No caso de estados RAISE , o valor h(") anterior define um limite inferior nos valores h(") dos estados LOWER que eles podem
descobrir (consulte a Seção 2.1) ; portanto, se a mesma heurística de focalização g(0) for usada para ambos os tipos de
estados, os valores A") anteriores para os estados RAISE definem limites inferiores nos valores f(") para os estados LOWER
que eles podem descobrir. Assim, se os valores fl") dos estados LOWER na lista OPEN excederem os valores A') anteriores
dos estados RAUE , então é trabalhoso processar os estados RAISE para descobrir (possivelmente) melhores estados
LOWER . Com base nesse raciocínio, o Os estados RAISE devem ser classificados na lista OPEN por flX,R) = klG,X)+g[X,R) .
Machine Translated by Google

15

k(G, ,-q = /t(G, x) para estados LOWER , a definição de estado RAISE para A') é suficiente para ambos os tipos de estados. Para evitar
ciclos nos backpointers, deve-se notar que os empates em A“) são ordenados aumentando k() na lista OPEN [12].

O processo pode terminar quando o valor mais baixo na lista OPEN for igual ou superior ao custo de caminho do robô, uma vez que as
expansões subsequentes não podem encontrar um estado INFERIOR que 1) tenha um custo de caminho baixo o suficiente e 2) esteja
"próximo" o suficiente para o robot para poder reduzir o custo do caminho do robô quando ele o alcança por meio de expansões subsequentes.
Observe que esse é um corte mais eficiente do que o descrito na Seção 2.1, que considera apenas o primeiro critério.

Figura 5: Estados INFERIORES Focados Alcançam o Estado do Robô

A Figura 4 mostra o mesmo exemplo da Figura 2, exceto pelo uso de uma pesquisa focada. Todos os estados na frente de onda do estado
RAISE têm aproximadamente o mesmo valor de A”) . Observe que para os dois estados RAISE selecionados, as setas que vão do objetivo
aos estados RAISE e de volta ao robô têm o mesmo comprimento. A frente de onda da Figura 4 é mais “estreita” do que a da Figura 2 , pois
a inclusão do custo de retorno ao robô penaliza os flancos largos da Figura 2.

Na Figura 5, os estados LOWER ativados pela frente de onda do estado RAISE foram varridos dos lados externos dos obstáculos para
computar um novo. caminho ideal para o robô. Observe que as duas frentes de onda são estreitas e focadas na localização do robol. De
novo. os comprimentos das setas para as duas frentes de onda e de volta para o robô são iguais.

Compare a Figura 5 com a Figura 3. Observe que ambas as frentes de onda dos estados RAISE e LOWER cobriram menos terreno para a
busca focada do que a busca não focada para calcular um novo. caminho ótimo para R . Aí está a eficiência do algoritmo Focussed D* .
Machine Translated by Google

16

O problema de focalizar a busca é que, uma vez que um novo caminho ideal é calculado para a localização do robô, ele se move para
um novo local. Se o sensor do robô descobrir outra discrepância no custo do arco, a busca deve se concentrar na nova localização do
robô. Mas os estados que já estão na lista OPEN estão focados no local antigo e têm valores 8(') e j(') incorretos. Uma solução é
recalcular g(") e fl") para todos os estados na lista OPEN toda vez que o robô se mover e novos estados forem adicionados via
MODIFY- COST . Essa abordagem é ineficiente, pois reclassifica a lista OPEN , exigindo, na pior das hipóteses, operações II(NlogM ,
onde N é o número de estados na lista OPEN . Com base em evidências empíricas, esse cálculo adicional mais do que compensa a
economia obtida por um foco procurar.

A abordagem neste artigo é aproveitar o fato de que o robô geralmente move apenas alguns estados entre as chamadas para
MODIFYCOST , de modo que os valores g(") e ft") têm apenas uma pequena quantidade de erro. Suponha que o estado X seja
colocado na lista OPEN quando o robô estiver no local Ro (consulte a Figura 6 ). Seu valor fl") nesse ponto é fcX. Ro) , Se o robô se
mover para a localização RI1 , poderíamos calcular flX, R,) e ajustar sua posição na lista OPEN . Para evitar esse custo computacional,
calculamos um limite inferior em AX, R1) dado por fL(X, R1) = AX. Ro) -g(RI. RJ. J,(X. R,) é um limite inferior em AX, R1) uma vez
que assume que o robô se moveu no " direção" do estado X. subtraindo assim o movimento, pois fL[X, R,) é um limite inferior em fixl
Rl ) , ser selecionado para expansão antes ou quando for necessário. RIj I X fmm g(X, RJ. Se X for ajustado na lista OPEN por fL(X,
No momento da expansão, o verdadeiro valor fix. R ,) é calculado e X é colocado de volta na lista OPEN pelo fix, R,).

Figura 6 Calculando um limite inferior em ft") para o movimento do robô

RO Movimento do Robô

R1

f(X,RO) = k(G,X) t g(X.RO)

f(X,Ri) = k(G,X) t g(X,Ri)

fL(X,Ri) = f(X,RO) - g(R1,RO)

x
*G

A princípio, isso parece pior. já que a lista OPEN é reordenada primeiro por ff) e então parcialmente ajustada para substituir os valores
JL("j values with the correct fl") . Mas como g(R1, Ro) é subtraído de nll estados na lista OPEN , a ordem é preservada. e a lista não
precisa ser reordenada. Além disso, a primeira etapa pode ser totalmente evitada adicionando g(R,, RJ aos estados a serem
inseridos na lista OPEN , em vez de subtraí -lo daqueles que já estão na lista, preservando assim a ordem relativa entre os estados
já na lista e estados prestes a serem adicionados. Portanto, a única computação restante é a etapa de ajuste. Mas esta etapa é
necessária apenas para os estados que mostram a possibilidade de alcançar a localização do robô. Para problemas típicos, isso
equivale a menos de 2% dos estados em a lista ABERTA (consulte a Seção 5.0).

3.2 Definições

Para formalizar essa noção, os estados são classificados na lista OPEN por um valor fl') enviesado , dado por fB(X, Ri), onde X é o
estado na lista OPEN e Ri é o estado do robô no momento em que X foi inserido na lista ABERTA . Seja { Ro, R,. , . ., R,,J ser
Machine Translated by Google

17

[a sequência de estados ocupados pelo robô quando os estados são adicionados à lista OPEl\' via .MODIFY- COST, O valor de
f,C"j é dado por fB(X, Rij = AX, RJ + d(Ri; Ro). onde dpj é a função de viés acumulada dada por dlRiRJ =
g(R1,Rn)+g(R,,RI)+ ...+ g(Hi,Ri~,j se i>O ed(Rn,Rn ) = 0 se i = 0. Os estados da lista UPEN são classificados pelo valor
crescente de fBP) , com empates em fJ0) ordenados pelo aumento de fl") e empates em f7') ordenados pelo aumento de ki"). Os
empates em k() são ordenados arbitrariamente . Assim, um vetor de valores (f,pj,T), Wj) é armazenado com cada sVdte da lista.

Figura 7 Calculando valores de viés para X'j

g(X2,RZ) = 3,0

'*

g(~2,~i) = 2,0
K\G,X2) g(X1,R2) = 3,6 = 3,6

g(R1,RO) = 2,0 g(R1,RO) = 2,0

g(XO,R2) = 5,0 k(G,XO) = 3,6

RO
g(X0,RO) = 3,0 xo
Ordenação

adequada: f(X1,RZ) = k(G,Xl) tg(Xl,R2)=6,6

f(X2,R2) = k(G,X2) t g(X2,RZ) = 6,6

f(X0,RZ) = k(G,XO) t g(XO,R2) = 8,6

Ordenação inicial do viés:

fB(X0,RO) = k(G,XO) t g(XOR0) = 6,6

fB(X1,Rl) = k(G,Xl) t g(X1,Rl) + g(R1,RO) = 8,0

fB(X2,RZ) = k(G,X2) t g(X2,RZ) t g(R2,Rl) t g(R1,RO) = 10,6

Ordenação de bias

ajustada : fB(X1,RZ) = k(G,Xl) t g(X1,RZ) + g(R2,Rl) t g(R1,RO) =

10,6 fB(X2,RZ) = k(G ,X2) t g(X2,RZ) + g(R2,Rl) t g(R1,RO) = 10,6

fB(X0,RZ) = k(G,XO) + g(XO,R2) + g(R2 ,Rl) + g(R1,RO) = 12,6

Considere o exemplo mostrado na Figura 7. O mbot começa no local Rg e coloca o estado Xu na lista OPEN . Em seguida, move-
se para R e coloca X na lista. Finalmente, move-se para R e insere X2. No local R2. ele expande os três estados na lista OPEN.
Se os valores de A") dos três estados fossem recalculados com o robô no local R,, a ordem adequada na lista OPEN seria {X,,
X2, xo} . Observe que o empate nos valores de A" ) para XI e X, é quebrado em favor do menor k(?. Como os estados foram
colocados na lista OPEN em locais diferentes, a ordenação pelo valor fBpj é {Xo, XI; X,} . O primeiro estado removido da lista é
X, . Seu valor f,p) é alterado fmm fB(Xo, Ruj para f,(X,, R,) (ou seja, 6,6 para 12,61, e é colocado de volta na lista de acordo com
o valor ajustado. O próximo estado removido é XI . Seu valor fB(") é alterado de f,(XI, R,) para f,CX,, R,) (ou seja, 8,0 para 10,6)
e é colocado de volta na lista. O próximo estado removido é X , mais uma vez. uma vez que tem os mesmos valores de f,O e A")
como X2 , mas tem um valor k(") inferior . Uma vez que tem o valor f,(O) adequado (Le., calculado na localização atual do
robô , R,), o estado é expandido. Observe que este é o primeiro estado que, como já possui o valor f,r) apropriado , é expandido.
é removido. Como seu valor fB?) foi ajustado Finalmente, deve ser expandido. O próximo estado removido é X, , Xo
adequadamente para a nova localização do mbot, ele é expandido. Assim, os três estados são expandidos na ordem correta.
Machine Translated by Google

18

Para um grafo que representa uma variedade de localizações cartesianas com oito conexões, uma boa heurística de focalização que
satisfaz a restrição monótona é a heurística de distância mínima do arco. Se a matriz cartesiana for indexada por (i, j) , seja (xi. xi ) as
coordenadas (i. j) do estado X. Seja Cmfn o custo c (") mínimo na matriz. depois que todos os custos do arco forem normalizado para
o comprimento de um arco não diagonal. Seja di ki - yil e di seja bj - yjl . _ Então g(X, V = Cmtn[ hdl + d, - dl e g(X, V = 1 se df 2 d,
C,,,,[ Ad, + dj - df ) se di < dj .

Seja Rcur, o estado mais recente do robô no qual foram descobertas discrepâncias entre os dados do sensor e o mapa, e seja R,,,<,
o estado anterior. Ambos são inicializados no estado inicial do robô . Defina a função sfute do robô dx). que retorna o estado do
robô quando X foi inserido ou ajustado pela última vez na lista OPEN . O parâmetro dcarr é o bias acumulado desde o estado inicial
do robô até seu estado atual; é uma abreviatura para d(Rcur,, KO ) e é inicializado para dca,, = d(Ro, R& = 0. Seja fmin o valor
mínimo de fl " ) na lista OPEN e kva, seja seu k(") correspondente valor.
A seguinte notação abreviada é usada para far), A") e gr) : fJX, =f,(X. r(x)), flX, =fix. dW). e
g(x) = g(X, dx))

3.3 Extensão do Algoritmo A

maioria das extensões está confinada às funções de comparação de custos e gerenciamento da lista OPEh' ; portanto. as funções
CUSTO. LESS, INSERT, MIN-STATE e MIN- VAL são afetados. Em vez de retornar h(R) para um estado de robô R . COST(R)
retorna o vetor de valores (AR, RCuJ h(R)) . Em vez de comparar dois escalares, a função MENOS(a, b) toma um vetor de valores
(a,, a*) para u e um vetor ( bl, b2) forb. MENOS retorna TRUE se aI < b, ou = h, e u2< br); caso contrário, retorna FALSO
(0,

Antes de redefinir INSERT, MIN-STATE e MIN-VAL, duas novas funções incorporadas são introduzidas.
PL'T-STATE(x) define r(x) = OPEN e insere X na lista OPEN de acordo com o vetor ((#),AX), k ( X)), e GET-STATE retorna o estado
no OPEN lista com valor vetorial mínimo (NULL se a lista estiver vazia).

A função /NSERT redefinida é fornecida abaixo. Na linha L1, o estado R. do robô que é manipulado no MOVE- ROBOT, é salvo
como o novo ponto focal para a busca. Nas linhas L2 até LA, o estado atual do robô é examinado para ver se o robô se moveu desde
a última vez que foram feitas inserções na lista OPEN . Em caso afirmativo, o termo de polarização, d("), é atualizado adicionando
um limite inferior ao custo do estado anterior do robô ao atual (d(RCAA,?, Ro) = d(Rprrr. RO) + g(Rcu7 , Rp,J ) Os valores para h(x)
e k(X, são determinados nas linhas L5 até LI I Os dois valores restantes no vetor são computados na linha L12, e o estado é
inserido na linha L13.

Função: INSERT (X, hnew)


L1 R<;w,r = R
L2
se Rcur, # Rprev então
L3 dcarr = dcxrr + R(Rcur,: Rpr.$
L4 Rprev = Rc",r
L5 se r(X, = NOVO então k(X) = haew
L6 mais

L7 se t(m = ABERTO então

L8 k(X) = MIN(k(x), h,,J


AL APAGAR(X)
L10 senão k(X) = MIN(h(X), h,,J
L11 h(x) = fix, r(x) = Rcur,
L12 = k(X) +g(W ; ,f,W = AX) + dcu,,
L13 PUT-STATE(x)
Machine Translated by Google

19

A função .Mihr-STATE, fornecida abaixo, retorna o estado na lista OPEN com valor mínimo de /Yj . Para fazer isso, a função
recupera o estado na lista OPEN com o menor valor f8r ) . Se o estado foi colocado na lista OPEN
quando o robô estava em um local anterior (linha L2). então ele é reinserido na lista OPEN na linha 13. Esta operação tem o
efeito de corrigir o termo de viés do estado usando o estado atual do robô enquanto deixa os valores It(") e k(") do estado
inalterados MIN - STATE continua a recupera estados da lista OPEN até encontrar um que tenha um termo de viés atualizado
(ou seja, foi colocado na lista OPEN com o robô em seu estado atual).

Função: MIN-STATE 0
eu, eu enquanto X = GET-STATE( )#NULL
L2 se r(x) # Rcu,r então
L3 hncw = h(W; h(Xj = k(W; DELETE(-; lNSERT(X, h>,*,J senão
L4 retorna X
L5 retorna NULL

A função MIN- VAL redefinida , fornecida abaixo, retorna os valores A") e k() do estado na lista OPEh' com mínimo ((" valor j.

Função: MIN-VAL 0
LI x = MfN-ESTADO( )
L2 se X = NULL então retorne NO - VAL

L3 senão retorna MW, k(W)

As funções PROCESS-STATE e MODIFY- COST permanecem sintaticamente inalteradas em relação às descrições dadas na
Seção 2.3. Mas como ambas as funções concluem retornando o resultado de uma chamada para MIAr- VAL, elas também
retornam o vetor de \dues {fmin, k,,"J em vez de apenas kmin. Esse vetor é atribuído a val na rotina MOVE- ROBOT e é usado
pela função LESS redefinida para determinar se PROCESS-STATE foi chamado vezes suficientes para garantir a otimização.
Desde R = Ret,,, para um estado de robô R passando por recálculos de caminho, então g(R, R) = 0 e AR, R) = hK.
Portanto, a otimalidade é garantida para um estado R ~ se fmin > h(R) ou (fmim = h(Rj e k,n, Z h(R) ).
Machine Translated by Google

20

4.0 Exemplos
Esta seção apresenta dois exemplos que ilustram a operação do algoritmo D* . O primeiro compara o algoritmo Basic D* com o
Focussed D*, e o segundo compara o planejamento com informações completas com informações otimistas.

4.1 Comparações D' A Figura

8 mostra um ambiente desordenado de 100 x 100 estados. O robô começa no estado S e segue para o estado G. Todos os
obstáculos , mostrados em preto, são desconhecidos antes que o robô comece sua travessia, e o mapa contém apenas arcos VAZIOS .
O robô tem tamanho pontual e está equipado com um sensor de campo radial de 10 estados .

Figura 8: Ambiente Desorganizado

EU

,.

EU
Machine Translated by Google

21

Figura 9: Algoritmo D' Básico

A Figura 9 mostra a travessia do robô de S para G usando o algoritmo Basic D* . A poligonal é mostrada como uma curva preta com setas
brancas. Conforme o robô se move. seu sensor detecta os obstáculos desconhecidos. Os obstáculos detectados são mostrados em
cinza com setas pretas. Obstáculos que permanecem desconhecidos após a travessia são mostrados em preto sólido ou preto com setas
brancas. As setas mostram o campo de custo final para todos os 11 estados examinados durante a travessia. Observe que a maioria dos
estados é examinada pelo menos uma vez pelo algoritmo.
Machine Translated by Google

22

Figura 10 Algoritmo 0' Focalizado

eu
A Figura 10 mostra a travessia do robô usando o algoritmo FocusedD*. O número de novos estados examinados é menor que o
Básico D*. já que o algoritmo Focussed D* concentra o cálculo do caminho inicial e as atualizações de custo subsequentes na
localização do robô. Observe que mesmo para os estados examinados pelo algoritmo. menos deles terminam com caminhos
ótimos para a meta. Finalmente, observe que as duas trajetórias não são totalmente equivalentes. Isso ocorre porque o percurso
de menor custo é único e os dois algoritmos desfazem os empates nos custos do caminho arbitrariamente.
Machine Translated by Google

23

Figura 11: Percurso ideal onisciente

EU

4.2 Informações do mapa a priori

A Figura 11 mostra um ambiente de estado de 450 x 450 repleto de obstáculos cinza. Os backpointers foram omitidos para
maior clareza. A curva preta mostra a travessia ideal para o objetivo, dado o caso em que o robô conhece os obstáculos
antes de iniciar sua travessia. Essa travessia é conhecida como ótima onisciente , pois é equivalente ao caminho ótimo
para o objetivo, com informações completas e precisas sobre o custo do arco. A Figura 12 mostra o planejamento no mesmo
ambiente onde nenhum dos obstáculos é armazenado a priori no mapa . As partes dos obstáculos detectados pelo sensor
radial de 15 estados do robô são mostradas. Essa travessia é conhecida como ótima otimista, pois o robô assume que
não existem obstáculos, a menos que sejam detectados por seu sensor. Essa travessia é quase duas vezes mais longa que
o ótimo onisciente; no entanto, ainda é ideal dado o mapa inicial e as informações do sensor à medida que são adquiridas .
Machine Translated by Google

24

Figura 12: Percurso ideal otimista


Machine Translated by Google

25

5.0 Resultados Experimentais

Quatro algoritmos foram testados para verificar a otimização e comparar os resultados de tempo de execução e uso de memória. O
primeiro algoritmo. o Brute-Force Replanner (BFR), inicialmente planeja um único caminho do objetivo para o estado inicial. O robô
continua a percorrer o caminho até que seu sensor detecte um erro no mapa. O robô atualiza o mapa, planeja um novo caminho desde
o objetivo até sua localização atual usando uma busca A* [SI] focada e repete até que o objetivo seja alcançado. A heurística
fi)cussante utilizada é a distância mínima do arco descrita na Seção 3.2.

O segundo e o terceiro algoritmos, Basic D* (BD*) e Focussed D* com inicialização mínima (FD*M). são descritos nas Seções 2.0 e
3.0, respectivamente. O quarto algoritmo, Focussed D* com Full Initialization (FD*F). é o mesmo que FD*M, exceto que os custos do
caminho são propagados para todos os estados no espaço de planejamento, que é considerado finito , durante o cálculo do caminho
inicial, em vez de terminar quando o caminho atinge o estado inicial do robô.

Os quatro algoritmos foram comparados em problemas de planejamento de tamanhos variados. Cada ambiente era quadrado.
consistindo em um estado inicial no centro da parede esquerda e um estado final no centro da parede direita. Cada ambiente consistia
em uma mistura de obstáculos do mapa conhecidos pelo robô antes da travessia e obstáculos desconhecidos mensuráveis pelo
sensor do robô. O sensor utilizado foi omnidirecional com um campo de visão radial IO-state. A Figura 13 mostra um modelo de
ambiente com aproximadamente 100.000 estados. Os obstáculos conhecidos são mostrados em cinza e os desconhecidos em preto.

Figura 13: Ambiente Típico para Comparação

Os resultados para ambientes de 1O.Oo0, 100.000. e 1,0D3,000 estados são mostrados nas Tabelas 1, 2 e 3, respectivamente.
Os tempos repetidos são o tempo de CPU para um processador Sun Microsystems SPARC-10. Fnr cada tamanho de ambiente. os
quatro algoritmos foram comparados em cinco ambientes gerados aleatoriamente e os resultados foram calculados. Os algoritmos
foram acoplados de forma que empates nos custos dos caminhos fossem desfeitos da mesma forma? e as transversais seriam idênticas . thc
Machine Translated by Google

26

tempo off-line é o tempo de CPU necessário para calcular o caminho inicial do objetivo até o robô ou, no caso de FD*F, desde o objetivo até todos os
estados do ambiente. Esta operação é “off-line”, pois poderia ser executada antes do movimento do robô se o mapa inicial estivesse disponível. O aro
on-line é o tempo total da CPU para todas as operações de replanejamento necessárias para mover o robô desde o início até o objetivo. Constitui o
tempo de CPU necessário para manter o robô se movendo em direção ao objetivo e, portanto, está “on-line”. A % de memória é a porcentagem de
estados do mapa examinados em todas as operações de planejamento e replanejamento. No caso do BFR, é a maior porcentagem de estados do
mapa examinados durante qualquer operação única de planejamento ou replanejamento, uma vez que os custos de caminho não são retidos de uma
operação de replanejamento para a seguinte. Este parâmetro corresponde ao uso de memória se os estados forem alocados dinamicamente. A % on-
line é a porcentagem de estados da lista ABERTA que são reclassificados devido ao movimento do robô calculado em todas as operações de
replanejamento e é aplicável apenas ao algoritmo Focussed D* em ambas as formas. É uma métrica de quão boa é a aproximação do limite inferior
f,?) para A”) .

Os resultados para cada algoritmo são altamente dependentes da complexidade do ambiente, incluindo o número, tamanho. e colocação dos
obstáculos, e a proporção de obstáculos conhecidos para desconhecidos. Para os casos de teste examinados. todas as variações de D* superaram o
BFR no tempo on-line, atingindo um fator de aceleração de quase 300 para grandes ambientes.
Geralmente. a lacuna de desempenho aumentou à medida que o tamanho do ambiente aumentou. O algoritmo FD*M resultou em tempos offline
menores e tempos online maiores que o BD*. Concentrar a pesquisa permite um início rápido devido a menos expansões de estado, mas muitos dos
estados inexplorados devem ser examinados de qualquer maneira durante o processo de replanejamento, resultando em um tempo de execução mais
longo. Assim, FD'M é o melhor algoritmo se o usuário deseja que o robô comece a se mover o mais rápido possível e pode pagar com mais
processamento durante esse movimento. Se o usuário deseja minimizar o tempo on-line em detrimento do tempo off-line, o FD*F é o melhor algoritmo.
Neste algoritmo, os custos de caminho para todos os estados são calculados inicialmente e apenas as propagações de custo são focadas. Observe
que FD*F resultou em tempos on-line menores e tempos off- line maiores do que BD'.

Assim, o algoritmo Focussed D* pode ser configurado para superar o Basic D* na parte off-line ou on-line da operação, dependendo dos requisitos da
tarefa. Observe também que o tempo de execução total, dado por off-line mais on- line lime. é menor para FD*M do que para BD*, mesmo para
ambientes tão pequenos quanto 10.000 estados. A disparidade aumenta para ambientes maiores. Como estratégia geral, focar a busca é uma boa
ideia; a única questão é como a carga computacional deve ser distribuída.

Como um aparte. os tempos off-line para todas as três variações de D* podem ser reduzidos usando A*, focado ou não. o que corresponder ao
algoritmo D* , durante o processo de planejamento inicial, uma vez que não há atualizações de custo para propagar. O algoritmo A* tem menos
sobrecarga do que D* e é mais rápido por expansão de estado .

O FD*M oferece a vantagem adicional de menor uso de memória do que o BD* se a memória for alocada apenas conforme necessário. Seu uso de
memória é aproximadamente equivalente ao do BFR, que desaloca os estados visitados após cada operação de replanejamento. FD*F aloca todos
os estados possíveis e, portanto, consome muita memória.

Tabela 1: Resultados para ambientes de 10.000 estados

Focalizado D* Focado D* com Full Init força bruta


Básico D*
com Min Init Replanejador

Tempo off-line 1,70 seg 0,15 seg 0,02 seg _ 0,09 seg

Tempo Online 0,90 seg 1,43 seg 1,31 seg 13,07 seg

Memória % 100% 38,7% 87,7% 31,6%

% on-line 1,66% 1,69% NIA NIA


Machine Translated by Google

27

Tabela 2: Resultados para ambientes de 100.000 estados

Focalizado D* Focado D* com força bruta


Básico D*
Full Init com Min Init Replanejador

Tempo off-line 20,58 seg 0,70 seg 12,55 segundos 0,41 seg

I Tempo On-line I 9,22 seg I I 17,62 seg I I 16,94 segundos eu 11.86min eu EU

Memória& 1100% 1 On-line % I 50,4% I 83,6% 43,5% EU

03% eu 0,85% eu NIA eu NIA EU

Focalizado D* Focado D* com Full Init força bruta


Básico D*
com Min Init Replanejador

Tempo off-line 221,72 seg 8,68 seg 129,08 SK 4,82 seg

1 Tempo On-line I 10,26 seg I I 37,34 seg I I I 21,47 seg I I I 50,63 min EU

Memória%
EU

100% 15,6% 76,2% 25,3% EU

I On-line% eu 054% 1,29% NtA I I NfA EU


Machine Translated by Google

28

6.0 Conclusões
Este artigo apresenta o algoritmo D* para replanejamento de caminho em tempo real. O algoritmo calcula um caminho inicial
do estado objetivo para o estado inicial e então modifica eficientemente esse caminho durante a travessia à medida que os
custos do arco mudam. O algoritmo é garantido para produzir uma travessia ótima. o que significa que um caminho ideal para
o objetivo é seguido em cada estado na travessia, assumindo que todas as informações conhecidas em cada etapa estão
corretas. D* é muito mais eficiente do que o planejador de caminho de força bruta. A versão focada do D* supera a versão
básica e oferece ao usuário a opção de distribuir a carga computacional entre as partes on-line e off-line da operação.
dependendo dos requisitos da tarefa. Além disso, a versão focada pode ser configurada para consumir menos memória e,
portanto, é melhor para ambientes grandes.

D* é um algoritmo muito geral e pode ser aplicado a problemas em inteligência artificial além do planejamento de movimento
de robôs. Em sua forma mais geral. D* pode lidar com qualquer problema de otimização de custo de caminho em que os
parâmetros de custo mudam durante a travessia da solução. D* é mais eficiente quando essas mudanças são detectadas
próximas ao ponto de partida atual no espaço de busca, que é o caso de um robô equipado com um sensor embarcado.

Agradecimentos
O autor agradece a Barry Brumitt e Jay Gowdy pelo feedback sobre o uso do algoritmo e todo o projeto Unmanned Ground
Vehicle (UGV) da CMU por fornecer um banco de testes para veículos.
Machine Translated by Google

29

Referências
[l] Bonlt. T., “Atualizando mapas de distância quando objetos se movem”, Proc. da Conferência SPlE sobre Robôs Móveis. 1987.
[21 Ir para. Y.. Stentz. A,. “Navegação de robôs móveis: o sistema CMU”. Especialista IEEE, vol. 2, nº 4, inverno, 1987.
[31 Jarvis. K. A., “Planejamento de Trajetória Livre de Colisão Usando as Transformadas de Distância”. Engenharia
Mecânica Trans. da Instituição de Engenheiros . Austrália; Vol. MELO. Nº 3, setembro. 1985.
141 Koti, R. E., “Real-Time Heuristic Search: First Results”, Proc. Sexta Conferência Nacional de Inteligência Artificial; julho
de 1987.
151 I-átombe. JX, “Robot Motion Planning”, Kluwer Academic Publishers, 199 I 161
Lozano-Perez. T.. “Planejamento Espacial: Uma Abordagem do Espaço de Configuração, IEEE Transactions on Computers, vol.
C-32, nº 2, fevereiro de 1983.
[71 Lumelsky, V. J., Stepanov, AA, “Planejamento de caminho dinâmico para um autômato móvel com informações limitadas
sobre o ambiente”. IEEE Transactions on Automatic Control, vol. AC-3 I, No. II, novembro. 1986.
[SI Nilsson. N. J., “Principles of Artificial Intelligence”, Tioga Publishing Company, 1980.
191 Pirzadeh. A.? Snyder. W., “Uma solução unificada para cobertura e pesquisa em terrenos explorados e inexplorados
usando controle indireto”. Proc. da IEEE International Conference on Robotics and Automation, maio de 1990.
[IO] Rainalingam. G., Reps. T.. "Um Algoritmo Incremental para uma Generalização do Problema do Caminho Mais Curto".
University of Wisconsin Technical Repon#1087, maio. 1992.
[I 11 Samet. H., “Uma Visão Geral de Quadtrees, Octrees e Estruturas de Dados Hierárquicos Relacionadas”, na série
AS1 da OTAN , Vo. F40, Theoretical Foundations of Computer Graphics, Berlin: Springer-Verlag, 1988.
[I21 Stentz, A.. “Planejamento de caminho ideal e eficiente para ambientes desconhecidos e dinâmicos”. Relatório Técnico do
Carnegie Mellon Robotics Institute CMU-RI-TR-93-20. agosto de 1993.
[I31 Stentz, A.. "Planejamento de caminho ideal e eficiente para ambientes parcialmente conhecidos". Proc. da IEEE
International Conference on Robotics and Automation, maio. 1994.
[141 Trovato, K. I., “Diferencial A*: um método de busca adaptável ilustrado com planejamento de caminho de robô para
obstáculos e metas em movimento e um ambiente incerto”, Journal of Pattern Recognition and Artificial Intelligence. Vol.
1. No. 2. 1990.
11.51 Zelinsky, A.. “A Mobile Robot Exploration Algorithm”, IEEETransactions on Robotics and Automation. Vol. 8, nº 6.
Dezembro, 1992.
Machine Translated by Google

30

Apêndice

A função PROCESS-STATE'. dado abaixo, é mais elegante e lúcido do que o PROCESS-STATE dado na Seção 2.3. Depois que X é
removido da lista OPEN nas linhas LI a L3, uma única passagem é feita sobre seus vizinhos. O estado X. independentemente do seu
tipo. espalha sua atualização de custo para seus NOVOS vizinhos e descendentes imediatos nas linhas L5 ad Lh. Nas linhas L8 a L12,
X é capaz de reduzir o custo de caminho do vizinho Y. Se X for um estado RAISE (isto é: /iX) > k,,ld), então seu custo de caminho pode
não ser ótimo; portanto, X é colocado na lista ABERTA para “adiar” a redução até que tenha um custo de caminho ótimo. Se X é um
estado INFERIOR [ie$ h(X) = kPld), seu custo de caminho é ótimo; portanto. o custo do caminho de Y é reduzido. seu backpointer é
redirecionado e é colocado na lista OPEN para propor a mudança . As linhas L14 a L18 lidam com o caso simétrico em que Y é capaz
de reduzir o custo de caminho do vizinho X.
Novamente: o parâmetro kr,ld é a linha divisória entre o cosw do caminho ótimo e subótimo.

Assim, ambos os estados RAISE e LOWER espalham mudanças de custo de caminho para seus descendentes e novos estados. mas
os estados apenas ótimos têm permissão para reduzir os custos de caminho de outros estados e redirecionar seus hackpointers. Os
estados ideais são estados LOWER ou CLOSED com valores de custo de caminho menores ou iguais a kpld. Os estados subótimos
são colocados de volta na lista ABERTA até que se tornem ótimos.

Função: PROCESS-STATE' ()
L1 X = MIA-STATE( )
L2 se X = NULL então retorne NO- VAL
L3 k,,,,, = k!x) ; DELETE(x)
L4 para cada vizinho Y de X: ifr(n
L5 =NEWor(b(Yj = Xandh(Y)#h(X)+c(Xn)então
L6
L7 outro

L8 se b(n # X e h(n > h(X) + c(X, 0 então se


L9 h(X) > k,,, então se
LIO r[x) = FECHADO então lNS.kRT(X, h(mj
L11 outro

L12 b(YJ = X. INSERT(Y, h(X) + c(X. n)


L13 outro

L14 ifb(n#Xandh[~>h(n+c(Y,X) então se h(n >


L15 k,,,d então se r(n =
L16 FECHADO então INSERT!Y, / I( i'))
LI 7 outro

L18 b(x) = Y. INJERqX, h(n + c(Y, a)


L19 retorno MIN VAL! j

Embora PROCESS-STATE' examine os vizinhos de X apenas uma vez em vez de duas vezes, é menos eficiente computacionalmente
que PROCESS-STATE, porque o estado expandido X pode espalhar sua mudança de custo de caminho antes de ser reduzido por
vizinhos ótimos. Essa condição é detectada e X é colocado de volta na lista OPEN para propagar os valores corretos. Essas inserções
adicionais na lista OPEN são caras em comparação com o custo de examinar os vizinhos de um estado mais de uma vez.
Machine Translated by Google
Machine Translated by Google
Machine Translated by Google
Machine Translated by Google

Você também pode gostar