Skip to content

ieee-ras-ufcg/SS2D

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Competição SS2D

Badge em Desenvolvimento GitHub Org's stars

Nosso Projeto Primeiros Passos Aprendendo Mais
🤖SS2D 🛠Instalação Server+Monitor 🗂️ Acesso ao Projeto
🧑‍🎓Equipe 📼Assistir um Jogo Gravado 💻Criando um Binário
📄Metodologia 🛠Instalação de Equipes 🕹️Modo de Controle Manual
🗓Planejamento 🎮Rodando o Primeiro Jogo 📖Material Extra

🤖 Competição SS2D?

  • A Robocup é uma competição anual internacional de robótica estabelecida em 1996, que objetiva promover pesquisas de robótica e de inteligência artificial através de torneios de várias modalidades.
  • A SS2D é a modalidade da Robocup que aborda o futebol simulado por computador num espaço 2D.
  • Cada time tem 11 jogadores virtuais que "pensam" separadamente e tomam decisões com base nas informações que conseguem capturar do seu ambiente.
  • Os jogadores têm atributos como velocidade máxima, precisão de chute, tamanho e energia. Esses atributos são escolhidos aleatoriamente pelo servidor em cada partida.
  • Os algoritmos e lógicas que cada jogador usa para decidir o que ele vai fazer devem ser criados pela equipe do time. Porém, é permitido e recomendado que equipes novas utilizem o código de outras equipes como base.
  • As regras das partidas do SS2D são extremamente parecidas com as que conhecemos no futebol: Existem faltas, impedimentos, tiros de meta, cartões, entre outros. Ganha a partida o time que fizer mais gols.

📄 Metodologia

Para uma melhor divisão das tarefas, o projeto pode ser dividido em duas áreas de foco:

  • Microdinâmica - Responsável por decisões de baixo nível, pelo desenvolvimento das heurísticas, inteligência artificial e tomada de decisões de cada um dos jogadores. Área mais focada em detalhes de controle, como: Dribles, Fazer o robô chutar com a força certa ao fazer o passe, interceptação, ETC.
  • Macrodinâmica - Responsável por decisões de alto nível, pelo desenvolvimento de estratégias, formações e modo de jogo geral do time. A área engloba: Comparação e escolha de formações a cada ponto do jogo, jogadas "ensaiadas", economia de energia, ETC.

🗓 Planejamento

  • No primeiro instante foi realizada uma introdução geral acerca da competição e das equipes. Para isso foi feito o estudo e a leitura dos TDP's disponibilizados pelas equipes tanto internacionais como nacionais. Neste estudo foi possível captar aspectos importantes da competição, como por exemplo seu funcionamento, como as equipes e como o jogo funciona. Também com a leitura foi possível perceber estratégias de algumas equipes, como por exemplo o uso de inteligência artificial, o uso de diferentes marcações e etc. Além dos TDP’s disponibilizados pelas equipes, também foi e está sendo utilizado o manual, The RoboCup Soccer Simulator Users Manual.
  • No momento a equipe busca ter os primeiros contatos com os softwares, as equipes bases e criar um time com apenas um jogador, para assim poder compreender a dinâmica do jogo na prática e poder criar um time que possa participar de competiçoẽs.

Status do projeto

# Atividade Status
1 Compreender a Competição SS2D - Leitura de TDP's Finalizado
2 Instalação do Servidor e do Monitor Finalizado
3 Instalação dos Times Base e Rodar Partidas Finalizado
4 Realizar o controle Manual de um Dummy Finalizado
5 Criação de um Time Com Apenas um Cliente Em Andamento
6 Criação de uma Estratégia Própria Não Iniciado

🛠 Instalando o Servidor e Monitor

  • Recomenda-se usar o Ubuntu 16.04 ou uma versão posterior para rodar os programas da modalidade. No Ubuntu, é possível instalar todos os requisitos de ambiente com os seguintes comandos:
