Open-access Robótica cognitiva: programação baseada em lógica para controle de robôs

Resumos

A área de Robótica Cognitiva tem como principal objetivo desenvolver agentes robóticos capazes de realizar funções de alto-nível, especificando o programa de controle do robô em uma linguagem de programação baseada em lógica. Desta forma, é possível declarar e verificar propriedades do agente como prova de teoremas. Além disso, uma especificação feita em uma linguagem formal pode ser executável, o que permite simular o comportamento do agente através dessa especificação. Este artigo apresenta o desenvolvimento, passo a passo, de um agente para um robô Lego® MindStorms™, usando IndiGolog - uma linguagem para especificação de agentes baseada no Cálculo de Situações. Como exemplo de aplicação, foi escolhido o problema clássico do Mundo do Wumpus para o qual a construção de um agente completo envolve a integração das seguintes técnicas de: planejamento reativo, planejamento para satisfação de metas e realização de tarefas (planejamento hierárquico), execução de ações, raciocínio com informação incompleta, geração e raciocínio hipotético sobre o estado do mundo e mudanças de crença.

Planejamento; planejamento online; Golog; Legolog; Cálculo de Situações; Lego® MindStorms™


The goal of the Cognitive Robotics research area is to develop robotic agents capable of high-level functions by using a programming language, based on logics, to describe the robot control program. Besides, such a language can be used to prove properties of the world and to simulate the robot behavior by running its program. This paper shows how a Lego® MindStorms™ robot can be used to implement a software agent capable of performing high level functions specified in IndiGolog - a logical language to write robot control programs, based on Situation Calculus. The application domain example is the classical problem of the Wumpus World for which the construction of a complete intelligent agent requires the integration of several Artificial Intelligence techniques, such as: reactive planning; hierarquical and goal achievement planning; plan execution; reasoning with incomplete information; generation and discrimination of hypotheses about the world state; and belief changes.

Planning; on-line planning; Golog; Legolog; Situation Calculus; Lego® MindStorms™


Robótica cognitiva: programação baseada em lógica para controle de robôs

Felipe Werndl Trevizan; Leliane Nunes de Barros

Departamento de Ciência da Computação, Instituto de Matemática e Estatística da Universidade de São Paulo (IME-USP), Rua do Matão, 1010 - Cidade Universitária - CEP 05508-090 São Paulo - SP - Brasil, trevisan@ime.usp.br, leliane@ime.usp.br

RESUMO

A área de Robótica Cognitiva tem como principal objetivo desenvolver agentes robóticos capazes de realizar funções de alto-nível, especificando o programa de controle do robô em uma linguagem de programação baseada em lógica. Desta forma, é possível declarar e verificar propriedades do agente como prova de teoremas. Além disso, uma especificação feita em uma linguagem formal pode ser executável, o que permite simular o comportamento do agente através dessa especificação. Este artigo apresenta o desenvolvimento, passo a passo, de um agente para um robô Lego® MindStorms™, usando IndiGolog - uma linguagem para especificação de agentes baseada no Cálculo de Situações. Como exemplo de aplicação, foi escolhido o problema clássico do Mundo do Wumpus para o qual a construção de um agente completo envolve a integração das seguintes técnicas de: planejamento reativo, planejamento para satisfação de metas e realização de tarefas (planejamento hierárquico), execução de ações, raciocínio com informação incompleta, geração e raciocínio hipotético sobre o estado do mundo e mudanças de crença.

Palavras-chave: Planejamento, planejamento online, Golog, Legolog, Cálculo de Situações, Lego® MindStorms™.

ABSTRACT

The goal of the Cognitive Robotics research area is to develop robotic agents capable of high-level functions by using a programming language, based on logics, to describe the robot control program. Besides, such a language can be used to prove properties of the world and to simulate the robot behavior by running its program. This paper shows how a Lego® MindStorms™ robot can be used to implement a software agent capable of performing high level functions specified in IndiGolog - a logical language to write robot control programs, based on Situation Calculus. The application domain example is the classical problem of the Wumpus World for which the construction of a complete intelligent agent requires the integration of several Artificial Intelligence techniques, such as: reactive planning; hierarquical and goal achievement planning; plan execution; reasoning with incomplete information; generation and discrimination of hypotheses about the world state; and belief changes.

Keywords: Planning, on-line planning, Golog, Legolog, Situation Calculus, Lego® MindStorms™.

1 INTRODUÇÃO

Um dos problemas de maior interesse na área de Robótica é o desenvolvimento de agentes em ambientes dinâmicos, com observação parcial do mundo e ações não-determinísticas, probabilísticas ou envolvendo as ainda, duas características (Trevizan et al., 2007). Nesse tipo de problema, o agente deve sensoriar o ambiente para executar ações e monitorar as mudanças do mundo. Tudo isso deve ser realizado durante o planejamento, isto é, enquanto o agente decide qual será a próxima ação a ser executada que o leve mais próximo de seus objetivos. A construção de agentes com tais características possui uma vasta aplicação no mundo real, por exemplo: robôs de busca e resgate (search and rescue), navegação de robôs e automação industrial.

Uma das propostas mais conhecidas na área de Robótica Cognitiva usa a linguagem Golog (Levesque et al., 1997): uma linguagem baseada no Cálculo de Situações (Mccarthy, 1963) e implementada como um meta-interpretador Prolog. Apesar do uso de Golog e suas extensões permitir a investigação de novas teorias lógicas de raciocínio (Boutilier et al., 2000; Liu et al., 2004), esses resultados são raramente testados ou demonstrados para agentes robóticos em ambientes complexos e não simulados (Levesque e Pagnucco, 2000), em que a integração de diferentes tipos de comportamento torna o desenvolvimento do agente uma tarefa não trivial.

1.1 Objetivos e contribuições

