Projeto

Geral

Perfil

Ações

Atividade #1051

Fechada

Obter a média da posição do robô e da bola para amenizar a falha quando está na interseção das câmeras

Adicionado por Lucas Germano mais de 5 anos atrás. Atualizado mais de 5 anos atrás.

Situação:
Fechada
Prioridade:
Imediata
Atribuído para:
Início:
18/03/2019
Data prevista:

Descrição

Atualmente não existe um cálculo para calcular uma posição média para o robô e a bola quando estão na interseção das câmeras, fazendo que com sua posição fique variando (literalmente teleportando) entre uma posição e outra. Em casos mais extremos quando o robô está no centro do campo, temos o objeto variando em até 4 posições, fazendo com que atividades precisas que o robô executa como o chute fiquem mais difíceis de serem executadas.

A primeira ideia e a mais simples que tive é calcular a média aritmética entre as posições do robô, fazendo:
![picture244-1.png]()

A segunda ideia é fazer uma média ponderada considerando os pesos como a distância do robô até o ponto que a vertical que passas pela câmeras tocam o solo:
![picture244-3.png]()


Arquivos

picture244-1.png (4,19 KB) picture244-1.png Lucas Germano, 18/03/2019 01:31 h
picture244-3.png (32,9 KB) picture244-3.png Lucas Germano, 18/03/2019 01:31 h
picture618-1.png (26,4 KB) picture618-1.png Lucas Germano, 18/03/2019 01:49 h
robos_movendo_alg_antigo.mp4 (13,4 MB) robos_movendo_alg_antigo.mp4 Lucas Germano, 29/04/2019 03:27 h
robos_parados_alg_antigo.mp4 (1,55 MB) robos_parados_alg_antigo.mp4 Lucas Germano, 29/04/2019 03:27 h
robos_movendo_alg_novo.mp4 (12,5 MB) robos_movendo_alg_novo.mp4 Lucas Germano, 29/04/2019 03:27 h
robos_parados_alg_novo.mp4 (2 MB) robos_parados_alg_novo.mp4 Lucas Germano, 29/04/2019 03:27 h
Ações #1

Atualizado por Lucas Germanomais de 5 anos

As imagens não saíram direito, então vou colocar denovo aqui o texto:

Atualmente não existe um cálculo para calcular uma posição média para o robô e a bola quando estão na interseção das câmeras, fazendo que com sua posição fique variando (literalmente teleportando) entre uma posição e outra. Em casos mais extremos quando o robô está no centro do campo, temos o objeto variando em até 4 posições, fazendo com que atividades precisas que o robô executa como o chute fiquem mais difíceis de serem executadas.

A primeira ideia e a mais simples que tive é calcular a média aritmética entre as posições do robô, fazendo:
![](picture244-1.png)

A segunda ideia é fazer uma média ponderada considerando os pesos como a distância do robô até o ponto que a vertical que passas pela câmeras tocam o solo:
![](picture244-3.png)

Ações #2

Atualizado por Lucas Germanomais de 5 anos

Acabei de perceber que a influência na posição deve ser inversamente proporcional à distância que o robô está dos pontos, então ficaria assim:

![](picture618-1.png)

Ações #3

Atualizado por Lucas Germanomais de 5 anos

Já estou terminando a implementação e testarei esse fds no PIRF

Ações #4

Atualizado por Lucas Germanomais de 5 anos

  • Prioridade alterado de Normal para Imediata

Atualizado por Lucas Germanomais de 5 anos

Esse fim de semana eu implementei o código da média das posições e a Rebeca e o Nicolas me ajudaram a corrigí-lo e testá-lo. Antigamente tínhamos o seguinte algoritmo:

Algoritmo antigo para escolha dos robôs e da bola
1. Coloca-se todas as câmeras recebidas pela visão em um array de câmeras
2. Se existem robôs repetidos com mesmo ID, seleciona-se aquele com a maior confidence
3. Entre todas as bolas presente no array de câmeras, é selecionada aquela com maior confidence
4. É criado um frame com somente um robô por ID e somente uma bola (foram excluídas todas as repetições)

