Skip to content

Commit eb56939

Browse files
authored
Merge pull request #2 from LBBassani/Atual
Atualização do projeto
2 parents d48e5b3 + e55221c commit eb56939

File tree

1,652 files changed

+533307
-904
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,652 files changed

+533307
-904
lines changed

.gitignore

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Prerequisites
2+
*.d
3+
4+
# Compiled Object files
5+
*.slo
6+
*.lo
7+
*.o
8+
*.obj
9+
10+
# Precompiled Headers
11+
*.gch
12+
*.pch
13+
14+
# Compiled Dynamic libraries
15+
*.so
16+
*.dylib
17+
*.dll
18+
19+
# Fortran module files
20+
*.mod
21+
*.smod
22+
23+
# Compiled Static libraries
24+
*.lai
25+
*.la
26+
*.a
27+
*.lib
28+
29+
# Executables
30+
*.exe
31+
*.out
32+
*.app
33+
34+
# Compilados do simulador
35+
build
36+
37+
# Log do simulador
38+
log.txt
39+
40+
# Compilado do instalador
41+
vss-simulator/Instalador
42+
43+
# Configurações pessoais vscode
44+
.vscode
45+
46+
# Binário do simulador
47+
Simulador
48+
49+
#arquivos de teste
50+
*.teste.cpp
51+
*.teste.py
52+
53+
# Byte-compiled / optimized / DLL files
54+
__pycache__/
55+
*.pyc
56+
*.teste.pyc

README.md

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# VSSS ERUS
2+
3+
Projeto de VSSS (Very Small Sized Soccer) da ERUS, desenvolvido em Python
4+
5+
# Instalação de dependências
6+
## Com Simulador
7+
8+
Para compilar o projeto e utilizar o simulador, é necessário instalar a seguinte lista de pacotes:
9+
10+
`g++ cmake libxmu-dev libxi-dev protobuf-compiler libprotobuf-dev pkg-config libzmq5 libzmq3-dev libboost-all-dev libbullet-dev freeglut3 freeglut3-dev`
11+
12+
Caso o pacote `pkg-config` esteja indisponível, instale o `pkgconf`.
13+
14+
Utilize o gerenciador de pacotes da sua distribuição, como `apt` ou `pacman`, para instalar os pacotes listados.
15+
16+
Também é necessário instalar o vssscorepy, o vss-sdk, pyzmq, OpenCV, numpy e google.
17+
18+
```
19+
$ sudo -H pip install git+https://github.com/VSS-SDK/VSS-CorePy --upgrade
20+
```
21+
22+
Adicionalmente, é necessário compilar os subprojetos do simulador, o que pode ser feito por meio do script `vss-simulator/instalador.sh`. **Certifique-se de que todas as dependências de pacotes foram instaladas antes de rodar os scripts, ou você TERÁ erros de compilação**!
23+
24+
```
25+
$ sudo ./vss-simulator/instalador.sh
26+
```
27+
## Sem Simulador
28+
Em breve
29+
30+
# Executando
31+
32+
## Com Simulador
33+
Há um arquivo de auxílio para rodar o simulador. Para compilá-lo, entre no diretório vss-simulator e rode o comando make.<br>
34+
Depois de compilado o programa pode ser rodado pelo comando:
35+
```
36+
$ ./Simulador
37+
```
38+
A simulação cria um arquivo de log com as saídas dos programas de simulação para serem analisados.
39+
40+
## Com Sistemas de Visão e Hardware reais
41+
Em breve.
42+
43+
# Padrões de código
44+
45+
## Primeiro comentário do arquivo
46+
47+
""" Nome do módulo :
48+
Ano de criação :
49+
Descrição do módulo :
50+
Versão :
51+
Pré-requisitos : (arquivos e bibliotecas necessárias para compilar)
52+
Membros :
53+
"""
54+
55+
56+
## Comentário de protótipo de funções
57+
58+
""" Nome da função :
59+
Intenção da função :
60+
Pré-requisitos :
61+
Efeitos colaterais :
62+
Parâmetros :
63+
Retorno :
64+
"""
65+
66+
67+
**IMPORTANTE**: Comentários adicionais devem ser feitos na implementação (corpo das funções) detalhando a implementação do código.
68+
69+
# Dados da Equipe:
70+
O VSSS-ERUS é uma equipe dedicada a implementação do desafio Very Small Size Soccer para competições. É um projeto da ERUS - Equipe de Robótica da UFES, e diversos documentos sobre o projeto podem ser encontrados no site da equipe.
71+
- Site da ERUS : http://erus.ufes.br/
72+
- E-mail da ERUS : [email protected]
73+
- E-mail do VSSS-ERUS : [email protected]
74+
75+
## Membros Atuais
76+
- Gabriel Pietroluongo
77+
78+
- Gabriel Valdino
79+
80+
- Mayke Wallace
81+
82+
- Lara de Luca
83+
84+
- Lorena Bassani
85+
86+
87+
## Membros Antigos
88+
- Ricardo Ramos
89+
90+
- Victor de Oliveira
91+

