Project

General

Profile

Atividade #1219

Criar play para o simple pass

Added by Gabriel Borges da Conceição over 1 year ago. Updated about 1 year ago.

Status:
Em andamento
Priority:
Normal
Target version:
-
Start date:
12/09/2019
Due date:
02/11/2020
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.

offensiveplay.png (79.9 KB) Preview Gustavo Atala Testoni, 02/17/2020 07:45 PM

playbook.png (106 KB) Preview Gustavo Atala Testoni, 02/17/2020 07:45 PM

criandoplay.png (58.4 KB) Preview Gustavo Atala Testoni, 02/17/2020 07:54 PM

playcriada.png (20.3 KB) Preview Gustavo Atala Testoni, 02/17/2020 07:54 PM

newRoles.png (19.9 KB) Preview Gustavo Atala Testoni, 02/29/2020 07:18 PM

positiontorolltatic.png (34.8 KB) Preview Gustavo Atala Testoni, 02/29/2020 07:18 PM

waitrolltatic.png (40.3 KB) Preview Gustavo Atala Testoni, 02/29/2020 07:18 PM

kicktoreceiver1.png (42.8 KB) Preview Gustavo Atala Testoni, 02/29/2020 07:21 PM

skillkicktoreceiver.png (19.9 KB) Preview Gustavo Atala Testoni, 02/29/2020 07:21 PM

OrdemTacticsSimplePass.png (61.3 KB) Preview Gabriel Borges da Conceição, 03/02/2020 02:48 PM

TFSimplePass.png (48.1 KB) Preview Gabriel Borges da Conceição, 03/02/2020 02:48 PM

SimplePassError.png (104 KB) Preview Gabriel Borges da Conceição, 03/02/2020 02:50 PM

NumberOfRobotsSimplePass.png (17 KB) Preview Gabriel Borges da Conceição, 03/02/2020 02:57 PM

fc2.png (10.7 KB) Preview Gustavo Atala Testoni, 03/18/2020 04:52 AM

firstcall.png (22.9 KB) Preview Gustavo Atala Testoni, 03/18/2020 04:52 AM

SimpleVsNormalPass.mp4 (44.5 MB) Gabriel Borges da Conceição, 03/24/2020 01:53 PM

vetercentrogoladv.png (6.04 KB) Preview Gustavo Atala Testoni, 03/31/2020 06:40 PM

followattacker.png (31.5 KB) Preview Gustavo Atala Testoni, 03/31/2020 06:40 PM

casoruim.mp4 (3.51 MB) Gustavo Atala Testoni, 03/31/2020 06:42 PM

followattacker2.png (31.5 KB) Preview Gustavo Atala Testoni, 04/01/2020 04:18 PM

Offensiveplay Playbook Criandoplay Playcriada Newroles Positiontorolltatic Waitrolltatic Kicktoreceiver1 Skillkicktoreceiver Ordemtacticssimplepass Tfsimplepass Simplepasserror Numberofrobotssimplepass Fc2 Firstcall Vetercentrogoladv Followattacker Followattacker2

History

#1 Updated by Gabriel Borges da Conceição about 1 year ago

  • Assignee set to Gustavo Atala Testoni

#2 Updated by Gabriel Borges da Conceição about 1 year ago

  • Due date set to 02/28/2020

#3 Updated by Gustavo Atala Testoni about 1 year 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

#4 Updated by Gabriel Borges da Conceição about 1 year ago

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

#5 Updated by Gustavo Atala Testoni about 1 year 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.

#6 Updated by Gabriel Borges da Conceição about 1 year ago

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

1- Os casos True e False estão trocados.:

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:

3- Apesar de não ser um erro, coloque a visualização das tactics na ordem certa na VI SimplePassReceiverRole pra não confundir:

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

4- O código está com erro:

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.

#8 Updated by Gustavo Atala Testoni about 1 year ago

Correções feitas.

#9 Updated by Gabriel Borges da Conceição about 1 year ago

Gustavo Atala Testoni escreveu:

Correções feitas.

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

#10 Updated by Gabriel Borges da Conceição about 1 year 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.

#11 Updated by Gabriel Borges da Conceição about 1 year ago

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

#12 Updated by Gustavo Atala Testoni about 1 year 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

#13 Updated by Nicolas Oliveira about 1 year ago

ok. E ai? Ta pronto?

#14 Updated by Gabriel Borges da Conceição about 1 year ago

Sim, como segue:

Loading the player ...

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

#15 Updated by Gabriel Borges da Conceição about 1 year ago

  • Status changed from Em andamento to Feedback

#16 Updated by Nicolas Oliveira about 1 year ago

Entendi, ok.

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

#17 Updated by Gustavo Atala Testoni about 1 year 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.

Loading the player ...

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

followattacker.png

#18 Updated by Gabriel Borges da Conceição about 1 year ago

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

#19 Updated by Gabriel Borges da Conceição about 1 year ago

  • Status changed from Feedback to Em andamento

Also available in: Atom PDF

Go to top
Add picture from clipboard (Maximum size: 500 MB)