sudo apt update
sudo apt install build-essential automake autoconf libtool flex bison libboost-all-dev
sudo apt install build-essential qt5-default libfontconfig1-dev libaudio-dev libxt-dev libglib2.0-dev libxi-dev libxrender-dev
  • Servidor:

    Antes de continuar é recomendado criar uma pasta /servidor/ , dentro da qual você salvará tanto o servidor quanto o monitor.

    No Github do servidor, baixe a versão mais recente do rcssserver-x.x.x.tar.gz, substituindo os "x" pelo número da versão. Em seguida, execute os seguintes comandos no terminal, substituindo o nome do arquivo para que fique igual à versão instalada:

    tar xzvfp rcssserver-x.x.x.tar.gz
    cd rcssserver-x.x.x
    ./configure
    make
    

    A partir de agora, você poderá executar o binário ./rcssserver dentro do /src/ do servidor para fazer o servidor funcionar. Porém, mesmo executando esse comando, não será possivel ver o campo nem qualquer jogo que for executado, pois o monitor ainda não está instalado.

  • Monitor:

    Dentro da pasta /servidor/ que você criou, baixe a versão mais recente do monitor e execute os seguintes códigos, substituindo o nome do arquivo pelo nome correto:

    tar xzvfp rcssmonitor-x.x.x.tar.gz
    cd rcssmonitor-x.x.x
    ./configure
    make
    

    Agora você pode rodar o binário ./rcssmonitor dentro do /src/ do monitor para fazer o monitor funcionar.

    Lembre-se de rodar o servidor sempre antes do monitor. Você saberá que tudo está funcionando se os jogadores aparecerem no monitor na parte superior, logo fora da quadra, como na imagem:

📼 Rodando um Jogo Gravado

A execução de um jogo gravado é um processo muito simples que permite testar se o monitor está funcionando corretamente.

  • Em primeiro lugar, baixe o replay do jogo gravado. Existe uma coleção de replays de todas as partidas da Robocup desde 2004 no site de arquivo da competição. É recomendado que você crie um diretório para salvar os replays do SS2D.
  • Depois disso, copie o caminho do replay baixado na sua máquina. Para isso, você pode clicar com o botão direito no arquivo baixado e selecionar "propriedades". Nas propriedades está exibida a "pasta-mãe" do arquivo. Copie essa pasta-mãe para sua área de transferência.
  • Na pasta /src/ do rcssmonitor, execute o comando: ./rcssmonitor pastacopiada/nomedoreplay Substituindo o "pastacopiada" pelo endereço que você copiou e "nomedoreplay" pelo nome do arquivo de replay que você baixou.
  • Pronto! Se tudo tiver dado certo, irá aparecer uma janela do rcssmonitor com botões de controle no canto superior da tela, como pausar e iniciar, mudar a velocidade e ir para o próximo frame.

🛠 Instalando as Equipes

  • A princípio estão sendo usadas as seguintes equipes como base:
  • Para a instalação dos times bases será necessário ter as seguintes bibliotecas:
  • Para finalizar a instalação da equipe Cyrus Base 2D se faz necessário a inclusão de uma pasta chamada CppDNN na pasta clonada do git da equipe. Da seguinte forma:

  • Dentro da pasta CppDNN deverá ter os seguintes arquivos:

  • Dentro da pasta CppDNN/src deverá ter os seguintes arquivos:

  • Finalizado as instalações das dependências das equipes, deve-se agora seguir o seguinte procedimento para cada umas das equipes:

    • Para construir binários, execute comandos da raiz do diretório de origem:
      ./bootstrap
      ./configure
      make
      

🎮 Primeira Partida

Depois que tudo estiver instalado, você deve seguir essa sequência de passos para simular sua primeira partida:

  • Abra 4 janelas de terminal.
  • No 1° terminal, entre na pasta /servidor/rcssserver-x.x.x/src/ e rode ./rcssserver
  • No 2° terminal, entre na pasta /servidor/rcssmonitor-x.x.x/src/ e rode ./rcssmonitor
  • No 3° terminal, rode o ./start.sh do primeiro time;
  • No 4° terminal, rode o ./start.sh do segundo time;
  • Dentro da janela que o monitor abriu, libere o kickoff com o comando Ctrl-K.

Espere alguns segundos entre cada passo para diminuir a chance de erros.

🗂 Acesso ao Projeto

  • Para ter acesso ao projeto vá na pasta disponibilizada Equipe-RAS. Caso o que procura não esteja presente neste Git, entre em contato com a equipe. Estamos à sua disposição.

