Atividade #1213
Meta #1230: Ter bons filtro de posição e estimatidor de velocidades
Refazer toda a visão com orientação a objeto
Description
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.
History
#1 Updated by Gabriel Borges da Conceição about 1 year ago
- Assignee set to Antonio de Souza Gomes Pereira
#2 Updated by Gabriel Borges da Conceição about 1 year ago
- Description updated (diff)
#3 Updated by Gabriel Borges da Conceição about 1 year ago
- File FieldSwitchSides.png added
- File ConvertRobots.png added
- File ConvertBall.png added
- File TeamAndSide.png added
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:
Pode-se ver que ainda há cluster do gameStatus. Não vamos mexer no whilw do juiz por enquanto.
#4 Updated by Antonio de Souza Gomes Pereira about 1 year ago
- File atr_ball.png added
- File atr_robot.png added
- File camera_ex.png added
- File class_camera.png added
- File detection_robot.png added
- File ex_implement.png added
- File field_exe.png added
- File read_udp.png added
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:
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:
ATRIBUTOS DO ROBÔ:
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.
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:
CLASSE CAMERA:
CLASSE FIELD:
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.
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
#5 Updated by Gabriel Borges da Conceição about 1 year ago
Muito bem explicado!
#6 Updated by Gabriel Borges da Conceição about 1 year ago
- File Touch.png added
- File LVparaTouch.png added
- File LendoGame.png added
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:
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:
#7 Updated by Gabriel Borges da Conceição about 1 year ago
- Due date set to 02/19/2020
#8 Updated by Gabriel Borges da Conceição about 1 year ago
- Parent task set to #1230
#9 Updated by Lucas Germano about 1 year ago
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.
#10 Updated by Gabriel Borges da Conceição about 1 year ago
Resumindo:
A única classe criada foi a classe Camera:
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.
#11 Updated by Gabriel Borges da Conceição about 1 year ago
Além disso, adicionamos alguns atributos à classe Ball e à classe Robot, como a matriz x_k|K, confidence, entre outros:
ATRIBUTOS DA BOLA:
ATRIBUTOS DO ROBÔ:
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).
#12 Updated by Gabriel Borges da Conceição about 1 year ago
- Description updated (diff)
#13 Updated by Antonio de Souza Gomes Pereira about 1 year ago
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
};
#14 Updated by Gabriel Borges da Conceição about 1 year ago
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.
#15 Updated by Nicolas Oliveira about 1 year ago
ok
#16 Updated by Gabriel Borges da Conceição about 1 year ago
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.
#17 Updated by Gabriel Borges da Conceição about 1 year ago
- Status changed from Em andamento to Feedback
#18 Updated by Nicolas Oliveira about 1 year ago
ok. Mas faz um commit marcando onde isso aqui ficou pronto.
#19 Updated by Gabriel Borges da Conceição about 1 year ago
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
#20 Updated by Gabriel Borges da Conceição about 1 year ago
- Status changed from Feedback to Em andamento