survey integração de sistemas robóticos com programação orientada a agentes
TRANSCRIPT
Integração de sistemas robóticos com programação orientada a agentes
Pedro Mathias Nakibar Bacharelado de Sistemas de Informação
Instituto Federal do Espirito Santo [email protected]
Resumo Robos foram criados sempre para exercerem uma função dentro da indústria. Depois
de compilados os códigos e inseridos dentro dos “cerébros” desses rôbos eles irão seguir essas instruções até que sejam desligados. Para serem inseridas instruções diferentes, tem que se passar por todo um processo de programação e inserção dos programas dentro da memória destes robos novamente.
Poder trocar as missões e instruções de um robo on the fly é uma objetivo que pode ser atingido agora com o hardware disponível no mercado e com o paradigma de programação orientada a agentes, que permite que missões programadas possam ser inseridas dentro de um robo sem muito custo, se não o de enviar esses agentes pela rede, para dentro do robo.
Utilizando o Robot Operating System (ROS) e o Java Agent Development Framework (JADE), esse objetivo pode ser alcançado com facilidade. Utilizando o ROS para controle dos recursos do rôbo e os disponibilizando dentro do JADE, é possível fazer sistemas distribuídos robóticos, em que vários rôbos se comuniquem e que várias missões sejam passadas dinamicamente para eles, atráves de Agentes Pilotos que acessam esses recursos e controlem esses rôbos.
Programação Orientada a Agentes Este paradigma está um nível acima de Orientação a Objeto. Ele faz com que cada
componente (agente) que está dentro inserido dentro de um contexto tenha vida própria, e se comunique com outros agentes que também estão lá. Agentes podem também serem transportados de um ambiente para outro, com novos agentes disponibilizando novos serviços.
OOP AOP
Basic unit object agent
Parameters defining state
of basic unit
unconstrained beliefs, commitments,
capabilities, choices....
Process of computation message passing and
response methods
message passing and
response methods
Types of message unconstrained inform, request, offer, promise,
decline....
Constraints on methods none honesty, consistency....
Tabela 1: Agentes vs Objetos por Yoav Shoham
Com esse paradigma podemos criar Agentes Pilotos que controlam missões dentro
de um ambiente robótico, acessando e utilizando recursos do robo de maneira discreta.
JADE Java Agent Development Framework, é o ambiente o qual será utilizado para dar vida
aos agentes dentro de nosso sistema. Ele permite a movimentação de agentes entre containers (que são como ambientes em que os agentes ficam em cada maquina) diferentes, e troca de mensagens, do tipo ACL (definida pela FIPA), entre eles. O framework já possui uma camada de middleware, que permite que o sistema fique distribuído em várias máquinas. Uma de suas ferramentas é um gestor gráfico, que permite conectar a vários ambientes em máquinas separadas e administrar os agentes facilmente.
O JADE é um software grátis e opensource sob a LGPLv2 e é mantido pela Telecom Italia e uma grande comunidade de desenvolvedores que contribuem para seu desenvolvimento.¹
Robot Operating System Ou ROS, é um ambiente completo distribuído de robótica. Ele possui várias
ferramentas para permitir implementar com facilidade diversas funções do robô e disponibilizálas dentro de um ambiente, para que possa enviar e receber mensagens. O ROS é mantido com a idéia de fornecer um framework de desenvolvimento colaborativo e opensource, permitindo que todos possam usar e contribuir para o desenvolvimento da plataforma e suas ferramentas.²
Ele funciona sobre o Linux e permite comunicação via WebSockets para troca de mensagens externas, utilizando o componente rosbridge.4
Arquitetura da solução
Integrando os ambientes O nosso produto final quer gerar um ambiente de agentes que se comuniquem
diretamente com o ROS dentro de um rôbo. Para isso utilizei o componente do ROS, o rosbridge, que permite abrir uma interface
utilizando WebSockets para troca de mensagens utilizando JSON. Para fazer essa comunicação com mais facilidade é possível escolher várias APIs disponiveis na wiki do ROS. As APIs oficiais utilizam as linguagens Python e C++, porém a comunidade suporta várias outras linguagens, como Java e Javascript.
Na parte dos agentes utilizei um agente dentro da plataforma JADE para representar o componente do ROS que iremos fazer a comunicação. Criando uma camada de abstração para comunicação com o ROS, dentro do ambiente de agentes, passando para esse agente as responsabilidade de funcionar como uma ponte entre os dois ambientes.
Figura 1: Modelo de implantação da solução.
Funcionamento O usuário deve enviar agente para interagir com o ambiente, através trocas de
mensagens com os outros agentes, para então controlar o rôbo em questão. Esse agente contem uma missão, que é uma lista de instruções que o robô irá seguir, que será então executada pelo rôbo assim que for apropriado. Cada agente funcionará com uma espécie de piloto para o rôbo, permitindo assim o câmbio desses pilotos, cada um com diferentes missões e aplicações para o rôbo.
Figura 2: Diagrama de ação da vida de um agente dentro de um sistema.
Figura 3: Diagrama de sequência de uma mensagem desde que ela sai do agente
até chega ao componente real do ROS. (Anexo em maior resolução)
Protocolos utilizados O ROS utiliza um modelo assíncrono de mensagens de um formato padronizado,
porém para o recebimento de mensagens via WebSockets é utilizado o JSON. O padrão WebSockets permite que sejam enviadas e recebidas mensagens ao servidor a qualquer momento. Este padrão funciona sob um único socket TCP¹.
Na parte do JADE ele utiliza o protocolo TCP/IP para conexão com ambientes JADE distribuídos em outras máquinas, que é utilizado para movimentação de agentes² e mensagens do tipo ACL para troca de mensagens entre agentes5.
Aplicações
Vantagens dessa abordagem A abordagem normal de rôbos não tem em mente uma integração de novos recursos
a esses rôbos. Nesta abordagem é permitido que recursos sejam removidos e inseridos em tempo real, graças ao uso do ROS, e que novas funcionalidades sejam dadas atráves da combinação do ROS e do JADE. O único problema dessa abordagem é a de que recursos robóticos tenham um custo lógico maior, sendo necessário um maior investimento em hardware.
Escalabilidade para adicionar mais rôbos O ROS por si só é bem limitado quando se trata de comunicação com outros robôs. O
JADE permite fazer isso com mais facilidade, permitindo até mesmo que múltiplos rôbos executem uma mesma missão, ou que eles façam parte de uma missão maior, que engloba mais rôbos.
Controlador de Tartarugas (Logo) Para provar o conceito, utilizei um dos módulos padrões do ROS, o TurtleSim, que
simula um robô por demonstrar na tela uma tartaruga, que se meche com os comandos dados.
Figura 4: TurtleSim do ROS ³
Utilizando as interfaces do ROS é possível enviar mensagens para o TurtleSim, que nada mais é do que um tópico dentro do ROS.
O rosbridge serviu como uma ponte para troca de mensagens externas ao ROS. Utilizando JSON, é possível que essa troca seja feita utilizando WebSockets, e ainda é possível utilizar várias APIs disponíveis ou ainda compor suas próprias mensagens e postar diretamente no servidor que foi criado, sem uso de APIs.
O sistema de agentes JADE foi implementado de maneira a auxiliar a troca de mensagens entre os chamados Agentes Pilotos, que controlam a missão, e os agentes do ROS, que auxiliam o envio de mensagens para o ROS.
Para essa aplicação, utilizei um agente, dentro do JADE, que mapeia a tartaruga do TurtleSim, que pega as mensagens recebidas entre os agentes e as repassa para o TurtleSim do ROS.
Referências ¹ Java JADE http://jade.tilab.com/ ² ROS Robot Operating System http://www.ros.org/ ³ Módulo ROS TurtleSim http://wiki.ros.org/turtlesim 4 Módulo RosBridge http://wiki.ros.org/rosbridge_suite 5 Mensagens ACL FIPA http://www.fipa.org