O objetivo desse trabalho é mostrar como um agente robótico com capacidade de realizar tarefas de alto-nível e raciocínio baseado em lógica, pode ser implementado em um robô Lego® MindStorms™(Trevizan e de Barros, 2004). Essa implementação será feita usando Legolog (Levesque e Pagnucco, 2000), um arcabouço para desenvolvimento de software para robôs Lego® MindStorms™, que contém uma extensão da linguagem Golog. Como um estudo de caso, foi escolhido o problema clássico do Mundo do Wumpus (Russel e Norvig, 2003) no qual um agente deve explorar um ambiente hostil, fazendo observações parciais com o objetivo de coletar barras de ouro, evitando localizações que o coloque em perigo. A construção de um agente completo para o Mundo do Wumpus envolve uma combinação de técnicas de Inteligência Artificial, tais como: raciocínio sobre ações no Cálculo de Situações, raciocínio com informação incompleta sobre o estado do mundo, planejamento reativo, planejamento para satisfação de metas e execução de ações.

Apesar do Mundo do Wumpus ter sido um dos primeiros jogos propostos para primeira pessoa e ser discutido em muitos livros de Inteligência Artificial, o desenvolvimento de uma solução completa para ele e implementada em um ambiente não-simulado não foi encontrada na literatura. Além disso, o problema do Mundo do Wumpus ainda é considerado difícil, devido à observabilidade parcial do mundo e envolver tomada de decisão seqüencial, isto é, o agente precisa lembrar os estados anteriores do mundo para tomar decisões. Isso é corroborado pelo interesse que esse problema tem despertado na comunidade de raciocínio não-monotônico, recentemente proposto como tema especial nos eventos internacionais: NRAC05 (Sixth Workshop on Nonmonotonic Reasoning, Action, and Change, 2005) e NMR06 (International Workshop on Non-Monotonic Reasoning, 2006).

Em suma, a principal contribuição desse trabalho é mostrar como é possível explorar técnicas avançadas de raciocínio lógico da Robótica Cognitiva em robôs Lego® MindStorms™, ou outros robôs para os quais seja possível estender o arcabouço Legolog.1 Uma vez que robôs Lego® MindStorms™ têm sido usados em competições de Robótica no mundo inteiro e em disciplinas introdutórias de Robótica, o trabalho apresentado nesse artigo cria a possibilidade de novas modalidades de competições e propostas de cursos.

Na Seção 2, é descrita a linguagem Golog e suas extensões (ConGolog e IndiGolog) incluindo uma breve introdução ao Cálculo de Situações. Na Seção 3 é apresentado o robô Lego® MindStorms™ e seu pacote básico RIS (Robotics Invention System™), bem como Legolog - um arcabouço para programação lógica de robôs Lego® MindStorms™. Usando o Mundo do Wumpus como estudo de caso, a Seção 4 mostra as fases de construção de um agente usando Legolog: (i) a especificação em Cálculo de Situações das ações do agente; (ii) sua implementação em IndiGolog; (iii) a implementação das ações primitivas do agente no robô; e finalmente (iv) a representação física do ambiente do Mundo do Wumpus.

2 GOLOG: UMA LINGUAGEM PARA ROBÓTICA COGNITIVA

A tarefa de planejamento pode ser trivialmente definida como o seguinte problema: dado a tupla á, s0Î , GÍ , ñ, na qual é o conjunto de estados, é o conjunto de ações (transições), encontrar uma seqüência de ações (plano) que ao ser aplicada em s0, leve o agente para um estado sg Î G (estado meta). A complexidade dos algoritmos de planejamento está diretamente ligada à representação escolhida para cada um desses elementos da sua entrada, bem como às restrições associadas a cada ação.

A forma de representação mais usada na área de planejamento é através de variáveis de interesse, chamadas de fluentes. Assim, a definição de um problema é feita utilizando um conjunto de fluentes. Uma valoração para cada item desse conjunto representa um determinado estado. Esse tipo de representação permite expressar sinteticamente problemas com até milhões de estados. Porém, os algoritmos para problemas de planejamento em tais linguagens são ineficientes devido ao seu espaço de estados exponencial (Ghallab et al., 2004). Para diminuir o espaço de busca, os algoritmos de planejamento empregam: (a) técnicas para tratar conflitos entre ações, e assim transformar a busca no espaço de estados numa busca no espaço de planos (Kambhampati et al., 1995); (b) heurísticas (Bonet e Geffner, 1998) para orientar a busca de forma eficiente no espaço de estados; ou ainda (c) a modelagem de ações compostas, também chamadas de ações de alto-nível, para gerar um plano de ações através de decomposições sucessivas (planejamento hierárquico) (Erol et al., 1994).

Golog (Levesque et al., 1997), uma linguagem de programação para agentes inteligentes, permite especificar restrições para atingir um conjunto de estados meta desejado. Essas restrições são especificadas através de um programa de alto-nível, que pode ser definido como um programa no qual: (i) as instruções primitivas são as ações do agente para o domínio, descritas em Cálculo de Situações (Mccarthy, 1963); (ii) os testes envolvem condições (predicados ou fluentes) dependentes do domínio e que são afetados pelas ações do agente; (iii) os procedimentos, correspondem às ações compostas de planejamento hierárquico (Barros e Iamamoto, 2003); (iv) e ainda, pode conter escolhas não-determinísticas, onde é necessário fazer uma busca por um conjunto de ações futuras (lookahead) para garantir que o programa irá terminar com sucesso. Golog busca por uma seqüência de ações que gere uma execução válida do programa de alto-nível do agente. A principal vantagem em procurar uma execução válida de um programa de alto-nível, através de escolhas não-determinísticas de decomposições, é a redução do espaço de busca que deveria ser explorado se o agente raciocinasse diretamente sobre suas ações primitivas (forma de planejamento não-hierárquico). Assim as restrições fornecidas pelo programa do agente são usadas para podar o espaço de planos durante a busca por uma execução válida.

