Manual
Transcrição
Manual
Manual Sci-Soccer Versão: 2.0 Data: Abril de 2012 Sumário 1. Contrato de licença do uso do Sci-Soccer ..................................................................................... 3 2. Introdução ao Sci-Soccer ............................................................................................................... 4 3. Requisitos Recomendados de Hardware ...................................................................................... 5 4. Requisitos Recomendados do Hardware do Sistema de Aquisição de Imagens .......................... 5 4.1 Câmera .................................................................................................................................. 5 4.2 Lente Varifocal Auto ÍrisDC ................................................................................................... 6 4.3 Placa de captura .................................................................................................................... 6 5. Manutenção do Robô Sci-Soccer .................................................................................................. 7 6. Cuidados ao manusear o robô ...................................................................................................... 9 7. Instalação do software ................................................................................................................ 10 7.1 Baixando o software............................................................................................................ 10 7.2 Instalando o Sci-Soccer ....................................................................................................... 10 7.3 Desinstalando o Sci-Soccer.................................................................................................. 11 8. Execução do Programa ................................................................................................................ 11 9. Utilização do Software ................................................................................................................ 12 9.1 Calibrando o Campo ............................................................................................................ 12 9.2 Calibrando os Robôs para identificação .............................................................................. 13 9.3 Carregando estratégias ....................................................................................................... 17 9.4 Configurando os robôs ........................................................................................................ 18 9.5 Configurando o rádio base .................................................................................................. 21 9.6 Configurando o vídeo .......................................................................................................... 23 10. Jogando Futebol de robôs ....................................................................................................... 23 10.1 Iniciando .............................................................................................................................. 23 10.2 Pausando ............................................................................................................................. 25 10.3 Marcando placar ................................................................................................................. 25 11. Precauções com as baterias .................................................................................................... 25 12. Apêndice.................................................................................................................................. 28 12.1 Apêndice A: Bibliotecas de estratégia ................................................................................. 28 12.2 Apêndice B: Testando o hardware dos robôs com a Giga de Teste .................................... 34 2 1.Contrato de licença do uso do Sci-Soccer Este instrumento constitui um contrato firmado entre o usuário do software do Sci-Soccer e a XBot. 1. Concessão de licença: ao adquirir o Sci-Soccer, o usuário poderá utilizá-lo em mais de um computador ao mesmo tempo, conforme sua necessidade. 2. Propriedade do Software: o software, contido no CD, é de propriedade da XBot. Quando o usuário adquire o Sci-Soccer, está LICENCIADO a utilizar a cópia do software original. 3. Proteção do Software: o software adquirido não possui proteção contra várias instalações, pode ser instalado livremente e faz parte do kit Sci-Soccer. 4. Restrições quanto à utilização do Software: o software do Sci-Soccer pode ser executado em mais de um computador sem a necessidade de uma nova licença. O software pode ser instalado, usado, modificado, melhorado ou adaptado conforme as necessidades do usuário. 5. Restrição de redistribuição do Software: o software não pode ser redistribuído, a restrição inclui a sua versão original ou a versão 02 modificada pelo usuário, independente do propósito. 6. Reprodução do CD do software: é vedada a reprodução do software do Sci-Soccer, em qualquer circunstância e independente do propósito. 7. Reprodução da documentação: a documentação do software do Sci-Soccer é fornecida em CD e não é permitida a sua reprodução total ou parcial. É vedada a utilização, para fins comerciais, desta documentação, sem a prévia autorização por escrito da XBot. 8. Vigência do contrato: este contrato tem duração por tempo indeterminado, limitado pelo total compromisso de suas cláusulas. O descumprimento de qualquer cláusula implica na rescisão automática do mesmo. 9. Garantia: a XBot garante que o CD adquirido está livre de defeitos durante a vigência deste contrato. Caso ocorra algum problema com o CD, a XBot substituirá mediante a devolução dos originais defeituosos. 10. Atualização do produto: a XBot pode criar periodicamente versões aperfeiçoadas do software do Sci-Soccer. Nestas ocasiões, a XBot colocará a nova versão à disposição dos Usuários, repassando-lhes os custos de atualização. 11. Responsabilidade: nem XBot, nem qualquer outra empresa ou pessoa que tenha participado do processo de criação, produção, comercialização ou entrega do software do SciSoccer, será responsável por quaisquer danos diretos e indiretos, lucros cessantes, interrupção de negócios, perda de informações, decorrentes do uso ou da impossibilidade de uso do software do Sci-Soccer, ainda que a XBot tenha sido alertada. 12. Foro do contrato: fica eleito, para esclarecer e dirimir quaisquer dúvidas a respeito deste contrato, o foro da cidade de São Carlos, São Paulo, com renúncia, pelos contratantes de qualquer outro, por mais privilegiado que seja. 3 2.Introdução ao Sci-Soccer O Sci-Soccer é um sistema desenvolvido pela Cientistas Associados Desenvolvimento Tecnológico Ltda., fabricado e comercializado pela empresa XBot. Este sistema foi projetado para realizar partidas de futebol de robôs autônomos, da categoria Small Size (conhecida também como F180) da Robocup (Robot World Cup). A Robocup é uma competição que se iniciou em 1997, com o objetivo de desenvolver a Inteligência Artificial (IA), a robótica e campos relacionados. Aos poucos, a Robocup foi adquirindo prestígio e transformando o futebol de robôs em uma tradição com reconhecimento internacional. As competições de futebol de robôs são uma tentativa de promover o desenvolvimento científico e tecnológico nas áreas de Robôs Autônomos e Mecatrônica. Estas competições possuem grande parte dos desafios encontrados pela robótica móvel do mundo real, tais como, navegação em ambientes dinâmicos, exploração de ambiente, realização de procedimentos de contingência em ambientes perigosos ou insalubres e monitoramento ambiental. Durante uma partida de futebol de robôs existe um sistema de visão computacional global, situado sobre o campo, responsável por rastrear todos os jogadores e a bola, fornecendo para o sistema de estratégia as suas respectivas posições. Com a informação da posição dos jogadores e da bola, o sistema de estratégia vai determinar uma nova ação que será executada pelo robô. Para que a informação chegue ao robô jogador, há um protocolo de comunicação responsável por transmitir uma mensagem do computador para o robô. Os motores, as rodas e os dispositivos mecânicos e eletrônicos presentes no robô são responsáveis por executar a ação recebida. O sistema de futebol de robôs desenvolvido, denominado Sci-Soccer, inclui os robôs (de um a cinco por time), o rádio base e o software, com bibliotecas para desenvolvimento e interface do jogo. O hardware dos robôs foi desenvolvido considerando as normas da Robocup, categoria Small Size, e utilizando comunicação wireless (rádio base). O software do Sci-Soccer é uma interface gráfica que envolve quatro módulos: (i) Módulo de captura de imagens; (ii) Módulo de rastreamento; (iii) Módulo de comunicação; (iv) Módulo de estratégia de jogo. As características principais do software do Sci-Soccer são: (i) Captura das imagens da câmera para realizar o rastreamento dos robôs e da bola; (ii) Processamento das imagens recebidas para determinar a posição dos mesmos; (iii) Carregamento da estratégia de jogo; (iv) Comunicação entre o robô e o computador. O software é livre de maneira que possa ser adequado às necessidades do usuário e também possibilita a criação e execução de novas estratégias de jogo. O software Sci-Soccer foi desenvolvido para ser utilizado nos sistemas operacionais Debian 6 ou Ubuntu 10.10. Este manual tem o objetivo de auxiliar na instalação e configuração do software e apresentar os conceitos do sistema Sci-Soccer, estimulando o desenvolvimento de novas estratégias de jogo. 4 3.Requisitos Recomendados de Hardware O software Sci-Soccer foi instalado e testado em dois computadores com configurações distintas: o primeiro computador com processador AMD Athlon 64, dois clocks de 2.5 GHz e 2 GB de memória RAM utilizando o Sistema Operacional Debian 6 com kernel 3.2 e GNOME 3; o segundo computador com processador Intel Pentium Dual Core 3.2 GHz e 1 GB de memória RAM utilizando o Sistema Operacional Ubuntu 10.10 com kernel 2.6 e GNOME 2. Os testes realizados mostraram que estas configurações foram suficientes para a integração e funcionamento dos módulos de captura, rastreamento, estratégia e comunicação. Além das configurações citadas acima, é necessário que o computador tenha uma porta USB 1.1 ou superior e uma placa de captura (ou aquisição) de vídeo. Mais detalhes na seção seguinte, referente ao sistema de aquisição de imagens. 4.Requisitos Recomendados do Hardware do Sistema de Aquisição de Imagens O software Sci-Soccer utiliza técnicas de processamento de imagens para determinar as posições dos robôs e da bola. Para realizar a aquisição de imagens, o sistema necessita de um hardware específico, que inclui uma câmera de aquisição, uma lente varifocal (com autoíris) e uma placa de captura de vídeo. 4.1 Câmera As imagens são obtidas a partir de uma câmera posicionada sobre o campo, aproximadamente a quatro metros de altura. A câmera deve ter as seguintes especificações: (i) (ii) (iii) (iv) (v) (vi) Câmera de vídeo colorida; Sensor CCD; Obturador eletrônico com modos de ajustes manuais (1/60, ..., 1/100.000); Formato de vídeo NTSC (525 linhas); Conector de saída BNC; Compatível com lentes DC (DC Íris), com controle automático de ganho (AGC). A câmera é conectada à placa de captura de vídeo por meio de um cabo blindado (por exemplo, cabo coaxial), como mostrado na Figura 4.1.1, com comprimento suficiente que permita a conexão, tendo até 20 metros. Figura 4.1.1. Ilustração do sistema adotado no futebol de robôs 5 Para os testes realizados com o software, foi utilizada uma câmera de aquisição marca Kodo Color Cam KC512NTX (veja Figura 4.1.2); a velocidade do obturador da câmera foi de 1/250, com o controle automático de ganho ligado. Figura 4.1.2. Foto da câmera presa sobre campo Para uma boa captura das imagens é recomendado que a iluminação do campo estivesse dentro de uma faixa de 500 lux. 4.2 Lente Varifocal Auto ÍrisDC Lente varifocal permite a regulagem da abertura da lente. Possui íris automática, também chamada de autoíris, tipo DC a própria câmera comanda a abertura ou fechamento da íris, compensando as variações de luminosidade rapidamente. Nos testes realizados, foi utilizada uma lente varifocal, modelo Tamron VariFocal 1/3'' 2.812 mm F/1.4 com autoíris DC (veja Figura 4.2.1). Figura 4.2.1. Lente Varifocal Tamron VariFocal 1/3'' 2.812 4.3 Placa de captura O software Sci-Soccer é executado no sistema operacional Linux. As placas de captura, melhor suportadas por este sistema operacional, são as que possuem driver bttv, pois incluem a maior parte das placas PCI de baixo custo, como as PixelView PlayTV, PixelView PlayTV Pro e Pinnacle PCTV Studio/Rave e vários outros modelos. Nos experimentos realizados, foi utilizada a placa de captura PixelView PlayTV MPEG2 PVM4900 (Figura 4.3.1). 6 Figura 4.3.1. Exemplo de Placa de captura PlayTV MPEG2. 5.Manutenção do Robô Sci-Soccer Quando o robô não funciona corretamente, deve-se verificar inicialmente se ocorreu algum dos possíveis problemas com soluções simples: (i) Rádio base desconectado ou não instalado: se o rádio base não apresentar o indicativo de envio de dados para o robô (Figura 5.1-a), pode ser que seu cabo USB não esteja bem conectado no próprio rádio base (Figura 5.1-b) ou no computador (Figura 5.1-c). Para verificar se o computador foi capaz de detectar corretamente o rádio base, proceda com as seguintes etapas: 1. Conecte o cabo USB do rádio base a uma porta disponível do computador (Figura 5.1c); 2. Aguarde por, aproximadamente, 10 segundos e execute, em um terminal, o seguinte comando: $ ls /dev/ttyUSB* Se o rádio base estiver conectado corretamente, o dispositivo /dev/ttyUSB0 será listado pelo comando acima, onde 0 indica o primeiro rádio base detectado. Os próximos rádios bases instalados e detectados pelo sistema receberão uma numeração sequencial no diretório /dev. No entanto, é necessário apenas um rádio base ser reconhecido pelo sistema; 3. Caso não seja detectado o rádio base, é necessário verificar se o driver ftdi_sio é carregado pelo sistema. Para isto, execute o comando: $ lsmod Se o driver ftdi_sio não aparecer listado, é preciso instalá-lo. (ii) O Robô não realiza as ações solicitadas: se o rádio base estiver acendendo o indicativo de envio de dados (luz verde) para o robô, mas não acender o indicativo de confirmação de recebimento de dados (luz vermelha), como mostrado na Figura 5.2, o robô pode estar desligado. Neste caso, verifique, no robô, se há uma luz verde acesa, indicando que o robô está ligado; se não estiver, ligue o robô. A Figura 5.3 apresenta a parte traseira do robô com três indicadores: indicador de problema de hardware, indicador de robô ligado e indicador de recepção de dados. Depois de ligar o robô, se o indicador de robô ligado não ficar verde, significa que a bateria está fraca ou mal colocada. Também pode ocorrer do robô não responder, mesmo estando ligado. Isso ocorre quando a distância do rádio base para o robô for muito grande, dificultando a comunicação. (iii) Bateria fraca: se o robô estiver com movimentos muitos lentos, sua bateria deve estar 7 fraca. Verifique se o indicador de robô ligado (Figura 5.3) está vermelho. Se estiver, é necessário recarregar (ou trocar) as baterias. (iv) Configurações incorretas no software: depois de verificados e corrigidos os casos (i), (ii) e (iii) e o robô ainda não estiver respondendo corretamente, verifique se os robôs foram cadastrados corretamente no software. É necessário informar os endereços do rádio base e do robô (Figura 5.4-a) e as cores de identificação de cada robô (Figura 5.4-b). Mais detalhes podem ser encontrados no Capítulo 3. a) Luz verde no rádio base indicando o envio de dados para o robô b) Ligação do cabo USB ao rádio base c) Ligação do cabo USB ao computador Figura 5.1. Rádio Base Figura 5.2. Luz vermelha no rádio base indicando confirmação de recebimento de dados pelo robô. Embaixo do rádio base há informações para comunicação, como endereço e canal. Figura 5.3. Indicadores de energia do robô. O indicador do meio fica verde quando o robô está ligado. Caso o indicador fique vermelho, significa que as baterias estão fracas. 8 a) Etiqueta exemplo com o endereço de identificação do robô. E.I: Endereço do robô; R.A: Endereço do rádio que esse robô “escuta”. b) Exemplo de cores de identificação do robô Sci-Soccer Figura 5.4. Informações do robô necessárias para comunicação com o software. 6. Cuidados ao manusear o robô 1. Não deixar cair; 2. Não utilizá-lo em ambiente úmido; 3. Utilizá-lo apenas em ambiente planos. Recomendamos o uso de forração; 4. Não colocar a bateria quente no robô. Após carregar as baterias, espere a bateria esfriar para colocar no robô; 5. Não pressionar o robô contra o chão; 6. Não prender as rodas enquanto o robô está em movimento; 7. Utilizar o robô em ambiente limpo, sem pequenos obstáculos, pois pode dificultar a sua locomoção; 8. Não colidir em superfícies duras; 9. Não molhar o robô com qualquer tipo de líquido, principalmente solventes, pois pode danificar a pintura do robô; 10. Limpá-lo utilizando apenas um pano seco; 11. Não guardar o robô em baixas ou altas temperaturas; 12. Certificar que o robô tem espaço suficiente para movimentar-se; 13. Não mover o robô a força; 14. Ler, cuidadosamente, este manual para ter o uso adequado do robô. 9 7.Instalação do software 7.1 Baixando o software O software pode ser baixado no site da XBot pelo link: www.xbot.com.br/externo Entre no endereço e digite: login: xbot senha: 1234xbot Entrar no link SciSoccer e baixar os arquivos. 7.2 Instalando o Sci-Soccer Passo 1: Baixe o arquivo sciSoccer-1.1.tgz do site www.xbot.com.br/externo, conforme as instruções anteriores. Passo 2: Copie e cole os arquivos no diretório de instalação de sua preferência. Sugerimos criar um diretório de instalação dentro da pasta pessoal, da seguinte maneira, via terminal: $ mkdir SciSoccer Passo 3: descompacte o arquivo sciSoccer-1.1.tgz no diretório criado com o comando: $ tar xvzf sciSoccer-1.1.tgz Passo 4: Depois de descompactado, você terá 5 arquivos, onde X.Y.Z indicam a versão atual do software. 1. librobot-X.Y.Z.tar.gz (libRobot) - Contém a biblioteca librobot para comunicação básica com os robôs e rotinas para o processamento de imagens dos robôs. 2. scisoccer-X.Y.Z.tar.gz (sciSoccer) - Contém o aplicativo Sci-Soccer para jogar futebol de robôs. 3. mesmu-soccer-X.Y.X.tar.gz (Mesmu2P) - Exemplo de estratégia para utilização pelo Sci-Soccer. 4. template-soccer-X.Y.X.tar.gz (StrategyTemplate) - Template para estratégias a serem utilizadas pelo Sci-Soccer. 5. README-sciSoccer – Arquivo de ajuda Passo 5: Descompacte os arquivos no diretório de instalação. Para isso, digite no terminal: $ tar xvzf librobot-X.Y.Z.tar.gz $ tar xvzf scisoccer- X.Y.Z.tar.gz $ tar xvzf mesmu-soccer- X.Y.Z.tar.gz $ tar xvzf template-soccer- X.Y.Z.tar.gz Passo 6: Instalando os pacotes. Digite os seguintes comandos no terminal: Entrando na pasta librobot-X.Y.Z / e instalando uma biblioteca para comunicação básica com os robôs e rotinas para o processamento de imagens dos robôs: $ cd librobot-X.Y.Z / $ sudo apt-get install g++ make libxml++2.6-dev 10 $ $ $ $ ./configure make su -c ‘make install’ (necessária senha de root) su -c ‘ldconfig’ (necessária senha de root) Saindo da pasta anterior: $ cd .. Entrando na pasta scisoccer- X.Y.Z e instalando o aplicativo Sci-Soccer para jogar futebol de robôs: $ cd scisoccer-X.Y.Z $ sudo apt-get install libgtkmm-2.4-dev libglademm-2.4-dev libxml++2.6-dev (Pressione 's') $ ./configure $ make $ su -c ‘make install’ (necessária senha de root) $ su -c ‘ldconfig’ (necessária senha de root) Saindo da pasta anterior: $ cd .. Entrando na pasta mesmu-soccer-X.Y.Z e instalando exemplo de estratégia: $ cd mesmu-soccer-X.Y.Z $ ./configure $ make install Saindo da pasta anterior: S cd .. Passo opcional para instalar o template de estratégia. Não é necessário instalar o template para poder utilizar o Sci-Soccer. Entrando na pasta template-soccer-X.Y.Z e instalando template para estratégias: $ cd template-soccer-X.Y.Z $ ./configure $ make install Passo 7: Para executar o programa, digite: $ sciSoccer 7.3 Desinstalando o Sci-Soccer No terminal, realize o procedimento abaixo para os diretórios librobot-X.Y.Z, scisoccer-X.Y.Z e mesmu-soccer-X.Y.Z: $ make uninstall $ make clean 8.Execução do Programa Para executar o programa, vá ao terminal e digite sciSoccer e pressione Enter. 11 9.Utilização do Software 9.1 Calibrando o Campo Passo 1: Ative o checkbox Campo. Passo 2: Vá em Calibrações > Campo. Passo 3: Posicione a câmera no meio do campo e mexa nos valores até que a demarcação na tela se alinhe com o campo. Em seguida clique em Feito. 12 9.2 Calibrando os Robôs para identificação Passo 1: Ative o checkbox Robôs e Bola Passo 2: Vá em Calibrações > Identificações Passo 3: Ative o checkbox Amostragem e coloque Raio = 1, Quadros = 2 e Substituir. Passo 4: Ative o checkbox Amostrar no time a ser identificado. 13 Passo 5: Clique no círculo do meio que está em cima do robô do time. Este círculo identifica a cor do time. Passo 6: Confirme se há um círculo identificando apenas os robôs do mesmo time. Caso a identificação não esteja muito boa, ou seja, quando está pegando outros objetos e partes do campo, repita o passo 5. Passo 7: Faça os passos 4 a 6 com os dois times. Passo 8: Clique em Amostrar no campo Bola para poder identificar a bola. 14 Passo 9: Clique na bola até que ela seja identificada com um quadrado vermelho no jogo sem problemas. Passo 10: Ative o checkbox Amostrar no campo Laterais. Passo 11: Selecione Adicionar. 15 Passo 12: Clique nas laterais dos robôs para o software identificar a frente de cada um. Passo 13: Para visualizar se os robôs e a bola estão sendo identificados corretamente, basta clicar em Exibir regra e ver se o software está identificando apenas o que você está pedindo. Passo 14: Se estiver tudo correto, clique em Feito. 16 9.3 Carregando estratégias Para poder carregar a(s) estratégia(s), é necessário instalá-la(s) antes para poder gerar o arquivo com extensão so. Siga os passos que foram feitos na sessão 7.2, para instalar a(s) estratégia(s). Passo 1: Vá em Configurações > Estratégias. Passo 2: Ative o checkbox do time a ser usado. Passo 3: Clique na pasta para carregar a estratégia do time. Passo 4: Procure a estratégia no computador e clique em Abrir. 17 Passo 5: Depois de carregado a(s) estratégia(s) clique em Feito. 9.4 Configurando os robôs Passo 1: Vá em Configurações > Robôs. Passo 2: Coloque o endereço do Robô, que se encontra abaixo dele. 18 Passo 3: Selecione o time. Passo 4: Selecione o número do robô. Passo 5: Coloque as cores que identificam o robô no campo. 19 Passo 6: Clique em Inserir Para atualizar os dados de algum robô, clique nos dados do robô que deseja alterar, mude os dados que deseja e clique em Atualizar. Para remover um robô, clique nos dados do robô e em seguida em Remover. 20 9.5 Configurando o rádio base Passo 1: Vá em Configurações > Rádio. Passo 2: Selecione o rádio a ser usado para controlar os robôs. Passo 3: Selecione o canal do rádio. Passo 4: Selecione a velocidade de 115200. 21 Passo 5: Coloque um valor para timeout (padrão de 60 ms). Passo 6: Coloque a identificação do rádio base a ser usado, no qual se encontra abaixo do rádio base. Passo 7: Clique em Feito. 22 9.6 Configurando o vídeo Passo 1: Vá em Configurações > Vídeo Passo 2: Selecione a entrada que está ligado a câmera a ser usada no jogo e clique em Feito. 10. Jogando Futebol de robôs 10.1 Iniciando Passo 1: Configure o vídeo. Passo 2: Configure o campo. Passo 3: Configure os robôs. Passo 4: Configure o rádio base. Passo 5: Calibre a identificação dos robôs . Passo 6: Carregue as estratégias. Passo 7: Clique em Jogar. Obs: Os robôs devem estar ligados. Passo 8: Clique em Novo. 23 Passo 9: Clique na equipe que irá iniciar a partida, time amarelo ou time azul. Passo 10: Clique em Jogar. Passo 11: Clique em Feito. 24 10.2 Pausando Passo 1: Inicie a partida. Passo 2: Clique em Parar para pausar. 10.3 Marcando placar Passo 1: Inicie a partida. Passo 2: Quando uma das equipes marcar um gol clique em Gol dos Amarelos ou Gol dos Azuis. 11. Precauções com as baterias • Informações importantes: As baterias tem uma vida útil de 500 ciclos, se forem bem utilizadas; As baterias têm auto-descarga, ou seja, se deixadas sozinhas descarregam naturalmente; As baterias já vão devidamente formatadas, ou seja, já está com potencial completo; 25 A partir do momento que a bateria vai descarregando, o desempenho do robô vai caindo também. Caso o robô diminua consideravelmente o seu desempenho, significa dizer que as baterias estão fracas e que é necessário carregá-las. • Cuidados que se deve ter: Recomenda-se carregar e descarregar periodicamente se elas forem ficar muito tempo paradas, devido a auto-descarga; Devido a auto-descarga, recomenda-se que as baterias sejam guardadas carregadas; Após carregar as baterias elas estarão um pouco quentes. Esperar um pouco elas esfriarem para colocar no robô; Não esquecer as baterias dentro do robô, pois pode estragar a bateria e todos os fios no caminho dela até o interruptor do robô, podendo causar problemas ainda piores se ela vazar dentro do robô; Evite temperaturas muito altas ou muito baixas, assim como deixá-las onde possam ter os contatos colocados em curto; Mantenha as baterias em um local fresco e em uma área de armazenamento seca; Sempre utilizar o carregador que acompanha no kit; Não inverter a polaridade da bateria quando colocá-las em carga; Não exponha as baterias ao fogo; Não sobrecarregue as baterias ou descarregue-as completamente; Não exponha as baterias à radioatividade; 26 Ao manusear as baterias, procure manter as temperaturas abaixo: o Temperatura de carga: 0 a 45ºC; o Temperatura de descarga: -20 a 50ºC; o Temperatura de armazenamento: -20 a 35ºC. • Recomendações: Caso as baterias não estejam mais aceitando carga, é necessário dar uma carga alta corrente de uns 2C (a corrente máxima que a bateria pode fornecer é de 2.000mA) por menos de 1 segundo. Isso ajuda a dissolver os cristais formados no eletrólito, diminuindo a resistência interna e fazendo-a aceitar carga novamente. Este procedimento deve ser feito com muito cuidado, pois pode causar facilmente superaquecimento da bateria ou do fio, portanto não faça se não tiver experiência com eletricidade e use equipamento de proteção; Em caso de explosões ou vazamento dos elementos químicos (principalmente eletrólito), jogue água, imediatamente, na bateria. Evite o contato dos elementos químicos nos olhos ou a ingestão dos mesmos. Em caso de contato nos olhos, lave-os por 15 minutos e consulte um médico. 27 12. Apêndice 12.1 Apêndice A: Bibliotecas de estratégia Um dos objetivos do software Sci-Soccer é estimular a criatividade do usuário para que desenvolva novas estratégias de jogo. Estas estratégias devem seguir as regras definidas pela Robocup e oferecem desafios que contribuem com o aprendizado de novos desenvolvedores. O software traz o exemplo de uma estratégia simples, onde os robôs de cada time se posicionam para iniciar uma partida de futebol. Em seguida, iniciam a perseguição da bola. Este exemplo demonstra como acessar as informações de posições dos robôs e da bola e a utilizar as funções de comunicação com os robôs. A classe que implementa o exemplo de estratégia é chamada de “StrategyExample”. Esta classe herda a classe “Strategy” e implementa suas funções virtuais de acordo com o objetivo definido. A Figura 10.1 apresenta o código da definição da classe “StrategyExample”. #ifndef _StrategyExample_ #define _StrategyExample_ #include <math.h> /* inclui arquivos necessários estratégia */ #include <scis/scisStrategy.hh> de libStrategy para implementar a /***********************************************************************/ /*************************** StrategyExample ****************************/ /* Classe que implementa o exemplo de estratégia simples, onde os robôs de cada time são posicionados no campo para iniciar uma partida de futebol e em seguida perseguem a bola. */ class StrategyExample : public scis::Strategy { public: /* construtor da classe, recebendo como parâmetro o objeto que realiza a comunicação com os robôs e o identificador do time escolhido para jogar.*/ StrategyExample( scis::TeamCommunicator *comm, int teamId ); // destructor vazio ~StrategyExample(); // método responsável pela execução da estratégia criada void run(); private: // método responsável pelo posicionamento dos robôs do time escolhido para jogar. void initialKick(); 28 // método responsável pelo posicionamento dos robôs do time adversário. void initialKickOther(); /* função responsável pelo envio de comandos de andar e girar aos robôs do time. Retorna True se (dstX, dstY) foi alcançado. */ bool oneStepTo( scis::TeamInfo &team, int robotId, int dstX, int dstY ); // função responsável pelo envio de comandos de andar e girar a um robô. bool oneStepTo( scis::RobotInfo &robot, int dstX, int dstY ); // função responsável pelo cálculo da distância entre o robô e um ponto escolhido. int findDistance( scis::RobotInfo &robot, int dstX, int dstY ); // função responsável pelo cálculo do ângulo que o robô deve girar. O ângulo calculado está no intervalo [-180, +180], em graus. int findAngle( scis::RobotInfo &robot, int dstX, int dstY ); }; #endif Figura 10.1 Código da definição da classe “StrategyExample”. No construtor da classe, são passados o ponteiro “comm” e o identificador do time escolhido para jogar. O ponteiro “comm” possibilita o acesso às funções de comandos dos robôs, presentes na biblioteca de comunicação. A implementação das funções da classe “StrategyExample” é apresentada na Figura 10.2. #include "StrategyExample.hh" #include <iostream> using namespace scis; using namespace std; /**********************************************************************/ /******* Funções necessárias para criar a biblioteca dinâmica ********/ /* Note que estas funções não são definidas com a assinatura da estratégia a ser carregada. */ /*** strategy Factory ***/ extern "C" scis::Strategy * strategyFactory(scis::TeamCommunicator *comm, int teamId) { return new StrategyExample(comm, teamId); } /*** strategy Destroyer ***/ extern "C" 29 void strategyDestroyer(Strategy *strategy) { delete strategy; } /*** StrategyExample ***/ /*** Construtor ***/ /* os parâmetros 'comm' e 'teamId' são passados diretamente para a classe Strategy e são usados para a comunicação com os robôs e a identificação do time escolhido para jogar, respectivamente. */ StrategyExample::StrategyExample(TeamCommunicator Strategy( comm, teamId ) { } *comm, int teamId) : /*** destructor vazio ***/ StrategyExample::~StrategyExample() { } /*** run ***/ /* Esta função executa a estratégia até que o usuário a interrompa através do botão 'Parar' na janela de eventos. */ void StrategyExample::run() { TeamInfo team; TeamInfo opponent; BallInfo ball; while (!haveToFinish()) { // acessa as posições dos robôs e da bola. getGame(&team, &opponent, &ball); int robotId = 1; RobotInfo robot; // manda um robô ir atrás da bola if (ball.found && team.getRobot(&robot, robotId)) { oneStepTo(robot, ball.posX, ball.posY); int dist; dist = findDistance(robot, ball.posX, ball.posY); /* de acordo com a distancia do robô em relação a bola, é enviado um comando de chute. */ if (dist < 165) kick(robotId); } } } 30 /*** initial Kick ***/ /* Este método posiciona os robôs do time escolhido para jogar na sua metade do campo, preparando-os para o início da partida. */ void StrategyExample::initialKick() { TeamInfo team; TeamInfo opponent; BallInfo ball; // inicializa uma variável com o número de robôs que há no time. int numRobots = (getTeamId() == 0 ? 3 : 4); // inicializa as posições as quais os robôs devem estar para iniciar a partida. int pntX[] = {500, 250, 2000, 250}; int pntY[] = {0, 500, 0, -500}; bool reached; // manda os robôs andarem até as posições iniciais definidas por 'pntX' e 'pntY' do { getGame(&team, &opponent, &ball); reached = true; for (int i = 0; i < numRobots; i++) reached &= oneStepTo(team, i, pntX[i], pntY[i]); if (haveToFinish()) return; } while (!reached); } /*** initial Kick Other ***/ // Este método posiciona os robôs do time adversário na sua metade do campo, preparando-os para o inicio da partida. void StrategyExample::initialKickOther() { TeamInfo team; TeamInfo opponent; BallInfo ball; int numRobots = (getTeamId() == 0 ? 3 : 4); int pntX[] = {-1000, -2000, -200, -200}; int pntY[] = {0, 0, 1500, -1500}; bool reached; do { getGame(&team, &opponent, &ball); reached = true; for (int i = 0; i < numRobots; i++) reached &= oneStepTo(team, i, pntX[i], pntY[i]); if (haveToFinish()) 31 return; } while (!reached); } /*** one Step To ***/ // Esta função encontra um robô no time e invoca a função responsável pelo envio de comandos de movimentação. bool StrategyExample::oneStepTo(TeamInfo &team, int robotId, int dstX, int dstY) { RobotInfo robot; if (team.getRobot(&robot, robotId)) { if (findDistance(robot, dstX, dstY) < 200) return true; oneStepTo( robot, dstX, dstY ); } return false; } /*** one Step To ***/ // Esta função envia comandos de movimentação para um robô escolhido, fazendo com que ele ande e gire, conforme necessário. bool StrategyExample::oneStepTo(RobotInfo &robot, int dstX, int dstY) { int angle = findAngle(robot, dstX, dstY); if (angle < -90) angle = -90; if (angle > 90) angle = 90; // Distância até a posição definida. int dist = findDistance(robot, dstX, dstY); // Correct direction. if (angle < -10 || angle > 10) { float finalAngle = float(angle)/90.0; turn(robot.id, finalAngle, 0.2); } else if (dist > 200) { int step = (int)(0.2 * dist); move(robot.id, step, 0, 0.4); } return true; } /*** find Distance ***/ // Esta função calcula a distância do robô até o ponto determinado. 32 int StrategyExample::findDistance(scis::RobotInfo &robot, int dstX, int dstY) { int dx = robot.posX - dstX; int dy = robot.posY - dstY; return (int) sqrt((dx*dx) + (dy*dy)); } /*** find Angle ***/ // Esta função calcula o ângulo que o robô deve girar. O ângulo retornado é dado em graus. int StrategyExample::findAngle(RobotInfo &robot, int dstX, int dstY) { float dirAng = atan2(robot.dirY, robot.dirX); float posX = dstX - robot.posX; float posY = dstY - robot.posY; float posAng = atan2(posY , posX); int angle = (int)((posAng - dirAng) * (180 / M_PI)); if (angle > 180) angle -= 360; if (angle < -180) angle += 360; return angle; } Figura 10.2. Código da definição da classe “StrategyExample”. As funções da “StrategyExample” são executadas pela janela de eventos (Seção 8.3). As funções “initialKick” e “ initialKickOther” implementam as ações dos botões “Chute Inicial” dos dois times. Estas funções definem a posição inicial de cada robô dos times. Para isto, utilizam a função “getGame”, implementada na classe “Strategy”, para acessar as posições dos robôs e “oneStepTo”, que envia comandos de movimentação, através da função “move”, para separar os robôs do time escolhido dos robôs do time adversário, nas suas respectivas metades do campo (a função “move” é implementada na classe 'Strategy”). Ao terminar a execução, os robôs ficam aguardando um evento do usuário para iniciar o jogo. A função “run” é a responsável pela execução da estratégia criada. Quando o usuário clica no botão “Jogar”, da janela de eventos (Seção 9.1, passo 7), a função “run” é inicializada e os robôs partem em busca da bola. Ela utiliza a função “oneStepTo” para enviar comandos de andar aos robôs e a função “findAngle” para fazê-los girar. Ela é executada até que o usuário clique no botão “Parar”, da janela de eventos. Há ainda as funções “strategyFactory” e “strategyDestroyer” que não foram definidas pela classe StrategyExample, mas são necessárias para permitir que a estratégia possa ser carregada dinamicamente pelo software. 33 12.2 Apêndice B: Testando o hardware dos robôs com a Giga de Teste A Giga de teste funciona apenas em sistema operacional Windows XP - 32 bits. Preferencialmente XP Professional versão 2002 com Service Pack 3. O software pode ser baixado no site da XBot pelo link: www.xbot.com.br/externo Entre no endereço e digite: login: XBot senha: 1234XBot Entre em SciSoccer e baixe o arquivo Software Giga_de_teste. Passo 1: Plugue o rádio. Passo 2: Instale o driver do rádio base. Para instalar o rádio base plugue-o no computador e quando o Windows perguntar se deseja baixar o drive da internet, clique em não e que deseja indicar uma pasta. Feito isso, indique a pasta do drive para Windows onde foi descompactado o arquivo do rádio base e clique em OK. Passo 3: Abra a Giga de Teste e olhará a tela abaixo. Passo 4: Inicialize a comunicação com a porta COM que está o rádio base. 34 Passo 5: Coloque os valores da identificação do rádio (R.A) e do robô (E.I) que será testado. Essas informações se encontram na parte de baixo do robô e do rádio. Passo 6: Coloque o valor 300 em X, 300 em Y e 300 em vel. Isso fará o robô andar 30 cm com uma velocidade de 300 rpm. 35 Passo 7: Clique em Envia comando_mov_now. Passo 8: Para testar o chute clique em Envia comando_kick. Obs: Apenas alguns robôs apresentam chute. 36 Passo 9: Para testar o drible clique em Envia comando_set_drible. Obs: Apenas alguns robôs apresentam drible. Passo 10: Se todas as rodas se moveram, o robô chutar e acionar o drible, então o hardware e a comunicação estão corretas. Passo 11: Faça os passos 5 a 9 com todos os robôs. 37