Algoritmo implementedo atualmente
1. Coloca-se todas as câmeras recebidas pela visão em um array de câmeras
2. É criado um vetor de clusters, sendo o cluster definido por:

cluster:
x: double
y: double
robot_id: int
cam_id: int
valid: bool

É criado um array desses clusters, para todos os robôs que aparecem nas câmeras (Veja que um robô, se aparece na visão, aparece no mínimo 1 vez e no máximo 4 vezes)

5. Para todos os robôs com um mesmo ID e que possuem a flag valid igual a true: é realizado uma média ponderada (descrita nas equações acima) e obtém-se somente um robô por ID presente no array de câmeras.
6. Porém nesse robô obtido no passo acima somente temos os dados obtidos pelo cluster: x, y e robot_id. Precisamos de todos os outros dados do robô. Para isso, assim como no algoritmo anterior, é escolhido o robô com a maior confidence com esse mesmo id, onde iremos substituir nele apenas os dados calculados pela média.

7. Um procedimento similar é feito para a bola.

Fizemos o teste com o algoritmo antigo e novo:

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 4062, container_id: 1051, container_type: "Issue", filename: "robos_movendo_alg_antigo.mp4", disk_filename: "190429032724_robos_movendo_alg_antigo.mp4", filesize: 14078906, content_type: "video/mp4", digest: "979a54b6b65efeb39c32329be166bae5", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:24.000000000 +0000", description: "", disk_directory: "2019/04">, #<Attachment id: 4064, container_id: 1051, container_type: "Issue", filename: "robos_movendo_alg_novo.mp4", disk_filename: "190429032726_robos_movendo_alg_novo.mp4", filesize: 13067949, content_type: "video/mp4", digest: "5f57e31c939d077f251e33fc27f45804", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:26.000000000 +0000", description: "", disk_directory: "2019/04">, #<Attachment id: 4063, container_id: 1051, container_type: "Issue", filename: "robos_parados_alg_antigo.mp4", disk_filename: "190429032725_robos_parados_alg_antigo.mp4", filesize: 1620570, content_type: "video/mp4", digest: "2da9506d11655296b46eb6f73243919a", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:25.000000000 +0000", description: "", disk_directory: "2019/04">, #<Attachment id: 4065, container_id: 1051, container_type: "Issue", filename: "robos_parados_alg_novo.mp4", disk_filename: "190429032726_robos_parados_alg_novo.mp4", filesize: 2095476, content_type: "video/mp4", digest: "d300611f07e7a3e5f4434c29757c36ae", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:26.000000000 +0000", description: "", disk_directory: "2019/04">]:Array Did you mean? find_index)

Algoritmo novo:
Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 4062, container_id: 1051, container_type: "Issue", filename: "robos_movendo_alg_antigo.mp4", disk_filename: "190429032724_robos_movendo_alg_antigo.mp4", filesize: 14078906, content_type: "video/mp4", digest: "979a54b6b65efeb39c32329be166bae5", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:24.000000000 +0000", description: "", disk_directory: "2019/04">, #<Attachment id: 4064, container_id: 1051, container_type: "Issue", filename: "robos_movendo_alg_novo.mp4", disk_filename: "190429032726_robos_movendo_alg_novo.mp4", filesize: 13067949, content_type: "video/mp4", digest: "5f57e31c939d077f251e33fc27f45804", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:26.000000000 +0000", description: "", disk_directory: "2019/04">, #<Attachment id: 4063, container_id: 1051, container_type: "Issue", filename: "robos_parados_alg_antigo.mp4", disk_filename: "190429032725_robos_parados_alg_antigo.mp4", filesize: 1620570, content_type: "video/mp4", digest: "2da9506d11655296b46eb6f73243919a", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:25.000000000 +0000", description: "", disk_directory: "2019/04">, #<Attachment id: 4065, container_id: 1051, container_type: "Issue", filename: "robos_parados_alg_novo.mp4", disk_filename: "190429032726_robos_parados_alg_novo.mp4", filesize: 2095476, content_type: "video/mp4", digest: "d300611f07e7a3e5f4434c29757c36ae", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:26.000000000 +0000", description: "", disk_directory: "2019/04">]:Array Did you mean? find_index)

Teste com os robôs parados:
Algoritmo antigo:

