Objetivo #623
FechadaCriar software para análise estatística dos jogos
Descrição
A idéia será criar um programa no LabView que analise os dados do jogo, em tempo real ou não, e mostre informações relevantes na tela, como: posse de bola, velocidade média e máxima dos robôs, quanto cada robô percorreu ao longo do jogo, média de gols ao longo das partidas, partes do campo que mais possuem a presença dos robôs, etc. Esse software é semelhante a aqueles mostrados nas partidas de futebol. Os prazos determinados foram os seguintes:
01/04: Primeiro protótipo
13/05: Comunicar o módulo estatístico com o módulo das estratégias/jogo
27/05: Utilizar o módulo estatístico na IA
Arquivos
Subtarefas 2 (0 aberta — 2 fechadas)
Atualizado por Lucas Germano há mais de 6 anos
Primeiramente pensei em levantar algumas funções que o módulo estatístico deve ter, então preciso de sugestões, coisas que seriam interessantes ver na tela durante um jogo ou informações guardadas para serem analisadas durante vários jogos. Vou dar aqui alguns exemplos:
- Porcentagem de posse de bola
- Velocidade média e máxima dos robôs
- Quanto cada robô percorreu ao longo do jogo
- Média de gols ao longo das partidas
- Partes do campo que mais possuem a presença dos robôs
Quanto mais detalhes sobre as funções sugeridas, melhor.
Atualizado por Lucas Germano há mais de 6 anos
Outros parâmetros:
- Qtd de chutes ao gol
- Precisão ao chutar
- Qtd de passes certos e errados
- Qtd de interceptações contra e a favor
- Qtd de defesas feitas pelo goleiro
- Qtd de bloqueios feitos por zagueiros
Atualizado por Luciano Barreira há mais de 6 anos
Discorrendo um pouco da ideia que tenho de como podemos começar a arquitetar e discutir nossas soluções:
- Primeiro protótipo: sugiro começar com uma modelagem conceitual do fluxo de dados do projeto, que nem colocamos no nosso TDP, e que tecnologias podem ser usadas. Acredito que o LabView tenha o que precisamos, mas é bom conferir isso, até pra ter uma ideia geral de como podemos arquitetar todo o sistema.
- Quanto à comunicação, já adiantando algumas ideias que podem ser oportunas na hora de implementar a comunicação: acredito que na parte de TX e RX (trasmitir e receber), podemos fazer de maneira idêntica ao Fênix (finado SSL-View), recebendo pacotes via UDP e enviando também via UDP (como fazemos com o simulador grSim). O maior desafio acredito ser elaborar um bom protocolo para a transferência de dados. Recomendo uma leitura superficial de como funciona o [Google's Protobuf](https://developers.google.com/protocol-buffers/). Não existe uma espécie de "tradutor" de textos do tipo .proto, que descrevem o formato dos pacotes, em estruturas para [serialização](https://en.wikipedia.org/wiki/Serialization) do protobuf para LabView, mas podemos fazer isso manualmente com codificadores e decodificadores idênticos aos do próprio protobuf, que é o que fazemos. Ou seja, é importante pensarmos em uma primeira versão boa o suficiente para evitar refazer o mesmo trabalho várias vezes. Poderíamos não utilizar o protobuf e definir nosso próprio protocolo, mas isso não só impossibilita extendermos outros módulos à parte de maneira simples como é um esforço desnecessário, pois estaríamos fazendo o mesmo papel que o protobuf. Sugiro também que usemos multicasting, por simplicidade. Desta forma poupa reconfigurações toda vez que for usar o software em conjunto com o Fênix. Enfim, são ideias que quando começarmos a trabalhar nisso podemos voltar, revisar e avaliar. Boa parte das respostas a esses problemas vão surgir enquanto forem percebidas as demandas do sistema.
- Utilizar na IA: depois integrado com a Fênix, é partir pro abraço. Substituir nossos timers e soluções ingênuas pelo processamento estatístico do nosso "Técnico". Analisar os resultados de nossas partidas além do clássico 10x0 na intel antiga, apontando nossos principais defeitos para então analisarmos como solucioná-los.
Atualizado por Nicolas Oliveira há mais de 6 anos
- Arquivo histograma.PNG histograma.PNG adicionado
- Arquivo mapadecalor.jpg mapadecalor.jpg adicionado
Para mostrar a distribuição de probabilidade de encontrar um determinado robô em campo o ideal seria tentar mostrar um mapa de calor (histograma 2D) como o da imagem abaixo:
![](mapadecalor.jpg)
Não sei a viabilidade de se desenhar algo tipo em labview com as VIs nativas, vale uma pesquisa.
E para os dados abaixo o ideal seria utilizar um histograma:
- Erro na posição de chute. (VI já implementada)
- Velocidade dos robôs
- Chance de um robô com um determinado ID estar com a bola
- Chance de um determinado ID receber um passe
- Erro entre a posição do goleiro e a posição desejada pra defesa
![](histograma.PNG)
Atualizado por Luciano Barreira há mais de 6 anos
- Arquivo exemplo.PNG exemplo.PNG adicionado
- Arquivo example-gradient.vi example-gradient.vi adicionado
Nicolas Oliveira escreveu:
Para mostrar a distribuição de probabilidade de encontrar um determinado robô em campo o ideal seria tentar mostrar um mapa de calor (histograma 2D) como o da imagem abaixo:
![](mapadecalor.jpg)
Não sei a viabilidade de se desenhar algo tipo em labview com as VIs nativas, vale uma pesquisa.
E para os dados abaixo o ideal seria utilizar um histograma:
- Erro na posição de chute. (VI já implementada)
- Velocidade dos robôs
- Chance de um robô com um determinado ID estar com a bola
- Chance de um determinado ID receber um passe
- Erro entre a posição do goleiro e a posição desejada pra defesa
![](histograma.PNG)
Dá pra desenhar sim. Consegui aqui:
![exemplo](exemplo.png)
Segue a VI demo.
Atualizado por Luciano Barreira há mais de 6 anos
- Arquivo exemplo1.PNG exemplo1.PNG adicionado
- Arquivo PercentageToRGB.vi PercentageToRGB.vi adicionado
- Arquivo example-gradient.vi example-gradient.vi adicionado
O mais perto que eu cheguei disso foi um algoritmo pra determinar uma cor de temperatura:
http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/
Usando ele, fica assim:
![](exemplo1.png)
Atualizado por Luiz Renault Leite Rodrigues há mais de 6 anos
Excelente trabalho, senhores. Apenas complementando, apesar do mapeamento de cores de temperatura sem bem amigável do ponto de vista visual, para um algoritmo de planejamento de trajetória não seria tanto. Neste caso um gráfico grayscale inteiro, de 8 bits, seria extremamente eficiente. Há também a possibilidade de utilizar um grayscale float.
Atualizado por Luciano Barreira há mais de 6 anos
- Arquivo exemplo2.PNG exemplo2.PNG adicionado
- Arquivo usage.PNG usage.PNG adicionado
- Arquivo PercentageToRGB.vi PercentageToRGB.vi adicionado
Luiz Renault Leite Rodrigues escreveu:
Excelente trabalho, senhores. Apenas complementando, apesar do mapeamento de cores de temperatura sem bem amigável do ponto de vista visual, para um algoritmo de planejamento de trajetória não seria tanto. Neste caso um gráfico grayscale inteiro, de 8 bits, seria extremamente eficiente. Há também a possibilidade de utilizar um grayscale float.
Infelizmente não achei nada nativo do LabView que faça já esse tratamento, usando um u8 no pixmap. Vi que tem o pacote de visão do labview que ajuda nisso, mas dá pra fazer igualando todos os RGB.
Fiz o update da VI pra colocar opção grayscale. Pode ser que para algumas estatísticas um jeito fique melhor de visualizar que outro
Eis o resultado:
![](exemplo2.png)
Pra alternar, basta alterar o Enum de entrada da VI:
![](usage.png)
Atualizado por Lucas Germano há mais de 6 anos
- Arquivo picture133-1.png picture133-1.png adicionado
Por algum motivo aqui não deu certo, ficou bugado desse jeito com greyscale ou usando temperature:
![](picture133-1.png)
Baixei as VI's do Luciano e usei eles sem mudar nada. Também não consigui entender direito a lógica usada para obeter a combinação da imagem original com o gradiente..
Atualizado por Ricardo Silveira Mendes há mais de 6 anos
- Arquivo Análise Estatística.vi Análise Estatística.vi adicionado
Segue um programa de análise estatística por meio de um histograma da posição do robô no campo. O histograma funciona da seguinte maneira, o usuário indica quantas divisões o campo deve ter no eixo x e no eixo y. A origem do sistema de coordenadas é o canto inferior esquerdo do campo. Dividindo assim o campo como uma matriz. A cada k posições do eixo x do histograma (sendo k a quantidade de divisões que foi escolhida para o eixo x do campo) começa a plotar-se a estatística da próxima linha do campo, indo assim sucessivamente cobrindo todas as posições do campo.
Atualizado por Luiz Renault Leite Rodrigues há mais de 6 anos
Postar sempre imagens dos resultados.
Atualizado por Ricardo Silveira Mendes há mais de 6 anos
- Arquivo Exemplo de teste.png Exemplo de teste.png adicionado
A imagem é de um teste feito para algumas posições escolhidas em um arquivo teste. Ainda falta atualizar para fazer a leitura correta dos dados dos logs das partidas
Atualizado por Lucas Germano há mais de 6 anos
Ricardo, você está usando LabVIEW 2017 né? Não está dando pra abrir a VI aqui, tanto no lab quanto a maioria dos computadores do pessoal é 2016.. Tenta baixar ele, qualquer dúvida me fala.
Atualizado por Luiz Renault Leite Rodrigues há mais de 6 anos
Sugiro atualizarem para o 2017.
Atualizado por Luciano Barreira há mais de 6 anos
- Arquivo heatmap.png heatmap.png adicionado
- Arquivo field2.png field2.png adicionado
- Arquivo PercentageToRGB.vi PercentageToRGB.vi adicionado
- Arquivo example-gradient.vi example-gradient.vi adicionado
Lucas Germano escreveu:
Por algum motivo aqui não deu certo, ficou bugado desse jeito com greyscale ou usando temperature:
![](picture133-1.png)Baixei as VI's do Luciano e usei eles sem mudar nada. Também não consigui entender direito a lógica usada para obeter a combinação da imagem original com o gradiente..
Germano, acho que com essa nova VI seu problema é resolvido. Tenta usar essa imagem que eu mandar agora como parâmetro, eu peguei da [wiki](https://raw.githubusercontent.com/RoboCup-SSL/ssl-rules/master/img/double-size-field.png) da SSL. Deixei o demo genérico também pro tamanho de imagem. Coloquei um modo novo de cor também, seguindo [esta](https://www.patrick-wied.at/blog/real-time-heatmap-explained) ideia aqui. O resultado foi esse:
![](heatmap.png)
usando essa foto aqui do campo:
![](field2.png)
Infelizmente as funções de manipulação de imagens nativas do LV não têm opção de alpha, só se usar o [Vision Development Module](https://forums.ni.com/t5/Example-Programs/Create-Partial-Transparent-Image-Overlay-Without-VDM/ta-p/3517061). Mas do jeito que tá já da visualizar bem os dados estatísticos. Seguem as VIs atualizadas
Atualizado por Ricardo Silveira Mendes há mais de 6 anos
- Arquivo Analise Estatística 2.0.vi Analise Estatística 2.0.vi adicionado
- Arquivo picture764-1.png picture764-1.png adicionado
O programa que segue lê os pontos estáticos de um log em Excel, calcula a estatística de presença dos robôs baseado nas suas coordenadas x e y e plota as estatísticas em um gráfico 3d em que o campo está nos eixos X e Y e a altura Z representa a estatística de presença dos robôs em uma determinada região (um retângulo de 180mm de lado no eixo X e 200mm de lado no eixo Y). O próximo passo será fazer uma leitura dinâmica de dados que permita recalcular essas estatísticas em tempo real ao fazer novas leituras de posições.
Atualizado por Nicolas Oliveira há mais de 6 anos
O log utilizado é o gerado a partir de uma partida real, ou é aquele que vc fez para teste?
Sugiro criar atividades paralelas a esse objetivo para melhorar organização da tarefa.
Atualizado por Lucas Germano há mais de 6 anos
Nicolas Oliveira escreveu:
O log utilizado é o gerado a partir de uma partida real, ou é aquele que vc fez para teste?
Sugiro criar atividades paralelas a esse objetivo para melhorar organização da tarefa.
Vou criar a minha atividade de colorir o campo de acordo com as probabilidades. Ricardo criará a sua de calcular a probabilidade com base em logs e com base em tempo real.
Atualizado por Carla Cosenza há mais de 6 anos
Sugestões de informações dadas durante as reuniões:
- Ficar calculando a velocidade da bola quando o robô chuta
- Saber se a bola está chegando no outro robô no passe, para aumentar ou diminuir a força
Atualizado por Luciano Barreira há mais de 6 anos
- Versão ajustado para RoboCup 2018
Atualizado por Nicolas Oliveira há mais de 6 anos
Gerar uma wiki sobre o módulo estatístico e incluir nela a implementação, como são feitos e pra quem servem os cálculos atuais e incluir um tópico sobre a comunicação.
Atualizado por Lucas Germano há mais de 6 anos
Outras possiveis ideias que surgiram na tarefa #702:
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.
Atualizado por Lucas Germano há quase 6 anos
- Situação alterado de Em andamento para Fechada