SlideShare uma empresa Scribd logo
Tutorial JADE e ROS
Autor: Pedro Mathias Nakibar
 
 
1.Requisitos 
2.Criação do Projeto 
1.Criar um projeto Maven no Eclipse EE 
2. Editar o arquivo POM.xml e adicionar o repositório e as dependências necessárias 
(JADE e jrosbride) 
3.Modificar a configuração para rodar o programa 
3. Iniciando o ROS 
inicie o rosbridge 
4. Arquivos Java dentro do projeto 
Pilot.java 
Turtle.java 
5. Instanciando os Agentes 
 
 
1.Requisitos
● Java JDK 8 
● IDE Eclipse EE 
● Maven (Já incluído no eclipse EE) 
● ROS e ROS Bridge Instalados 
○ Tutorial de instalação do ROS: ​http://wiki.ros.org/indigo/Installation  
○ Tutorial de como rodar o ROS Bridge: 
http://wiki.ros.org/rosbridge_suite/Tutorials/RunningRosbridge  
2.Criação do Projeto
1.Criar um projeto Maven no Eclipse EE
Ir em ​File­>New Project ​e depois selecionar o ​Maven Project 
 
 
 
 
 
 
 
2. Editar o arquivo ​POM.xml ​e adicionar o repositório e as
dependências necessárias (​JADE​e ​jrosbride​)
 
<project​​xmlns​=​"http://maven.apache.org/POM/4.0.0"
xmlns:xsi​=​"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation​=​"http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
​<modelVersion>​4.0.0​</modelVersion>
​<groupId>​RosJadeIntegration​</groupId>
​<artifactId>​RosJadeIntegration​</artifactId>
​<version>​0.0.1-SNAPSHOT​</version>
​<repositories>
​<repository>
​<id>​tilab​</id>
​<url>​http://jade.tilab.com/maven/​</url>
​</repository>
​</repositories>
​<dependencies>
​<dependency>
​<groupId>​com.tilab.jade​</groupId>
​<artifactId>​jade​</artifactId>
​<version>​4.3.3​</version>
​</dependency>
​<dependency>
​<groupId>​edu.wpi.rail​</groupId>
​<artifactId>​jrosbridge​</artifactId>
​<version>​0.2.0​</version>
​</dependency>
​</dependencies>
</project>
 
Tome cuidado com o nome do projeto e aguarde terminar o download das 
dependencias, caso contrário não irá funcionar. Você poderá verificar se elas já estão 
presentes no seu projeto apenas por expandir o folder ​Maven Dependencies​ e ver se os 
pacotes já estão lá. 
 
3.Modificar a configuração para rodar o programa
Bastar apertar ​ctrl+3 ​e digitar ​Run Configurations​ e apertar ​enter: 
 
 
Crie uma nova “Launch Configuration” 
 
 
Na nova ​Run Configuration​ insira os novos dados, elas irão permitir que inicie o Jade 
com a interface aberta, para gerenciamento de agentes:
 
 
Mande rodar o projeto e a interface deverá abrir! 
 
 
Bem vindo ao JADE!
3. Iniciando o ROS
Abra o seu emulador de terminal e execute: 
roslaunchrosbridge_serverrosbridge_websocket​.​launch
 
Este comando irá também iniciar o ​roscore ​que suporta as várias funcionalidades do 
ROS. 
Em outro emulador de terminar insira os comandos: 
rosrunturtlesimturtlesim_node
 
Irá aparecer uma janela e o serviço do “simulador de tartaruga” será iniciado. 
 
 
E o serviço já está rodando! 
 
4. Arquivos Java dentro do projeto
Pilot.java
 
package​myagents​.​pilot;
import​java​.​io​.​IOException;
import​edu​.​wpi​.​rail​.​jrosbridge​.​messages​.​geometry​.​Vector3;
import​jade​.​core​.​AID;
import​jade​.​core​.​Agent;
import​jade​.​core​.​behaviours​.​Behaviour;
import​jade​.​lang​.​acl​.​ACLMessage;
public​​class​​Pilot​​extends​​Agent​{
​private​​static​​final​​long​serialVersionUID​=​​1L;
​protected​​void​setup​(){
​System​.​out​.​println​(​"Hello,"​+​getAID​().​getName​()+​"isready"​);
addBehaviour​(​new​​IssueCommandToTurtle​());
}
​private​​class​​IssueCommandToTurtle​​extends​​OneShotBehaviour{
​private​​static​​final​​long​serialVersionUID​=​​5328804229040293382L;
​@Override
​public​​void​action​()​{
AIDturtle1​=​​new​AID​(​"turtle1"​,​AID​.​ISLOCALNAME​);
​ACLMessage​message​=​​new​​ACLMessage​(​ACLMessage​.​REQUEST​);
message​.​addReceiver​(​turtle1​);
​Float​[]​linear​=​​{(​float​)​​2.0​,(​float​)​​2.0​,(​float​)​​0.0​};
​Float​[]​angular​=​​{(​float​)​​0​,(​float​)​​0​,(​float​)​​0​};
​Float​[][]​vectors​=​​{​linear​,​angular​};
​try​{
message​.​setContentObject​(​vectors​);
​}​​catch​​(​IOException​e​)​{
e​.​printStackTrace​();
}
myAgent​.​send​(​message​);
doDelete​()
}
}
}
 
 
Turtle.java
 