Variações da linguagem Golog permitem: (1) especificar programas com ações concorrentes (ConGolog (De Giacomo et al., 2000)); e (2) que ações sejam executadas durante a tarefa de planejamento (IndiGolog (Lespérance e Ng, 2000)), característica chamada aqui de planejamento on-line.

2.1 O Cálculo de Situações

O Cálculo de Situações (Mccarthy, 1963) é um formalismo lógico baseado em lógica de primeira ordem, cuja ontologia inclui: situações, representando "fotos" do mundo; fluentes, que representam as propriedades do mundo que podem ser alteradas pelo agente; e ações, que são responsáveis por alterar o valor verdade dos fluentes, ou seja, que provocam mudanças no mundo. No Cálculo de Situações, a constante s0 denota a situação inicial; a função do(a, s) denota a situação resultante da execução da ação a na situação s; o predicado poss(a, s) representa que é possível executar a ação a na situação s; e o predicado holds(f, s) representa que o fluente f é válido na situação s.

Dada uma especificação de um domínio de planejamento no Cálculo de Situações, a solução para um problema de planejamento nesse domínio pode ser encontrada através de uma prova de teorema. Seja o conjunto de axiomas que descrevem as ações do agente, o conjunto de axiomas que descreve a situação inicial e uma sentença lógica descrevendo a meta do agente. Dessa forma, a prova construtiva de Ù $S (legal(S) Ù (S)), onde legal(S) º poss(a1, s0) Ù...Ù poss(an, do(an-1, do(..., do(a2, do(a1, s0))...))), tem como resultado a instanciação da variável S em um termo da forma do(an, do(an-1,..., do(a2, do(a1, s0))...)). Essa situação corresponde à seqüência de ações áa1, ..., anñ, que quando executada pelo agente na situação inicial s0, o leva para uma situação que satisfaz a meta. Chamaremos esse tipo de planejamento, de planejamento off-line, isto é, planejamento para metas de alcance (satisfação de estados meta) raciocinando-se diretamente sobre as ações primitivas do agente sem, no entanto, envolver a execução de execução de ações durante a elaboração do plano.

2.2 Golog: um meta-interpretador Prolog

Os programas Golog são executados por um provador de teoremas especializado (Figura 1) para lógica de primeira ordem (Levesque et al., 1997), implementado como um meta-interpretador Prolog. O usuário deve fornecer uma axiomatização , descrevendo as ações do agente (conhecimento declarativo), e um programa de controle c (programa de alto-nível), especificando o comportamento desejado do agente (conhecimento procedural). A execução do programa Golog corresponde a prova construtiva de

exec(c, s0, s), onde exec(c, s0, s) º $s(s Ù legal(s)) e s é uma decomposição válida de c. Dessa forma, se uma situação s = do(an, do(an-1, ..., do(a2, do(a1, s0))...)) for encontrada pelo meta-interpretador Prolog, a seqüência de ações áa1, ..., anñ corresponde a uma execução válida que pode ser executada pelo agente.


Outra característica de Golog é ser um planejador off-line. Isso significa que toda a busca por uma seqüência de ações (execução válida do programa de alto-nível em questão) será realizada antes que qualquer ação seja executada pelo agente.

2.3 Cálculo de Situações e Golog

Como foi mencionado, um termo no Cálculo de Situações da forma do(an, do(an-1,..., do(a2, do(a1, s0))...)) corresponde ao plano p = áa1, ..., anñ. Em Golog é introduzido o símbolo ";" usado na notação infixa para representar planos como uma composição sequencial de ações. Assim qualquer termo denotando uma ação é um plano e se p1 é um plano e p2 é um plano, p1;p2 também é um plano.

A execução de planos é definida no meta-interpretador Prolog pelo predicado Exec (Figura 1). Exec(p, s, s¢) é verdadeiro se um plano p leva da situação s para a situação s¢. Seja a uma variável representando uma ação e p1 e p2 variáveis que representam planos, Golog usa as seguintes abreviações: Exec(a, s, s¢) para Poss(a, s) Ù s¢ = do(a, s) e Exec(p1;p2, s, s¢) para $s¢¢(a, s) (Exec(p1, s, s¢¢) Ù Exec(p2, s¢¢, s¢)). Golog também generaliza a definição de plano através de três operadores: #, o operador de escolha não-determinística de execução de ações; * , o operador de iteração não-determinística de execução de ações; e ?, o operador que testa se uma condição (fluente) é verdadeira.

Assim, é possível expressar qualquer comando de fluxo de uma linguagem imperativa em Golog, por exemplo, if f then p1else p2 através de Exec((f?;p1)|(f?;p2), s, s¢) (Figura 1, linha 10) e while f do p1 através de Exec((f?;p1)*; f?,s,s¢) (Figura 1, linha 14).

O principal operador da família de linguagens Golog é o operador Proc(·,·). Ele permite definir tarefas compostas através de decomposições sucessivas de um programa de alto-nível. A execução de um procedimento Proc(A, A1) (Figura 1, linha 16) consiste em instanciar as variáveis livres de A1 que estão definidas em A e recursivamente executar A1, que é decomposto em outros procedimentos ou ações primitivas.

2.4 Extensões de Golog

Uma extensão possível para Golog é permitir a execução concorrente de planos. Esse dialeto é conhecido como ConGolog (De Giacomo et al., 2000)) e além desses operadores são definidos outros dois: (i) o operador de concorrência com mesma prioridade (p1||p1) entre planos; e o operador de concorrência com maior prioridade para p1 (p1 >> p2).

A linguagem usada nesse trabalho é chamada IndiGolog (Lespérance e Ng, 2000), uma extensão de Golog para resolver problemas que requerem a execução de ações durante o planejamento, isto é, planejamento on-line. Essa característica permite especificar programas capazes de fazer sensoriamento durante a busca por um plano solução e utilizar as percepções obtidas para guiar os novos passos dessa busca. No entanto, IndiGolog realiza planejamento exclusivamente on-line e para obter a combinação desses dois tipos de planejamento (off-line e on-line) é necessário estender o IndiGolog, como será descrito na Seção 4.4.

