Projeto

Geral

Perfil

Ações

Atividade #578

Fechada

Objetivo #576: Refazer o pênalti

Criar nova estratégia para o goleiro

Adicionado por Lucas Germano quase 7 anos atrás. Atualizado mais de 6 anos atrás.

Situação:
Fechada
Prioridade:
Normal
Início:
16/02/2018
Data prevista:
Tempo gasto:

Arquivos

goleirofora.png (707 KB) goleirofora.png Posicionamento do robô quando y do seu centro é muito próximo a uma das balizas(antes da alteração) Gabriel Borges da Conceição, 18/04/2018 20:36 h
5maisproximo.png (634 KB) 5maisproximo.png ROBÔ ADVERSÁRIO DE ID 5 É O MAIS PRÓXIMO À BOLA Gabriel Borges da Conceição, 18/04/2018 20:48 h
5maisproximo2.png (585 KB) 5maisproximo2.png ROBÔ ADVERSÁRIO DE ID 5 É O MAIS PRÓXIMO À BOLA Gabriel Borges da Conceição, 18/04/2018 20:58 h
dpsdaalteracao.png (486 KB) dpsdaalteracao.png Posicionamento do robô quando y do seu centro é muito próximo a uma das balizas(após da alteração) Gabriel Borges da Conceição, 18/04/2018 21:03 h
4maispoximo.png (600 KB) 4maispoximo.png ROBÔ ADVERSÁRIO DE ID 4 É O MAIS PRÓXIMO À BOLA Gabriel Borges da Conceição, 18/04/2018 21:05 h
4maispoximo2.png (491 KB) 4maispoximo2.png ROBÔ ADVERSÁRIO DE ID 4 É O MAIS PRÓXIMO À BOLA Gabriel Borges da Conceição, 18/04/2018 21:06 h
foradogol.png (514 KB) foradogol.png RETA (ROBÔ MAIS PRÓXIMO)---(BOLA) TERMINA FORA DO GOL Gabriel Borges da Conceição, 18/04/2018 21:08 h
demonstracaoposicionamentogoleiro.mp4 (10,1 MB) demonstracaoposicionamentogoleiro.mp4 Vídeo de demonstração da atuação do goleiro em algumas situações Gabriel Borges da Conceição, 18/04/2018 21:32 h
4maispoximo2.png (491 KB) 4maispoximo2.png Gabriel Borges da Conceição, 18/04/2018 21:49 h
5maisproximo.png (634 KB) 5maisproximo.png Gabriel Borges da Conceição, 18/04/2018 21:49 h
5maisproximo2.png (585 KB) 5maisproximo2.png Gabriel Borges da Conceição, 18/04/2018 21:49 h
4maispoximo.png (600 KB) 4maispoximo.png Gabriel Borges da Conceição, 18/04/2018 21:49 h
dpsdaalteracao.png (486 KB) dpsdaalteracao.png Gabriel Borges da Conceição, 18/04/2018 21:49 h
foradogol.png (514 KB) foradogol.png Gabriel Borges da Conceição, 18/04/2018 21:50 h
goleirofora.png (707 KB) goleirofora.png Gabriel Borges da Conceição, 18/04/2018 21:50 h
Video1.mp4 (1,29 MB) Video1.mp4 grSim Gabriel Borges da Conceição, 22/04/2018 23:15 h
Video2.mp4 (1,37 MB) Video2.mp4 SSL Vision Log Player Gabriel Borges da Conceição, 22/04/2018 23:15 h
Video1_goleiromelhorado.mp4 (1,28 MB) Video1_goleiromelhorado.mp4 Atuação do goleiro no grSim, após implementações Gabriel Borges da Conceição, 23/04/2018 17:29 h
Video2_goleiromelhorado.mp4 (1,75 MB) Video2_goleiromelhorado.mp4 Atuação do goleiro na SSL Vision Log Player, após implementações Gabriel Borges da Conceição, 23/04/2018 17:29 h
Video1_pclab.mp4 (4,57 MB) Video1_pclab.mp4 atuação do goleiro testado no computador do lab(mais rápido) Gabriel Borges da Conceição, 23/04/2018 20:44 h
goleiro.PNG (15,5 KB) goleiro.PNG Nicolas Oliveira, 24/04/2018 01:02 h

Atualizado por Gabriel Borges da Conceiçãomais de 6 anos

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çãomais de 6 anos

Ações #3

Atualizado por Lucas Germanomais 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..

Ações #4

Atualizado por Gabriel Borges da Conceiçãomais 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..

Ações #5

Atualizado por Gabriel Borges da Conceiçãomais 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..

Ações #6

Atualizado por Luciano Barreiramais 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?

Ações #7

Atualizado por Nicolas Oliveiramais 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.

Ações #8

Atualizado por Nicolas Oliveiramais de 6 anos

Isso já está implementado? Se sim, em qual branch? Já subiu para o github?

Ações #9

Atualizado por Gabriel Borges da Conceiçãomais 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.

Ações #10

Atualizado por Gabriel Borges da Conceiçãomais 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!

Ações #11

Atualizado por Gabriel Borges da Conceiçãomais de 6 anos

  • Arquivo excluído (demonstracaoposicionamentogoleiro.mp4)
