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 |
- 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.
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.
- 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
- 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:
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.
- 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:
- Boost 1.38 ou posterior
sudo apt update sudo apt install build-essential libboost-all-dev
- A última librcsc
- Eigen3
sudo apt-get update sudo apt-get install libeigen3-dev
- Boost 1.38 ou posterior
- 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
- Para construir binários, execute comandos da raiz do diretório de origem:
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.
- 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.
- 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 .
- 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
- 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:
- 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 - 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 - 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
Softwares oficiais:
Site oficial Página da Wikipedia
TDPs:
Tutoriais:
Equipes:
Times base:
Leituras sobre Inteligência Artificial:
- 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 |
---|