3 O ROBÔ LEGO® MINDSTORMS™

O robô Lego® MindStorms™ é parte do conjunto básico RIS (Robotics Invention System™), no qual o principal componente é o bloco RCX (Robotic Commander Explorer). Ele contém um microprocessador Hitachi H8/3297 de 16 bits, capaz de controlar até três atuadores e três sensores. Os atuadores são compostos por motores de cinco intensidades para ambas as direções, enquanto os sensores variam entre sensor de luz, temperatura, rotação e botões. Além disso, o RCX também contém uma porta de infravermelho, capaz de se comunicar com a torre de infravermelho. Esse último componente, que também integra o conjunto RIS, é ligado na porta serial de um computador para realizar a comunicação entre o bloco RCX e o computador.

Existem compiladores capazes de gerar código para a máquina virtual implementada no firmware do bloco RCX, que recebe o código compilado via infravermelho. Um exemplo de compilador desse tipo é o NQC (not-quite C), usado nesse trabalho. A linguagem aceita pelo compilador NQC possui comandos para configurar, ativar e desativar os atuadores, receber informações dos sensores, além de possuir concorrência nativa na linguagem. No pacote de softwares fornecido pelo RIS, há linguagens de programação visual, chamadas Robolab ou LabVIEW, nas quais é possível construir programas para o bloco RCX integrando figuras (como peças de quebra-cabeça) e definindo parâmetros para elas. Esse artigo apresenta uma abordagem alternativa a esses ambientes de programação: o uso de lógica formal para o desenvolvimento de programas para o bloco RCX.

3.1 Legolog

Legolog (Levesque e Pagnucco, 2000) é um arcabouço para desenvolvimento de software para o robô Lego® MindStorms™. Esse arcabouço é composto pelo IndiGolog, que ficará instalado no computador, mais a implementação de um protocolo de comunicação entre o bloco RCX e o computador. Esse protocolo permite a troca, via infravermelho, de mensagens durante a execução de um programa no bloco RCX. Assim, Legolog pode ser usado para modelar aplicações do tipo cliente e servidor, em que o bloco RCX é o servidor de atuadores e sensores, e o computador (executando o IndiGolog) é o cliente. A Figura 2 mostra como uma arquitetura do tipo cliente/servidor decompõe um agente implementado usando Legolog, onde:

  • Cliente: é o pacote executado pelo computador, composto pelo programa de alto-nível do robô, uma implementação do protocolo de comunicação (computador ® RCX) e do IndiGolog.

  • Servidor: é o pacote executado pelo bloco RCX, composto pelo pprograma de execução de ações primitivas e por uma implementação do protocolo de comunicação (RCX ® computador).


Dessa forma, um programa de controle de robô usando Legolog para uma determinada aplicação é dividido, basicamente, em duas partes (retângulos tracejados na Figura 2):

Programa de alto-nível do robô. Programa armazenado no computador e que, ao ser executado pelo IndiGolog, faz a geração incremental (on-line) de planos de ações primitivas, considerando as percepções do robô.

Programa de execução de ações primitivas. Programa implementado em NQC para ser executado no bloco RCX que especifica como serão executadas as ações primitivas e de sensoriamento (percepções) no robô Lego® MindStorms™.

Através desse modelo, o projetista é capaz de definir o nível de abstração das ações delegadas ao RCX, isso é, seu grau de autonomia. Assim, o RCX pode ser programado para simplesmente controlar suas entradas e saídas, tornando ações como ligue o motor m no sentido s em primitiva; ou para implementar ações mais complexas, como por exemplo, seguir uma linha, encontrar um objeto, permanecer dentro de uma área limitada, ou ainda, para realizar a tarefa complexa da função get_boolean_sense, detalhada na Seção 6. O mais interessante, do ponto de vista da Robótica Cognitiva, é permitir a definição de ações primitivas em um nível maior de abstração, como por exemplo ir para a posição à frente.

Como o Legolog já traz a implementação do protocolo de comunicação entre cliente e servidor, após definir o nível de abstração das ações delegadas ao RCX, a construção de um programa de um agente robótico usando Legolog resume-se em: implementar o programa de alto-nível do agente em IndiGolog e o programa de execução de ações primitivas em NQC. Além disso, o projetista deve criar a tabela que traduz o nome das ações em números inteiros e converter as percepções numéricas do robô em fluentes para o IndiGolog.

4 IMPLEMENTAÇÃO DE UM AGENTE USANDO LEGOLOG

Nesta seção, são apresentados os principais passos na construção de um agente usando Legolog, isto é, um agente implementado em IndiGolog para o robô Lego® MindStorms™. Para isso, foi selecionado o problema do Mundo do Wumpus (Russel e Norvig, 2003), um ambiente estático e determinístico com observação parcial que requer tomada de decisão sequencial. Uma solução para esse problema envolve planejamento e execução de ações, bem como a formulação de hipóteses sobre o estado do mundo.

4.1 Mundo do Wumpus: busca ao tesouro num ambiente hostil

O problema do Mundo do Wumpus consiste em um agente que deve explorar um reticulado, tendo acesso apenas à informação local. O agente tem como objetivo sair do reticulado, cercado por paredes, com a maior pontuação possível, sendo que para isso, ele deve encontrar o ouro escondido em algumas posições do reticulado, realizando o menor número de movimentos. O agente deve ainda desviar de abismos e do Wumpus, um monstro que poderá devorá-lo. A Figura 3 ilustra uma instância 4×4 resolvida do Mundo do Wumpus.


Um agente para o Mundo do Wumpus possui informação incompleta do mundo, uma vez que sua percepção sobre a presença de abismo (brisa) ou do Wumpus (cheiro), só é possível na adjacência de um abismo ou do Wumpus, respectivamente. Isso caracteriza um agente de observabilidade parcial do mundo. Por essa razão, o agente deve raciocinar através da geração de hipóteses durante a exploração do ambiente, para finalmente classificar as posições como perigosas ou seguras. Além disso, o Wumpus pode ser morto pelo agente com uma flecha atirada em sua direção.

