Atividade #1219
AbertaCriar play para o simple pass
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
Atualizado por Gabriel Borges da Conceição há quase 5 anos
- Atribuído para ajustado para Gustavo Atala Testoni
Atualizado por Gabriel Borges da Conceição há quase 5 anos
- Data prevista ajustado para 28/02/2020
Atualizado por Gustavo Atala Testoni há quase 5 anos
- Arquivo offensiveplay.png offensiveplay.png adicionado
- Arquivo playbook.png playbook.png adicionado
- Arquivo criandoplay.png criandoplay.png adicionado
- Arquivo playcriada.png playcriada.png adicionado
Atualizado por Gabriel Borges da Conceição há quase 5 anos
Muito bom! Continue postando após cada avanço.
Atualizado por Gustavo Atala Testoni há mais de 4 anos
- Arquivo newRoles.png newRoles.png adicionado
- Arquivo positiontorolltatic.png positiontorolltatic.png adicionado
- Arquivo waitrolltatic.png waitrolltatic.png adicionado
- Arquivo kicktoreceiver1.png kicktoreceiver1.png adicionado
- Arquivo skillkicktoreceiver.png skillkicktoreceiver.png adicionado
Primeiramente, criei novas roles pra Play: a SimplePassRollRole e a SimplePassReceiverRole, cada uma com 3 tatics.
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ô.
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.
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.
2- HaltTatic: nessa tatic, o robô espera a bola ser rolada.
3- ShootTatic.
Atualizado por Gabriel Borges da Conceição há mais de 4 anos
- Arquivo OrdemTacticsSimplePass.png OrdemTacticsSimplePass.png adicionado
- Arquivo TFSimplePass.png TFSimplePass.png adicionado
- Arquivo SimplePassError.png SimplePassError.png adicionado
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.
Atualizado por Gabriel Borges da Conceição há mais de 4 anos
- Arquivo NumberOfRobotsSimplePass.png NumberOfRobotsSimplePass.png adicionado
Atualizado por Gabriel Borges da Conceição há mais de 4 anos
Gustavo Atala Testoni escreveu:
Correções feitas.
Você ainda não deu commit e push para eu poder analisar.
Atualizado por Gabriel Borges da Conceição há mais 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.
Atualizado por Gabriel Borges da Conceição há mais de 4 anos
- Data prevista alterado de 28/02/2020 para 11/02/2020
Atualizado por Gustavo Atala Testoni há mais de 4 anos
- Arquivo fc2.png fc2.png adicionado
- Arquivo firstcall.png firstcall.png adicionado
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.
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.
Atualizado por Gabriel Borges da Conceição há mais de 4 anos
- Arquivo SimpleVsNormalPass.mp4 SimpleVsNormalPass.mp4 adicionado
Sim, como segue:
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).
Atualizado por Gabriel Borges da Conceição há mais de 4 anos
- Situação alterado de Em andamento para Feedback
Atualizado por Nicolas Oliveira há mais 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 Testoni há mais de 4 anos
- Arquivo followattacker.png followattacker.png adicionado
- Arquivo vetercentrogoladv.png vetercentrogoladv.png adicionado
- Arquivo casoruim.mp4 casoruim.mp4 adicionado
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.
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.
Verificando no FollowAttacker, não tinha sido adicionado a role SimplePassRoll para ser verificada no for.
Atualizado por Gabriel Borges da Conceição há mais de 4 anos
A busca da posição feita no follow attacker tem que ser pela role SimplePassRollReceiver, pois é ele quem deve ser seguido.
Atualizado por Gabriel Borges da Conceição há mais de 4 anos
- Situação alterado de Feedback para Em andamento
Atualizado por Gustavo Atala Testoni há mais de 4 anos
- Arquivo followattacker2.png followattacker2.png adicionado