new_scripts/Agente.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
""" Nome do módulo : Agente
2+
Ano de criação : 2019/10
3+
Descrição do módulo : Agente representa uma entidade em campo
4+
Versão : 2.0
5+
Pré-requisitos : sklearn
6+
geometria
7+
Membros : Lorena Bassani
8+
"""
9+
from sklearn.linear_model import LinearRegression
10+
from .Geometria import Ponto
11+
from .Campo import Campo
12+
import math as m
13+
14+
class Agente(object):
15+
16+
def __init__(self, ponto = Ponto()):
17+
self.__ponto = ponto
18+
self.__theta = 0
19+
self.__posicoesAntigas = list()
20+
21+
@property
22+
def ponto(self):
23+
return self.__ponto
24+
25+
@ponto.setter
26+
def ponto(self, value):
27+
self.__changePosition()
28+
self.__ponto = value
29+
c = Campo()
30+
c.occupy(c.transform2Grid((value.x, value.y)), self)
31+
32+
@property
33+
def posicao(self):
34+
return self.ponto.posicao
35+
36+
@posicao.setter
37+
def posicao(self, value):
38+
self.__changePosition()
39+
self.ponto.posicao = value
40+
c = Campo()
41+
c.occupy(c.transform2Grid(value), self)
42+
43+
@property
44+
def x(self):
45+
return self.ponto.x
46+
47+
@property
48+
def y(self):
49+
return self.ponto.y
50+
51+
@property
52+
def theta(self):
53+
return self.__theta
54+
55+
@theta.setter
56+
def theta(self, value):
57+
self.__theta = value
58+
59+
@property
60+
def posicoesAntigas(self):
61+
return self.__posicoesAntigas.copy()
62+
63+
def __changePosition(self):
64+
if len(self.__posicoesAntigas) >= 5:
65+
self.__posicoesAntigas.pop(0)
66+
self.__posicoesAntigas.append(Ponto(self.ponto.x, self.ponto.y))
67+
c = Campo()
68+
c.release(c.transform2Grid(self.posicao))
69+
70+
def predicaoAdaptativa(self):
71+
pass

new_scripts/Aliado.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
""" Nome do módulo : Aliado
2+
Ano de criação : 2019/10
3+
Descrição do módulo : Módulo que descreve um jogador aliado em campo
4+
Jogadores Aliados podem ser controlados
5+
Versão : 2.0
6+
Pré-requisitos : Jogador
7+
Ponto
8+
ComportamentoJogadores
9+
Factory
10+
IComportamento
11+
Membros : Lorena Bassani
12+
"""
13+
from .Jogador import Jogador
14+
from .Geometria import Ponto
15+
from .ComportamentosJogadores.Factory import Factory
16+
from .ComportamentosJogadores.IComportamento import IComportamento
17+
18+
class Aliado(Jogador):
19+
20+
def __init__(self, idJ, ponto = Ponto(), comportamento = None):
21+
Jogador.__init__(self, idJ = idJ, ponto = ponto)
22+
self.comportamento = comportamento
23+
24+
""" Nome da função : comportamento (getter)
25+
Intenção da função : Retornar qual o comportamento atual do Jogador
26+
Pré-requisitos : Nenhum
27+
Efeitos colaterais : Nenhum
28+
Parâmetros : Nenhum
29+
Retorno : COMPORTAMENTOS : Constante da Enumeração COMPORTAMENTOS
30+
"""
31+
@property
32+
def comportamento(self):
33+
return self.__comportamentoId
34+
35+
""" Nome da função : comportamento (setter)
36+
Intenção da função : Modificar o comportamento atual do Jogador
37+
Pré-requisitos : Nenhum
38+
Efeitos colaterais : Modifica o comportamento atual do Joagdor
39+
Parâmetros : COMPORTAMENTOS : Constante da Enumeração COMPORTAMENTOS
40+
Retorno : Nenhum
41+
"""
42+
@comportamento.setter
43+
def comportamento(self, comportamento):
44+
self.__comportamentoId = comportamento
45+
self.__comportamento = Factory.create(comportamento)
46+
47+
""" Nome da função : isInimigo
48+
Intenção da função : Dizer se o Jogador é Inimigo
49+
Pré-requisitos : Ser uma subclasse de Joagador
50+
Efeitos colaterais : Nenhum
51+
Parâmetros : Nenhum
52+
Retorno : Boolean : Sempre False
53+
"""
54+
def isInimigo(self):
55+
return False
56+
57+
def definirObjetivo(self, mundo):
58+
return self.__comportamento.definirObjetivo(self, mundo)

new_scripts/Ball.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
""" Nome do módulo : Ball
2+
Ano de criação : 2019/10
3+
Descrição do módulo : Módulo que define bola em campo
4+
Versão : 2.0
5+
Pré-requisitos : Agente
6+
Ponto
7+
Membros : Lorena Bassani
8+
"""
9+
from .Agente import Agente
10+
from .Geometria import Ponto
11+
from .Patterns.Singleton import Singleton
12+
13+
class Ball(Agente, Singleton):
14+
15+
def __init__(self, *args, **keyargs):
16+
pass
17+
18+
def inicializa(self, ponto = Ponto()):
19+
Agente.__init__(self, ponto)

new_scripts/Campo.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
""" Nome do módulo : Campo
2+
Ano de criação : 2019/10
3+
Descrição do módulo : Modelar o campo do jogo
4+
Versão : 1.0
5+
Pré-requisitos : WeightedGridGraph
6+
Pattern.Singleton
7+
Membros : Lorena B Bassani
8+
"""
9+
from .Patterns.Singleton import Singleton
10+
from .PathPlanning.Graph import WeightedGridGraph
11+
12+
13+
class Campo(WeightedGridGraph, Singleton):
14+
15+
def __init__(self, *args, **keyargs):
16+
pass
17+
18+
def inicializa(self, celulasX, celulasY, dimX = 150, dimY = 130):
19+
if not hasattr(self, "grade"):
20+
WeightedGridGraph.__init__(self, celulasX, celulasY)
21+
self.__h = (dimX/(celulasX - 1), dimY/(celulasY - 1))
22+
23+
@property
24+
def tamanhoCelula(self):
25+
return self.__h
26+
27+
def transform2Cart(self, cel):
28+
# TODO : Ver Se as grades possuem as mesmas características de crescimento de coordenadas
29+
i, j = WeightedGridGraph.transform2Cart(self, cel)
30+
return (i*self.__h[0], j*self.__h[1])
31+
32+
def transform2Grid(self, cel):
33+
# TODO : Redefinir trasnformação
34+
x, y = cel
35+
return WeightedGridGraph.transform2Grid(self, (x//self.__h[0], y//self.__h[1]))
36+
37+
def cost(self, start, goal):
38+
# TODO : Redefinir custo para variar com a proximidade a um obstáculo
39+
return WeightedGridGraph.cost(self, start, goal)
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
""" Nome do módulo : ComportamentoAtacante
2+
Ano de criação : 2019/10
3+
Descrição do módulo : Comportamento de Atacante para Jogadores
4+
Versão : 1.0
5+
Pré-requisitos : IComportamento
6+
Geometria
7+
Mundo, Arena, Lado
8+
Jogador
9+
Ball
10+
math
11+
Membros : Lorena Bassani
12+
"""
13+
from .IComportamento import IComportamento
14+
from ..Geometria import Ponto
15+
from ..Mundo import Mundo, Arena, Lado
16+
from ..Jogador import Jogador
17+
from ..Ball import Ball
18+
import math as m
19+
20+
class ComportamentoAtacante(IComportamento):
21+
def __init__(self):
22+
IComportamento.__init__(self)
23+
24+
def definirObjetivo(self, jogador : Jogador, mundo : Mundo):
25+
ball = mundo.ball
26+
if ball.ponto.distancia(jogador.ponto) > 30:
27+
x, y = ball.posicao
28+
# Se posicionar antes da bola
29+
if mundo.lado == Lado.DIREITO:
30+
x += 3.35
31+
else:
32+
x -= 3.35
33+
# Se a bola estiver acima do meio de campo, se posicionar acima dela
34+
if y < Arena.marcacoes["Meio"].y:
35+
y -= 3.35
36+
else:
37+
y += 3.35
38+
return Ponto(x, y)
39+
elif ball.ponto.distancia(jogador.ponto) > 5:
40+
return ball.ponto
41+
else:
42+
resp = Arena.golEsquerdo["Meio"] if mundo.lado == Lado.ESQUERDO else Arena.golDireito["Meio"]
43+
return resp

0 commit comments

Comments
 (0)