Apesar do Mundo do Wumpus ser um problema estudado em cursos de introdução à Inteligência Artificial, o desenvolvimento do programa completo de um agente para esse domínio não é uma tarefa trivial. Por isso, cursos introdutórios de Inteligência Artificial não o resolvem por completo, por exemplo, em (Russel e Norvig, 2003) são feitas sugestões sobre como modelar somente parte dos comportamentos que um agente inteligente deve realizar.

4.2 Agente do Mundo do Wumpus: modelo conceitual

A Figura 4 mostra um modelo conceitual do agente do Mundo do Wumpus, identificando os diferentes sub-problemas que o agente deve resolver, bem como a relação entre eles. Neste modelo, também se aplica a idéia de decomposição de problemas. Note porém, que apesar de existir uma correspondência entre os sub-problemas e a descrição de ações do agente (ações compostas e ações primitivas), estabelecer essa correspondência não é trivial.


4.3 Agente do Mundo do Wumpus: modelo lógico e implementação

Chamamos de modelo lógico do agente, a especificação de suas ações em Cálculo de Situações e de seu programa em IndiGolog (também baseado em lógica). É interessante salientar uma das vantagens da abordagem da Robótica Cognitiva: o modelo lógico do programa do agente é igual à implementação do agente.

O modelo lógico para o agente do Mundo do Wumpus foi inicialmente baseada no livro Artificial Inteligence: a Modern Approach (Russel e Norvig, 2003). Porém, nem todos os sub-problemas apresentados do modelo conceitual (Figura 4) foram tratados pelos autores. Nessa figura, as ovais duplas indicam sub-problemas que não são comumente tratados em livros de Inteligência Artificial e que foram especialmente modelados e implementados para o agente deste projeto.

Os fluentes usados para modelar o problema do Mundo do Wumpus foram: smelly(L), breezy(L), glitter(L) os quais indicam, respectivamente, que a posição L possui o cheiro do Wumpus, a brisa de um abismo ou o brilho do ouro; atAgent(L) representando que o agente está na posição L; agentDirection(D) indicando a direção atual D do agente; visited(L) e secure(L) os quais sinalizam respectivamente que a posição L foi visitada ou que ela é uma localização segura; e holding(O), indica que o agente está segurando o objeto O.

A partir desses fluentes, é possível especificar o conjunto de axiomas do Cálculo de Situações para o agente do Mundo do Wumpus. Esses axiomas são divididos em: (i) axiomas de estado inicial , que descrevem o estado inicial do mundo e (ii) axiomas de estado sucessor , que representam como os fluentes são alterados ou permanecem inalterados com as ações do agente. Por exemplo, o axioma de estado sucessor para o fluente smelly(L) é:

Ele define uma posição L como smelly na situação do(A,S) se L já era smelly em S ou se o agente recebeu a percepção do cheiro do Wumpus ao visitar a posição L usando a ação A. Da mesma forma, devem ser definidos axiomas (não detalhados aqui por motivo de espaço) para especificar como as ações turn_clokwise, turn_anti_clockwise, foward, grab, shoot, percept e climb, afetam os demais fluentes.

4.4 Complementando o modelo lógico: procedimentos em IndiGolog

Para implementar o programa de alto-nível do agente, além dos axiomas do Cálculo de Situações, é necessário resolver os seguintes sub-problemas:

Classificar ações. O conjunto de ações (primitivas ou compostas) que podem ser executadas a partir de uma dada situação são classificadas em Great, Good, Medium, Risky e Deadly. Essa classificação é implementada por procedimentos em IndiGolog e sua modificação implica em diferentes comportamentos do agente, como por exemplo

que define um agente cuja ação de maior prioridade (greatAction) é planejar a saída da caverna quando ele já possuir pelo menos uma barra de ouro. Caso contrário, o agente deve pegar o ouro quando receber a percepção de brilho. Finalmente, se nenhuma das ações anteriores for possível, o agente deve tentar matar o Wumpus, caso ele consiga inferir a posição do monstro.

Executar a melhor ação. Para isso foi definido o procedimento IndiGolog find_action que seleciona, de modo não-determinístico, qual é a próxima melhor ação a ser executada, de acordo com a classificação de ações. Como IndiGolog realiza planejamento on-line, após a melhor ação ser escolhida, ela já é executada.

Diagnóstico da posição do Wumpus e de abismos. Um dos aspectos mais interessantes do problema do Mundo do Wumpus é determinar a posição do Wumpus e de abismos com observação parcial do mundo. Determinar a posição do Wumpus é fundamental para que o agente possa matá-lo, pois ele possui uma única flecha (Figura 5). A determinação de abismos também é importante, pois pode significar ao agente encontrar ou não o ouro (por exemplo, caso a localização do ouro esteja cercada de percepções de abismos), ou ainda, ser útil para descobrir novas posições seguras e minimizar sua navegação.


Esses sub-problemas são chamados de diagnóstico uma vez que, determinar as posições do Wumpus ou dos abismos, pode explicar as observações do agente em situações passadas. O procedimento IndiGolog tryToKillWumpus

especifica que para tentar matar o Wumpus é necessário que o agente consulte sua base de conhecimento (consultKB) e recupere uma lista de posições (pares de coordenadas) em que ele percebeu o cheiro do Wumpus (SmellyPos) e, situações passadas. Em seguida, é feita uma chamada ao procedimento findWumpus para a geração e discriminação de uma lista de hipóteses sobre as posições possíveis do Wumpus (WumpusPos). Se uma lista com apenas uma posição for devolvida, o procedimento planKillWumpus(WumpusPos) faz com que o agente planeje para alcançar uma posição adequada para atirar a flecha e, finalmente, matar o Wumpus. Caso, contrário, o agente decide não arriscar perder sua única flecha antes de explorar mais o ambiente.

