Tutorial Setup projeto JADE e ROS

329 visualizações

Publicada em

Tutorial que tem como objetivo auxiliar a instalação do projeto de integração das plataformas JADE e ROS. Desde a criação do projeto Maven, dentro do Eclipse, até a inserção execução de um serviço funcional.

Publicada em: Software
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
329
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
8
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Tutorial Setup projeto JADE e ROS

  1. 1. 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. 2.        
  3. 3.     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>
  4. 4. ​<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”   
  5. 5.   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!   
  6. 6.   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.   
  7. 7.   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​() } } }
  8. 8.     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​);
  9. 9. } ​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: 
  10. 10.     Com o jade funcionando adicione os agentes:   
  11. 11.   Primeiro o da tartaruga:     
  12. 12.   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! 
  13. 13. 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. 

×