O documento discute a integração de sistemas robóticos com programação orientada a agentes utilizando o Robot Operating System (ROS) e o Java Agent Development Framework (JADE). A abordagem permite trocar missões e instruções de robôs dinamicamente através de agentes que controlam os recursos robóticos.
Integração de sistemas robóticos com programação orientada a agentes
1. 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
pedronakibar@gmail.com
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
2. 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
3.
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.
6.
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.
7. 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.