O procedimento Golog findWumpus a seguir, faz a geração e discriminação de hipóteses sobre a posição do Wumpus.

Nesse procedimento, para cada posição [SmeX, SmeY] em que o cheiro do Wumpus foi percebido, suas adjacências são consideradas hipóteses de localização do Wumpus. As hipóteses geradas são discriminadas através do procedimento abductWumpusAt:

Inicialmente, é verificado se a posição [WumX, WumY] já foi classificada como segura. Caso contrário, o procedimento possibleWumpusPos analisa as três posições adjacentes, excluindo a posição na direção IgnDir já visitada.

Nesse procedimento é verificada a hipótese do Wumpus estar na posição [WumX, WumY], analisando as percepções passadas para detectar conflitos. Um conflito é detectado se uma posição adjacente a [WumX, WumY], que já foi visitada anteriormente, não tenha sido marcada como smelly.

Planejamento para alcançar a saída, o Wumpus e posições não-visitadas Para alcançar essas metas, o agente deve atingir uma determinada posição já conhecida, a saber: a saída, uma posição na direção do Wumpus e uma posição segura não-visitada, respectivamente. Para obter a garantia que o agente chegará em tais posições, o caminho escolhido deve ser seguro, ou seja, todas as posições contidas nele já devem ter sido marcadas como seguras. A existência de pelo menos um caminho seguro para qualquer posição já visitada é trivialmente provada através da relação entre posição visitada e segura: toda posição visitada é segura e caso essa posição não tenha marcação de cheiro do Wumpus ou brisa, então todas as posições na sua adjacência são seguras também. Outra vantagem em utilizar caminhos seguros é não precisar sensoriar o ambiente para algumas metas do agente, o que resulta em um problema de planejamento off-line.

Como foi dito na Seção 2.2, IndiGolog é um planejador exclusivamente on-line, o que obriga alterar sua implementação em Prolog para adicionar um novo operador, chamado planning. Essa nova primitiva equivale à seguinte relação: Exec(planning(pos,paf), s, s¢) º $psol, s¢¢(Exec(psol, s, s¢¢) Ù Exec(paf, s¢¢, s¢) Ù holds(agentAt(pos), s¢¢)), onde pos é a posição que se deseja atingir, paf é o plano que deve ser executado após chegar na posição pos e psol é o plano obtido de forma off-line que leva o agente até a posição pos. Um exemplo de chamada do planejador off-line ocorre no procedimento descrito na Seção 4.4, em que o comando planning([0,0], [climb | []]) é executado pelo IndiGolog.

O algoritmo de busca utilizado para implementar esse planejador é o de busca em profundidade iterativa no espaço de estados (Pereira e Barros, 2004). Sua utilização é feita através da consulta Prolog , onde plan(S) e exec(S) são definidos como:

Esse algoritmo é usado, juntamente com os axiomas de Cálculo de Situações, para inferir que $s (plan(s) Ù exec(s) Ù G), sendo G uma descrição do estado meta. A principal característica desse algoritmo é que ele é ótimo em relação ao tamanho do plano, ou seja, no problema do Mundo do Wumpus ele sempre devolverá o plano que realiza o menor caminho até a meta. Apesar desse algoritmo ter as características desejadas, também é possível usar outros planejadores mais eficientes, baseados em lógica, que realizam busca no espaço de planos (Pereira e Barros, 2004).

5 UMA MAQUETE PARA O MUNDO DO WUMPUS

Para construir uma maquete do ambiente do Mundo Wumpus foi necessário criar um modo de representar o ambiente considerando os sensores disponíveis do robô Lego® MindStorms™. Como só foi utilizado o sensor de contraste, foram feitas diferentes marcações com diferentes contrastes para que o robô fosse capaz de se movimentar pelo reticulado e captar as percepções de cada posição.

Na Figura 6, as linhas pontilhadas delimitam cada posição do Mundo do Wumpus, já as linha contínuas (linhas guias com marcações de contraste nas intersecções) representam os caminhos possíveis para o robô se movimentar.


As marcas de percepção foram criadas para representar as três percepções possíveis para o Mundo do Wumpus (glitter, stench e breezy). Para isso, todas as posições do ambiente foram divididas em quadrantes, aproveitando as linhas guias como delimitadores, onde cada quadrante é responsável por representar uma percepção (Figura 6 (b)).

O terceiro tipo de marca, as marcas de giro, são usadas pelo algoritmo de percepção para realizar um giro de 360° dentro de uma mesma posição enquanto o robô procura por marcas de percepção nos quadrantes da posição P. Dessa forma, essas marcas representam que o robô alinhou seu eixo de rotação com o centro da posição P.

Para confeccionar a representação do Mundo do Wumpus, seguindo o modelo acima, foi utilizado lona preta de construção para o fundo e fita crepe para as linhas guias, gerando um alto contraste esses itens. A maquete final da representação do Mundo do Wumpus pode ser vista na Figura 8.



6 IMPLEMENTAÇÃO DAS AÇÕES PRIMITIVAS NO ROBÔ

Na decomposição escolhida para a implementação do Mundo do Wumpus usando Legolog, a captação das percepções de uma posição (glitter, stench e breezy), de forma não ordenada, é implementada através da ação primitiva, percept. Dessa forma, a percepção do agente é feita de modo autônomo pelo RCX.

Para o robô captar todas as percepções de uma posição, ele deve realizar um giro de 360° coletando as percepções dos quadrantes e depois retornar à posição original. Assim, a ação percept é implementada realizando quatro iterações da função get_boolean_sense (Figura 7), devolvendo um vetor de quatro booleans para o computador, codificado em um número inteiro (Figura 2).

