Atividade #702
FechadaObjetivo #583: Melhorar a defesa
Center Back
Descrição
O objetivo dessa tarefa é discutirmos como deve ser implementado o Center Back!
Arquivos
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
O Center Back é o comportamento que queremos implementar aos nossos 3 zagueiros e será baseado no Center Back da Equipe ER Force.
Atualmente, nossos zagueiros formam uma parede alinhada que tenta impedir os tiros diretos.
Nosso objetivo é fazer com que, a partir de agora, eles se comportem da seguinte maneira:
1-Contra equipes que realizem muitos passes:
-1 dos zagueiros tenta bloquear os chutes diretos.
-1 dos zagueiros fica à entrada da área marcando de longe o inimigo sem bola mais perigoso.
-1 dos zagueiros fica à entrada da área marcando de longe o segundo inimigo sem bola mais perigoso.
2-Contra equipes que realizem poucos passes ou que não realizem passes:
-2 dos zagueiros tentam bloquear os chutes diretos.
-1 dos zagueiros fica à entrada da área marcando de longe o inimigo sem bola mais perigoso.
Uma pergunta já levantada é: Como determinar se os times realizam muitos ou poucos passes.
Eu tinha pensado em podermos, através de um botão, alterar entre as duas formações de defesa. E a escolha de uma ou outra formação seria pautada em conhecimento prévio sobre a situação de passes da equipe adversária e/ou podendo ser alterada durante a partida nos tempos técnicos ou intervalos, de acordo com análise da partida.
Atualizado por Nicolas Oliveira há mais de 6 anos
Gabriel Borges da Conceição escreveu:
1-Contra equipes que realizem muitos passes:
-1 dos zagueiros tenta bloquear os chutes diretos.
-1 dos zagueiros fica à entrada da área marcando de longe o inimigo sem bola mais perigoso.
-1 dos zagueiros fica à entrada da área marcando de longe o segundo inimigo sem bola mais perigoso.2-Contra equipes que realizem poucos passes ou que não realizem passes:
-2 dos zagueiros tentam bloquear os chutes diretos.
-1 dos zagueiros fica à entrada da área marcando de longe o inimigo sem bola mais perigoso.
Para equipes que não realizam passes ideal era usar nossa configuração atual. Então é bom que seja totalmente controlável por nós essas quantidades.
Uma pergunta já levantada é: Como determinar se os times realizam muitos ou poucos passes.
Eu tinha pensado em podermos, através de um botão, alterar entre as duas formações de defesa. E a escolha de uma ou outra formação seria pautada em conhecimento prévio sobre a situação de passes da equipe adversária e/ou podendo ser alterada durante a partida nos tempos técnicos ou intervalos, de acordo com análise da partida.
Podemos pensar em como nosso software estatístico poderia levantar essa informação.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
A tarefa foi mais debatida no quesito organização dos zagueiros e seus papéis e foram definidas as seguintes formações defensivas no que diz respeito ao comportamento do 3 zagueiros:
Formação 1(Contra times que realizam passes):
Aqui ficou definido que montaremos uma barreia similar à atual, porém, com apenas 2 defensores(atuando então como Centers Back) e o terceiro irá atuar como ManMark. Esse ManMark é escolhido
a todo momento durante o jogo e é o jogador mais próximo àquele que queremos marcar. Então, há trocas a fim de determinar quem atuará como Center Back formando a barreia e quem atuará como ManMark em cada instante.
A marcação é feita à distância: o zagueiro fica à entrada da área no alinhamento do inimigo que se quer marcar com o centro do gol.
Definimos duas opções de marcação:
Formação 1.1: Aqui, marcamos o inimigo mais perigoso, sendo ele definido pelos critérios já utilizados anteriormente e explicitados na tarefa.
Formação 1.2: Aqui, marcamos o SEGUNDO inimigo mais perigoso, sendo ele definido pelos critérios já utilizados anteriormente e explicitados na tarefa.
Essas opções 1.1 e 1.2 foram pautadas na seguinte lógica: - O Striker já marca "corpo a corpo" o inimigo mais perigoso, podendo ele tentar interceptar o passe ou ficar atrás do adversário, bloqueando seu trajeto em direção ao gol. Então,
pode ser mais viável mandar o ManMark marcar o segundo inimigo mais perigoso porque assim teremos 2 inimigos sem bola sendo marcados ao invés de 1.
Isso pode ser determinado por fatores como: equipe inimiga ataca com 3 jogadores ou equipe inimiga só realiza passe para 1 jogador e etc.
Formação 2(Contra equipes que não realizam passes):
Para essa situação, chegamos à conclusão de que é melhor que se mantenha a defesa atual: - barreira bloqueando chute com 3 zagueiros, uma vez que não seria necessário marcar inimigo
que não recebe a bola por passes.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Definidas as opções de sistemas defensivos, partimos para as implementações:
Implementação 1: Colocamos a opção de ser trocado o inimigo que o ManMark irá marcar(Mais perigoso ou segundo mais perigoso). Essa alternância é feita manualmente através de um Case Struct controlada por um Enum Control.
Implementação 2: Temos agora a opção de escolher entre a nova defesa proposta e a que já se usa para cada uma das seguintes situações de jogo: "Force Start", "PKA Normal Start", "PKE Normal Start", "Direct Free Ally", "Indirect Free Ally", "Ball Placement Ally", "None", Default, "Goal Enemy", "Ball Placement Enemy", "Stop", "Prepare Kickoff Ally", "Prepare Kickoff Enemy", "Direct Free Enemy", "Indirect Free Enemy", "Goal Ally", sendo alterada da mesma forma que a implementação 1.
Implementação 3: Linkamos o "atacando ao contrário" já existente em diversas partes do código de modo que os zagueiros considerem o Attacker e Striker do nosso time como adversários. Neste caso, só há a opção de marcar um jogador, que é o Striker, haja vista atacarmos com 2 jogadores.
Observação: Os dois jogadores que atuam como Centers Back fechando a barreira seguem o código estabelecido na VI da defesa que está sendo usada atualmente. A diferença é que esse código é, agora, mandado apenas para 2 robôs ao invés de 3. E foi tomado o cuidado de excluir do vetor "Defensores" o robô que atuará como ManMark, então a barreia fica fechada com 2 robôs.
Atualizado por Lucas Germano há mais de 6 anos
Não seria legal criar uma aba chamada playbook? Lá ficarão nossas jogadas e formações, tenho o pressentimento que irão surgir mais implementações como essa, que usaremos contra equipes diferentes e de formas diferentes.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Tá ok!
Vou trabalhar nisso.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Deficiências encontradas na nova defesa proposta:
Os Centers Back se posicionam em ordem crescente de id. Então, quando os zagueiros saem de ordem seja para marcar um jogador ou para chutar a bola, ao volar, eles se esbarram prejudicando a formação defensiva.
O primeiro artifício pensado foi considerar os companheiros de equipe como obstáculos na movimentação RRT.
Vamos avaliar a melhor solução e partir para sua implementação.
Outro problema é a "indecisão" de qual robô vai chutar a bola. Acontece de às vezes um robô ir chutar, parar ao meio do caminho e outro ir para o chute.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo img1.jpeg img1.jpeg adicionado
- Arquivo img2.jpeg img2.jpeg adicionado
- Arquivo img3.jpeg img3.jpeg adicionado
- Arquivo img4.jpeg img4.jpeg adicionado
- Arquivo img5.jpeg img5.jpeg adicionado
- Arquivo img6.jpeg img6.jpeg adicionado
- Arquivo img7.jpeg img7.jpeg adicionado
- Arquivo img8.jpeg img8.jpeg adicionado
- Arquivo img9.jpeg img9.jpeg adicionado
- Arquivo img10.jpeg img10.jpeg adicionado
Imagens do posicionamento dos zagueiros na nova defesa proposta(OPÇÃO MARCAR MAIS PERIGOSO):
![](img1.jpeg)
![](img2.jpeg)
![](img3.jpeg)
![](img4.jpeg)
![](img5.jpeg)
![](img6.jpeg)
Imagens do posicionamento dos zagueiros na nova defesa proposta(OPÇÃO MARCAR SEGUNDO MAIS PERIGOSO)
![](img7.jpeg)
![](img8.jpeg)
OPÇÃO DE DEFESA PARA APLICAR A ATUAL:
![](img9.jpeg)
![](img10.jpeg)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Video_defesa.mp4 adicionado
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo excluído (
Video_defesa.mp4)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Video_defesa.mp4 Video_defesa.mp4 adicionado
Atualizado por Nicolas Oliveira há mais de 6 anos
- Arquivo defesaid.png defesaid.png adicionado
Gabriel Borges da Conceição escreveu:
Os Centers Back se posicionam em ordem crescente de id. Então, quando os zagueiros saem de ordem seja para marcar um jogador ou para chutar a bola, ao volar, eles se esbarram prejudicando a formação defensiva.
Trabalhar agora em como tornar essa ordenação não dependente do id dos robôs, mas sim da proximidade com a posição desejada e se não há robôs no caminho. Por exemplo:
![](defesaid.png)
Apesar do robô mais acima ser próximo ao ponto de baixo da defesa, o ideal é q ele vá para o de cima para facilitar a aproximação do segundo defensor.
Atualizado por Luciano Barreira há mais de 6 anos
- Arquivo centerback.png centerback.png adicionado
Nicolas Oliveira escreveu:
Gabriel Borges da Conceição escreveu:
Os Centers Back se posicionam em ordem crescente de id. Então, quando os zagueiros saem de ordem seja para marcar um jogador ou para chutar a bola, ao volar, eles se esbarram prejudicando a formação defensiva.
Trabalhar agora em como tornar essa ordenação não dependente do id dos robôs, mas sim da proximidade com a posição desejada e se não há robôs no caminho. Por exemplo:
![](defesaid.png)
Apesar do robô mais acima ser próximo ao ponto de baixo da defesa, o ideal é q ele vá para o de cima para facilitar a aproximação do segundo defensor.
Algumas ideias:
Estou tentando pensar numa maneira de fazer isso sem quebrar com a nossa arquitetura atual, já que a definição de personalidade é decidida antes das velocidades de cada robô. Talvez pudéssemos pensar em abstrair os IDs da defesa (podemos melhorar isso):
- Os IDs abstraídos da defesa continuariam ordenados, e existiria um mapeamento direto entre o ID real do robô e o ID da defesa.
- A defesa define os pontos de marcação, com uma dada ordenação
- Os robôs da defesa terão um ID de acordo com a distância ao ponto mais próximo dentre os de marcação
- Podemos pensar em uma maneira de esta abordagem não gerar swaps desnecessários entre os robôs (trocarem de posição desnecessariamente)
- O número de pontos é atualizado dinamicamente pelo número de center-backs
Ou ainda algo como:
- A defesa define uma quantidade de pontos, ordenados por prioridade de perigo
- Pega-se os `n` primeiros pontos e distribui-se para os respectivos robôs mais próximos
![](centerback.png)`
Estava pensando se o software estatístico não consegue nos otimizar ainda mais essa questão :
- podemos revezar o esforço dos robôs de acordo com o quanto ele se movimentou durante a partida estando naquela posição de center-back, alternando a posição entre stops ou, se pensarmos em uma boa heurística, durante a própria partida.
- detectando deflecções bem sucedidas, podemos priorizar robôs que estão indo bem naquela posição para manter-se lá, já que não temos a garantia que os robôs são isométricos.
- a velocidade máxima e o tempo de resposta dos robôs, podendo ser medidos em tempo real pelo software estatístico, pode nos ajudar a priorizar posições mais dinâmicas.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Luciano Barreira escreveu:
Nicolas Oliveira escreveu:
Gabriel Borges da Conceição escreveu:
Os Centers Back se posicionam em ordem crescente de id. Então, quando os zagueiros saem de ordem seja para marcar um jogador ou para chutar a bola, ao volar, eles se esbarram prejudicando a formação defensiva.
Trabalhar agora em como tornar essa ordenação não dependente do id dos robôs, mas sim da proximidade com a posição desejada e se não há robôs no caminho. Por exemplo:
![](defesaid.png)
Apesar do robô mais acima ser próximo ao ponto de baixo da defesa, o ideal é q ele vá para o de cima para facilitar a aproximação do segundo defensor.
Algumas ideias:
Estou tentando pensar numa maneira de fazer isso sem quebrar com a nossa arquitetura atual, já que a definição de personalidade é decidida antes das velocidades de cada robô. Talvez pudéssemos pensar em abstrair os IDs da defesa (podemos melhorar isso):
- Os IDs abstraídos da defesa continuariam ordenados, e existiria um mapeamento direto entre o ID real do robô e o ID da defesa.
- A defesa define os pontos de marcação, com uma dada ordenação
- Os robôs da defesa terão um ID de acordo com a distância ao ponto mais próximo dentre os de marcação
- Podemos pensar em uma maneira de esta abordagem não gerar swaps desnecessários entre os robôs (trocarem de posição desnecessariamente)
- O número de pontos é atualizado dinamicamente pelo número de center-backsOu ainda algo como:
- A defesa define uma quantidade de pontos, ordenados por prioridade de perigo
- Pega-se os `n` primeiros pontos e distribui-se para os respectivos robôs mais próximos![](centerback.png)`
Estava pensando se o software estatístico não consegue nos otimizar ainda mais essa questão :
- podemos revezar o esforço dos robôs de acordo com o quanto ele se movimentou durante a partida estando naquela posição de center-back, alternando a posição entre stops ou, se pensarmos em uma boa heurística, durante a própria partida.
- detectando deflecções bem sucedidas, podemos priorizar robôs que estão indo bem naquela posição para manter-se lá, já que não temos a garantia que os robôs são isométricos.
- a velocidade máxima e o tempo de resposta dos robôs, podendo ser medidos em tempo real pelo software estatístico, pode nos ajudar a priorizar posições mais dinâmicas.
Entendi a lógica. Após a reunião debatemos como implementar.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Video_posdef.mp4 Video_posdef.mp4 adicionado
- Arquivo Video_posdef2.mp4 Video_posdef2.mp4 adicionado
Vídeos da atuação dos zagueiros:
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Video_posdef3.mp4 Video_posdef3.mp4 adicionado
Atualizado por Lucas Germano há mais de 6 anos
Luciano Barreira escreveu:
Estava pensando se o software estatístico não consegue nos otimizar ainda mais essa questão :
- podemos revezar o esforço dos robôs de acordo com o quanto ele se movimentou durante a partida estando naquela posição de center-back, alternando a posição entre stops ou, se pensarmos em uma boa heurística, durante a própria partida.
- detectando deflecções bem sucedidas, podemos priorizar robôs que estão indo bem naquela posição para manter-se lá, já que não temos a garantia que os robôs são isométricos.
- a velocidade máxima e o tempo de resposta dos robôs, podendo ser medidos em tempo real pelo software estatístico, pode nos ajudar a priorizar posições mais dinâmicas.
São boas ideias, vou colocá-las na tarefa do software estatístico.
Atualizado por Lucas Germano há mais de 6 anos
Também não entendi muito bem o 2º e o 3º video, pode explicar melhor o que aconteceu?
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Lucas Germano escreveu:
Também não entendi muito bem o 2º e o 3º video, pode explicar melhor o que aconteceu?
Esses são vídeos da atuação dos zagueiros.
No 1° vídeo (gravado do grSim), eu mostrei o posicionamento dos zagueiros quando a bola fica hora com um robô, hora com outro. Este posicionamento dinâmico está funcionando perfeitamente como determinado.
Os próximos vídeos (um gravado no grSim e outro na SSL vision log player), quis mostrar o comportamento dos zagueiros quando a bola é chutada, ou se aproxima da área e etc. Neles podemos ver as falhas ainda existentes: A toda hora fica trocando o robô que irá disputar a bola e robôs se esbarram quando tentam ir cada um pra sua posição.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Gabriel Borges da Conceição escreveu:
Luciano Barreira escreveu:
Nicolas Oliveira escreveu:
Gabriel Borges da Conceição escreveu:
Os Centers Back se posicionam em ordem crescente de id. Então, quando os zagueiros saem de ordem seja para marcar um jogador ou para chutar a bola, ao volar, eles se esbarram prejudicando a formação defensiva.
Trabalhar agora em como tornar essa ordenação não dependente do id dos robôs, mas sim da proximidade com a posição desejada e se não há robôs no caminho. Por exemplo:
![](defesaid.png)
Apesar do robô mais acima ser próximo ao ponto de baixo da defesa, o ideal é q ele vá para o de cima para facilitar a aproximação do segundo defensor.
Algumas ideias:
Estou tentando pensar numa maneira de fazer isso sem quebrar com a nossa arquitetura atual, já que a definição de personalidade é decidida antes das velocidades de cada robô. Talvez pudéssemos pensar em abstrair os IDs da defesa (podemos melhorar isso):
- Os IDs abstraídos da defesa continuariam ordenados, e existiria um mapeamento direto entre o ID real do robô e o ID da defesa.
- A defesa define os pontos de marcação, com uma dada ordenação
- Os robôs da defesa terão um ID de acordo com a distância ao ponto mais próximo dentre os de marcação
- Podemos pensar em uma maneira de esta abordagem não gerar swaps desnecessários entre os robôs (trocarem de posição desnecessariamente)
- O número de pontos é atualizado dinamicamente pelo número de center-backsOu ainda algo como:
- A defesa define uma quantidade de pontos, ordenados por prioridade de perigo
- Pega-se os `n` primeiros pontos e distribui-se para os respectivos robôs mais próximos![](centerback.png)`
Estava pensando se o software estatístico não consegue nos otimizar ainda mais essa questão :
- podemos revezar o esforço dos robôs de acordo com o quanto ele se movimentou durante a partida estando naquela posição de center-back, alternando a posição entre stops ou, se pensarmos em uma boa heurística, durante a própria partida.
- detectando deflecções bem sucedidas, podemos priorizar robôs que estão indo bem naquela posição para manter-se lá, já que não temos a garantia que os robôs são isométricos.
- a velocidade máxima e o tempo de resposta dos robôs, podendo ser medidos em tempo real pelo software estatístico, pode nos ajudar a priorizar posições mais dinâmicas.Entendi a lógica. Após a reunião debatemos como implementar.
Tive uma ideia mais simples a qual acho que pode resolver o problema de os robôs ficarem se esbarrando:
1-As 3 posições as quais os zagueiros devem ocupar são definidas.
2-Pegamos essas posições e as ordenamos em ordem crescente em função de sua coordenada y.
3-Pegamos os robôs e também os ordenamos em função de suas coordenadas y.
4-O robô de menor y deve ir para a posição de menor y e assim sucessivamente.
Dessa forma os robôs não se cruzarão.
Atualizado por Nicolas Oliveira há mais de 6 anos
Acho que ficará bom assim. Boa ideia.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Problemas resolvidos!
Como dito anteriormente, havia 2 problemas:
1: Robôs tentavam ficar em ordem crescente de id na barreia e ficavam se esbarrando até que cada um fosse para sua posição.
2: O código ficava trocando de duelist(zagueiro que sai para disputar a bola) indefinidamente, em função da escolha do manmark.
Foi feita um implementação que resolveu os problemas:
1 - Peguei as 3 posições que terão de ser ocupadas pelos 3 zagueiros(1 posição de manmark e 2 posições de barreira) e as coloquei num vetor de forma que ficassem ordenadas em ordem crescente de suas coodenadas y.
2- Coloquei os zagueiros num vetor e os ordenei da mesma maneira.
Dessa forma, o zagueiro da posição 0 desse vetor vai ocupar a posição 0 do primeiro vetor e assim sucessivamente. Ou seja, o robô de maior y vai para a posição de maior y e assim em diante, não ficando mais em função de sua ordem de id.
Pode-se perceber que o ManMark não é mais definido, necessariamente, pelo o zagueiro mais próximo do inimigo a ser marcado. Determinado zagueiro vai para a posição de ManMark de acordo com a escolha das posições explicada acima.
E, continuamos tirando o ManMark do vetor Defensores, de forma a não influenciar na determinação da posição dos dois robôs que ficaram na barreira.
O vídeo demonstrativo da atuação e posicionamento dos zagueiros será postado amanhã, devido a problemas de gravação no meu computador.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Os zagueiros ainda se posicionam segundo a área antiga.
Em breve, estarão se posicionando sobre área quadrada. Para isso, basta que sejam mudadas as interseções das retas que ligam (bola ou robôs inimigos)----(centro do gol) com a área. Além disso, os os vetores posições gerados deverão ser ordenados de maneira diferente, assim como os zagueiros.
Porém, todo o resto da lógica será aproveitado!
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Video_zagduelist.mp4 Video_zagduelist.mp4 adicionado
- Arquivo Video_poszag_1.mp4 Video_poszag_1.mp4 adicionado
Como descrito na última postagem, os erros foram ajustados, ficando da seguinte forma o comportamento dos zagueiros:
1. A escolha de posições agora se dá pela ordenação dos y das posições de defesa e dos robôs:
2. Comportamento dos zagueiros em situação de jogo. Robôs saindo para disputar a bola:
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo manmarkareaquadrada1.jpeg manmarkareaquadrada1.jpeg adicionado
- Arquivo manmarkareaquadrada2.jpeg manmarkareaquadrada2.jpeg adicionado
- Arquivo manmarkareaquadrada3.jpeg manmarkareaquadrada3.jpeg adicionado
- Arquivo Video_manmarkareaquadrada.mp4 adicionado
- Arquivo Video_manmarkareaquadrada2.mp4 adicionado
E o ManMark já se posiciona e anda sobre área quadrada!!
Os parâmetros da área são defense_radius e denfese_stretch por enquanto.
Fotos:
![](manmarkareaquadrada1.jpeg)
![](manmarkareaquadrada2.jpeg)
![](manmarkareaquadrada3.jpeg)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Video_manmarkareaquadrada2.mp4 adicionado
- Arquivo Video_manmarkareaquadrada.mp4 adicionado
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo excluído (
Video_manmarkareaquadrada.mp4)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo excluído (
Video_manmarkareaquadrada.mp4)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo excluído (
Video_manmarkareaquadrada2.mp4)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo excluído (
Video_manmarkareaquadrada2.mp4)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Video_manmarkareaquadrada.mp4 adicionado
- Arquivo Video_manmarkareaquadrada2.mp4 adicionado
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo excluído (
Video_manmarkareaquadrada.mp4)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo excluído (
Video_manmarkareaquadrada2.mp4)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Video_manmarkareaquadrada.mp4 Video_manmarkareaquadrada.mp4 adicionado
- Arquivo Video_manmarkareaquadrada2.mp4 Video_manmarkareaquadrada2.mp4 adicionado
Vídeos:
Posicionamento do ManMark ao acompanhar inimigo em movimentação. Detalhe é que nosso jogador está andando sobre a área quadrada:
Escolha de posições dos 3 zagueiros(2 Centers Back e 1 ManMark), e movimentação ao acompanhar adversário:
Atualizado por Nicolas Oliveira há mais de 6 anos
Bom! Os outros zagueiros já são capazes de andar numa área quadrada? Se sim, postar o resultado.
Coloque um tamanho de área maior, pode ser inserindo constantes mesmo. Mas que seja proporcional a área antiga para que possamos avaliar melhor o resultado.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Nicolas Oliveira escreveu:
Bom! Os outros zagueiros já são capazes de andar numa área quadrada? Se sim, postar o resultado.
Sim! Postarei agora.
Coloque um tamanho de área maior, pode ser inserindo constantes mesmo. Mas que seja proporcional a área antiga para que possamos avaliar melhor o resultado.
Fiz um teste com a área pequena na log player pra avaliar posicionamento e outro com valores de 1000mm e 2000mm.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Posiçõesdesordenadas.png Posiçõesdesordenadas.png adicionado
- Arquivo Destinozagueiros.png Destinozagueiros.png adicionado
- Arquivo Posiçõesordenadas.png Posiçõesordenadas.png adicionado
- Arquivo Zagueiros ordenados.png Zagueiros ordenados.png adicionado
Agora todos os zagueiros andam e se posicionam sobre a área quadrada!
Primeiramente, percebemos que a maneira de definir qual dos robôs vai para cada uma das posições tem que mudar.
Antes, com a área redonda, ordenávamos os robôs e as posições em função de seus y. Porém agora com área quadrada podemos ter robôs com mesmo x ou mesmo y. Então foi adotada a seguinte lógica para ordenar os pontos:
Passo 1: Determinamos os pontos de interseção do que queremos com a área:
![](Posiçõesdesordenadas.png)
Passo 2: Montamos os vetores (centro do gol --> posição) e calculamos os ângulos que eles fazem com a horizontal. Após, incluímos esses ângulos nos vetores posição (o vetor fica agora com 3 coordenadas: x, y, ângulo).
E então usamos o Sort 2D Array.vim para ordenar os novos vetores em coluna em função dos ângulos(fica em ordem crescente):
OBS1: Percebemos que os ângulos variam de -90° a 90°.
OBS2: Na prática, faremos isso apenas para 3 pontos(2 para a barreira e 1 para o ManMark).
![](Posiçõesordenadas.png)
Passo 3: Fazemos o mesmo para as posições atuais de cada um dos zagueiros:
![](Zagueiros ordenados.png)
Representação de uma situação de posicionamento:
![](Destinozagueiros.png)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Video_zaganova.mp4 Video_zaganova.mp4 adicionado
- Arquivo Video_posicionamentozaganova.mp4 Video_posicionamentozaganova.mp4 adicionado
Vídeos demonstrativos da atuação dos zagueiros:
Atuação dos zagueiros em situação de jogo:
OBS: Os parâmetros da área estão defense_radius e defense_stretch. Caso seja dado merge, esses parâmetros se ajustarão aos novos, estabelecidos na branch development.
Nesse vídeo, deixei os parâmetros assim para analisar se o posicionamento está correto ou não. No vídeo seguinte, isso será mudado.
Atuação dos zagueiros em relação ao seu posicionamento:
Para esse vídeo, usamos 1000mm para as retas horizontais e 2000mm para a vetical.
Fica faltando então precisar melhor o posicionamento dos Centers Back para que fiquem lado a lado perfeitamente.
Atualizado por Nicolas Oliveira há mais de 6 anos
Testamos a defesa no pc do lab e identificamos a necessidade dos seguintes ajustes:
1- Definir uma distancia mínima para o manmarker marcar alguém, caso n seja atingida, ficar na barreira
2- Deixar ter quantos defensores eu quiser. Atualmente só funciona para até 3 defensores.
3- Poder tirar o manmarker(usar defesa antiga).
4 -Usar a bola falsa para evitar que robo fique fora do campo.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Nicolas Oliveira escreveu:
Testamos a defesa no pc do lab e identificamos a necessidade dos seguintes ajustes:
1- Definir uma distancia mínima para o manmarker marcar alguém, caso n seja atingida, ficar na barreira
2- Deixar ter quantos defensores eu quiser. Atualmente só funciona para até 3 defensores.
3- Poder tirar o manmarker(usar defesa antiga).
4 -Usar a bola falsa para evitar que robo fique fora do campo.
Tudo feito! fotos e videos dos resultados serão postados amanhã.
Já está tudo atualizado na branch defense_rework.
Atualizado por Nicolas Oliveira há mais de 6 anos
Excelente. Tudo upado no github?
Se lembrou de levar em consideração se a quantidade de robôs era par ou ímpar na hora de posicionar a defesa?
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Nicolas Oliveira escreveu:
Excelente. Tudo upado no github?
Se lembrou de levar em consideração se a quantidade de robôs era par ou ímpar na hora de posicionar a defesa?
Tudo upado! E usei sim a paridade do vetor Defensores para saber como somar ou subtrair da posição central.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Video1.mp4 adicionado
- Arquivo Video2.mp4 adicionado
- Arquivo Video3.mp4 adicionado
- Arquivo Video4.mp4 adicionado
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo excluído (
Video1.mp4)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo excluído (
Video2.mp4)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo excluído (
Video3.mp4)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo excluído (
Video4.mp4)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo Video1.mp4 Video1.mp4 adicionado
- Arquivo Video2.mp4 Video2.mp4 adicionado
- Arquivo Video3.mp4 Video3.mp4 adicionado
- Arquivo Video4.mp4 Video4.mp4 adicionado
Posicionamento dos zagueiros na nova composição:
Posicionamento dos zagueiros no atacando contra alternando entre defesa antiga e defesa nova a partir de control no log player:
Posicionamento dos zagueiros alternando entre defesa antiga e defesa nova a partir de control e entre marcar mais perigoso ou segundo mais perigoso no log player:
Posicionamento dos zagueiros alternando entre defesa antiga e defesa nova a partir de control e entre marcar mais perigoso ou segundo mais perigoso e ainda mudando a quantidade de defensores no log player:
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Situação alterado de Em andamento para Feedback
Ajustei para o posicionamento das quinas!
Posicionamento da defesa na quina em diversas formações que podem ser escolhidas pelo playbook na log player:
![](quina1.jpeg)
![](quina2.jpeg)
![](quina3.jpeg)
![](quina4.jpeg)
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo quina1.jpeg quina1.jpeg adicionado
- Arquivo quina2.jpeg quina2.jpeg adicionado
- Arquivo quina3.jpeg quina3.jpeg adicionado
- Arquivo quina4.jpeg quina4.jpeg adicionado
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Ao revisar o código, Nicolas percebeu a necessidade de mais dois ajustes:
1) A barreira estava abrindo um espaço grande em algumas situações de posicionamento na quina.
Solução: Percebi que não estava informando o índice para um Replace Subset em um dos casos. Feito isso, problema encerrado.
2) Quando a bola estava muito perto do fundo do campo, os zagueiros da barreira estavam se posicionando em cima da linha da área quadrada, e não um pouco à frente como deveria ser e como estava sendo nas demais situações de posicionamento.
Solução: Somente ajustei uma constante de um dos casos para 120 mm mais à frente e detalhe resolvido.
Atualizado por Nicolas Oliveira há mais de 6 anos
Vamos simular uma partida para ver a melhora da defesa.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo tipodeavanço.mp4 tipodeavanço.mp4 adicionado
Nicolas pediu que eu mudasse um detalhe no avanço do duelist: chutar a bola em cima do inimigo quando a posse for dele.
Quando fui ao código para fazer isso, percebi que essa implementação já existia. Porém, o defensor só chutava a bola no inimigo quando ocorresse o evento Enemy Ball Possession.
Entretanto, tal evento só ocorre quando o adversário está realmente muito próximo à bola (não sei o valor exato). Quando esse evento acontecia, o adversário chutava a bola antes do defensor chegar (visto que o inimigo estava muito mais próximo à bola). Com isso, toda vez que observávamos o avanço, sempre víamos o caso em que posse de bola não era inimiga.
O Nicolas sugeriu que eu mudasse a distância do adversário à bola para definir a ocorrência desse evento. Mas fiquei com medo de isso afetar em alguma outra parte do código, e também ainda não sei fazer isso.
O que fiz foi criar uma VI que determinava o inimigo mais próximo à bola. Se essa distância for menor que 500 mm, envio True para um indicator booleano e vice-versa.
A distância de 500 mm ainda não está fixada.
No vídeo abaixo pode-se perceber que hora o duelist chuta bola para o gol inimigo e hora chuta em cima do inimigo. Pode-se perceber também as cores laranja e vermelha à frente do robô, indicando acionamento do drible e do chute, respectivamente.
Atualizado por Nicolas Oliveira há mais de 6 anos
- Arquivo event.PNG event.PNG adicionado
- Arquivo parametros.PNG parametros.PNG adicionado
Essa implementação n trata o caso em que a bola está, por exemplo, na lateral do robô inimigo mas perto deles, onde deveríamos sim chutar no gol. Existe uma VI chamada eventgenerator aqui:
![](event.PNG)
Nela o evento de posse é gerada. Porém o parâmetro que ajusta as distâncias se encontra no AI parameters, aqui na tela inicial:
![](parametros.PNG)
Basta você tentar aumentar esses parâmetros com cuidado. Além disso lembre de definir esses valores como default. A uma parte da wiki fazendo uma descrição melhor dos eventos, leia.
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
Nicolas Oliveira escreveu:
Essa implementação n trata o caso em que a bola está, por exemplo, na lateral do robô inimigo mas perto deles, onde deveríamos sim chutar no gol. Existe uma VI chamada eventgenerator aqui:
Vou ajustar isso!
![](event.PNG)
Nela o evento de posse é gerada. Porém o parâmetro que ajusta as distâncias se encontra no AI parameters, aqui na tela inicial:
![](parametros.PNG)
Basta você tentar aumentar esses parâmetros com cuidado. Além disso lembre de definir esses valores como default. A uma parte da wiki fazendo uma descrição melhor dos eventos, leia.
Tá ok!
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Arquivo defesa2zagbarreira.jpeg defesa2zagbarreira.jpeg adicionado
- Arquivo defesacom1zag.jpeg defesacom1zag.jpeg adicionado
Foi detectado um erro: Quando havia apenas 1 robô, às vezes ele ia para o meio do campo ao invés de assumir função defensiva.
Isso estava ocorrendo por que nesta situação, estava sendo gerado apenas a posição do manmarker.
Foi consertado.
E foi determinado que quando houvesse apenas 2 zagueiros, deveria ocorrer de os dois assumirem função de Center Back e não mais um Center Back e um Manmarker.
Isso também já foi implementado:
DEFESA COM A APENAS 2 ZAGUEIROS (MODO ATACANDO CONTRA):
![](defesa2zagbarreira.jpeg)
DEFESA COM A APENAS 1 ZAGUEIRO (MODO ATACANDO CONTRA):
![](defesacom1zag.jpeg)
Atualizado por Nicolas Oliveira há mais de 6 anos
- Arquivo certo.JPG certo.JPG adicionado
- Arquivo erro1.JPG erro1.JPG adicionado
- Situação alterado de Feedback para Em andamento
- Prioridade alterado de Normal para Urgente
Hoje encontrei uma situação meio estranha durante alguns testes. Quando a defesa é a antiga, tudo ok. Porém quando coloco a defesa nova, ele novamente fica no centro da defesa, revisar isso.
certo
![](certo.JPG)
errado
![](erro1.JPG)
Precisam ser gerados testes a partir das rotinas que implementamos para a defesa com 1,2 ou 3 robôs, com a defesa nova e antiga (apenas a barreira) e marcando o mais perigoso ou o segundo. Dessa forma revisar todas as situações possíveis para que não tenhamos imprevistos durante a competição!!!
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Situação alterado de Em andamento para Resolvida
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Prioridade alterado de Urgente para Baixa
Atualizado por Gabriel Borges da Conceição há mais de 6 anos
- Situação alterado de Resolvida para Fechada