package​myagents​.​turtle;
import​edu​.​wpi​.​rail​.​jrosbridge​.​Ros;
import​edu​.​wpi​.​rail​.​jrosbridge​.​Topic;
import​edu​.​wpi​.​rail​.​jrosbridge​.​callback​.​TopicCallback;
import​edu​.​wpi​.​rail​.​jrosbridge​.​messages​.​Message;
import​edu​.​wpi​.​rail​.​jrosbridge​.​messages​.​geometry​.​Twist;
import​edu​.​wpi​.​rail​.​jrosbridge​.​messages​.​geometry​.​Vector3;
import​jade​.​content​.​schema​.​facets​.​RegexFacet;
import​jade​.​core​.​AID;
import​jade​.​core​.​Agent;
import​jade​.​core​.​behaviours​.​CyclicBehaviour;
import​jade​.​domain​.​RequestFIPAServiceBehaviour;
import​jade​.​lang​.​acl​.​ACLMessage;
import​jade​.​lang​.​acl​.​MessageTemplate;
import​jade​.​lang​.​acl​.​UnreadableException;
public​​class​​TurtleAgent​​extends​​Agent{
​//JADEthings
​private​​static​​final​​long​serialVersionUID​=​​1L;
​//ROSthings
​private​​Ros​ros;
​private​​Topic​turtleTopic;
​public​​TurtleAgent​(){
ros​=​​new​​Ros​(​"localhost"​);
ros​.​connect​();
turtleTopic​=​​new​​Topic​(​ros​,​​"/turtle1/cmd_vel"​,​​"geometry_msgs/Twist"​);
turtleTopic​.​subscribe​(​new​​TopicCallback​()​{
​public​​void​handleMessage​(​Message​arg0​)​{
​//donothing
}
​});
}
​private​​void​moveTurtle​(​Vector3​linear​,​​Vector3​angular​){
​Message​toSend​=​​new​​Twist​(​linear​,​angular​);
turtleTopic​.​publish​(​toSend​);
try​{
​Thread​.​sleep​(​3000​);
​}​​catch​​(​InterruptedException​e​)​{
​//TODOAuto-generatedcatchblock
e​.​printStackTrace​();
}
}
​private​​void​moveTurtle​(​Float​[]​linear​,​​Float​[]​angular​){
​Vector3​linearVector​=​​new​​Vector3​(​linear​[​0​],​linear​[​1​],​linear​[​2​]);
​Vector3​angularVector​=​​new​​Vector3​(​angular​[​0​],​angular​[​1​],​angular​[​2​]);
​this​.​moveTurtle​(​linearVector​,​angularVector​);
}
​protected​​void​setup​(){
addBehaviour​(​new​​OfferRequestsServer​());
​System​.​out​.​println​(​"Hello,"​+​getAID​().​getName​()+​"isready"​);
}
​private​​class​​OfferRequestsServer​​extends​​CyclicBehaviour​{
​@Override
​public​​void​action​()​{
​MessageTemplate​mt​=​​MessageTemplate​.​MatchPerformative​(​ACLMessage​.​REQUEST​);
​ACLMessage​msg​=​myAgent​.​receive​(​mt​);
​if​​(​msg​!=​​null​){
​try​{
​Float​[][]​content​=​​(​Float​[][])​msg​.​getContentObject​();
moveTurtle​(​new
Vector3​(​content​[​0​][​0​],​content​[​0​][​1​],​content​[​0​][​2​]),​​new
Vector3​(​content​[​1​][​0​],​content​[​1​][​1​],​content​[​1​][​2​]));
​}​​catch​​(​UnreadableException​e​)​{
e​.​printStackTrace​();
}
}
​else{
block​();
}
}
}
}
 
5. Instanciando os Agentes
O agente “Pilot” vai procurar pela instância do agente “Turtle”, de nome “turtle1” 
dentro do ambiente JADE. Após achar ele irá enviar uma mensagem contendo as 
informações necessárias para que o agente “turtle1” passe a requisição para o ROS e entao 
faça a movimentação. 
Para isso, rode o projeto com o launcher customizado que criamos anteriormente: 
 
 
Com o jade funcionando adicione os agentes: 
 
 
Primeiro o da tartaruga: 
 
 
 
Da maneira como foi implementado, o agente ​Pilot ​assim que for instanciado 
automaticamente enviará a mensagem para o ​turtle1​ e será ​morto​ pelo JADE. 
 
 
 
 
 