Como o robô pode atingir uma determinada posição por quatro direções diferentes (norte, sul, leste e oeste), o programa de alto-nível do agente usa a direção atual do robô para traduzir o vetor de booleans nos fluentes smelly(L), breezy(L), glitter(L), onde L é a sua posição atual. Parte dessa tradução é feita executando até três shifts circulares no vetor recebido para recuperar a percepção em uma ordem padrão.

Além da ação percept, as seguinte ações foram definidas como primitivas e implementadas no bloco RCX: turn_clokwise, turn_anti_clockwise, foward, grab, shoot e climb. Dessas ações, apenas as três primeiras movem o robô, avançando uma posição, girando 90° no sentido horário e anti-horário, respectivamente. Para as outras ações, grab, shoot e climb, o robô apenas emite sons indicando que elas foram executadas e esperando que o ambiente seja atualizado manualmente.

7 RESULTADOS EXPERIMENTAIS

A Tabela 1 exibe três instâncias do problema do Mundo do Wumpus, com as posições do Wumpus, do ouro e dos abismos especificados nas linhas 2, 3 e 4, respectivamente. Em todos os experimentos feitos, o robô detectou corretamente as posições seguras e perigosas, bem como encontrou o plano ótimo para se aproximar do Wumpus e sair da caverna. Essas capacidades também podem ser verificadas formalmente através da especificação lógica do agente. Os experimentos também mostram que para um plano de tamanho 22, 25 e 18 passos, o tempo médio para a seleção on-line de ações foi menor que 1,7 segundos, enquanto o tempo médio para a geração de planos off-line foi menor que 1,4 segundos. Para um método de planejamento baseado em um formalismo lógico, sem o uso de heurísticas, esses resultados representam um bom desempenho e demonstram como essa abordagem é viável para testar e investigar teorias formais da Robótica Cognitiva e que é possível a criação de novas modalidades de competições de robôs que envolvam problemas considerados desafios na área de Inteligência Artificial.

8 TRABALHOS CORRELATOS

Tradicionalmente, comparar formalismos para raciocínio sobre ações não é uma tarefa trivial. No entanto, essa tarefa é importante para que seja identificado os pontos fracos e fortes de cada abordagem. Quando essa comparação é feita através de um domínio de teste, é necessário definir métricas precisas de comparação. Por exemplo, a pontuação de um agente para o Mundo do Wumpus pode ser usada como métrica: (i) dois agentes devem ser comparados sob o mesmo conjunto de instâncias do problema, (ii) o tempo gasto para resolver uma mesma instância deve ser medido através dos mesmos procedimentos.

A seguir, é feita um breve discussão sobre outras soluções para o problema do Mundo do Wumpus, propostas recentemente para o tema especial do NMR06 (International Workshop on Non-Monotonic Reasoning, 2006) e no NRAC05 (Sixth Workshop on Nonmonotonic Reasoning, Action, and Change, 2005).

O trabalho descrito em (Sardina e Vassos, 2005) também propõe uma solução baseada em IndiGolog. Porém, para fazer o diagnóstico de posições (Seção 4.4), essa abordagem propõe algumas modificações no IndiGolog para tratar informação incompleta. Essas modificações são feitas através da extensão da ontologia do Cálculo de Situações: fluentes podem ter valores possíveis em uma situação; e known é um predicado criado para representar que um fluente possui apenas um, e só um, valor em uma dada situação. A abordagem proposta nesse artigo difere de (Sardina e Vassos, 2005) em dois aspectos: (1) não é feita nenhuma extensão no Cálculo de Situações; (2) para o raciocínio de diagnóstico de posições foram feitas alterações no meta-interpretador Prolog ao invés de alterar a ontologia do Cálculo de Situações.

Uma outra implementação baseada em lógica é dada em (Thielscher, 2005), que usa a linguagem FLUX: uma linguagem da Robótica Cognitiva baseada no Cálculo de Fluentes (Thielscher, 2000). O Cálculo de Fluentes é uma extensão do Cálculo Situações no qual um estado S é representado por um conjunto de fluentes que são verdadeiros em S. Essa característica combinada à programação com restrições torna FLUX uma linguagem interessante para Robótica Cognitiva. No entanto, através de alguns experimentos com o agente FLUX para o Mundo do Wumpus foi possível verificar que a instância do problema ilustrada na Figura 4 (que é resolvida pelo agente desse artigo) não foi completamente resolvida, isto é, o agente FLUX não mata o Wumpus para conseguir pegar a barra de ouro.2 Os autores em (Thielscher, 2005) apontam algumas melhorias futuras que podem ser feitas para resolver tal limitação.

Por último, a implementação proposta em (Shapiro e Kandefer, 2005) usa a linguagem SNePS (Shapiro, 1989) e tem como objetivo propor modelos gerais de inteligência ao invés de desempenho computacional. Assim, o agente SNePS proposto para o Mundo do Wumpus, estende a proposta original do jogo, com a idéia de temperamento e tomada de decisões assumindo maior risco. É importante notar que nenhuma das abordagens citadas anteriormente implementam suas soluções em ambientes reais, como é a proposta desse artigo.

9 CONCLUSÕES

Nesse trabalho, foi apresentado como implementar um programa de alto-nível requerido por um agente de planejamento com informação incompleta para o exemplo do Mundo do Wumpus. A solução proposta foi implementada para um ambiente não simulado usando Legolog: um arcabouço para desenvolvimento de software que contém o IndiGolog e a implementação de um protocolo de comunicação entre robôs Lego® MindStorms™ e computadores. O agente implementado foi capaz de resolver instâncias de problemas que outras propostas baseadas em Robótica Cognitiva apresentadas (Sixth Workshop on Nonmonotonic Reasoning, Action, and Change, 2005) não foram capazes de resolver. Em termos práticos, esse trabalho mostra como é possível intercalar a execução de ações de alto-nível (procedimentos IndiGolog) com ações primitivas descritas no Cálculo de Situações e implementadas no robô Lego® MindStorms™.

