Robótica Inteligente
Módulos Funcionais de um (hipotético) Robô Móvel Inteligente:
Módulos
Funcionais
relacionados
com o
Navegação do Robô
Módulos da
Arquitectura de controlo hipotética
Objectivos essenciais na Navegação. Funções para responder a:
Para onde ir? Por onde ir? Onde estive? Onde estou?
Módulos
Funcionais
relacionados
com a
Navegação do Robô
Navegação envolve: Percepção Acção Planeamento Representação Arquitectura de controlo Hardware Eficiência computacional Resolução de Problemas O Planeamento clássico assume:sensores sem erros e robô com capacidade de localização
Navegação do Robô
Tipos de algoritmos para planeamento do Movimento:
A- Decomposição celular: espaço contínuo dividido em um número finito de células
levando a uma pesquisa discreta.
B- Esqueletização: calcular um “esqueleto” unidimensional do espaço (uma linha)
C- Navegação baseada em marcos: assume a existência de regiões onde o robô pode
ser localizado através de marcos fixos. Fora delas terá apenas uma orientação.
Navegação do Robô
A- Decomposição celular: espaço contínuo dividido em um número finito de células
levando a uma pesquisa discreta. Memória Espacial:
Representação do Mundo para o Robô
Processa e representa a informação sensorial Infere informação relevante para a Navegação Funções ligadas à Memória Espacial:
atenção ao que procurar
raciocinar sobre hipóteses (Pode atravessar esta porta?) planear para encontrar o melhor caminho
Navegação do Robô
Memória Espacial Quantitativa:
Espaço em termos de distâncias físicas Perspectiva independente (de cima) Pode gerar memória espacial qualitativa
Memória Espacial Qualitativa:
Espaço em termos de ligações entre marcas Perspectiva do robô
Navegação do Robô
Na determinação de caminhos é importante:
decompor o caminho em partes entre pontos intermédios aproximar ao melhor caminho
como representar o conhecimento qual o algoritmo
Espaço de configuração:
permite representar localização e orientação do Robô e dos Objectos assume-se:
robô redondo, 2 graus de liberdade, holonómico (pode rodar sobre um eixo) “crescimento dos obstáculos” de acordo com a largura do robô.
Navegação do Robô
Posição inicial Robô Posição final Robô
Objectos aumentados
Navegação do Robô
Objectos aumentados Robô considerado como um pontoNavegação do Robô
Exemplos de representações de Configurações de Espaço
A- Decomposição celular: espaço contínuo dividido em um número finito de células levando a uma pesquisa discreta.
1- Dividir o espaço livre E em regiões simples (ex: rectangulares) contíguas; 2- Determinar que células são adjacentes a outras e construir um grafo de
adjacências; Os vértices do grafo são as células; arcos juntam nós correspondentes a células contíguas;
3- Pesquisar um caminho entre os nós (células) início e objectivo;
4- da sequência de células encontrada para o caminho, compute trajectos dentro de cada célula de um ponto na fronteira com a célula anterior até à fronteira com a próxima célula;
Navegação do Robô
A- Decomposição celular: espaço contínuo dividido em um número finito de células levando a uma pesquisa discreta.
Navegação do Robô
Células simples (rectangulares)
Ligar as fronteiras de cada célula por um segmento de recta
A Decomposição celular não é exacta.
Podem ligar-se os centroides de cada célula
O algoritmo pode ir variando a largura das células de forma adaptativa
Algoritmo seguro mas não completo (pode não encontrar a solução)
Admitindo as células sempre livres o algoritmo é completo
(propõe sempre uma solução)
Navegação do Robô
Numa decomposição celular exacta, as células tem fronteiras que são
os próprios Obstáculos.
As células tem fronteiras curvas (células cilindricas) nos topos mas deve
manter-se recta nos lados.
A largura dos cilindros não é fixa.
Encontram-se pontos críticos para ajudar a decomposição.
Pontos críticos são aqueles cuja fronteira (do obstáculo) é vertical
Fazendo varrer uma linha vertical pelo espaço, pontos críticos são aqueles onde
essa linha se parte ou onde dois segmentos dela, antes partidos, se juntam
Navegação do Robô
Decomposição cilindrica do espaço. Existem aqui 9 cilindros:
Navegação do Robô
O Algorítmo A* é um bom candidato para calcular o melhor caminho em um espaço
de representação conhecida.
Pode gerar-se também o Plano global e depois tentar ultrapassar localmente
Obstáculos imprevistos.
São algoritmos Completos mas gerando passos sub-óptimos
Pode-se também replanear o Plano global sempre que, durante a execução nova
Informação aparece que contradiz a anterior.
Estes algoritmos de replaneamento podem ser custosos em tempo.
A representação do espaço com “quadtrees” pode dar mais alguma eficiência pois
representa melhor o espaço livre e os obstáculos.
Algoritmo D*
Seja um Robô com sensores e com um Mapa que pode ser incompleto ou impreciso.
O Algorítmo D* (Dynamic A*) também faz pesquisa em grafo mas admite constante
replaneamento à medida que nova informação vai chegando ao Robô.
Os nodos do grafo são estados (localizações do Robô) ligados por arcos etiquetados
com custos. Custos podem ser distâncias, tempo, riscos, gastos de energia...
Tais custos podem ser reavaliados à medida que o robô vai progredindo no espaço.
O algoritmo pode ser usado com grafos de visibilidade ou representação por grelhas
D* produz caminhos óptimos em ambientes dinâmicos.
Incorpora conhecimento do ambiente em tempo-real.
Replaneia quando algo inesperado é detectado
Cada estado (nó) X, excepto G, tem um apontador para um estado seguinte Y,
b(X)=Y
D* usa estes apontadores para representar o caminho para o Objectivo G.
Os arcos tem um custo c(X,Y) (que pode estar indefinido).
Existindo c(X,Y) ou c(Y,X) dois nós X e Y são considerados vizinhos.
Algoritmo D*
Como no A*, o D* mantém uma LISTA ABERTA (LA) de nós que vão ser analisados
e que serve para propagar os custos.
Os nós tem uma etiqueta t(X)
t(X)=Novo se X nunca pertenceu à Lista Aberta
t(X)= Aberto se X pertence à Lista Aberta
Para cada nó X na Lista Aberta a função Chave k(G,X) guarda o mínimo dos custos
estimados de X a G desde o inícial h(G,X) até ao presente.
Os nós são classificados como:
AUMENTADOS se k(G,X) < h(G,X) ou
BAIXADOS se k(G,X) = h(G,X)
Algoritmo D*
D* usa os nós AUMENTADOS da Lista Aberta para propagar os aumentos no custo
e os BAIXADOS para propagar as reduções de custo do caminho.
Sempre que um Nó é retirado da Lista Aberta ele é expandido e os custos são
propagados para os seus vizinhos os quais são colocados na Lista Aberta.
Estados (nós) com etiqueta ABERTO, na Lista Aberta estão ordenados de acordo
com os valores da função chave.
Todos os passos com custo inferior ou igual a min(k(X)) são óptimos
Kold = Kmin antes da mais recente extracção de um nó da LA
D* guarda sequências {G,Xi} de nós correspondentes a
passos monótonos (i de 1 a N):
Se nós FECHADOS (t(Xi)=FECHADO)
Então h(G,Xi) < h(G,Xi+1)
Se nós ABERTOS (t(Xi)=ABERTO)
Então k(G,Xi) < h(G,Xi+1)
Simplificando f(X) =f(G,X) e {X} ={G,X}
Algoritmo D* é basicamente constitudo por 2 funções:
Processar_Estado: Computa o passo óptimo para o objectivo
Modificar_Custos: altera os custos dos arcos e dá entrada aos nós
afectados na Lista Aberta
Algoritmo D*
Inicialmente:
todos os nós são etiquetados como NOVO,
h(G)=0
G vai para a Lista Aberta
A função Processar_Estado é chamada recursivamente até o nó X estar fora da
Lista Aberta,
O robô segue os apontadores até:
chegar ao Objectivo G ou
encontrar erro no custo do Arco (obstáculo não previsto).
A função Modifica_Custo é então chamada para:
alterar o custo e
colocar os nós (estados) afectados na Lista Aberta.
Algoritmo D*
Sendo Y o nó onde seja encontrado um erro na função de custo:
Chamando Processa_Estado até:
Kmin >= h(Y)
as modificações no custo são propagadas ao estado Y tal que:
h(Y)=o(Y) (mínimo Custo).
Construiu-se assim a nova sequencia {Y} e
o Robô continua a dirigir-se para o Objectivo
Função: PROCESSA-ESTADO ()
L1 X =MIN STATE( ) {retorna nó da LA com menor K} L2 if X NULL then return -1 {NO-VAL}
L3 kold =GET -KMIN () ; DELETE (X ) {retorna Kmin da LA ou -1 se vazia} {apaga X da LA e faz t(X)=CLOSED} L4 if kold < h (X ) then
L5 for each neighbor Y of X:
L6 if t(Y)=/= NEW and h(Y) =< Kold and h(X)>h(Y)+c(Y,X) then L7 b(X)=Y; h(X)=h(Y)+c(Y,X)
L8 if Kold = h(X) then
L9 for each neighbor Y of X: L10 if t(Y)=NEW or
L11 ( b(Y)=X and h(Y)=/= h(X)+c(X,Y) ) or L12 ( b(Y) =/=X and h(Y) > h(X)+c(X,Y) ) then
L13 b(Y) = X; I NSERT(Y, h(X)+c(X,Y) ) {Y passa a apontar para X}
L14 else
L15 for each Y neighbor of X : {Propagar mudanças de Custos para E NEW e descendentes imediatos tal como para E BAIXADOS}
L16 if t(Y)=NEW or
L17 (b(Y)=X and h(Y)=/=h(X)+c(X,Y)) then
L18 b(Y) =X ; INSERT(Y,h(X) + c(X,Y) ); {Insert(X,hnew)
Calcula k(X)=hnew se t(X)=NEW, k(X)=min(h(X), hnew) se t(X)=OPEN e k(X)=min(h(X),hnew) se t(X)=CLOSED. Ainda faz h(X)=hnew e t(X)=OPEN recolocando X na posição correcta da LA ordenada pelos k}
L19 else {t(Y)=/=NEW estados não descendentes imediatos} L20 if b(Y)=/=X and h(Y)>h(X)+c(X,Y) and t(X)=CLOSED then L21 INSERT(X, h(X)) {na LA para posterior expansão}
L22 else { passo de X pode ser reduzido por um vizinho, este vai para LA} L23 if b(Y)=/=X and h(X) > h(Y) + c(Y,X) and
L24 t(Y)=CLOSED and h(Y) > Kold then L25 INSERT(Y, h(Y))
L26 return GET-KMIN {retorna Kmin da LA ou -1 se vazia}
Na Função Modifica_Custos a função do custo do arco é
alterada com o novo valor. Como alteração do custo de Y altera também o custo do caminho de X, X vai para a LA.
Quando X é expandido com Processa_Estado, calcula um novo h(Y)=h(X)+c(X,Y) e coloca Y na LA.
Expansões dos nós subsequentes propagam o custo para os descendentes de Y
Função: MODIFICA_CUSTOS (X, Y, cval)
L1 c ( X ,Y ) = cval
L2 if t(X)= CLOSED then INSERT (X, h(X)) L3 return GET-KMIN( )
O papel dos estados:
AUMENTADOS (k(X)<h(X) ) ou BAIXADOS (k(X) = h(X) )
é essencial no algoritmo.
Estados AUMENTADOS propagam aumentos de custos e BAIXADOS propagam redução de custos.
Quando o custo de um arco é aumentado, o estado vizinho afectado vai para a LA e o custo propagado via estados AUMENTADOS em todas as
sequencias de estados contendo o arco.
Quando os estados AUMENTADOS ficam em contacto com Nós vizinhos de custo inferior, estes estados BAIXADOS vão para a LA e fazem diminuir os custos dos estados anteriormente aumentados.
Se o custo de atravessar um arco decresce, a redução é propagada via nós BAIXADOS através das sequências contendo o arco e dos estados vizinhos que podem ser decrementados.
Função MOVE_ROBOT(S,G)
L1 for each state X in the Graph {Nós colocados na LA e h(G)=0;G na LA}
L2 t(X)=NEW
L3 INSERT(G,O)
L4 val=0
L5 while t(S)=/=CLOSED and val=/=NO_VAL {computar o caminho inicial ou não existe caminho}
L6 val=PROCESS_STATE( )
L7 if t(S)=NEW then return NO_PATH {nenhum arco para o G}
L8 R=S {segue os apontadores até G ou descobre discrepância, L10 L11} L9 while R=/=G
L10 for each (X,Y) such that s(X,Y)=/=c(X,Y) {c(X,Y) custo anterior} L11 val=MODIFY_COST(X,Y,s(X,Y) ) {s medido por sensor} L12 while LESS(val,COST(R) ) and val=/=NO_VAL {até val>=h(R)}
L13 val=PROCESS_STATE( )
L14 R=b(R)
L15 return GOAL_REACHED {G atingido ou NO_PATH}
Existe uma melhoria ao algoritmo D* : Algoritmo D* Focalizado.
Referências para estes algoritmos com exemplos de aplicação:
• “Optimal and Efficient Path Planning for Partially-Known Environments” Anthony Stentz
The Robotics Institute; Carnegie Mellon University; Pittsburgh • “The D* Algorithm for Real-Time Planning of Optimal Traverses” Anthony Stenz
CMU-RI-TR-94-37
The Robotics Institute; Carnegie Mellon University; Pittsburgh
Navegação do Robô
B-Esqueletização:
Em vez de decompôr em células esqueletiza o espaço numa linha que será o possível trajecto nesse espaço.
A descrição do espaço livre é minimalista.
- Se S é um esqueleto do espaço livre E, então S deve ser uma única linha em cada região conectada de E
- para cada ponto p de E deve ser fácil computar um caminho para o esqueleto
Exemplos de Métodos de esqueletização no espaço 2D:
B.1 Grafo de Visibilidade
B.2 Diagramas de Voronoi
Navegação do Robô
B-Esqueletização:
B.1 Grafo de Visibilidade
Para uma configuração poligonal do espaço, o Grafo de Visibilidade consiste em
arcos ligando todos os pares de vértices que se podem ver um ao outro.
Existe portanto um segmento de recta entre eles que não intersecta qualquer
obstáculo.
Navegação do Robô
B-Esqueletização:
B.2 Diagramas de Voronoi
Para cada ponto do espaço livre calcula-se a distância para o obstáculo mais próximo
Essa distância é vista como uma função “altitude” que tem o valor zero
junto dos obstáculos (zero também nas margens).
O “terreno” passa a ter a sua curva de nível mais elevada (a única desenhada)
passando pelos pontos equidistantes dos obstáculos.
O algoritmo é completo: Havendo um passo em E implica a existência do diagrama
de Voronoi. No entanto esse trajecto não é, normalmente, o passo mais curto.
Navegação do Robô
B-Esqueletização:
Navegação do Robô
C- Navegação baseada em Marcos:
Aqui a navegação depende das percepções recebidas através de
Sensores.
O Ambiente contém marcos modelados como pontos com um “campo de influência”
circular.
Dentro de cada “campo de influência” o robô pode conhecer a sua exacta posição.
(podem sêr código de barras lidos pelo robô).
O robô pode estimar distancia e ângulo para o marco.
Embora os marcos no espaço sejam conhecidos em tempo de planeamento, a posição
do robô só é conhecida em tempo de execução.
Navegação do Robô
C- Navegação baseada em Marcos:
O planeamento do trajecto é feito em encadeamento inverso a partir do objectivo Faz-se a retro-projecção do “campo de influência” do objectivo em relação ao
comando de velocidade V. Isto quer dizer que se o robô inicia o seu deslocamento em qualquer ponto do cone de retro-projecção e aplica o comando de velocidade V1 ele atinge o Objectivo.
Se esse cone intersecta o campo de influência de outro marco, uma vez nesse campo o Robô pode navegar para a sua intersecção com o cone.
É claro que deve pesquisar várias possibilidades para comandos Velocidade CVi tais que os cones de retro-projecção intersectem outros os outros campos de influência circulares.
Navegação do Robô
C- Navegação baseada em Marcos:
Retro-projecção do objectivo com respeito a Vi
CV1 CV2