E esse é o fim do tutorial! 
Caso queira continuar e aprofundar no JADE e/ou no ROS, os sites oficiais tem 
documentação riquíssima e tutoriais muito bons para iniciantes. 

Mais conteúdo relacionado

PDF
Apresentação maven
PDF
UAI Test - Introdução Prática ao Jenkins
PDF
Maven: Introdução
PDF
Maven - Aula 05
PDF
Curso de Groovy
PDF
Aplicações 12 fatores, melhor com Docker
PDF
Maven - Aula 01
PDF
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Apresentação maven
UAI Test - Introdução Prática ao Jenkins
Maven: Introdução
Maven - Aula 05
Curso de Groovy
Aplicações 12 fatores, melhor com Docker
Maven - Aula 01
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.

Mais procurados (20)

PDF
Apresentação Docker
PDF
Curso de Grails
PDF
PPTX
Java enterprise - testcontainers
PDF
GIT Básico
PDF
Programação para Web II: Estrutura de um projeto Java Web
PDF
PDF
TDC 2015 POA - O Fantástico Mundo de Docker
PDF
React Native na globo.com
PDF
Java em 2021
PDF
Olá docker
PDF
Docker: uma visão geral
PPTX
Automatização de Infraestrutura com Jenkins
PPTX
Java pode ser_hipster
PDF
Jenkins, o CI ao seu dispor
PDF
Desenvolvimento Produtivo com Spring Roo
PDF
SpringSource Tool Suite, tc Server e dm Server
PDF
[Java] Contexts and Dependency Injection em JEE6
PDF
12 factor app. Melhor com Docker
PDF
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
Apresentação Docker
Curso de Grails
Java enterprise - testcontainers
GIT Básico
Programação para Web II: Estrutura de um projeto Java Web
TDC 2015 POA - O Fantástico Mundo de Docker
React Native na globo.com
Java em 2021
Olá docker
Docker: uma visão geral
Automatização de Infraestrutura com Jenkins
Java pode ser_hipster
Jenkins, o CI ao seu dispor
Desenvolvimento Produtivo com Spring Roo
SpringSource Tool Suite, tc Server e dm Server
[Java] Contexts and Dependency Injection em JEE6
12 factor app. Melhor com Docker
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
Anúncio

Destaque (20)

PDF
Introducción a ROS
PDF
Desarrollo robótico - Robot Operating System (ROS)
PPTX
Ubiquity Robotics
PPTX
Proyecto Vision
PDF
ROS Overview - Málaga 2012
PDF
Explorando o robot operating system para aplicações em robótica móvel
PDF
Introducción a la navegación de robots en ambientes inteligentes
PDF
A real use case of ROS
PDF
Top 10 robotics for beginners
PPTX
An Introduction to ROS-Industrial
PDF
ROS Hands-On Intro/Tutorial (Robotic Vision Summer School 2015) #RVSS #ACRV
PDF
Presentación Taller ROS - Robotic Operating System
PPT
ROS - Robotics Operation System
PPT
Robot operating systems (ros) overview & (1)
PDF
ROS Tutorial 02 - CIT
PDF
The Robot Operating System ecosystem and Python
PPTX
Introduction to ROS (Robot Operating System)
PDF
Simulating TUM Drone 2.0 by ROS
PDF
Ros y sistemas multi agentes
Introducción a ROS
Desarrollo robótico - Robot Operating System (ROS)
Ubiquity Robotics
Proyecto Vision
ROS Overview - Málaga 2012
Explorando o robot operating system para aplicações em robótica móvel
Introducción a la navegación de robots en ambientes inteligentes
A real use case of ROS
Top 10 robotics for beginners
An Introduction to ROS-Industrial
ROS Hands-On Intro/Tutorial (Robotic Vision Summer School 2015) #RVSS #ACRV
Presentación Taller ROS - Robotic Operating System
ROS - Robotics Operation System
Robot operating systems (ros) overview & (1)
ROS Tutorial 02 - CIT
The Robot Operating System ecosystem and Python
Introduction to ROS (Robot Operating System)
Simulating TUM Drone 2.0 by ROS
Ros y sistemas multi agentes
Anúncio

Último (7)

PDF
apresentacao introducao computacao ead.pdf
PPTX
Mapeamento de Objeto para Tabela Relacional
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
PDF
Dos requisitos ao código: como criar código rastreável em PHP
PDF
Evolução em código: algoritmos genéticos com PHP
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
PPTX
Curso de Windows 11 resumido na prática.pptx
apresentacao introducao computacao ead.pdf
Mapeamento de Objeto para Tabela Relacional
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
Dos requisitos ao código: como criar código rastreável em PHP
Evolução em código: algoritmos genéticos com PHP
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
Curso de Windows 11 resumido na prática.pptx

Tutorial Setup projeto JADE e ROS