Prof. Dr. Erivelton Geraldo Nepomuceno Prof. Dr. Marcos Santos de Oliveira André Luiz Carvalho Ottoni Carlos Manuel Viriato Neto Fernanda Felipe de Oliveira Setembro, 2011 Mini-Curso de Futebol de Robôs Simulado 1. Introdução ao futebol de robôs O futebol de robôs foi uma forma encontrada para incentivar e possibilitar o desenvolvimento de atividades científicas e tecnológicas nas áreas de Inteligência Artificial e Robótica. O principal objetivo do Futebol de Robôs é promover avanços científicos e tecnológicos para que se retornem para a sociedade os benefícios que os frutos destas pesquisas e estudos podem gerar, onde podemos citar o desenvolvimento da comunicação wirelles, aparelhos cada vez mais autônomos, dispositivos e aparelhos eletrônicos cada vez mais independentes e inteligentes, capazes de reconhecer comandos por voz, recebendo ordens apenas de seu dono, desenvolvimento de mecanismos autônomos tais como robôs de busca e resgate capazes de operar em ambientes críticos para humanos, tais como desastres químicos, ambientes explosivos, desastres naturais etc. dentre diversos outros exemplos cuja aplicação se tornou possível por pesquisas e estudos motivados por desafios, como é o caso do Futebol de Robôs. O futebol de robôs pode ser descrito como uma equipe robôs que são capazes de jogar futebol, onde estes robôs são projetados para atuar em campo de forma integrada, como uma equipe de futebol de humanos. São estudadas as características de atuação coletiva e implementadas estas características nos robôs, para que estes também possam atuar em sua equipe (seu time) de forma coletiva, nenhum robô pega a bola e corre com ela para o gol, todos analisam as possibilidades e escolhem, se passa a bola para outro companheiro time, se irá cruzar ou mesmo lançar para o gol. Entre os desafios e problemas a serem estudados, os jogadores robóticos precisam realizar processos de reconhecimento visuais em tempo real, navegar em um espaço dinâmico, rastrear objetos em movimento, colaborar com outros robôs e ter controle para acertar a bola na direção correta. Para atingir esse objetivo os robôs devem ser autônomos, eficientes, cooperativos, com capacidades de planejamento, raciocínio e aprendizado, além de atuarem num ambiente tempo real. 1.1 Robocup A RoboCup é uma organização internacional criada para promover a Inteligência Artificial (IA), a robótica e campos correlacionados. É uma tentativa de acelerar as pesquisas de IA e inteligência robótica, provendo assim um problema padrão onde uma grande quantidade de tecnologias podem ser desenvolvidas, integradas e examinadas. A RoboCup escolheu o jogo de futebol como o principal tópico de pesquisa, procurando inovações que podem ser aplicas em problemas sociais significantes e na indústria. O objetivo principal do projeto RoboCup é que até 2050, seja desenvolvido um time de robôs humanoides totalmente autônomos e que podem ganhar do com os melhores jogadores do mundo. 1.2 Competições Abaixo algumas competições de robótica, divididas em três níveis: regional, nacional e internacional: 1.1.1 Regionais Copa Mineira de Simulação 2D (CMS2D) http://www.ufsj.edu.br/cms2d/ 2 Mini-Curso de Futebol de Robôs Simulado Olimpíada de Robótica do Campo das Vertentes (ORCV) http://www.ufsj.edu.br/orcv/ Olimpíada de Robôs da UFJF http://www.ufjf.br/ramoieee/olimpiadas-de-robos-2011/ 1.1.2 Nacionais Competição Brasileira de Robótica (CBR) http://www.cbr2011.org/ Olimpíada Brasileira de Robótica (OBR) http://www.obr.org.br/ 1.1.3 Internacionais Competição Latino America de Robótica (LARC) http://www.ieeelarc.org/ Mundial da Robocup http://www.robocup2011.org/ 1.3 Categorias – Vídeos 1.3.1 Humanoid 1.3.2 Middle Size 1.3.3 Stantart Plataform 1.3.4 Small-Size (F180) 1.3.5 Very Small-Size 1.3.6 Mixed Reality 1.3.7 Simulation 3D 1.3.8 Simulation 2D 1.3.9 Rescue 1.3.10 Rescue Virtual 1.3.11 Junior 3 Mini-Curso de Futebol de Robôs Simulado 2 Noções Iniciais de Simulação 2D Nessa simulação dois times formados por 11 agentes inteligentes autônomos disputam uma partida de futebol em duas dimensões. Cada um dos agentes que representa um jogador recebe apenas informações limitadas sobre a situação do jogo e precisa decidir cada ação de modo a contribuir com a equipe como um todo. Os robôs são totalmente autônomos, ou seja, são programados antes das partidas e não sofrem intervenção humana durante o jogo. 2.1 Estrutura de Comunicação Figura 1 – Estrutura de comunicação entre os times, o servidor e o monitor. 2.2 Pacotes de Instalação O sistema de simulação de futebol é composto por 3 módulos principais: o servidor (soccerserver), o visualizador (soccer monitor) e o vídeo (logplayer). 4 Mini-Curso de Futebol de Robôs Simulado Figura 2 – Módulos do sistema de futebol simulado. 2.2.1 rcsserver O simulador é o responsável por realizar a simulação de jogos utilizando para tal uma arquitetura cliente-servidor. Providencia um campo de futebol virtual e simula o movimento de todos os objetos no mesmo, controlando o jogo segundo um conjunto de regras pré-especificado. Os clientes (jogadores) conectam-se ao simulador através de v sockets UDP. O simulador recebe os comandos dos clientes, executa-os simulando o movimento de todos os objetos no campo e envia aos clientes informação sensorial. 2.2.2 rcssmonitor O monitor é a ferramenta que permite visualizar os jogos virtuais realizados, com o auxílio do simulador. Comunica com o simulador também através de sockets UDP, recebendo deste as posições de todos os objectos no campo virtual. Efectua depois o display gráfico desta informação de forma a permitir aos humanos a visualização do jogo. 2.2.3 rcsslogplayer O vídeo (Logplayer) é uma aplicação que permite a visualização de jogos pré-gravados (ficheiros log) à semelhança do que acontece com um gravador de vídeo. A sua utilização é associada à utilização de um monitor de forma a poder visualizar os jogos. 2.3 Procedimento de instalação 2.3.1 Instalando as dependências pelo modo texto - apt-get No modo texto, siga os comandos abaixo. Você pode copiar cada um dos comandos, um de cada vez. O que estiver entre < e > é apenas um comentário sobre o comando, não devendo ser copiado. su <forneça a senha do root. Aqui você estará se logando como root. Caso use ubuntu, pode-se usar o comando "sudo su"(sem aspas) e fornecer a senha do usuário 5 Mini-Curso de Futebol de Robôs Simulado normal> apt-get update <atualiza a lista de pacotes disponíveis na internet> apt-get install libltdl7 libstdc++6 libboost-filesystem1.40.0 \ libboost-program-options1.40.0 libqtcore4 libqtgui4 \ libqt4-network libxaw7 libxpm4 libxt6 gcc g++ tcsh libqt4-opengl <Pode copiar as três linhas acima de uma só vez. Esse comando instala todos os pacotes necessários.> Tabela 1 – Pacotes de instalação. 2.3.2 Instalando as dependências pelo modo gráfico - Synaptic Abra o Synaptic (Sistema->Administração->Gerenciador de Pacotes Synaptic), clique em “Recarregar” para atualizar as listas de pacotes disponíveis na internet e depois, usando a ferramenta de busca, selecione os seguintes pacotes para instalação: libltdl7 libstdc++6 libboost-filesystem1.40.0 libboost-program-options1.40.0 libqtcore4 libqtgui4 libqt4-network libxaw7 libxpm4 libxt6 gcc g++ tcsh libqt4-opengl 2.3.3 Observação sobre as versões dos pacotes Se você não estiver usando o Debian Testing ou Ubuntu, os pacotes acima podem ter outros nomes. Nesse caso, procure no synaptic algum pacote que tenha parte do nome parecido com os pacotes acima. Também dependendo da sua distribuição, os pacotes libboost-filesystem1.40.0 e libboost-programoptions1.40 podem estar em outra versão, a 1.38 por exemplo. O simulador pré-compilado não irá funcionar com essas outras versões do libboost. Você terá que instalar exatamente a versão do libboost que está na lista da seção anterior. 2.3.4 Instalando os pacotes pré-compilados do Simulador Abra um terminal, navegue até a pasta onde encontram-se os pacotes, e como root execute o comando: dpkg -i *.deb Tabela 2 – Instalando os pacotes pré-compilados. O comando acima instalará todos os pacotes .deb contidos na pasta, no caso, os pacotes do simulador. 6 Mini-Curso de Futebol de Robôs Simulado Obs: para estar como root digite sudo su (enter) e depois a senha. Pronto, o simulador está instalado e pronto para ser usado. 2.4 Executando o Simulador Para executar o simulador vá até o terminal e digite: rcsoccersim Tabela 3 – Executando o simulador. Para executar o logplayer vá até o terminal e digite: rcsslogplayer Tabela 4 – Executando o logplayer. 2.4 Funções do Monitor e Logplayer 2.4.1 Visualização de um vídeo de uma partida a) Abrindo um arquivo de vídeo. Figura 3 – Abrir vídeo. b) Barra de controle de vídeo do Logplayer. Figura 4 - Barra de controle de vídeo do Logplayer. 2.4.2 Visualização de trajetórias 7 Mini-Curso de Futebol de Robôs Simulado Figura 5 – Traçar rota de jogador e bola. 2.4.3 Análise dos jogadores Figura 4 – Informações do jogador na partida. 2.4.2 Iniciando uma partida 8 Mini-Curso de Futebol de Robôs Simulado Figura 5 – Chute inicial (KickOff). 3. Criando um novo time a partir do UvA Trilearn 2003 3.1 Compilando o time Descompacte o arquivo do time trilearnBase. Abra um terminal, entre na pasta extraída e execute o comando: ./configure Tabela 5 – Verificando as dependências. Isso irá verificar se você tem as dependências instaladas e criar o Makefile do time. Então, para compilar o time, digite: make Tabela 6 – Compilando o time. O processo acima poderá demorar um pouco. Quanto estiver terminado, o time base estará compilado e pronto para ser executado. 3.2 Comandos básicos A) Chute: soc = kickTo( posGoal, SS->getBallSpeedMax() ); B) Carregar a bola Tipos de dribble : Lento: soc = dribble(0, DRIBBLE_SLOW); Rápido: soc = dribble(0, DRIBBLE_FAST); Outro: soc = dribble(0, DRIBBLE_WITHBALL); C) Posição do agente Em X: posAgent.getX(); Em Y:posAgent.getY(); 9 Mini-Curso de Futebol de Robôs Simulado Observação: A origem do sistema de coordenadas é o centro do campo, sendo que a sua orientação é relativa ao campo de ataque do time. Se o seu time está atacando para a direita, então a coordenada x positiva estará apontada para a direita e a coordenada y positiva estará apontada para baixo. Caso o seu time esteja atacando para a esquerda, então a coordenada x positiva estará direcionada para a esquerda e a coordenada y positiva estará direcionada para cima. Isso que dizer que você não precisa fazer dois códigos, um para quando o seu time estiver do lado esquerdo e um para quando o seu time estiver no lado direito. Figura 6 – Coordenadas para o time que ataca para a direita. D) Formação do time: Caso queira alterar a formação do time você deve procurar a linha formations->setFormation(FT_433_offensive); Opções para formação: FT_433_offensive; FT_334_offensive; FT_defensive; FT_open_defensive; FT_343_attacking. Observação: no arquivo formations.conf é possível alterar a estrutura das formações acima, ou até mesmo criar novas. 3.3 Exemplos A) Chute para o gol 10 Mini-Curso de Futebol de Robôs Simulado A estratégia do Time Base é chutar para o gol sempre que a bola estiver na área de chute do jogador. if( WM->isBallKickable()) // if kickable { VecPosition posGoal( PITCH_LENGTH/2.0, (-1 + 2*(WM->getCurrentCycle()%2)) * 0.4 * SS->getGoalWidth() ); soc = kickTo( posGoal, SS->getBallSpeedMax() ); // kick maximal ACT->putCommandInQueue( soc ); ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) ); Tabela 7 – Chute para o gol. B) Escolhendo o jogador para chute ou dribble. if( WM->isBallKickable()) { // if kickable VecPosition posGoal( PITCH_LENGTH/2.0, (-1 + 2*(WM>getCurrentCycle()%2)) * 0.4 * SS->getGoalWidth() ); switch(WM->getPlayerNumber()){//Escolhe jogador case 2: soc = dribble(0, DRIBBLE_FAST); break; case 3: soc = dribble(0, DRIBBLE_FAST); break; case 4: soc = dribble(0, DRIBBLE_FAST); break; case 5: soc = dribble(0, DRIBBLE_FAST); break; case 6: soc = dribble(0, DRIBBLE_FAST); break; case 7: soc = kickTo( posGoal, SS->getBallSpeedMax() ); break; case 8: soc = kickTo( posGoal, SS->getBallSpeedMax() ); break; case 9: soc = kickTo( posGoal, SS->getBallSpeedMax() ); break; case 10: soc = kickTo( posGoal, SS->getBallSpeedMax() ); break; case 11: soc = kickTo( posGoal, SS->getBallSpeedMax() break; ); } ACT->putCommandInQueue( soc ); ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) ); Tabela 7 – Chute ou dribble. 11 Mini-Curso de Futebol de Robôs Simulado C) Verificando posição em X para chute. if( WM->isBallKickable()) // if kickable { if (posAgent.getX() < 35) { soc = dribble (0,DRIBBLE_SLOW); } else { VecPosition posGoal( PITCH_LENGTH/2.0, (-1 + 2*(WM->getCurrentCycle()%2))* 0.4 * SS->getGoalWidth() ); soc = kickTo( posGoal, SS->getBallSpeedMax() ); // kick maxima } Tabela 8 – Exemplo c. D) if( WM->isBallKickable()) // if kickable { if (posAgent.getX() < 0)/*está no nosso campo*/ { soc = kickTo(VecPosition(posAgent.getX()+8, posAgent.getY()), 1); } else { if (posAgent.getX() < 35) { soc = kickTo ( VecPosition (37,15), 0.5); } else { VecPosition posGoal( PITCH_LENGTH/2.0, (-1 + 2*(WM->getCurrentCycle() %2)) * 0.4 * SS->getGoalWidth() ); soc = kickTo( posGoal, SS->getBallSpeedMax() ); // kick maximal } } ACT->putCommandInQueue( soc ); Tabela 9 – Exemplo d. 12 Mini-Curso de Futebol de Robôs Simulado Exercícios: 1) Desenvolver uma estratégia em que os jogadores: 2, 3, 4 e 5 carregam a bola devagar; 6 e 7 carregam a bola rápido; 9, 10 e 11 chutam a bola no gol. 2) Desenvolver uma estratégia com formação 334, em que os jogadores chutam a bola caso posição X<0 ou X>30. Caso contrário o agente carrega a bola. 3) Alterar a formação FT_433_offensive no o arquivo formations.conf de acordo com a tabela abaixo. # Formation 3 = FT_334_offensive 3 -50.0 -25.0 -25.0 -10.0 -30.0 3.0 3.0 15.0 15.0 18.0 18.0 # X_pos 0.0 5.0 0.0 0.5 -5.0 -5.0 11.0 -5.0 5.0 19.0 -19.0 # Y_pos 1 4 2 5 4 6 6 8 8 7 7 # P_type 0.0 0.1 0.6 0.6 0.6 0.6 0.6 0.5 0.6 # X_attr 0.0 0.1 0.25 0.25 0.25 0.25 0.3 0.2 0.2 # Y_attr 0 1 1 1 0 0 0 0 0 #Behind_ball 0.0 -50.5 -45.0 -45.0 -45.0 -30.0 -30.0 -45.0 -2.0 # X_min 0.0 -30.0 0.0 0.0 2.0 20.0 42.0 44.0 45.0 # X_max Tabela 10 – Exerçicio 3 O que aconteceu? 4) Efetuar uma mudanças em uma das formações no arquivo formations.conf, de forma que a defesa do time fique mais fechada. Referências: PET Engenharia da Computação (UFES): http://www.inf.ufes.br/~pet/ wiki.icmc.usp.br/images/5/5c/Dicas.pdf paginas.fe.up.pt/~lpreis/Tese/Capitulo8.PDF De Boer e J. R. Kok, R.: The incremental development of a synthetic multiagent system: The uva trilearn 2001 robotic soccer simulation team. Master’s thesis, University of Amsterdam, The Netherlands (Feb 2002). 13