Projeto

Geral

Perfil

Ações

Atividade #1213

Aberta

Meta #1230: Ter bons filtro de posição e estimatidor de velocidades

Refazer toda a visão com orientação a objeto

Adicionado por Gabriel Borges da Conceição mais de 4 anos atrás. Atualizado mais de 4 anos atrás.

Situação:
Em andamento
Prioridade:
Normal
Início:
01/11/2019
Data prevista:
19/02/2020 (mais de 4 anos atrasado)

Descrição

SENDO FEITO NA BRANCH oop-vision CRIADA A PARTIR DA readudp.

O while da visão não consegue ultrapassar os 120/130 fps. Não sabemos ao certo o porquê disso.

Não é só por causa do processamento do Kalman pois, quando o desligamos nos testes na larc2019, o fps subia mais uns 30 fps no máximo, mas não chegava a 240 fps.

Pra começar a resolver esse problema, essa tarefa destina-se a refazer toda a visão orientada a objeto, o que já vai ajudar a reduzir as passagens de valores (de cluster pra OOP e etc...)

Imaginamos que isso já deva ajudar a ter menos custo computacional e também vai deixar mais organizado.


Arquivos

FieldSwitchSides.png (66,4 KB) FieldSwitchSides.png Gabriel Borges da Conceição, 14/02/2020 12:57 h
ConvertBall.png (32,1 KB) ConvertBall.png Gabriel Borges da Conceição, 14/02/2020 12:57 h
ConvertRobots.png (30,4 KB) ConvertRobots.png Gabriel Borges da Conceição, 14/02/2020 12:57 h
TeamAndSide.png (66,3 KB) TeamAndSide.png Gabriel Borges da Conceição, 14/02/2020 12:57 h
atr_ball.png (21,6 KB) atr_ball.png Antonio de Souza Gomes Pereira, 14/02/2020 17:28 h
atr_robot.png (24,2 KB) atr_robot.png Antonio de Souza Gomes Pereira, 14/02/2020 17:28 h
camera_ex.png (42,3 KB) camera_ex.png Antonio de Souza Gomes Pereira, 14/02/2020 17:28 h
class_camera.png (32,3 KB) class_camera.png Antonio de Souza Gomes Pereira, 14/02/2020 17:28 h
detection_robot.png (33 KB) detection_robot.png Antonio de Souza Gomes Pereira, 14/02/2020 17:28 h
ex_implement.png (58,5 KB) ex_implement.png Antonio de Souza Gomes Pereira, 14/02/2020 17:28 h
field_exe.png (97,4 KB) field_exe.png Antonio de Souza Gomes Pereira, 14/02/2020 17:28 h
read_udp.png (53,7 KB) read_udp.png Antonio de Souza Gomes Pereira, 14/02/2020 17:28 h
Touch.png (17,5 KB) Touch.png Gabriel Borges da Conceição, 16/02/2020 00:44 h
LendoGame.png (25,2 KB) LendoGame.png Gabriel Borges da Conceição, 16/02/2020 00:45 h
LVparaTouch.png (15,4 KB) LVparaTouch.png Gabriel Borges da Conceição, 16/02/2020 00:45 h
Ações #1

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

  • Atribuído para ajustado para Antonio de Souza Gomes Pereira
Ações #2

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

  • Descrição atualizado(a) (diff)

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

Estou dividindo essa tarefa com o Antonio. Ele está com a parte da decodificação até o kalman, inclusive e eu estou com team and side, future pose, até o bundleAll.

Por enquanto fiz toda Team and Side incluindo suas SubVIs:

![](TeamAndSide.png)
![](FieldSwitchSides.png)
![](ConvertBall.png)
![](ConvertRobots.png)

Pode-se ver que ainda há cluster do gameStatus. Não vamos mexer no whilw do juiz por enquanto.

Atualizado por Antonio de Souza Gomes Pereiramais de 4 anos

Para substituirmos o cluster Detection Frame, foi criado a classe Camera, contendo os mesmos atributos que o cluster, porém ao invés de possuir os clusters dos robôs e da bola, é usado as classes relativas aos mesmos, como pode ser visto na figura abaixo:

![](class_camera.png)

Outra mudança foi a adição de mais atributos nas classes robot e ball, visto que as mesmas não eram usadas no processamento da visão e só continham os atributos finais da bola, o x_k|k do kalman e o Valid do tratamento da bola foram adicionados, por exemplo. Foi feito a mesma coisa para o robô, como pode ser visto abaixo:

ATRIBUTOS DA BOLA:
![](atr_ball.png)

ATRIBUTOS DO ROBÔ:
![](atr_robot.png)

A tarefa anterior de tratamento de recebimento de pacotes no while Read UDP já foi usada como base dessa, e as referências feitas para os clusters do Detection Frame e do Field já foram substituídas pelas classes Camera e Field.

