Atividade #578
FechadaAtualizado por Gabriel Borges da Conceição há quase 7 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:

POSICIONAMENTO DO ROBÔ QUANDO Y DE SEU CENTRO É MUITO PRÓXIMO A UMA DAS BALIZAS:

Vamos agora demonstrar o posicionamento do goleiro em diversas situações:
ROBÔ ADVERSÁRIO DE ID 5 É O MAIS PRÓXIMO À BOLA:

ROBÔ ADVERSÁRIO DE ID 5 É O MAIS PRÓXIMO À BOLA:

ROBÔ ADVERSÁRIO DE ID 4 É O MAIS PRÓXIMO À BOLA:


RETA (ROBÔ MAIS PRÓXIMO)---(BOLA) TERMINA FORA DO GOL:

Atualizado por Gabriel Borges da Conceição há quase 7 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á quase 7 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á quase 7 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á quase 7 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á quase 7 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á quase 7 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á quase 7 anos
Isso já está implementado? Se sim, em qual branch? Já subiu para o github?
Atualizado por Gabriel Borges da Conceição há quase 7 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á quase 7 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á quase 7 anos
- Arquivo excluído (
demonstracaoposicionamentogoleiro.mp4)
Atualizado por Gabriel Borges da Conceição há quase 7 anos
- Arquivo Video1.wmv adicionado
- Arquivo Video2.wmv adicionado
Atualizado por Gabriel Borges da Conceição há quase 7 anos
- Arquivo excluído (
Video1.wmv)
Atualizado por Gabriel Borges da Conceição há quase 7 anos
- Arquivo excluído (
Video2.wmv)
Atualizado por Gabriel Borges da Conceição há quase 7 anos
- Arquivo Video1.mp4 Video1.mp4 adicionado
- Arquivo Video2.mp4 Video2.mp4 adicionado
Atualizado por Gabriel Borges da Conceição há quase 7 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á quase 7 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á quase 7 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á quase 7 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á quase 7 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á quase 7 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á quase 7 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á quase 7 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á quase 7 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á quase 7 anos
A versão final e mais atualizada do goleiro se encontra no github na branch goalie_rework
Atualizado por Nicolas Oliveira há quase 7 anos
Merge na branch develoment feito. Qualquer novo ajuste deve ser feito lá agora.
Atualizado por Nicolas Oliveira há quase 7 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.

Atualizado por Gabriel Borges da Conceição há quase 7 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