Atividade #1213
AbertaMeta #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 aproximadamente 5 anos atrás. Atualizado mais de 4 anos atrás.
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 |
Atualizado por Gabriel Borges da Conceição há quase 5 anos
- Atribuído para ajustado para Antonio de Souza Gomes Pereira
Atualizado por Gabriel Borges da Conceição há quase 5 anos
- Descrição atualizado(a) (diff)
Atualizado por Gabriel Borges da Conceição há quase 5 anos
- Arquivo FieldSwitchSides.png FieldSwitchSides.png adicionado
- Arquivo ConvertRobots.png ConvertRobots.png adicionado
- Arquivo ConvertBall.png ConvertBall.png adicionado
- Arquivo TeamAndSide.png TeamAndSide.png adicionado
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 Pereira há quase 5 anos
- Arquivo atr_ball.png atr_ball.png adicionado
- Arquivo atr_robot.png atr_robot.png adicionado
- Arquivo camera_ex.png camera_ex.png adicionado
- Arquivo class_camera.png class_camera.png adicionado
- Arquivo detection_robot.png detection_robot.png adicionado
- Arquivo ex_implement.png ex_implement.png adicionado
- Arquivo field_exe.png field_exe.png adicionado
- Arquivo read_udp.png read_udp.png adicionado
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
Atualizado por Gabriel Borges da Conceição há quase 5 anos
- Arquivo Touch.png Touch.png adicionado
- Arquivo LVparaTouch.png LVparaTouch.png adicionado
- Arquivo LendoGame.png LendoGame.png adicionado
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)
Atualizado por Gabriel Borges da Conceição há quase 5 anos
- Data prevista ajustado para 19/02/2020
Atualizado por Gabriel Borges da Conceição há quase 5 anos
- Tarefa mãe ajustado para #1230
Atualizado por Lucas Germano há quase 5 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.
Atualizado por Gabriel Borges da Conceição há quase 5 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.
Atualizado por Gabriel Borges da Conceição há quase 5 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).
Atualizado por Gabriel Borges da Conceição há quase 5 anos
- Descrição atualizado(a) (diff)
Atualizado por Antonio de Souza Gomes Pereira há quase 5 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
};
Atualizado por Gabriel Borges da Conceição há mais 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.
Atualizado por Gabriel Borges da Conceição há mais 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.
Atualizado por Gabriel Borges da Conceição há mais de 4 anos
- Situação alterado de Em andamento para Feedback
Atualizado por Nicolas Oliveira há mais de 4 anos
ok. Mas faz um commit marcando onde isso aqui ficou pronto.
Atualizado por Gabriel Borges da Conceição há mais 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
Atualizado por Gabriel Borges da Conceição há mais de 4 anos
- Situação alterado de Feedback para Em andamento