‍💻 Criando um Binário

  • Para fazer um binário crie, em primeiro lugar, uma cópia da pasta src do seu time. Essa cópia será transformada no "Binário", ou seja, a pasta com o mínimo necessário de arquivos para fazer um time funcionar.
  • Renomeie a pasta cópia que você criou para o nome de seu time. Dentro dela, acesse o arquivo start.sh e mude a variável teamname na linha 26 para o nome desejado do time. Isso fará com que o servidor trate o seu time pelo nome escolhido.
  • Em seguida, você pode deletar todos os arquivos com quaisquer dessas terminações: .o .h .cpp .in .am. Para facilitar use o seguinte comando shell no terminal, dentro da pasta:
rm *.o *.h *.cpp *.in *.am
  • Por via de regra, além das pastas, apenas os arquivos coach.conf, player.conf, sample_coach, sample_player e start.sh precisam permanecer no seu binário.
  • Com isso, o seu binário está pronto. Para inserir o time no jogo é só usar a função .\start.sh .

🕹 Controlando um Robô

  • Para iniciar o simulador (servidor e monitor), digite:
rcsoccersim
  • Para iniciar o cliente de amostra, digite ./rcssclient ou rcssclient. Em seguida, digite (init sample). Isso conectará o cliente de amostra ao servidor. Você pode então digitar o comando do cliente para mover o cliente pelo campo. Você também precisará de um monitor para poder ver o que está acontecendo no campo.
./rcssclient

ou

rcssclient > /dev/null 2>&1

‍🤖 Dummy

  • um dummy e um player default que não faz nenhuma ação. a utilidade dele está em aprender qual parte do programa faz oque enquanto edita ele, por isso essa é uma parte principal para fazer um jogador proprio
  • a primeira coisa feita, no caminho de criar o dummy é encontrar onde ele faz jogadas, essa parte se dá dentro de /src/chain_action que tem todos os programas para fazer atividades planejadas, dentro dessa pasta existe o action_generator.h que faz a base para a chamada de ações em conjunto de cada jogador.
  • ao entrar nela é possivel transformar essa parte do código em comentário na linha 117, e assim o jogador não conseguirá planejar ações.
(*g)->generate( result, state, wm, path );
  • o proximo passo é faze-lo parar de se movimentar, todo o movimento basico de um player é controlado dentro de /src/bhv_basic_move.cpp onde na linha 93 é chamado uma função que determina para que coordenadas um jogador vai se mover:
const Vector2D target_point = Strategy::i().getPosition( wm.self().unum() );
  • transformar em comentario não funciona nesse caso, pois isso quebra outras chamadas de funções mais a frente no programa, portanto existe algumas opções:
  1. trocar tudo depois do "=" por Vector2D(1.0,1.0); os numeros sendo x e y respectivamente, para todos os jogadores irem para o mesmo lugar
  2. fazer a mesma coisa da linha de cima porem usando wm.self().unum(); para verificar o numero de jogador e fazer cada um ir para um lugar diferente
  3. trocar a parte depois do "=" por Vector2D(wm.self().pos().x,wm.self().pos().y);
  • tambem lembre-se de transformar em comentario a linha 87 desse arquivo para que o jogador não tente roubar a bola de um oponente

com essas feitas volte para a pasta principal e rode o comando make para recompilar o time, isso pode demorar um tempo, lembre-se de fazer isso após cada moduficação do código.

dica: modificar a linha 249 do arquivo makefile na pasta principal te permite adicionar novas bibliotecas durante a compilação do time que você pode importar em algum código

📖 Aprendendo Mais

Softwares oficiais:

Site oficial Página da Wikipedia

Arquivo dos Replays

TDPs:

Tutoriais:

Equipes:

Times base:

Leituras sobre Inteligência Artificial:

🧑‍🎓 Equipe

  • Nossa equipe é composta por graduandos do segundo ao quinto período dos cursos de Ciência da Computação e Engenharia Elétrica da Universidade Federal de Campina Grande(UFCG), todos sendo voluntários do Capítulo Estudantil da Sociedade de Robótica e Automação (IEEE RAS UFCG).

Guilherme Toledo

Lucas Melo

Samara Cardoso

🚧 Projeto em construção 🚧

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •