Skip to content

Commit

Permalink
Merge pull request #2 from LBBassani/Atual
Browse files Browse the repository at this point in the history
Atualização do projeto
  • Loading branch information
erusbot authored Feb 6, 2020
2 parents d48e5b3 + e55221c commit eb56939
Show file tree
Hide file tree
Showing 1,652 changed files with 533,307 additions and 904 deletions.
56 changes: 56 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Prerequisites
*.d

# Compiled Object files
*.slo
*.lo
*.o
*.obj

# Precompiled Headers
*.gch
*.pch

# Compiled Dynamic libraries
*.so
*.dylib
*.dll

# Fortran module files
*.mod
*.smod

# Compiled Static libraries
*.lai
*.la
*.a
*.lib

# Executables
*.exe
*.out
*.app

# Compilados do simulador
build

# Log do simulador
log.txt

# Compilado do instalador
vss-simulator/Instalador

# Configurações pessoais vscode
.vscode

# Binário do simulador
Simulador

#arquivos de teste
*.teste.cpp
*.teste.py

# Byte-compiled / optimized / DLL files
__pycache__/
*.pyc
*.teste.pyc
91 changes: 91 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# VSSS ERUS

Projeto de VSSS (Very Small Sized Soccer) da ERUS, desenvolvido em Python

# Instalação de dependências
## Com Simulador

Para compilar o projeto e utilizar o simulador, é necessário instalar a seguinte lista de pacotes:

`g++ cmake libxmu-dev libxi-dev protobuf-compiler libprotobuf-dev pkg-config libzmq5 libzmq3-dev libboost-all-dev libbullet-dev freeglut3 freeglut3-dev`

Caso o pacote `pkg-config` esteja indisponível, instale o `pkgconf`.

Utilize o gerenciador de pacotes da sua distribuição, como `apt` ou `pacman`, para instalar os pacotes listados.

Também é necessário instalar o vssscorepy, o vss-sdk, pyzmq, OpenCV, numpy e google.

```
$ sudo -H pip install git+https://github.com/VSS-SDK/VSS-CorePy --upgrade
```

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**!

```
$ sudo ./vss-simulator/instalador.sh
```
## Sem Simulador
Em breve

# Executando

## Com Simulador
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>
Depois de compilado o programa pode ser rodado pelo comando:
```
$ ./Simulador
```
A simulação cria um arquivo de log com as saídas dos programas de simulação para serem analisados.

## Com Sistemas de Visão e Hardware reais
Em breve.

# Padrões de código

## Primeiro comentário do arquivo

""" Nome do módulo :
Ano de criação :
Descrição do módulo :
Versão :
Pré-requisitos : (arquivos e bibliotecas necessárias para compilar)
Membros :
"""


## Comentário de protótipo de funções

""" Nome da função :
Intenção da função :
Pré-requisitos :
Efeitos colaterais :
Parâmetros :
Retorno :
"""


**IMPORTANTE**: Comentários adicionais devem ser feitos na implementação (corpo das funções) detalhando a implementação do código.

# Dados da Equipe:
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.
- Site da ERUS : http://erus.ufes.br/
- E-mail da ERUS : [email protected]
- E-mail do VSSS-ERUS : [email protected]

## Membros Atuais
- Gabriel Pietroluongo
- [email protected]
- Gabriel Valdino
- [email protected]
- Mayke Wallace
- [email protected]
- Lara de Luca
- [email protected]
- Lorena Bassani
- [email protected]

## Membros Antigos
- Ricardo Ramos
- [email protected]
- Victor de Oliveira
- [email protected]
71 changes: 71 additions & 0 deletions new_scripts/Agente.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
""" Nome do módulo : Agente
Ano de criação : 2019/10
Descrição do módulo : Agente representa uma entidade em campo
Versão : 2.0
Pré-requisitos : sklearn
geometria
Membros : Lorena Bassani
"""
from sklearn.linear_model import LinearRegression
from .Geometria import Ponto
from .Campo import Campo
import math as m

class Agente(object):

def __init__(self, ponto = Ponto()):
self.__ponto = ponto
self.__theta = 0
self.__posicoesAntigas = list()

@property
def ponto(self):
return self.__ponto

@ponto.setter
def ponto(self, value):
self.__changePosition()
self.__ponto = value
c = Campo()
c.occupy(c.transform2Grid((value.x, value.y)), self)

@property
def posicao(self):
return self.ponto.posicao

@posicao.setter
def posicao(self, value):
self.__changePosition()
self.ponto.posicao = value
c = Campo()
c.occupy(c.transform2Grid(value), self)

@property
def x(self):
return self.ponto.x

@property
def y(self):
return self.ponto.y

@property
def theta(self):
return self.__theta

@theta.setter
def theta(self, value):
self.__theta = value

@property
def posicoesAntigas(self):
return self.__posicoesAntigas.copy()

def __changePosition(self):
if len(self.__posicoesAntigas) >= 5:
self.__posicoesAntigas.pop(0)
self.__posicoesAntigas.append(Ponto(self.ponto.x, self.ponto.y))
c = Campo()
c.release(c.transform2Grid(self.posicao))

