Atividade #1051
FechadaObter 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.
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 |
Atualizado por Lucas Germano há mais 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)
Atualizado por Lucas Germano há mais de 5 anos
- Arquivo picture618-1.png picture618-1.png adicionado
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)
Atualizado por Lucas Germano há mais de 5 anos
Já estou terminando a implementação e testarei esse fds no PIRF
Atualizado por Lucas Germano há mais de 5 anos
- Prioridade alterado de Normal para Imediata
Atualizado por Lucas Germano há mais de 5 anos
- Arquivo robos_movendo_alg_antigo.mp4 robos_movendo_alg_antigo.mp4 adicionado
- Arquivo robos_movendo_alg_novo.mp4 robos_movendo_alg_novo.mp4 adicionado
- Arquivo robos_parados_alg_antigo.mp4 robos_parados_alg_antigo.mp4 adicionado
- Arquivo robos_parados_alg_novo.mp4 robos_parados_alg_novo.mp4 adicionado
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:
Algoritmo novo:
Teste com os robôs parados:
Algoritmo antigo:
Teste com os robôs movendo:
Algoritmo antigo:
Algoritmo novo:
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.
Atualizado por Lucas Germano há mais de 5 anos
- Situação alterado de Em andamento para Feedback
Atualizado por Lucas Germano há mais de 5 anos
- Situação alterado de Feedback para Fechada