Project

General

Profile

Actions

Atividade #1219

open

Criar play para o simple pass

Added by Gabriel Borges da Conceição over 4 years ago. Updated over 4 years ago.

Status:
Em andamento
Priority:
Normal
Start date:
12/09/2019
Due date:
02/11/2020 (over 4 years late)
Spent time:

Description

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.


Files

offensiveplay.png (79.9 KB) offensiveplay.png Gustavo Atala Testoni, 02/17/2020 07:45 PM
playbook.png (106 KB) playbook.png Gustavo Atala Testoni, 02/17/2020 07:45 PM
criandoplay.png (58.4 KB) criandoplay.png Gustavo Atala Testoni, 02/17/2020 07:54 PM
playcriada.png (20.3 KB) playcriada.png Gustavo Atala Testoni, 02/17/2020 07:54 PM
newRoles.png (19.9 KB) newRoles.png Gustavo Atala Testoni, 02/29/2020 07:18 PM
positiontorolltatic.png (34.8 KB) positiontorolltatic.png Gustavo Atala Testoni, 02/29/2020 07:18 PM
waitrolltatic.png (40.3 KB) waitrolltatic.png Gustavo Atala Testoni, 02/29/2020 07:18 PM
kicktoreceiver1.png (42.8 KB) kicktoreceiver1.png Gustavo Atala Testoni, 02/29/2020 07:21 PM
skillkicktoreceiver.png (19.9 KB) skillkicktoreceiver.png Gustavo Atala Testoni, 02/29/2020 07:21 PM
OrdemTacticsSimplePass.png (61.3 KB) OrdemTacticsSimplePass.png Gabriel Borges da Conceição, 03/02/2020 02:48 PM
TFSimplePass.png (48.1 KB) TFSimplePass.png Gabriel Borges da Conceição, 03/02/2020 02:48 PM
SimplePassError.png (104 KB) SimplePassError.png Gabriel Borges da Conceição, 03/02/2020 02:50 PM
NumberOfRobotsSimplePass.png (17 KB) NumberOfRobotsSimplePass.png Gabriel Borges da Conceição, 03/02/2020 02:57 PM
fc2.png (10.7 KB) fc2.png Gustavo Atala Testoni, 03/18/2020 04:52 AM
firstcall.png (22.9 KB) firstcall.png Gustavo Atala Testoni, 03/18/2020 04:52 AM
SimpleVsNormalPass.mp4 (44.5 MB) SimpleVsNormalPass.mp4 Gabriel Borges da Conceição, 03/24/2020 01:53 PM
vetercentrogoladv.png (6.04 KB) vetercentrogoladv.png Gustavo Atala Testoni, 03/31/2020 06:40 PM
followattacker.png (31.5 KB) followattacker.png Gustavo Atala Testoni, 03/31/2020 06:40 PM
casoruim.mp4 (3.51 MB) casoruim.mp4 Gustavo Atala Testoni, 03/31/2020 06:42 PM
followattacker2.png (31.5 KB) followattacker2.png Gustavo Atala Testoni, 04/01/2020 04:18 PM
Actions #1

Updated by Gabriel Borges da Conceição over 4 years ago

  • Assignee set to Gustavo Atala Testoni
Actions #2

Updated by Gabriel Borges da Conceição over 4 years ago

  • Due date set to 02/28/2020

Updated by Gustavo Atala Testoni over 4 years ago

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

Actions #4

Updated by Gabriel Borges da Conceição over 4 years ago

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

Updated by Gustavo Atala Testoni over 4 years ago

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.

Updated by Gabriel Borges da Conceição over 4 years ago

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.

Actions #8

Updated by Gustavo Atala Testoni over 4 years ago

Correções feitas.

Actions #9

Updated by Gabriel Borges da Conceição over 4 years ago

Gustavo Atala Testoni escreveu:

Correções feitas.

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

Actions #10

Updated by Gabriel Borges da Conceição over 4 years ago

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.

Actions #11

Updated by Gabriel Borges da Conceição over 4 years ago

  • Due date changed from 02/28/2020 to 02/11/2020

Updated by Gustavo Atala Testoni over 4 years ago

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

Actions #13

Updated by Nicolas Oliveira over 4 years ago

ok. E ai? Ta pronto?

Actions #14

Updated by Gabriel Borges da Conceição over 4 years ago

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).

Actions #15

Updated by Gabriel Borges da Conceição over 4 years ago

  • Status changed from Em andamento to Feedback
Actions #16

Updated by Nicolas Oliveira over 4 years ago

Entendi, ok.

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

Updated by Gustavo Atala Testoni over 4 years ago

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

Actions #18

Updated by Gabriel Borges da Conceição over 4 years ago

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

Actions #19

Updated by Gabriel Borges da Conceição over 4 years ago

  • Status changed from Feedback to Em andamento
Actions

Also available in: Atom PDF