Projeto

Geral

Perfil

Ações

Atividade #1219

Aberta

Criar play para o simple pass

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

Situação:
Em andamento
Prioridade:
Normal
Atribuído para:
Início:
09/12/2019
Data prevista:
11/02/2020 (mais de 4 anos atrasado)
Tempo gasto:

Descrição

Durante a larc 2019, o passe normal (um robô chutar em direção a outro que espera, domina a bola e depois chuta) falhou muitas vezes por double kick, passe sendo feito na direção errada e etc.

Modificamos o passe na gambiarra para se tornar apenas um robô indo tocar a bola, sem chutar. Outro robô então ia até ela e chutava ao gol. Isso já foi desfeito e o passe normal é o que está no código.

Esta tarefa destina-se a criar uma nova play para o passe que fizemos durante a competição, para se tornar mais uma possibilidade de jogada.


Arquivos

offensiveplay.png (79,9 KB) offensiveplay.png Gustavo Atala Testoni, 17/02/2020 19:45 h
playbook.png (106 KB) playbook.png Gustavo Atala Testoni, 17/02/2020 19:45 h
criandoplay.png (58,4 KB) criandoplay.png Gustavo Atala Testoni, 17/02/2020 19:54 h
playcriada.png (20,3 KB) playcriada.png Gustavo Atala Testoni, 17/02/2020 19:54 h
newRoles.png (19,9 KB) newRoles.png Gustavo Atala Testoni, 29/02/2020 19:18 h
positiontorolltatic.png (34,8 KB) positiontorolltatic.png Gustavo Atala Testoni, 29/02/2020 19:18 h
waitrolltatic.png (40,3 KB) waitrolltatic.png Gustavo Atala Testoni, 29/02/2020 19:18 h
kicktoreceiver1.png (42,8 KB) kicktoreceiver1.png Gustavo Atala Testoni, 29/02/2020 19:21 h
skillkicktoreceiver.png (19,9 KB) skillkicktoreceiver.png Gustavo Atala Testoni, 29/02/2020 19:21 h
OrdemTacticsSimplePass.png (61,3 KB) OrdemTacticsSimplePass.png Gabriel Borges da Conceição, 02/03/2020 14:48 h
TFSimplePass.png (48,1 KB) TFSimplePass.png Gabriel Borges da Conceição, 02/03/2020 14:48 h
SimplePassError.png (104 KB) SimplePassError.png Gabriel Borges da Conceição, 02/03/2020 14:50 h
NumberOfRobotsSimplePass.png (17 KB) NumberOfRobotsSimplePass.png Gabriel Borges da Conceição, 02/03/2020 14:57 h
fc2.png (10,7 KB) fc2.png Gustavo Atala Testoni, 18/03/2020 04:52 h
firstcall.png (22,9 KB) firstcall.png Gustavo Atala Testoni, 18/03/2020 04:52 h
SimpleVsNormalPass.mp4 (44,5 MB) SimpleVsNormalPass.mp4 Gabriel Borges da Conceição, 24/03/2020 13:53 h
vetercentrogoladv.png (6,04 KB) vetercentrogoladv.png Gustavo Atala Testoni, 31/03/2020 18:40 h
followattacker.png (31,5 KB) followattacker.png Gustavo Atala Testoni, 31/03/2020 18:40 h
casoruim.mp4 (3,51 MB) casoruim.mp4 Gustavo Atala Testoni, 31/03/2020 18:42 h
followattacker2.png (31,5 KB) followattacker2.png Gustavo Atala Testoni, 01/04/2020 16:18 h
Ações #1

Atualizado por Gabriel Borges da Conceiçãoquase 5 anos

  • Atribuído para ajustado para Gustavo Atala Testoni
Ações #2

Atualizado por Gabriel Borges da Conceiçãoquase 5 anos

  • Data prevista ajustado para 28/02/2020

Atualizado por Gustavo Atala Testoniquase 5 anos

Primeiramente, criei a play. criandoplay.png

Depois, na classe SimplePlay, adicionei o numeric control NumberOfRobots, o Cluster, e as Roles. playcriada.png

Após isso, adicionei a classe no playbook e no enum OffensivePlay

playbook.png

offensiveplay.png

Ações #4

Atualizado por Gabriel Borges da Conceiçãoquase 5 anos

