Atividade #1147
FechadaMeta #1145: Implementar completamente o passe.
Criar play PassToStriker
Descrição
Esta tarefa destina-se a implementar a play PassToStrier com seus métodos de conferir início e fim, roles, tactics, skills e método de calcular fator de passe do respectivo robô (Score da Play).
Arquivos
Atualizado por Gabriel Borges da Conceição há quase 6 anos
O Leonardo é o responsável por te orientar nesta tarefa. Para criação de plays e etc, veja: http://redmine.roboime.com.br/projects/inteligencia/wiki/Intelig%C3%AAncia
Atualizado por Gabriel Borges da Conceição há quase 6 anos
- Tarefa mãe ajustado para #1145
Atualizado por Gabriel Borges da Conceição há quase 6 anos
Atualize seu andamento na tarefa!! Já começou? Qual branch? O que já fez? Quais as dúvidas?
Atualizado por Felipe Welington há quase 6 anos
- Arquivo Antes.png Antes.png adicionado
- Arquivo Depois.png Depois.png adicionado
Atualizado por Felipe Welington há quase 6 anos
Criei a PassObserverRole ,bem como a PassObserverTactic e PassObserverSkill sendo que coloquei inicialmente para o robô se direcionar para a posição (0,0) para depois fazer a lógica dela e decidir a condição de termino na maquina de estados.
Atualizado por Felipe Welington há quase 6 anos
Mudei a Role PassReceiverRole
Agora sua primeira tactic é WaitPassTactic e em seguida ShootTactic
Atualizado por Felipe Welington há quase 6 anos
Mudei a Role PassKickerRole
Agora sua primeira tactic é KickToPassReceiverTactic e em seguida FollowAtackerTactic
Atualizado por Felipe Welington há quase 6 anos
Criei a play PassToStriker com as roles
PassKickerRole
PassReceiverRole
PassObserverRole
Atualizado por Gabriel Borges da Conceição há quase 6 anos
Conferi o que você fez. Está bastante na ideia, tenho apenas alguns detalhes importantes a comentar.
A primeira coisa é:
O Playbook tem alguns atributos que são clusters que contêm as Plays da defesa, ataque e goleiro. Porém, esses clusters não são typedef, o que provoca o seguinte problema: Quando você coloca uma nova classe (Play) num desses clusters do Playbook, os métodos de Read and Write ficam inválidos (erro que se percebe no uso dos property nodes decorrentes desses métodos).
A solução seria deletar (do projeto e da pasta) as VIs que são métodos Read and Write e criar novamente cada vez que uma nova Play fosse adicionada, para ficar acessível devido a mudança. Mas isso seria muito ruim pois vamos colocar novas Plays no Playbook várias vezes ao longo do projeto.
Então a solução é fazer com que esses atributos de Playbook (os clusters "offensive_plays", "defensive_plays" e "keeper_plays") sejam typedef, o que fará com que os métodos de read and write continuem válidos quando adicionar uma nova play (já testei isso).
Mas os métodos Read and Write que existem agora foram gerados a partir desses clusters não sendo typedef, então transforme-os em typedef, apague (do projeto e da pasta) os métodos Read and Write desses 3 clusters e os gere de novo apenas mais essa vez e continuaram válidos posteriormente.
Atualizado por Gabriel Borges da Conceição há quase 6 anos
- Arquivo VianaPegarEnumCerto.png VianaPegarEnumCerto.png adicionado
Continuando nos detalhes percebidos:

Repare que o sinal de igualdade está com as pontas vermelhas. Isso está ocorrendo porque suas entradas são enums diferentes. Apesar de ambos os enums terem o case "exit", eles não são iguais. Provavelmente você pegou o enum de outro lugar.
Para resolver isso, basta criar um constant enum clicando com o botão direito no fio que sai do "States" do property node, "create" -> "constant"; e conectar o enum gerado à igualdade.
Atualizado por Gabriel Borges da Conceição há quase 6 anos
- Arquivo VianaVIForaDoTemplate.png VianaVIForaDoTemplate.png adicionado
- Arquivo TemplatePadrãoRole.png TemplatePadrãoRole.png adicionado
PassObserverRole.vi está fora do Template:

Você deve copiar o template de PassKickerRole.vi, que é o mais atual para as VI de execução de role:

De fato, a VI PassObserverRole não precisa (agora) de tudo que tem no template da VI PassKickerRole, mas devemos fazer igual para padronizar e para deixar preparado para necessidades/implementações futuras futuras.
Atualizado por Gabriel Borges da Conceição há quase 6 anos
- Arquivo VianaVIForaDoTemplate2.png VianaVIForaDoTemplate2.png adicionado
- Arquivo TemplateCertoTactic.png TemplateCertoTactic.png adicionado
A PassObserverTactic.vi está fora do template:

