Projeto

Geral

Perfil

Ações

Atividade #1088

Fechada

Meta #1087: Usar o padrão STP na nova documentação

Adaptar o diagrama de classes do artigo para a SSL, com o máximo de atributos definidos, assim como os "getters" e "setters".

Adicionado por Gabriel Borges da Conceição mais de 5 anos atrás. Atualizado quase 5 anos atrás.

Situação:
Fechada
Prioridade:
Normal
Atribuído para:
Início:
27/04/2019
Data prevista:
11/05/2019

Descrição

Em pesquisas feitas, foi encontrado um diagrama de classes genérico para futebol de robôs. O objetivo dessa tarefa é adaptar esse diagrama com as classes que definimos.

O diagrama de classes se encontra em:
http://www.aspecs.org/FIRA_Robot_Soccer


Arquivos

IMG_4940.jpg (1,05 MB) IMG_4940.jpg Carla Cosenza, 01/05/2019 18:55 h
IMG_8373.jpg (1,25 MB) IMG_8373.jpg Carla Cosenza, 01/05/2019 20:15 h
picture942-1.png (89,1 KB) picture942-1.png Lucas Germano, 14/05/2019 15:23 h
Ações #1

Atualizado por Carla Cosenzamais de 5 anos

Fizemos o diagrama de classes, sem os atributos primeiro, para conseguir visualizar melhor. Estamos fazendo o diagrama com atributos agora.

![Diagrama de classes](IMG_4940.jpg)

Ações #2

Atualizado por Carla Cosenzamais de 5 anos

Uma dúvida que tivemos é se vai existir a classe Eventos, ou se só serão métodos.

Ações #3

Atualizado por Carla Cosenzamais de 5 anos

Outro problema que temos, é que usando o diagrama que desenhamos, o robô não tem um atributo para identificar sua personalidade, os seus métodos vão definir isso. Logo talvez seja melhor criar uma classe personalidade.

Ações #4

Atualizado por Carla Cosenzamais de 5 anos

Talvez seja melhor usar um enum para isso.

Ações #5

Atualizado por Carla Cosenzamais de 5 anos

A gente escolheu esses atributos para cada classe. Não colocamos atributos para Play pois não sabemos como que essa classe iria funcionar.

Ações #6

Atualizado por Carla Cosenzamais de 5 anos

![Foto](IMG_8373.jpg)

Ações #7

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

Carla Cosenza escreveu:

Outro problema que temos, é que usando o diagrama que desenhamos, o robô não tem um atributo para identificar sua personalidade, os seus métodos vão definir isso. Logo talvez seja melhor criar uma classe personalidade.

Acho que seria melhor se a decisão de personalidades fosse um método de Ally. O método usaria o atributo array (Robot) robots.

Ações #8

Atualizado por Luiz Renault Leite Rodriguesmais de 5 anos

Carla Cosenza escreveu:

Uma dúvida que tivemos é se vai existir a classe Eventos, ou se só serão métodos.

Pode existir sim.

Ações #9

Atualizado por Lucas Germanomais de 5 anos

Carla Cosenza escreveu:

Uma dúvida que tivemos é se vai existir a classe Eventos, ou se só serão métodos.

Como o major falou pode existir sim, daí teríamos algo do tipo para acessar algum evento: WorldState.Events.IdTouchingBall
Ou seja, eles estariam embutidos no World State.

Ações #10

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

Quais foram as vantagens que vcs viram de criar as classes "Offensive" e "Defensive" ao invés de fazer "Attacker", "Striker" e "Defender" descendentes diretos (classes filhas) de "Robot"?

Ações #11

Atualizado por Lucas Germanomais de 5 anos

Estou tentando fazer a parte do diagrama que contém Plays, Tactics e Skills. Precisando de algumas inspirações fui olhar o código da tigers e o que descobri foi:
OBS: O código deles pode ser baixado em: https://www.tigers-mannheim.de/index.php?id=65
Um artigo deles que ajuda a navegar pelo código: https://tigers-mannheim.de/download/papers/2011-AI-Structure_Koenig.pdf
Sobre o sistema de skills deles: https://tigers-mannheim.de/download/papers/2011-Studienarbeit_Bot_Skill-Teichmann_Graeser.pdf

Algumas classes deles são dividadas em:
ASkill: Classe abstrata de skill, todas as skills herdam dessa classe
ESkill: Enum contendo todas as skills, cada elementeo no enum tem referência para a classe skill que a executa
ISkill: Interface para acessar os atributos de Skill sem mudá-los