Muito bom! Continue postando após cada avanço.

Atualizado por Gustavo Atala Testonimais de 4 anos

Primeiramente, criei novas roles pra Play: a SimplePassRollRole e a SimplePassReceiverRole, cada uma com 3 tatics.

newRoles.png

As 2 tatics criadas foral a PositionToRollTatic e a WaitRollTatic, e as skills, PositionToRollSkill e PositionToReceiveRollSkill. O procedimento para a criação da classe é igual o da criação da play, mas as tatics e skills possuem VIs para se implementar a lógica delas.

A SimplePassRollRole, que faz com que o robô role a bola para o outro, tem as seguintes tatics:

1- PositionToRollTatic: essa tatic é responsável pelo posicionamento do robô e por encostar na bola. A skill PositionToRollSkill faz com que o robô se posicione na reta que liga o robô com a role SimplePassReceiverRole e a bola, orientado para a bola, a uma distância de 500mm desta. Quando ele atinge uma posição próxima a dessa, passa pra skill HaltSkill, esperando a movimentação do outro robô.

positiontorolltatic.png

2- KickToPassReceiverTatic: adaptei a tatic já existente para que o robô, caso a play seja a SimplePassPlay, ele procure o robô com role SimplePassReceiverRole, e ao invés de tocar, ele apenas encoste na bola.

kicktoreceiver1.png

skillkicktoreceiver.png

3- FollowAttackerTatic : usei a tatic já existente para que o robô acompanhe a movimentação do robô que vai chutar.

A SimplePassReceiverRole, que recebe a bola para o chute, tem as seguintes tatics:

1- WaitRollTatic: nessa tatic, o robô se posiciona na linha que liga a bola e o centro do gol adversário para esperar o outro robô rolar a bola para o chute. As skills são PositionToReceiveRollSkill e HaltSKill. O posicionamento dele é ficar a 700mm da bola, na linha citada anteriormente. Caso essa posição se de fora do campo, ele fica na linha lateral mais próxima.

waitrolltatic.png

2- HaltTatic: nessa tatic, o robô espera a bola ser rolada.

3- ShootTatic.

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

Conferi tudo que foi feito até agora e encontrei os seguintes erros:

1- Os casos True e False estão trocados.:
![](TFSimplePass.png)

2- Você não setou o NumberOfRobots dessa Play, que deve ser 2. Depois que colocar dois, tem que clicar em cima com o botão direito e Data Operations -> Make Current Value Default e salvar o .ctl da classe:
![](NumberOfRobotsSimplePass.png)

3- Apesar de não ser um erro, coloque a visualização das tactics na ordem certa na VI SimplePassReceiverRole pra não confundir:
![](OrdemTacticsSimplePass.png)

A ordem de visualização está 0-2-1, coloque na ordem 0-1-2.

4- O código está com erro:
![](SimplePassError.png)
A seta quebrada no canto superior esquerdo indica erro. Ao clicar nela, abre essa caixa de Error List, daí vai clicando em Show Error que o labview vai te encaminhando pra onde tem o erro.

Pelo o que eu vi, são erros de fios não informados e etc.

Avise aqui quando terminar de fazer essas correções.

Ações #8

Atualizado por Gustavo Atala Testonimais de 4 anos

Correções feitas.

Ações #9

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

Gustavo Atala Testoni escreveu:

Correções feitas.

Você ainda não deu commit e push para eu poder analisar.

Ações #10

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

Já conferi e os erros foram consertados.

Agora já parta para testar o que foi feito. Ainda não há condições de início e fim para essa Play, o que sera feito na tarefa http://redmine.roboime.com.br/issues/1257.

Então, para testar por agora faça o seguinte: Vai no chooseOffensivePlay e coloque para se a play escolhida for PreparePass, você passa a SimplePass.

Testar o mais rápido possível e postar os resultados.

Prazo foi alterado para a próxima quarta dia 11/03.

Ações #11

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

  • Data prevista alterado de 28/02/2020 para 11/02/2020

Atualizado por Gustavo Atala Testonimais de 4 anos

Após realizar os testes, quando colocava pra rodar o programa e executar a play, funcionava corretamente. Mas, se fosse tentar executar a play uma segunda vez (sem parar de rodar o programa) pulava-se a tatic KickToReceiver.

fc2.png