Teste com os robôs movendo:
Algoritmo antigo:

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 4062, container_id: 1051, container_type: "Issue", filename: "robos_movendo_alg_antigo.mp4", disk_filename: "190429032724_robos_movendo_alg_antigo.mp4", filesize: 14078906, content_type: "video/mp4", digest: "979a54b6b65efeb39c32329be166bae5", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:24.000000000 +0000", description: "", disk_directory: "2019/04">, #<Attachment id: 4064, container_id: 1051, container_type: "Issue", filename: "robos_movendo_alg_novo.mp4", disk_filename: "190429032726_robos_movendo_alg_novo.mp4", filesize: 13067949, content_type: "video/mp4", digest: "5f57e31c939d077f251e33fc27f45804", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:26.000000000 +0000", description: "", disk_directory: "2019/04">, #<Attachment id: 4063, container_id: 1051, container_type: "Issue", filename: "robos_parados_alg_antigo.mp4", disk_filename: "190429032725_robos_parados_alg_antigo.mp4", filesize: 1620570, content_type: "video/mp4", digest: "2da9506d11655296b46eb6f73243919a", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:25.000000000 +0000", description: "", disk_directory: "2019/04">, #<Attachment id: 4065, container_id: 1051, container_type: "Issue", filename: "robos_parados_alg_novo.mp4", disk_filename: "190429032726_robos_parados_alg_novo.mp4", filesize: 2095476, content_type: "video/mp4", digest: "d300611f07e7a3e5f4434c29757c36ae", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:26.000000000 +0000", description: "", disk_directory: "2019/04">]:Array Did you mean? find_index)

Algoritmo novo:
Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 4062, container_id: 1051, container_type: "Issue", filename: "robos_movendo_alg_antigo.mp4", disk_filename: "190429032724_robos_movendo_alg_antigo.mp4", filesize: 14078906, content_type: "video/mp4", digest: "979a54b6b65efeb39c32329be166bae5", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:24.000000000 +0000", description: "", disk_directory: "2019/04">, #<Attachment id: 4064, container_id: 1051, container_type: "Issue", filename: "robos_movendo_alg_novo.mp4", disk_filename: "190429032726_robos_movendo_alg_novo.mp4", filesize: 13067949, content_type: "video/mp4", digest: "5f57e31c939d077f251e33fc27f45804", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:26.000000000 +0000", description: "", disk_directory: "2019/04">, #<Attachment id: 4063, container_id: 1051, container_type: "Issue", filename: "robos_parados_alg_antigo.mp4", disk_filename: "190429032725_robos_parados_alg_antigo.mp4", filesize: 1620570, content_type: "video/mp4", digest: "2da9506d11655296b46eb6f73243919a", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:25.000000000 +0000", description: "", disk_directory: "2019/04">, #<Attachment id: 4065, container_id: 1051, container_type: "Issue", filename: "robos_parados_alg_novo.mp4", disk_filename: "190429032726_robos_parados_alg_novo.mp4", filesize: 2095476, content_type: "video/mp4", digest: "d300611f07e7a3e5f4434c29757c36ae", downloads: 0, author_id: 36, created_on: "2019-04-29 03:27:26.000000000 +0000", description: "", disk_directory: "2019/04">]:Array Did you mean? find_index)

Pode-se ver claramente a melhora na movimentação dos robôs e na visualização deles pelo labview.

Problemas observados: quando o robô chuta a bola, ela some da visão, ou seja, a bola está sumindo quando possui velocidade alta. Vamos abrir uma tarefa para investigar o motivo desse problema, mas ele acontecia também antes de implementarmos essa média descrita nesta tarefa.

Observação: o robô aleatório que aparece as vezes no vídeo é a camisa da pessoa que estava colocando a bola no campo.
Deve-se desconsiderar também os problemas assim que o código é iniciado, estamos tendo problemas com a inicialização, pra isso temos que para o código e dar play denovo algumas vezes para tudo se acertar.

Ações #6

Atualizado por Lucas Germanomais de 5 anos

  • Situação alterado de Em andamento para Feedback
Ações #7

Atualizado por Lucas Germanomais de 5 anos

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

Exportar para Atom PDF