Como trabalhos futuros, pretende-se: (1) explorar o uso de um PDA (Personal Digital Assistent) embarcado no robô Lego® MindStorms™, com o objetivo de integrar cliente/servidor e assim possibilitar maior grau de autonomia ao robô; e (2) usar o IndiGolog em robôs mais robustos e como maior capacidade de processamento.

AGRADECIMENTOS

Esse projeto foi financiado pela FAPESP (processo 03/08311-3), e pelo CNPq (processo 308530/03-9).

Artigo submetido em 01/06/2006

1a. Revisão em 13/11/2006

2a. Revisão em 30/12/2006

Aceito sob recomendação do Editor Convidado Prof. Osvaldo Ronald Saavedra Mendez

ARTIGO CONVIDADO: Versão completa e revisada de artigo apresentado no SBAI-2005

Referências bibliográficas

  • Barros, L.N. Iamamoto, E. (2003). Planejamento de tarefas em golog, SBAI
  • Bonet, B. Geffner, H. (1998). HSP: Heuristic Search Planner, Proc. of AIPS.
  • Boutilier, C., Reiter, R., Soutchanski, M. Thrun, S. (2000). Decision-theoretic, high-level agent programming in the situation calculus, Workshop on Decision-Theoretic Planning, Proc. KR
  • DeGiacomo, G., Lespérance, Y. Levesque, H. (2000). ConGolog, a concurrent programming language based on the situation calculus, Artificial Intelligence 121(1-2):109-0.969.
  • Erol, K., Hendler, J.A. Nau, D.S. (1994). UMCP: A sound and complete procedure for hierarchical task-network planning, Proc. AIPS, pp.249-254.
  • Ghallab, M., Nau, D. Traverso, P. (2004). Automated Planning: Theory and Practice, Morgan Kaufman, San Francisco, CA.
  • International Workshop on Non-Monotonic Reasoning (2006). Lakes District, England.
  • Kambhampati, S., Knoblock, C.A. Yang, Q. (1995). Planning as refinement search: A unified framework for evaluating design tradeoffs in partial-order planning, Artificial Intelligence 76:167-238.
  • Lespérance, Y. Ng, H. (2000). Integrating planning into reactive high-level robot programs, Proc. of the 2nd International Cognitive Robotics Workshop
  • Levesque, H. Pagnucco, M. (2000). Legolog: Inexpensive experiments in cognitive robotics, Proc. of the 2nd International Cognitive Robotics Workshop
  • Levesque, H., Reiter, R., Lespérance, Y., Lin, F. Scherl, R. (1997). GOLOG: A logic programming language for dynamic domains, JLP 31:59-84.
  • Liu, Y., Lakemeyer, G. Levesque, H.J. (2004). A logic of limited belief for reasoning with disjunctive information, Proc. KR
  • Mccarthy, J. (1963). Situations, actions and causal laws, MIT Press.
  • Pereira, S.L. Barros, L.N. (2004). Formalizing planning algorithms: a logical framework for the research on extending the classical planning approach, Proc. of the ICAPS Workshop: Connecting Planning Theory with Practice
  • Russel, S. Norvig, P. (2003). Artificial Intelligence: A Modern Approach, 2nd. edn, Prentice-Hall, Inc.
  • Sardina, S. Vassos, S. (2005). The Wumpus World in IndiGolog: A preliminary report, Workshop on Nonmonotonic Reasoning, Action, and Change (NRAC'05), IJCAI
  • Shapiro, S.C. (1989). The cassie projects: An approach to natural language compentence, in J.P. Martins E.M. Morgado (eds), EPIA 89: Proc. of the 4th Portuguese Conference on Artificial Intelligence, Springer, Berlin, Heidelberg, pp.362-380.
  • Shapiro, S.C. Kandefer, M. 2005 . A SNePS Approach to The Wumpus World Agent or Cassie Meets the Wumpus, Workshop on Nonmonotonic Reasoning, Action, and Change (NRAC'05), IJCAI
  • Sixth Workshop on Nonmonotonic Reasoning, Action, and Change (2005). Edinburgh, UK.
  • Thielscher, M. (2000). The fluent calculus: A specification language for robots with sensors in nondeterministic, Technical Report CL-2000-01, Artificial Intelligence Institute, Department of Computer Science, Dresden University of Technology.
  • Thielscher, M. (2005). A FLUX agent for the Wumpus World, Workshop on Nonmonotonic Reasoning, Action, and Change (NRAC'05), IJCAI
  • Trevizan, F.W., Cozman, F.G. deBarros, L.N. (2007). Planning under risk and knightian uncertainty, Proc. of the 20th IJCAI, AAAI (A ser publicado).
  • Trevizan, F.W. deBarros, L.N. (2004). Robótica cognitiva, Relatório técnico de cniciaçăo científica FAPESP 308530/03-9-0.9, Universidade de Săo Paulo, Departamento de Cięncia da Computaçăo.
  • 1
    Um exemplo de possível extensão é para os robôs AIBO™, produzidos pela Sony
    ®, utilizando a interface disponível em
  • 2
    Para realizar esses testes foi usada a implementação disponível em
  • Datas de Publicação

    • Publicação nesta coleção
      02 Out 2007
    • Data do Fascículo
      Jun 2007

    Histórico

    • Revisado
      30 Dez 2006
    • Recebido
      13 Nov 2006
    location_on
    Sociedade Brasileira de Automática Secretaria da SBA, FEEC - Unicamp, BLOCO B - LE51, Av. Albert Einstein, 400, Cidade Universitária Zeferino Vaz, Distrito de Barão Geraldo, 13083-852 - Campinas - SP - Brasil, Tel.: (55 19) 3521 3824, Fax: (55 19) 3521 3866 - Campinas - SP - Brazil
    E-mail: revista_sba@fee.unicamp.br
    rss_feed Acompanhe os números deste periódico no seu leitor de RSS
    Acessibilidade / Reportar erro