Esse Firstcall dava sempre false, e o state que passava era WaitPass (que logo passa Exit, encerrando a tatic), ao invés de passar o state inicial. Isso se dava porque o firstcall que ele estava recebendo, era o mesmo que a primeira tatic da play recebe, que confere se a play atual é diferente da anterior. Então, quando tentava testar uma segunda vez, a play atual era igual a anterior, dava false e passava o state errado.

Com isso, troquei o firstcall para verificar se a tatic atual é diferente da anterior. Caso seja diferente, da True, e inicia corretamente a tatic, dando o state inicial correto. E assim pode-se executá-la quantas vezes forem necessárias, sem parar de rodar o programa.

firstcall.png

Ações #13

Atualizado por Nicolas Oliveiramais de 4 anos

ok. E ai? Ta pronto?

Ações #14

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

Sim, como segue:

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 5183, container_id: 1219, container_type: "Issue", filename: "SimpleVsNormalPass.mp4", disk_filename: "200324135321_SimpleVsNormalPass.mp4", filesize: 46648562, content_type: "video/mp4", digest: "bfed7bd4445fe552e4437116ba92d35a", downloads: 0, author_id: 93, created_on: "2020-03-24 13:53:21.000000000 +0000", description: "", disk_directory: "2020/03">]:Array Did you mean? find_index)

O vídeo mostra o botão "SimplePass" de Parameters sendo ativado. Com isso, qunado o juiz dá Direct/Indirect para o nosso time, a jogada do SimplePass entra em ação.

Caso esse botão esteja desligado, temos a nossa joagada de passe normal.

A tarefa está a princípio finalizada, dependendo de testes em campo e sugestões de melhoria. Futuramente vamos pensar numa lógica para o código escolher sozinho entre uma jogada de Passe Normal e SimplePass (sugestões para isso também).

Ações #15

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

  • Situação alterado de Em andamento para Feedback
Ações #16

Atualizado por Nicolas Oliveiramais de 4 anos

Entendi, ok.

Sugiro trocar o nome da jogada, lendo simple pass n consigo entender que era essa a intenção.

Atualizado por Gustavo Atala Testonimais de 4 anos

A jogada tava funcionando bem, só que tiveram 2 erros que foram detectados:
O primeiro, o jogador que recebe a bola para o chute tinha que se posicionar na reta que liga a bola ao centro do gol inimigo, conferindo a VI, era apenas um fio que estava no lugar errado. Na hora de montar o vetor centro do gol inimigo, estavam entrado os paramâmetros field_length/2 e field_width/2 ao inves de field_length/2 e 0.

vetercentrogoladv.png

Além disso, depois de testar muitos casos, tinha uma situação bem específica no qual o robo com a role SimplePassRoll fica na frente da bola e atrapalha o chute.

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 5220, container_id: 1219, container_type: "Issue", filename: "followattacker.png", disk_filename: "200331184034_followattacker.png", filesize: 32300, content_type: "image/png", digest: "a4786e67e816d685a6069c0e472e2f0f", downloads: 0, author_id: 163, created_on: "2020-03-31 18:40:34.000000000 +0000", description: "", disk_directory: "2020/03">, #<Attachment id: 5219, container_id: 1219, container_type: "Issue", filename: "vetercentrogoladv.png", disk_filename: "200331184033_vetercentrogoladv.png", filesize: 6182, content_type: "image/png", digest: "83a8e0140565281fe5532a65437a219b", downloads: 0, author_id: 163, created_on: "2020-03-31 18:40:33.000000000 +0000", description: "", disk_directory: "2020/03">, #<Attachment id: 5221, container_id: 1219, container_type: "Issue", filename: "casoruim.mp4", disk_filename: "200331184203_casoruim.mp4", filesize: 3675613, content_type: "video/mp4", digest: "e2e2d13b78bc37596790671edf45ef16", downloads: 0, author_id: 163, created_on: "2020-03-31 18:42:03.000000000 +0000", description: "", disk_directory: "2020/03">]:Array Did you mean? find_index)

Verificando no FollowAttacker, não tinha sido adicionado a role SimplePassRoll para ser verificada no for.

followattacker.png

Ações #18

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

A busca da posição feita no follow attacker tem que ser pela role SimplePassRollReceiver, pois é ele quem deve ser seguido.

Ações #19

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

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

Exportar para Atom PDF