Ações #12

Atualizado por Gabriel Borges da Conceiçãomais de 6 anos

  • Arquivo Video1.wmv adicionado
  • Arquivo Video2.wmv adicionado
Ações #13

Atualizado por Gabriel Borges da Conceiçãomais de 6 anos

  • Arquivo excluído (Video1.wmv)
Ações #14

Atualizado por Gabriel Borges da Conceiçãomais de 6 anos

  • Arquivo excluído (Video2.wmv)
Ações #16

Atualizado por Gabriel Borges da Conceiçãomais 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.

Ações #17

Atualizado por Gabriel Borges da Conceiçãomais 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.

Error executing the video macro (undefined method `find_by_filename' for []:Array Did you mean? find_index)

Error executing the video macro (undefined method `find_by_filename' for []:Array Did you mean? find_index)

Ações #18

Atualizado por Gabriel Borges da Conceiçãomais 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çãomais de 6 anos

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.

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 1548, container_id: 578, container_type: "Issue", filename: "Video1_goleiromelhorado.mp4", disk_filename: "180423172916_Video1_goleiromelhorado.mp4", filesize: 1346819, content_type: "video/mp4", digest: "44fbd5a14c915e564a9a1df41a9b7be7", downloads: 0, author_id: 93, created_on: "2018-04-23 17:29:16.000000000 +0000", description: "Atuação do goleiro no grSim, após implementações", disk_directory: "2018/04">, #<Attachment id: 1549, container_id: 578, container_type: "Issue", filename: "Video2_goleiromelhorado.mp4", disk_filename: "180423172919_Video2_goleiromelhorado.mp4", filesize: 1829919, content_type: "video/mp4", digest: "878dc9430d73e1e31b5c5c1e798b7b36", downloads: 0, author_id: 93, created_on: "2018-04-23 17:29:19.000000000 +0000", description: "Atuação do goleiro na SSL Vision Log Player, após ...", disk_directory: "2018/04">]:Array Did you mean? find_index)

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 1548, container_id: 578, container_type: "Issue", filename: "Video1_goleiromelhorado.mp4", disk_filename: "180423172916_Video1_goleiromelhorado.mp4", filesize: 1346819, content_type: "video/mp4", digest: "44fbd5a14c915e564a9a1df41a9b7be7", downloads: 0, author_id: 93, created_on: "2018-04-23 17:29:16.000000000 +0000", description: "Atuação do goleiro no grSim, após implementações", disk_directory: "2018/04">, #<Attachment id: 1549, container_id: 578, container_type: "Issue", filename: "Video2_goleiromelhorado.mp4", disk_filename: "180423172919_Video2_goleiromelhorado.mp4", filesize: 1829919, content_type: "video/mp4", digest: "878dc9430d73e1e31b5c5c1e798b7b36", downloads: 0, author_id: 93, created_on: "2018-04-23 17:29:19.000000000 +0000", description: "Atuação do goleiro na SSL Vision Log Player, após ...", disk_directory: "2018/04">]:Array Did you mean? find_index)

Ações #20

Atualizado por Nicolas Oliveiramais de 6 anos

Dar uma olhada na orientação do goleiro antes do chute ser realizado. Ta um pouco estranha.

Ações #21

Atualizado por Gabriel Borges da Conceiçãomais de 6 anos

Vídeo da atuação do goleiro testado no computador do lab(mais rápido):

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 1550, container_id: 578, container_type: "Issue", filename: "Video1_pclab.mp4", disk_filename: "180423204410_Video1_pclab.mp4", filesize: 4789583, content_type: "video/mp4", digest: "f1a78a95a22d3bc7f18d5d98a0557fc9", downloads: 0, author_id: 93, created_on: "2018-04-23 20:44:10.000000000 +0000", description: "atuação do goleiro testado no computador do lab(ma...", disk_directory: "2018/04">]:Array Did you mean? find_index)

Ações #22

Atualizado por Gabriel Borges da Conceiçãomais 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!

Ações #23

Atualizado por Nicolas Oliveiramais 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.

Ações #24

Atualizado por Gabriel Borges da Conceiçãomais 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.
Ações #25

Atualizado por Gabriel Borges da Conceiçãomais de 6 anos

A versão final e mais atualizada do goleiro se encontra no github na branch goalie_rework

Ações #26

Atualizado por Nicolas Oliveiramais de 6 anos

Merge na branch develoment feito. Qualquer novo ajuste deve ser feito lá agora.

Ações #27

Atualizado por Nicolas Oliveiramais de 6 anos

Lembrar de considerar pro goleiro só avançar na bola quando ela estiver na nossa área. Ele está indo em qualquer área.

![](goleiro.PNG)

Ações #28

Atualizado por Gabriel Borges da Conceiçãomais de 6 anos

Resposta: Já foi consertado, testado e upado na branch develpment

Ações #29

Atualizado por Gabriel Borges da Conceiçãomais de 6 anos

  • Situação alterado de Feedback para Resolvida
Ações #30

Atualizado por Gabriel Borges da Conceiçãomais de 6 anos

  • Situação alterado de Resolvida para Fechada
Ações

Exportar para Atom PDF