ZenView: Dashboard para visualização e controle das missões

Zenith Aerospace
6 min readMar 5, 2021

Cada missão do Zenith possui objetivos, meios e interesses diferentes, por vezes, é preciso saber, em tempo real, a altitude, pressão e posição de uma sonda, e por outras é apenas necessário registrar o comportamento da temperatura das baterias do cubesat em um teste local. E embora cada missão possua “n” variáveis ainda resta uma constante em todas que é a aquisição de dados.

Independentemente dos objetivos a serem alcançados, cada lançamento, teste e experimento gera dados que podem variar entre um simples monitoramento das funcionalidades até o próprio objetivo final da missão. Sendo assim, surgiu a necessidade de criarmos um software capaz de se adaptar às necessidades das cada missões.

A ideia

Primeiramente, foi necessário definir bem o escopo do projeto, deveríamos criar um programa centralizado, capaz de ler dados de diversas fontes, tratar essas informações e, por fim, mostrar de forma intuitiva para o usuário. Nascendo aí a ideia da criação de um dashboard customizável.

Um dashboard nada mais é do que um painel que apresenta, de forma visual, métricas sobre um conjunto de dados, podendo conter vários tipos de gráficos e tabelas, o que auxilia a ter uma visão geral sobre o que aquelas informações dizem em conjunto. No caso do ZenView ele deixaria por conta do usuário decidir quais plots estariam disponíveis e qual mostrará cada dado, podendo até mesmo fazer operações matemáticas entre os dados diretamente dali, como em uma tabela de excel, o que o torna ainda mais particular.

Outro desafio é dar suporte aos diferentes perfis de usuário do grupo. A interface deveria estar disponível para diversos sistemas operacionais e, ainda, ser de fácil uso, ou seja, não ser um terminal com linhas de código e apenas para programadores, ela deveria ser uma interface completa onde adicionar um novo plot de dados deve ser tão simples quanto dar alguns cliques. E por fim o programa ainda deveria ser modular e expansível de modo que novos módulos possam ser acrescentados, na medida em que novos casos de uso surjam.

Como funciona?

O fluxo de funcionamento do ZenView é, de certa forma, bem simples. Primeiramente, cria-se um dashboard, definindo um nome, uma descrição e a quantidade de entradas de dados, já que eles serão tratados como um csv, ou seja, colunas em uma tabela. Além disso, é possível importar um dashboard já existente.

Menu de criação e importação de dashboards

Após isso partimos para a definição das entradas, podemos criar outras , diferentes das iniciais e fazer operações aritméticas entre elas. Por exemplo, é possível calcular uma velocidade estimada por meio dos dados recebidos de distância e tempo.

Menu de edição de entradas

Definido isso podemos, por fim, partir para a seleção dos plots, onde as coisas ficam mais visuais. O usuário pode então selecionar planos cartesianos, modelos 3D, gráficos de barras entre outros para depois definir quais dados eles irão receber e finalmente customizar cada um, mudando detalhes como cores, escalas e legendas.

Dashboard com alguns dados para demonstração

Por último, basta escolher de onde os dados serão lidos, como um arquivo ou uma porta USB e se deseja salvar os dados no final, que no caso serão salvos em um arquivo CSV que pode ser lido depois ou utilizado em outros softwares.

Menu de início de leitura

Outro ponto interessante é que, caso se deseje fazer a leitura através de um arquivo, pode-se criar uma simulação, colocando um intervalo fixo ou variável entre cada processamento dos dados.

Como funciona (de fato)?

O mais importante é primeiro termos em mente que o programa está sendo escrito em módulos que tentam ser o mais independentes possível, conectados apenas por eventos internos. Dessa forma, ao retirar um módulo, o programa continua funcionando, apesar de possuir menos funcionalidades, e, ao mesmo tempo, para se adicionar um novo módulo, basta seguir a estrutura existente e se aproveitar dos eventos que já existem.

O programa em si foi feito utilizando o framework Electron, que, além de permitir que ele fosse desenvolvido utilizando HTML, CSS e JavaScript, o que viabiliza a distribuição para diversos sistemas operacionais, já que funciona como uma espécie de janela de navegador. Não poderia deixar de citar que, ao fazermos uso do Electron, os pacotes do Node.js se tornam disponíveis para a aplicação, criando infinitas possibilidades devido a grande biblioteca já existente.

Mas, o que de fato acontece em cada uma das partes citadas anteriormente? Bom, na primeira etapa, ao criarmos um dashboard, o programa irá salvar em seu computador um BSON (binary json), o qual contém todas as informações de layout e lógica de funcionamento iniciais do dashboard.

```

Dashboard: {

nome: “Dashboard 1”,

local: “/home/usuario/Documentos/dashboard”,

descricao: “Dashboard criado para demonstração”,

}

```

Exemplo de um arquivo json

Ao criarmos e configurarmos as entradas, na verdade, estamos criando um grafo direcionado de expressões matemáticas, no qual cada nó do grafo é uma expressão e ele está conectado com suas dependências, que seriam as expressões que precisam ser resolvidas antes dele.

Grafo direcionado de expressões matemáticas

Quando uma entrada é adicionada ou editada o programa faz uma ordenação topológica do grafo utilizando uma busca por profundidade (depth-first search), e o que seria isso? De forma simples, esse algoritmo apenas decide quem deve vir antes de quem ou até mesmo quem pode ser solucionado em paralelo, e, caso um ciclo seja encontrado, ele dispara um erro indicando que aquilo não pode ser solucionado.

Ordenação topológica de um grafo
Programa encerrando ao encontrar um ciclo

Na parte dos blocos, o programa basicamente cria uma ponte entre o usuário e as bibliotecas através dos formulários. Os formulários são construídos com base em uma seleção do que cada biblioteca de plot permite ser editado, e a cada alteração o próprio formulário envia para o plot as novas informações.

Por fim, quando se seleciona de onde estará lendo os dados, na verdade, por trás da interface, o programa está escolhendo um módulo de leitura. E, quando a leitura se inicia de fato, os primeiros nós do grafo são populados e a partir daí ele é percorrido, já na ordem pré-estabelecida, resolvendo cada uma das expressões e disponibilizando os resultados para que o resto do programa os utilize.

Funcionamento do programa

Nossos próximos passos

Apesar da estrutura do software já estar concluída, atualmente, a equipe do Alto Nível do Zenith tem trabalhado na expansão da variedade de blocos do ZenView, com o objetivo de satisfazer todas as necessidades de visualização de dados do Zenith com um só software modular.

No entanto, o ZenView vai muito além do seu software. Ele é parte de um projeto integrado entre o Alto Nível e o Hardware: a Ground Station. O ZenView será a Human-Machine Interface da Ground Station Mobile, possibilitando a visualização dos dados da missão em qualquer lugar. Por meio do hardware desenvolvido pela equipe do Zenith, o nosso próximo passo com o ZenView será embarcar esse software em uma Raspberry Pi Compute Module e observar, em tempo real, os dados das missões.

Deseja saber mais sobre esse projeto? Acompanhe nosso repositório no GitHub e siga o Zenith Aerospace nas redes sociais!

--

--

Zenith Aerospace

Grupo extra-curricular da EESC — USP voltado para o estudo e desenvolvimento de sistemas com aplicação na indústria aeroespacial