def predicaoAdaptativa(self):
pass
58 changes: 58 additions & 0 deletions new_scripts/Aliado.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
""" Nome do módulo : Aliado
Ano de criação : 2019/10
Descrição do módulo : Módulo que descreve um jogador aliado em campo
Jogadores Aliados podem ser controlados
Versão : 2.0
Pré-requisitos : Jogador
Ponto
ComportamentoJogadores
Factory
IComportamento
Membros : Lorena Bassani
"""
from .Jogador import Jogador
from .Geometria import Ponto
from .ComportamentosJogadores.Factory import Factory
from .ComportamentosJogadores.IComportamento import IComportamento

class Aliado(Jogador):

def __init__(self, idJ, ponto = Ponto(), comportamento = None):
Jogador.__init__(self, idJ = idJ, ponto = ponto)
self.comportamento = comportamento

""" Nome da função : comportamento (getter)
Intenção da função : Retornar qual o comportamento atual do Jogador
Pré-requisitos : Nenhum
Efeitos colaterais : Nenhum
Parâmetros : Nenhum
Retorno : COMPORTAMENTOS : Constante da Enumeração COMPORTAMENTOS
"""
@property
def comportamento(self):
return self.__comportamentoId

""" Nome da função : comportamento (setter)
Intenção da função : Modificar o comportamento atual do Jogador
Pré-requisitos : Nenhum
Efeitos colaterais : Modifica o comportamento atual do Joagdor
Parâmetros : COMPORTAMENTOS : Constante da Enumeração COMPORTAMENTOS
Retorno : Nenhum
"""
@comportamento.setter
def comportamento(self, comportamento):
self.__comportamentoId = comportamento
self.__comportamento = Factory.create(comportamento)

""" Nome da função : isInimigo
Intenção da função : Dizer se o Jogador é Inimigo
Pré-requisitos : Ser uma subclasse de Joagador
Efeitos colaterais : Nenhum
Parâmetros : Nenhum
Retorno : Boolean : Sempre False
"""
def isInimigo(self):
return False

def definirObjetivo(self, mundo):
return self.__comportamento.definirObjetivo(self, mundo)
19 changes: 19 additions & 0 deletions new_scripts/Ball.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
""" Nome do módulo : Ball
Ano de criação : 2019/10
Descrição do módulo : Módulo que define bola em campo
Versão : 2.0
Pré-requisitos : Agente
Ponto
Membros : Lorena Bassani
"""
from .Agente import Agente
from .Geometria import Ponto
from .Patterns.Singleton import Singleton

class Ball(Agente, Singleton):

def __init__(self, *args, **keyargs):
pass

def inicializa(self, ponto = Ponto()):
Agente.__init__(self, ponto)
39 changes: 39 additions & 0 deletions new_scripts/Campo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
""" Nome do módulo : Campo
Ano de criação : 2019/10
Descrição do módulo : Modelar o campo do jogo
Versão : 1.0
Pré-requisitos : WeightedGridGraph
Pattern.Singleton
Membros : Lorena B Bassani
"""
from .Patterns.Singleton import Singleton
from .PathPlanning.Graph import WeightedGridGraph


class Campo(WeightedGridGraph, Singleton):

def __init__(self, *args, **keyargs):
pass

def inicializa(self, celulasX, celulasY, dimX = 150, dimY = 130):
if not hasattr(self, "grade"):
WeightedGridGraph.__init__(self, celulasX, celulasY)
self.__h = (dimX/(celulasX - 1), dimY/(celulasY - 1))

@property
def tamanhoCelula(self):
return self.__h

def transform2Cart(self, cel):
# TODO : Ver Se as grades possuem as mesmas características de crescimento de coordenadas
i, j = WeightedGridGraph.transform2Cart(self, cel)
return (i*self.__h[0], j*self.__h[1])

def transform2Grid(self, cel):
# TODO : Redefinir trasnformação
x, y = cel
return WeightedGridGraph.transform2Grid(self, (x//self.__h[0], y//self.__h[1]))

def cost(self, start, goal):
# TODO : Redefinir custo para variar com a proximidade a um obstáculo
return WeightedGridGraph.cost(self, start, goal)
43 changes: 43 additions & 0 deletions new_scripts/ComportamentosJogadores/ComportamentoAtacante.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
""" Nome do módulo : ComportamentoAtacante
Ano de criação : 2019/10
Descrição do módulo : Comportamento de Atacante para Jogadores
Versão : 1.0
Pré-requisitos : IComportamento
Geometria
Mundo, Arena, Lado
Jogador
Ball
math
Membros : Lorena Bassani
"""
from .IComportamento import IComportamento
from ..Geometria import Ponto
from ..Mundo import Mundo, Arena, Lado
from ..Jogador import Jogador
from ..Ball import Ball
import math as m

class ComportamentoAtacante(IComportamento):
def __init__(self):
IComportamento.__init__(self)

def definirObjetivo(self, jogador : Jogador, mundo : Mundo):
ball = mundo.ball
if ball.ponto.distancia(jogador.ponto) > 30:
x, y = ball.posicao
# Se posicionar antes da bola
if mundo.lado == Lado.DIREITO:
x += 3.35
else:
x -= 3.35
# Se a bola estiver acima do meio de campo, se posicionar acima dela
if y < Arena.marcacoes["Meio"].y:
y -= 3.35
else:
y += 3.35
return Ponto(x, y)
elif ball.ponto.distancia(jogador.ponto) > 5:
return ball.ponto
else:
resp = Arena.golEsquerdo["Meio"] if mundo.lado == Lado.ESQUERDO else Arena.golDireito["Meio"]
return resp
Loading

0 comments on commit eb56939

Please sign in to comment.