Você deve copiar o template da VI WaitPassTactic, que é o template correto para tactics:

Atualizado por Gabriel Borges da Conceição há quase 6 anos
Seguir os templates é fundamental para a facilitar entendimento e desenvolvimento do código.
Quando for criar uma VI nova de Role o Tactic, você deve sempre copiar do template base e apenas trocar a subVI que vem dentro do template (VI de tactic e skill, respectivamente) e adicionar o que mais for necessário à sua particularidade, de forma simplificada e organizada.
Atualizado por Gabriel Borges da Conceição há quase 6 anos
- Arquivo VianaFaltouInformarFirstCall.png VianaFaltouInformarFirstCall.png adicionado
Faltou levar o fio que informa primeira ocorrência da Play (first call) para a VI da role na foto abaixo:

Atualizado por Gabriel Borges da Conceição há quase 6 anos
- Arquivo VianaDeixarMaisOrganizado.png VianaDeixarMaisOrganizado.png adicionado
A última recomendação é simples mas é importante para se acostumar a fazer o mínimo de lógica possível:

Na VI da foto existem 2 inversores desnecessários. O inversor circulado de preto pode ser retirado, basta que você faça o caso False ser Ture e vice-versa, alterando com as opções do botão direito clicando no case onde está circulado de preto.
O inversor circulado de azul pode ser removido, basta trocar o sinal de maior por um sinal de menor.
Atualizado por Gabriel Borges da Conceição há quase 6 anos
Felipe Welington escreveu:
Criei a PassObserverRole ,bem como a PassObserverTactic e PassObserverSkill sendo que coloquei inicialmente para o robô se direcionar para a posição (0,0) para depois fazer a lógica dela e decidir a condição de termino na maquina de estados.
Corretamente feito, precisando apenas atentar para os templates das VIs como está também descrito por mim nos comentários dessa tarefa.
Atualizado por Gabriel Borges da Conceição há quase 6 anos
Felipe Welington escreveu:
Mudei a Role PassKickerRole
Agora sua primeira tactic é KickToPassReceiverTactic e em seguida FollowAtackerTactic
Corretamente feito!
Atualizado por Gabriel Borges da Conceição há quase 6 anos
Felipe Welington escreveu:
Criei a play PassToStriker com as roles
PassKickerRole
PassReceiverRole
PassObserverRole
Corretamente feito!
Atualizado por Gabriel Borges da Conceição há quase 6 anos
Felipe Welington escreveu:
Arrumei a skill WaitPassSkill
Corretamente feito, basta apenas atentar para o que eu comentei acima sobre os inversores lógicos.
Atualizado por Gabriel Borges da Conceição há quase 6 anos
Atualizado por Felipe Welington há quase 6 anos
Corrigi os enum que estavam diferentes gerando a utilização de coercion dot.
Coloquei type def no play book para não ter que ficar apagando e refazendo a vi de data member acess.
PassObserverTactic coloquei no template
PassObserverRole coloquei no template
Coloquei uma condição de termino provisória na PassObserverTactic enquanto o codigo da PassObserverSkill n esta formulado.
Corrigi a lógica na WaitPassSkill.
Atualizado por Gabriel Borges da Conceição há quase 6 anos
- Arquivo EstáOAntigo.png EstáOAntigo.png adicionado
- Arquivo FezNoError.png FezNoError.png adicionado
Ainda falta consertar alguns detalhes:
Você colocou a PassObserverTactic no template correto, mas colocou isso na parte Error:

Isso deveria estar na parte NoError:

E a parte Error deve estar vazia, apenas passando os fios.
Atualizado por Gabriel Borges da Conceição há quase 6 anos
Outra coisa é que na VI da PassObserverRole, deveria ter apenas a PassObserverTactic, mas você também colocou a KickToPassReceiver, isso não está correto.
Atualizado por Gabriel Borges da Conceição há quase 6 anos
- Arquivo NãoDeviaExistirEssaRole.png NãoDeviaExistirEssaRole.png adicionado
Conferi e realmente está corrigido.
Uma coisa que percebi agora foi que existe uma Role chamada PassTo2ndStriker:

Mas essa role não existe e de fato não está sendo usada em lugar nenhum. Favor deletar essa pasta
Atualizado por Gabriel Borges da Conceição há mais de 5 anos
- Situação alterado de Em andamento para Fechada