Congresso de Inovação, Ciência e Tecnologia do IFSP - 2016 TUTORIAL DA PLATAFORMA ROBOCODE NATHÁLIA GRANZOTTI ANDREOTTI1 , TIAGO SOARES VITOR² 1Graduando em Engenharia de Controle e Automação, Bolsista PIBIFSP, IFSP, Câmpus São João da Boa Vista, [email protected] 2Professor de Engenharia de Controle e Automação, Orientador, IFSP, Câmpus São João da Boa Vista, [email protected] Área de conhecimento (Tabela CNPq): Engenharia Mecatrônica – 9.16.00.00-6 Apresentado no 7° Congresso de Iniciação Científica e Tecnológica do IFSP 29 de novembro a 02 de dezembro de 2016 - Matão-SP, Brasil RESUMO: Este projeto consiste na elaboração de um tutorial para desenvolvimento de robôs na plataforma Robocode visando implementação de técnicas inteligentes. A característica da plataforma em promover auxílio à estudantes de programação computacional é explorada a fim de integrar as áreas de robótica e sistemas inteligentes. O propósito do easy-to-use elaborado abrange a descrição dos recursos de simulação e instrução para implementação de maneira simples e didática. A partir da revisão bibliográfica, um procedimento passo a passo é proposto e ao final deste, o usuário será capaz de desenvolver seu primeiro robô com potencialidade para se locomover e interagir com o ambiente de forma inteligente. Para validação do procedimento, a programação de um robô é feita de forma detalhada, sendo este submetido à simulação. PALAVRAS-CHAVE: robótica; simulação de robôs; linguagens de programação. TUTORIAL PLATAFORM ROBOCODE ABSTRACT: This project consists in a tutorial's build for the robots development in the Robocode platform, seeking implementation of intelligent techniques. The platform's characteristics promotes aid to computer programming students in order to integrate the areas of robotics and intelligent systems. The purpose of the easy-to-use prepared covers the description of simulation resources and education to implement in a simple and didactic way. From the literature review, a step by step procedure is proposed at the end of this one, the user will be able to develop its first robot with potential to move around and interact with the environment in a smart way. For method validation, programming a robot is made in detail, which is submitted to the simulation. KEYWORDS: robot; simulation Robocode; programming language. INTRODUÇÃO O aumento no desempenho de sistemas computacionais e tecnologias contribuíram para que os robôs pudessem atuar em inúmeras áreas, porém ainda é um desafio atrair atenção de estudantes para este campo de pesquisa. O software Robocode foi desenvolvido para suprir essa necessidade, sendo atualmente uma importante ferramenta utilizada para o ensino básico de programação. O Robocode, plataforma open-source criada pela IBM, administra combates de robôs em formato de tanque de guerra num campo de batalha virtual. Cada robô é programado por usuários implementando diferentes estratégias em linguagem Java recorrendo a métodos, atributos e eventos pré-programados. Este projeto visa elaborar um procedimento passo a passo instrutivo sobre o uso da plataforma Robocode. Tal procedimento permite auxiliar o aprendizado em programação e capacitar o usuário na construção de um robô de navegação inteligente no espaço virtual. MATERIAL E MÉTODOS Os recursos utilizados no desenvolvimento da pesquisa foram os softwares Robocode e Java Virtual Machine (JVM), com o suporte de hardware para a execução dos softwares, ambos podem ser obtidos pelo próprio site Robocode Team, mencionado nas referências. O robô é dividido em três principais partes (Figura 1): corpo, radar e arma de fogo (canhão). O corpo, onde estão localizados o radar e o canhão no topo, é responsável pela movimentação do robô para frente/trás e direita/esquerda. O radar é usado para detectar os oponentes e pode rotacionar para direita/esquerda. O canhão também pode rotacionar para direita/esquerda de forma independente. FIGURA 1. Componentes do Robô tanque A metodologia aplicada consiste no levantamento das informações da revisão bibliográfica referentes a criação de robôs. Assim, tem-se o seguinte procedimento proposto (Figura 2): Início Conhecer: Regras, Métodos, Eventos e Funções Editar, gravar e compilar robô Iniciar batalha Fim FIGURA 2. Diagrama de blocos ilustrando procedimento para criação do primeiro robô. Com o objetivo de se criar as primeiras regras, restringiu-se às seguintes informações: o robô pode se movimentar para frente/trás e realizar curvas; o canhão pode girar sentido horário/anti-horário em 360 graus; os tiros podem ser de força > 0 ou <= 3 unidades. Os robôs começam com 100 unidades de energia e a perdem quando atiram, levam tiros e sofrem colisões; quando o robô chega a energia zero, explodirá. Vence aquele que perder menos energia até o final (ou que permanecer em batalha). Os eventos são chamados quando ocorre algo específico ao longo da batalha. Destacam-se os principais eventos para a construção do robô na Tabela 1. TABELA 1. Eventos principais do Robocode. Eventos É executado quando: Run O round for iniciado onScannedRobot O radar do robô detecta um adversário onHitRobot O robô colide com outro onHitWall O robô colide com a parede onHitByBullet O robô é atingido por uma bala Dentro da janela de programação de cada evento, deve-se implementar métodos, que servem para realizar a movimentação do robô ou para retornar um dado desejado. Os mais utilizados para movimentação são apresentados na tabela 2. Comando ahead (double) back (double) turnRight/turnLeft (double) turnGunRight/ turnGunLeft (double) TABELA 2. Métodos principais do Robocode. Parâmetros Descrição A distância que o robô Movimenta para frente a distância dada pelo deverá percorrer parâmetro. A distância que o robô Semelhante ao anterior, porém o robô se move deverá percorrer para trás. O ângulo em graus que o Gira o robô para direita ou esquerda, robô deverá girar. respectivamente. O ângulo em graus que o Gira o canhão para direita ou esquerda, canhão deverá girar. respectivamente. As funções são procedimentos avançados que se podem acrescentar no código, exemplos são: mira, tiro e até mesmo dancinhas. Para criar o programa deve-se entrar em “Robot > Source Editor > File > New > Robot”, então se escolhe o nome do robô e em seguida o nome do pacote que ele estará inserido. A base do programa com os principais pacotes e eventos é construída pela própria plataforma, o usuário deve então realizar as alterações que desejar. Ao final deve-se clicar “Compiler”, será feita a análise de erros; caso não tenha erros, o robô estará apto a participar das batalhas. RESULTADOS E DISCUSSÃO Seguindo o procedimento é possível desenvolver um robô simples, sendo um ponto de partida para que o usuário use criatividade e técnicas inteligentes. A Figura 3 apresenta o código de um autômato desenvolvido após o a proposta do tutorial. FIGURA 3. Programação de um robô simples. A linha 1 descreve o pacote “Meus_Robos” que conterá os robôs criados. As linhas 2 e 3 importam as bibliotecas relacionadas aos métodos, eventos e a das cores, respectivamente, que são utilizadas para os robôs. Tem-se a classe pública “Meu_primeiro_robo” que herda a classe “robot” e implementa o “public void run”, execução central do programa. Dentro dele se encontra o método para declarar cores “setColors”. Neste exemplo temos as cores: vermelho, azul e verde para corpo, arma e radar do robô, respectivamente, resultando na Figura 4. FIGURA 4. Representação do robô com suas cores definidas. Em seguida, o programa executa o laço de repetição “while (true)” onde se define as ações do robô. No exemplo, o robô anda para frente 100 pixels e faz uma rotação do corpo em 90° graus, esses movimentos se repetem 4 vezes; como resultado, o robô irá mover-se de forma quadricular e ao final do movimento o canhão rotaciona em 360° graus. Na 21ª linha o evento “onScannedRobot”, ativado quando o radar detecta o oponente, executa o tiro do canhão com intensidade 3. O evento “onHitByBullet”, quando se é atingido por uma bala, faz com que robô gire 90° graus para esquerda e, por fim, ande 80 pixels para trás. Na 28ª linha o evento “onHitRobot”, quando há um choque com o oponente, define que o robô deve voltar 30 pixels da sua posição. O último evento “onHitWall”, quando houver um choque com as paredes do campo de batalha, faz o robô voltar 100 pixels da posição. O robô apresentado foi compilado e colocado para simulação, demonstrando a viabilidade do tutorial e o potencial que a plataforma Robocode apresenta para o ensino da linguagem Java e para compreensão de robôs autônomos. CONCLUSÕES Conclui-se que o tutorial da plataforma Robocode é um recurso importante para auxiliar um público alvo em fase de familiarização com o software, visto que o procedimento proposto capacita o usuário a desenvolver um primeiro robô. Após esta etapa inicial, o usuário pode potencializar o desenvolvimento de habilidades em programação e aplicação de técnicas inteligentes. AGRADECIMENTOS Ao PIBIFSP, por disponibilizar a bolsa referente à iniciação científica. E ao orientador Tiago Soares Vitor pela paciência e completude em ensinar e auxiliar na confecção do trabalho proposto. REFERÊNCIAS ALAIBA, V.; ROTARU, A. Agent architecture for building Robocode players with SWIProlog. In.: International Multiconference on Computer Science and Information Technology IMCSIT, 2008, Wisia. Proceedings... Wisia: IEEE, 2008. p. 3-7. Aprendendo Java usando Robocode. Estudo com Robocode - ::.Prof. Newton – Java. Disponível em: < https://sites.google.com/site/profnewtonjava/robocode>. Acesso em 02 de jun. 2016 Robocode Team. Robocode homepage. Disponível em: < http://robocode.sourceforge.net/>. Acesso em 30 de maio 2016. Robocode Team. RoboWiki site. Disponível em: < http://robowiki.net/>. Acesso em 30 de maio 2016 TUTORIAL Robocode. Estudo com Robocode - ::.Prof. Newton – Java. Disponível em: < https://sites.google.com/site/profnewtonjava/robocode>. Acesso em 02 de jun. 2016