Aqui está o exemplo da ERole(Em Java, claro):

public enum ERole implements IInstanceableEnum {
// offensive roles

ATTACKER(new InstanceableClass(AttackerRole.class)),
SUPPORTIVE_ATTACKER(new InstanceableClass(SupportiveAttackerRole.class)),
KEEP_DIST_TO_BALL(new InstanceableClass(KeepDistToBallRole.class)),
OPPONENT_INTERCEPTION(new InstanceableClass(OpponentInterceptionRole.class))
...
}

APlay:
- List<ARole> roles;
- EPlay type;

ARole:
- ERole type;
- BotID botID;
- ISkill currentSkill;
- bool newSkill;
- IStateMachine<IState> stateMachine;

A classe BotID é utilizada para identificar os robôs de todos os times, ela extende AObjectID.

ASkill
- IState IDLE_State = new DefaultState();
- ESkill skillName;
- IStateMachine<Istate> stateMachine = new StateMachine<>(IDLE_STATE);
- ABot bot;
...

ABot
- String[] BOT_NAMES;
- BotID botID;
- EBotType type;
- TrajectoryWithTime<IVector3> curTrajectory = null;
- double kickerLevelMax = 200;

Depois de ter uma ideia como as classes base deles são feitas, fui olhar uma Play deles para ver como eles implementavam. A play que fui olhar se chamava OffensivePlay, a primeira coisa que é feita no construtor é passar o comportamento de cada robô para eles de acordo com sua personalidade:

public OffensivePlay() {
super(EPlay.OFFENSIVE);

strategyToRoleMap.put(EOffensiveStrategy.KICK, ERole.ATTACKER);
strategyToRoleMap.put(EOffensiveStrategy.SUPPORTIVE_ATTACKER, ERole.SUPPORTIVE_ATTACKER);
strategyToRoleMap.put(EOffensiveStrategy.STOP, ERole.KEEP_DIST_TO_BALL);
strategyToRoleMap.put(EOffensiveStrategy.DELAY, ERole.DELAYED_ATTACK);
strategyToRoleMap.put(EOffensiveStrategy.FREE_SKIRMISH, ERole.FREE_SKIRMISH);
strategyToRoleMap.put(EOffensiveStrategy.INTERCEPT, ERole.OPPONENT_INTERCEPTION);
strategyToRoleMap.put(EOffensiveStrategy.RECEIVE_PASS, ERole.PASS_RECEIVER);
}
...

O código deles é bem complexo atualmente e com certeza não devemos nos basear em tudo o que fazem, mas algumas ideias para a nossa implementação podem ser uteis.

Ações #12

Atualizado por Lucas Germanomais de 5 anos

Comecei a fazer o diagrama, mas ainda não está nem perto de pronto:
https://drive.google.com/file/d/1Q6apXIaL_1npCdG02SeitQa_EgS-FBGn/view?usp=sharing

Ações #13

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

  • Data prevista alterado de 01/05/2019 para 11/05/2019
Ações #14

Atualizado por Lucas Germanomais de 5 anos

Todos da intel fizeram um mutirão nesse fds que passou e passamos muito tempo discutindo a implementação e a estrutura que o código teria. Como o Labview tem uma ferramente que converte o diagrama de classes para código pronto, decidimos desenhar e escrever o diagrama de classes direto na ferramenta do labview. O diagrama ficou como mostra a imagem a seguir:

![](picture942-1.png)

Várias discussões foram feitas, como por exemplo: o goleiro deve ter uma play específica para ele, por questões de desempenho, seu comportamento deve ser mantido isolado do resto do time, para que ele possa reagir melhor e mais rápido aos comportamentos inimigos.
A vision e a COM foram mantidos como uma classe só cada, visto que não iremos orientar-los a objeto, continuarão do jeito que estão hoje em dia.

Temos agora que colocar os atributos das classes, colocar os métodos mais básicos e então começaremos a codar de verdade. Sabemos que coisas novas aparecerão a medida que formos codando, mas acredito que iremos implementando a medida que formos precisando.

Ações #15

Atualizado por Nicolas Oliveiramais de 5 anos

Atualizar o diagrama para a atual implemetação.

Ações #16

Atualizado por Gabriel Borges da Conceiçãoquase 5 anos

  • Situação alterado de Em andamento para Fechada
Ações

Exportar para Atom PDF