Atividade #578
FechadaAtualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo goleirofora.png goleirofora.png adicionado
- Arquivo 5maisproximo.png 5maisproximo.png adicionado
- Arquivo 5maisproximo2.png 5maisproximo2.png adicionado
- Arquivo dpsdaalteracao.png dpsdaalteracao.png adicionado
- Arquivo 4maispoximo.png 4maispoximo.png adicionado
- Arquivo 4maispoximo2.png 4maispoximo2.png adicionado
- Arquivo foradogol.png foradogol.png adicionado
- Arquivo demonstracaoposicionamentogoleiro.mp4 demonstracaoposicionamentogoleiro.mp4 adicionado
- Situação alterado de Em andamento para Feedback
A estratégia montada foi similar àquela desenvolvida durante o processo seletivo(com algumas melhorias), uma vez que ao término desse período o goleiro apresentou bom desempenho na competição de gol-a-gol disputada.
O goleiro se baseia, principalmente, em:
Passo 1- Descobrir o robô inimigo mais próximo da bola, anotar seu id.
Passo 2- Se a distância desse robô à bola for menor que 200mm(90mm de raio + 110mm até o centro da bola), consideramos que tal adversário irá se preparar para chute.
Então, nesse caso calcula-se a reta que o centro do inimigo faz com o centro da bola e mandamos o goleiro se posicionar em y(/2 + 100) --> y da reta para a coordenada (x do gol somada a 100), evitando que o goleiro bata nas balizas. Detalhe é que se essa reta termina fora do gol, mandamos o goleiro se posicionar ao meio do gol.
Passo 3- Se a distância desse robô à bola for maior que 200mm, consideramos que a bola já foi chutada ou que nenhum robô adversário está se preparando para o chute. Neste caso, calculamos a reta definida pela trajetória da bola e mandamos o goleiro se posicionar em y(-(fied length)/2 + 100). Aqui o goleiro também se posiciona ao meio do gol se essa reta termina fora dele.
Usar os parâmetros da bola para cálculo da reta é feito, pois após o chute a direção que a bola vai pode não ser exatamente igual à direção prevista (direção do chute: inimigo -- bola) e também pode sofrer desvios nos robôs ao longo do campo, então é necessário que se permita ao goleiro possibilidade de reposicionamento. E a posição do robô adversário pode não fazer mais sentido com a direção do chute após ele ter sido realizado.
Para o caso de Vxbola = 0, o robô se comporta como no passo 2, mas não levando em consideração a distância do robô adversário até a bola.
Passo 4- Se a bola está parada dentro da área do goleiro, ele vai em direção a ela e a chuta em direção ao meio do campo.
Observações:
Obs 1-- Decidimos não utilizar a orientação do robô inimigo para posicionar o goleiro pois:
O adversário pode ir em direção à bola com orientação aleatória e se direcionar corretamente apenas pouco tempo antes do chute. Dessa forma, nosso goleiro só teria seu posicionamento corretamente estabelecido praticamente no momento do chute, o que prejudicaria sua eficiência.
Porém, utilizando a reta do centro até a bola, durante a aproximação do robô, nosso goleiro já vai se posicionando as proximidades da posição do chute. E no momento do chute, idealmente, a orientação do robô é paralela à direção de reta (centro robô)—(bola), o que nesse momento é igual a utilizar a orientação.
Obs 2-- No item 3, utilizamos as velocidades da bola(Vy e Vx) para calcular sua trajetória(Vy/Vx).
Sabemos que esses parâmetros não são tão precisos (devido ao filtro de Kalman utilizado) e a reação do goleiro quando pautada neles é mais lenta. Porém, espera-se que isso não afete significativamente a eficiência do goleiro, uma vez que esse não é o principal fator de posicionamento do goleiro. Só utilizamos tais parâmetros quando a bola já foi chutada (lembrando que antes do chute, o goleiro já se posiciona na provável direção do tiro), ou seja, servem apenas de fatores de correção e possível deslocamento (na maioria das vezes pequeno) do goleiro.
Obs 4-- A coordenada y do goleiro diz o ponto ao qual deve ir seu centro. Por 2 ou 3, dependendo das posições do adversário e da bola, acontece de o centro do robô ficar muito próximo a uma das balizas e ele ficar com boa parte de seu "corpo" fora do gol, ou seja, boa parte do robô não estaria defendendo o gol.
Então, foi ajustado para que, no máximo, 20mm do robô fique para fora do gol.
Tal situação está exemplificada abaixo:
POSICIONAMENTO DO ROBÔ QUANDO Y DE SEU CENTRO É MUITO PRÓXIMO A UMA DAS BALIZAS:
![](goleirofora.png)
POSICIONAMENTO DO ROBÔ QUANDO Y DE SEU CENTRO É MUITO PRÓXIMO A UMA DAS BALIZAS:
![](dpsdaalteracao.png)
Vamos agora demonstrar o posicionamento do goleiro em diversas situações:
ROBÔ ADVERSÁRIO DE ID 5 É O MAIS PRÓXIMO À BOLA:
![](5maisproximo.png)
ROBÔ ADVERSÁRIO DE ID 5 É O MAIS PRÓXIMO À BOLA:
![](5maisproximo2.png)
ROBÔ ADVERSÁRIO DE ID 4 É O MAIS PRÓXIMO À BOLA:
![](4maispoximo.png)
![](4maispoximo2.png)
RETA (ROBÔ MAIS PRÓXIMO)---(BOLA) TERMINA FORA DO GOL:
![](foradogol.png)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo 4maispoximo.png 4maispoximo.png adicionado
- Arquivo 4maispoximo2.png 4maispoximo2.png adicionado
- Arquivo 5maisproximo.png 5maisproximo.png adicionado
- Arquivo 5maisproximo2.png 5maisproximo2.png adicionado
- Arquivo dpsdaalteracao.png dpsdaalteracao.png adicionado
- Arquivo demonstracaoposicionamentogoleiro.mp4 adicionado
- Arquivo foradogol.png foradogol.png adicionado
- Arquivo goleirofora.png goleirofora.png adicionado
- Atribuído para ajustado para Gabriel Borges da Conceição
Atualizado por Lucas Germano há mais de 6 anos
Tenho algumas observações a fazer:
1 - Em muitos casos o jogador inimigo se aproximará da bola, com a linha robô_inimigo-bola apontando para fora do gol, para chutar rapidamente assim que se aproxima da bola. Não geraria um problema com sua abordagem?
2 - A velocidade da bola dificilmente será zero exatamente, então coloca a partir de uma velocidade bem pequena ele chutar a bola, até pq supõe que a bola está indo bem devagar pra dentro do gol é melhor que o goleiro vá e chute logo a bola.
3 - Tem que fazer um método pra testar o goleiro, você pode tanto tentar fazer algo para colocar a bola em um certo ponto do campo com uma certa velocidade ou jogar com 2 computadores e ir administrando os chutes da maneira que quiser.
Mas para ver a efetividade mesmo, só os testes vão dizer..
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Lucas Germano escreveu:
Tenho algumas observações a fazer:
1 - Em muitos casos o jogador inimigo se aproximará da bola, com a linha robô_inimigo-bola apontando para fora do gol, para chutar rapidamente assim que se aproxima da bola. Não geraria um problema com sua abordagem?
Entendi, o que dá pra fazer é mandar o robô ir para a extremidade do gol no lado para o qual a reta a aponta. Eu coloquei ele no meio porque fica possível de chegar a qualquer parte do gol num tempo hábil.
2 - A velocidade da bola dificilmente será zero exatamente, então coloca a partir de uma velocidade bem pequena ele chutar a bola, até pq supõe que a bola está indo bem devagar pra dentro do gol é melhor que o goleiro vá e chute logo a bola.
Vou colocar para chutar quando para Vel_bola <= 20 então.
3 - Tem que fazer um método pra testar o goleiro, você pode tanto tentar fazer algo para colocar a bola em um certo ponto do campo com uma certa velocidade ou jogar com 2 computadores e ir administrando os chutes da maneira que quiser.Mas para ver a efetividade mesmo, só os testes vão dizer..
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Gabriel Borges da Conceição escreveu:
Lucas Germano escreveu:
Tenho algumas observações a fazer:
1 - Em muitos casos o jogador inimigo se aproximará da bola, com a linha robô_inimigo-bola apontando para fora do gol, para chutar rapidamente assim que se aproxima da bola. Não geraria um problema com sua abordagem?
Respota: Entendi, o que dá pra fazer é mandar o robô ir para a extremidade do gol no lado para o qual a reta a aponta. Eu coloquei ele no meio porque fica possível de chegar a qualquer parte do gol num tempo hábil.
2 - A velocidade da bola dificilmente será zero exatamente, então coloca a partir de uma velocidade bem pequena ele chutar a bola, até pq supõe que a bola está indo bem devagar pra dentro do gol é melhor que o goleiro vá e chute logo a bola.
Resposta: Vou colocar para chutar quando para Vel_bola <= 20 então.
3 - Tem que fazer um método pra testar o goleiro, você pode tanto tentar fazer algo para colocar a bola em um certo ponto do campo com uma certa velocidade ou jogar com 2 computadores e ir administrando os chutes da maneira que quiser.
Resposta: Até agora só testei posicionamento mesmo. Vou tentar testar com 2 computadores pelo GrSim.
Mas para ver a efetividade mesmo, só os testes vão dizer..
Atualizado por Luciano Barreira há mais de 6 anos
- Tipo alterado de Meta para Atividade
Sugiro que antes de desenvolverem as novas estratégias, desenvolvermos as rotinas automatizadas de teste do goleiro utilizando o BallReplacement e RobotReplacement, gerando uma métrica como taxa de interceptação/ defesa do goleiro em situações diversas (posicionamentos aleatórios). Senão como saberemos se o goleiro melhorou?
Atualizado por Nicolas Oliveira há mais de 6 anos
Gabriel Borges da Conceição escreveu:
Respota: Entendi, o que dá pra fazer é mandar o robô ir para a extremidade do gol no lado para o qual a reta a aponta. Eu coloquei ele no meio porque fica possível de chegar a qualquer parte do gol num tempo hábil.
Acho válido implementar dos dois jeitos, podendo ser alternado o modo por um control. Ai com os testes vemos qual o mais efetivo.
Atualizado por Nicolas Oliveira há mais de 6 anos
Isso já está implementado? Se sim, em qual branch? Já subiu para o github?
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Nicolas Oliveira escreveu:
Isso já está implementado? Se sim, em qual branch? Já subiu para o github?
Ainda não. Preciso de permissão pra criar uma branch.
Por enquanto está só no meu computador mesmo.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Nicolas Oliveira escreveu:
Gabriel Borges da Conceição escreveu:
Respota: Entendi, o que dá pra fazer é mandar o robô ir para a extremidade do gol no lado para o qual a reta a aponta. Eu coloquei ele no meio porque fica possível de chegar a qualquer parte do gol num tempo hábil.
Acho válido implementar dos dois jeitos, podendo ser alternado o modo por um control. Ai com os testes vemos qual o mais efetivo.
Tá ok, vou fazer isso!
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo excluído (
demonstracaoposicionamentogoleiro.mp4)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Video1.wmv adicionado
- Arquivo Video2.wmv adicionado
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo excluído (
Video1.wmv)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo excluído (
Video2.wmv)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Video1.mp4 Video1.mp4 adicionado
- Arquivo Video2.mp4 Video2.mp4 adicionado
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Algumas implementações foram feitas:
Implementação 1: Para os casos em que os passos 2 ou 3 geram ygoleiro para fora do gol, não ficou decidido se era melhor o robô ficar ao meio do gol ou na extremidade do gol correspondente.
Então, foi implementado um booleano de tal forma que, ao ser acionado, ele faz com que o goleiro fique ao meio do gol, e se desativado, o goleiro fica na extremidade correspondente.
Com auxílio do BallReplecement, definiremos qual das ações é melhor para o goleiro.
Implementação 2: Na VI SSL Vision Log Player há um botão chamado "atacando ao contrário?" que faz com que os atacantes do nosso time ataquem contra o nosso próprio gol.
Então, foi implementado que ao acionar esse botão, na VI em que ele se encontra, o goleiro admite que os atacantes do nosso time são, nesse momento, adversários. Isso possibilita testar, no grSim, a atuação do goleiro em situações de jogo com bola rolando com apenas um computador, de forma a identificar falhas e propor melhorias.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Agora, com a possibilidade de testar o goleiro devido à implementação 2, obtivemos os seguintes vídeos:
Vídeos da atuação do goleiro no grSim e na SSL Vision Log Player (Gravado em 22/04/2018):
OBS: Os jogadores e a bola ficaram mais lentos que o normal devido a estarem abertos grSim, SSL Vision Log Player e aTube Catcher.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Mais algumas implementações foram feitas:
Implementação 3: Na estratégia do goleiro, passo 1, estávamos anotando o id (ao final do for utilizado) do inimigo mais próximo à bola e depois ligando esse valor ao index de um index-array.
Porém, isso causa problemas quando há algum robô desligado, porque nessa situação os índices dos vetores para cada robô não serão necessariamente iguais ao seu id.
Então, passamos a pegar a posição do adversário diretamente, ao invés de guardar seu id, evitando tais conflitos.
Implementação 4: O Passo 2 juntamente com a Obs 1 explicam a maneira a qual foi feita a estratégia de posicionamento do goleiro. Porém, após alguns testes utilizando o artifício "atacando contra", vimos que a eficiência do robô não estava
muito boa porque praticamente nunca acontecia de a bola ser chutada na direção (centro inimigo)---bola.
Vimos que era necessário utilizar a orientação do inimigo.
Então, passamos a fazer o Passo 2 do seguinte modo:
Passo 2: - Se a distância do robô adversário à bola for menor que 250mm (90mm de raio + 160mm até o centro da bola), consideramos que tal adversário irá se preparar para chute.
Então, nesse caso calcula-se a reta que o centro do inimigo faz com o centro da bola e mandamos o goleiro se posicionar em y(/2 + 100) --> y da reta para a coordenada (x do gol somada a 100),
evitando que o goleiro bata nas balizas. Detalhe é que se essa reta termina fora do gol, mandamos o goleiro se posicionar ao meio do gol.
Mas quando o inimigo está a uma distância da bola menor que 200mm (90mm de raio + 160mm até o centro da bola), passamos a calcular a reta utilizando a posição da bola e a orientação do adversário.
Essas distâncias ainda precisam ser melhor discutidas, elas foram escolhidas devido a testes "no olho" pelo grSim.
Mas a ideia é que quando o robô inimigo se aproxima para o chute, o goleiro já vai se posicionando às proximidades da provável direção da bola após o tiro. E quando o adversário fica bastante próximo à bola, passamos a utilizar
sua orientação para definir com maior precisão para onde a bola vai.
Após essa implementação, o goleiro apresentou uma SIGNIFICATIVA melhora em testes no grSim. Os vídeos serão disponibilizados abaixo
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Video1_goleiromelhorado.mp4 Video1_goleiromelhorado.mp4 adicionado
- Arquivo Video2_goleiromelhorado.mp4 Video2_goleiromelhorado.mp4 adicionado
Vídeos da atuação do goleiro no grSim e na SSL Vision Log Player (Gravado em 23/04/2018):
OBS: Os jogadores e a bola ficaram mais lentos que o normal devido a estarem abertos grSim, SSL Vision Log Player e aTube Catcher.
Atualizado por Nicolas Oliveira há mais de 6 anos
Dar uma olhada na orientação do goleiro antes do chute ser realizado. Ta um pouco estranha.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Video1_pclab.mp4 Video1_pclab.mp4 adicionado
Vídeo da atuação do goleiro testado no computador do lab(mais rápido):
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Nicolas Oliveira escreveu:
Dar uma olhada na orientação do goleiro antes do chute ser realizado. Ta um pouco estranha.
Resposta: Já foi ajustada!
Atualizado por Nicolas Oliveira há mais de 6 anos
O goleiro se mostrou melhor q o anterior. Utilizaremos ele por enquanto. Assim q as rotinas de teste do GrSim estiverem prontas, geraremos uma estatística de melhora.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Implementação 5: Por mais alguns testes no grSim, as distâncias do Passo 2 ficaram definidas como 500mm (distância a partir da qual calculamos a reta pela posição da bola e centro do robô inimigo) e 400mm (distância a partir
da qual calculamos a reta pela posição da bola e orientação do robô inimigo).
Implementação 6: Ao testar as possibilidades de goleiro no meio ou nas extremidades do gol, para os casos de a direção do chute indicar para fora no momento, vimos que a de melhor resultado é quando o goleiro se posiciona
ao meio do gol, pois ao se posicionar em uma das extremidades o atacante chutava exatamente na outra extremidade e praticamente nunca o goleiro chegava a tempo. Ficando no meio do gol, o goleiro chega à bola a tempo na maioria
dos casos.
Então, decidimos ficar com a atuação do goleiro no meio do gol quando a direção do chute é para fora momentaneamente.
Implementação 7: Percebemos que quando a bola era chutada de uma região próxima às quinas do campo, o goleiro não possuía tão alta eficiência, devido ao fato de ficar no meio do gol quando a direção do chute é para fora.
Então, implementamos que nesses casos (chute para fora), o goleiro fica à distância de um robô do meio do gol para o lado ao qual vai o chute.
Ou seja, somamos ou subtraímos 90mm à coordenada y do robô na ocasião de chute para fora.
Dessa maneira, o goleiro não fica exatamente no meio do gol e nem tanto em um dos cantos.
Após isso, o goleiro apresentou alta eficiência também para os chutes em regiões próximas às quinas.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
A versão final e mais atualizada do goleiro se encontra no github na branch goalie_rework
Atualizado por Nicolas Oliveira há mais de 6 anos
Merge na branch develoment feito. Qualquer novo ajuste deve ser feito lá agora.
Atualizado por Nicolas Oliveira há mais de 6 anos
- Arquivo goleiro.PNG goleiro.PNG adicionado
Lembrar de considerar pro goleiro só avançar na bola quando ela estiver na nossa área. Ele está indo em qualquer área.
![](goleiro.PNG)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Resposta: Já foi consertado, testado e upado na branch develpment
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Situação alterado de Feedback para Resolvida
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Situação alterado de Resolvida para Fechada