Atividade #1213: Refazer toda a visão com orientação a objeto - Inteligência - Redmine RoboIME
Atividade #1213
Refazer toda a visão com orientação a objeto
Antonio de Souza Gomes Pereira
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.
FieldSwitchSides.png (66.4 KB) Gabriel Borges da Conceição, 02/14/2020 12:57 PM
ConvertBall.png (32.1 KB) Gabriel Borges da Conceição, 02/14/2020 12:57 PM
ConvertRobots.png (30.4 KB) Gabriel Borges da Conceição, 02/14/2020 12:57 PM
TeamAndSide.png (66.3 KB) Gabriel Borges da Conceição, 02/14/2020 12:57 PM
atr_ball.png (21.6 KB) Antonio de Souza Gomes Pereira, 02/14/2020 05:28 PM
atr_robot.png (24.2 KB) Antonio de Souza Gomes Pereira, 02/14/2020 05:28 PM
camera_ex.png (42.3 KB) Antonio de Souza Gomes Pereira, 02/14/2020 05:28 PM
class_camera.png (32.3 KB) Antonio de Souza Gomes Pereira, 02/14/2020 05:28 PM
detection_robot.png (33 KB) Antonio de Souza Gomes Pereira, 02/14/2020 05:28 PM
ex_implement.png (58.5 KB) Antonio de Souza Gomes Pereira, 02/14/2020 05:28 PM
field_exe.png (97.4 KB) Antonio de Souza Gomes Pereira, 02/14/2020 05:28 PM
read_udp.png (53.7 KB) Antonio de Souza Gomes Pereira, 02/14/2020 05:28 PM
Touch.png (17.5 KB) Gabriel Borges da Conceição, 02/16/2020 12:44 AM
LendoGame.png (25.2 KB) Gabriel Borges da Conceição, 02/16/2020 12:45 AM
LVparaTouch.png (15.4 KB) Gabriel Borges da Conceição, 02/16/2020 12:45 AM
Assignee set to Antonio de Souza Gomes Pereira
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 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)
*decodeCameras e subvis
*getCurrentCameras
*updateFrameArray e subvis
*Kalman
*Estimador Simples
*Média Câmeras
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:
Due date set to 02/19/2020
#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.
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.
Além disso, adicionamos alguns atributos à classe Ball e à classe Robot, como a matriz x_k|K, confidence, entre outros:
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).
#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
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
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.
#18 Updated by Nicolas Oliveira about 1 year ago
ok. Mas faz um commit marcando onde isso aqui ficou pronto.
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