![](read_udp.png)

As mudanças foram feitas até as partes de mais baixo nível do código. Para os robôs, a primeira vez que acontece o uso de OOP para a classe Robot é na vi SSL Detection Robot, na da Camera é na vi SSL Detection Frame, por fim a do Field é na vi SSL Geometry Data. As imagens de cada implementação estão mostradas abaixo, em ordem:

CLASSE ROBOT:
![](detection_robot.png)

CLASSE CAMERA:
![](camera_ex.png)

CLASSE FIELD:
![](field_exe.png)

O trabalho que estamos fazendo é basicamente substituir todos o clusters da visão, como exemplo de como está sendo feito é mostrado na vi CheckPossibleBalls, que faz parte da seção responsável por fazer o tratamento das possíveis bolas na visão.

![](ex_implement.png)

Até o momento da tarefa, tenho pronto as seguintes partes:(Lembrando que ainda é necessário comparar lado a lado com o código original para consertar possíveis erros ou detalhes faltando)

FEITOS:
*decodeCameras e subvis
*getCurrentCameras
*updateFrameArray e subvis

FALTA FAZER:
*Kalman
*Estimador Simples
*Média Câmeras

Ações #5

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

Muito bem explicado!

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

Essa tarefa, como foi dito, está sendo feita para reorganizar o while da visão e reduzir as passagens de parâmetros.

Mas além disso, é bom porque olhamos com mais calma cada coisa e percebemos que algumas cosias podem ser feitas de forma mais otimizada, como a seguinte situação:

![](LendoGame.png)

Na foto acima, estamos lendo o game inteiro com inúmeras informações para apenas usar o touch event numa subVI. Isso com certeza pesa mais o código. Isso já foi substituído pelo uso de apenas uma variável local:

![](LVparaTouch.png)

![](Touch.png)

Ações #7

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

  • Data prevista ajustado para 19/02/2020
Ações #8

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

  • Tarefa mãe ajustado para #1230
Ações #9

Atualizado por Lucas Germanomais de 4 anos

A documentação poderia ser feita de melhor forma, tem muita imagem com muita coisa circulada que fica difícil o entendimento. Uma lista com as classes novas seria suficiente ou então um diagrama de classes simples poderia ajudar bastante a entender o que vocês estão fazendo.

Ações #10

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

Resumindo:

A única classe criada foi a classe Camera:

![](class_camera.png)

Essa classe substitui o Cluster Detection Frame. Os atributos desta classe são os mesmos que tinham no cluster, com algumas diferenças:

1- No cluster Detection Frame tínhamos um vetor de clusters Ball. Na classe Camera temos um vetor de objetos da classe Ball.

2- No cluster Detection Frame tínhamos dois vetor de clusters Robot, uma para azuis e outro para amarelos. Na classe Camera temos dois vetores de objetos da classe Robot.

Ações #11

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

Além disso, adicionamos alguns atributos à classe Ball e à classe Robot, como a matriz x_k|K, confidence, entre outros:

ATRIBUTOS DA BOLA:
![](atr_ball.png)

ATRIBUTOS DO ROBÔ:
![](atr_robot.png)

Nós precisamos adicionar esses atributos a essas classes pois eles são usados na visão.

Essas foram as únicas mudanças em termos de classes (Criada classe Camera e adicionados atributos às classes Ball e Robot). De resto, o que fizemos foi substituir os clusters por esses objetos desde o início do código (decodificação, kalman, etc).

Ações #12

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

  • Descrição atualizado(a) (diff)
Ações #13

Atualizado por Antonio de Souza Gomes Pereiramais de 4 anos

Todos os arquivos já foram portados para oop, falta conferir(devido a alguns bugs):

obs1: botar em só uma vi, no método doKalmanAndMakeFrame.

Conferidos:

(Decode Cameras ok){
-Ssl detection frame
-Ssl Geometry data
};

Ações #14

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

Debuguei o código e consertei os erros. Aparentemente já está tudo correto. Precisamos testar mais pra garantir que ainda não restou nenhum erro e colocar isso no código principal.

Ações #15

Atualizado por Nicolas Oliveiramais de 4 anos

ok

Ações #16

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

Esta tarefa acabou sendo feita a partir da branch em que eu estava fazendo a tarefa http://redmine.roboime.com.br/issues/1223 e não a partir da dev.

Com isso, acho melhor terminar a tarefa do link para dar o merge.

Ações #17

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

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

Atualizado por Nicolas Oliveiramais de 4 anos

ok. Mas faz um commit marcando onde isso aqui ficou pronto.

Ações #19

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

Okay.

Por enquanto a visão orientada a objeto está na branch oop-vision e o commit que fez funcionar corrigindo os erros existentes é o commit 55f8e994c7f618aaf70409ad6ab40e37fc61aaf2

Ações #20

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

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

Exportar para Atom PDF