Open Matheus-de-Sousa opened 1 year ago
Uma das formas para desenhar a pista é através da coleta de vários pontos no plano cartesiano que estão contidos na pista e com esses pontos traçar uma reta para interligar cada par de pontos, levando à um desenho cada vez mais fiel à pista original conforme a quantidade de pontos coletados aumentar. Após coletar os pontos armazená-los na memória flash do robô e permitir que eles sejam lidos e enviados para a dashboard no formato JSON.
Obs: Antes de testar a plotagem dos pontos na dashboard pode ser interessante testá-los, por exemplo, no python com algum algoritmo simples de plotagem de polígonos.
Entretanto, para coletar os pontos com o robô e os encoders será necessário converter os pulsos dos encoders em pontos no plano XY, isso pode ser feito inicialmente padronizando algumas medidas, no caso seria necessário calcular a partir dos pulsos dos encoders direito e esquerdo o deslocamento linear e angular do robô.
Onde:
Obs: Se a variação angular ou linear serão positivas ou negativas dependerá da orientação adotada para o sistema de coordenadas. Para que seja possível calcular a variação dos deslocamentos é necessário utilizar alguma referência para os cálculos, no caso das fórmulas apresentadas, a referência é o ponto anterior, logo a variação é relativa à variação do deslocamento do ponto calculado anteriormente e o ponto atual.
Com os deslocamentos calculados se é possível obter a posição do robô no plano XY para cada ponto calculado com base nas relações trigonométricas de um triângulo retângulo. Esses cálculos todos devem ser feitos no serviço speedService.cpp. Todos esses dados devem ser armazenados em alguma estrutura de dados como um vector de pairs, matrizes contendo os vetores da posição ou outras estruturas que melhor se adequarem para a situação.
Para o cálculo das fórmulas apresentadas, algumas variáveis já foram implementadas, são elas:
Obs: será necessário criar a variável para o "raio do robô" que deve ser editável pela dashboard, essa variável pode ser criada na estrutura de dados slatMarks
Obs2: O c++ possui a biblioteca math.h, que contém funcões para obter PI e funções trigonométricas.
Utilizando os dados descritos acima é possível utilizar as fórmulas e encontrar os pontos da pista, o armazenamento desses pontos poderá ser feito com uma classe desenvolvida em outra branch com o objetivo de criar gráficos, a branch se chama feature/GraphComponent. Após a primeira etapa ser finalizada, o código dela será revisado e será feito o merge da branch graphComponent para a branch relativa a esta issue, como a classe da branch graphComponent já se encarrega de transformar os dados em JSON essa parte também não precisará ser implementada. Porém ainda será necessário implementar o armazenamento desses dados na flash, isso pode ser feito na branch feature/GraphComponent permitindo que qualquer gráfico gerado com ela seja armazenado na flash e por fim, para enviar os dados para a dashboard será necessário criar um comando para isso na biblioteca Cmd_Wrapper no arquivo cmd_param.cpp.