Skip to content

Latest commit

 

History

History
56 lines (41 loc) · 6.3 KB

README.md

File metadata and controls

56 lines (41 loc) · 6.3 KB

Seguidor de linha - Braia

O algoritmo para esse seguidor de linha tem suas classes e arquivos separados em pastas de acordo com as suas funções e responsabilidades que podem ser as listadas abaixo:

  • Drivers (interface entre software e hardware)
  • Serviços (camada de aplicação)
  • Estrutura de dados
  • Gerenciamento e armazenamento de dados
  • Tratamento e execução de comandos do bluetooth

Drivers

Atualmente, os drivers para cada componente de hardware do robô estão armazenados na pasta robot/components, sendo os drivers responsáveis por se comunicar ou receber informações dos hardwares instalados no robô, abaixo estão listadas as pastas que contém drivers e a sua função:

Serviços

Os serviços do robô estão em sua maioria na pasta robot/services, neles que a lógica utilizada no robô para executar as suas tarefas é implementada, eles possuem cada um a sua função e geralmente executam paralelamente no microcontrolador, atráves das tasks do FreeRTOS, ou auxiliam outros serviços nas suas funções, os serviços utilizados atualmente pelo robô e suas tarefas principais estão listadas abaixo:

  • CarStatusService: responsável pela definição do estado do robô com base na pista e nos dados armazenados nele
  • LEDsService: responsável por receber comandos de outros serviços para o acionamento dos leds
  • MappingService: responsável por criar o mapeamento quando o robô está no modo mapeamento
  • PIDService: responsável pelas estratégias de controle implementadas no robô
  • SensorsService: responsável pela leitura e calibração dos sensores IR frontais e laterais
  • SpeedService: responsável pelo cálculo da velocidade e deslocamento do robô ou de suas rodas
  • BLEServerService: responsável pela comunicação bluetooth do robô com a dashboard

Gerenciamento e armazenamento de dados

Os parâmetros do robô e mapeamento são armazenados na memória flash permitindo que eles sejam salvos no robô, entretanto para possibilitar o gerenciamento desses parâmetros e facilitar o armazenamento e carregamento deles da memória flash, criamos a pasta DataObjects, onde se encontram as classes encarregadas de gerenciar os dados e parâmetros armazenados nas estruturas de dados do robô e também de lidar com o armazenamento do ESP32 para facilitar o uso da flash, as classes que estão nessas pastas são lisatadas abaixo:

  • DataAbstract: classe responsável por lidar com os parâmetros do robô, permitindo a leitura e escrita deles em tempo de execução, funcionando como um tipo genérico para diferentes tipos de parâmetros.

  • DataMap: classe responsável por lidar com os dados do mapeamento.

  • DataStorage: classe responsável por carregar parâmetros da flash ou salvá-los nela, através de arquivos.

  • DataManager: classe responsável por gerenciar os parâmetros do robô através de uma lista de parâmetros que o permite facilmente acessá-los quando necessário.

  • IDataAbstract: Interface utilizada como base para a classe DataMap e DataAbstract.

Estrutura de dados

Os dados utilizados pelo robô são armazenados em classes, em que, cada classe tratará dos dados de sistemas ou funções específicas, sendo essas classes as listadas abaixo:

  • dataPID: dados e parãmetros sobre o controlador PID do robô
  • dataSensor: dados sobre as leituras dos sensores infravermelho
  • dataSLatMarks: dados e parâmetros sobre o mapeamento
  • dataSpeed: dados e parâmetros sobre posição, velocidade e aceleração
  • RobotStatus: dados e parâmetros sobre o estado do robô

Todas essas classes de dados relacionadas ao robô estão localizadas na pasta RobotData que também armazena algumas enums e maps (dicionários) do robô.

Tratamento e execução de comandos do bluetooth

O robô também possui uma dashboard hospedada no firebase que permite a edição e backup de parâmetros, alteração e backup do mapeamento da pista e geração de gráficos em tempo real, e com o intuito de possibilitar a comunicação à distância da dash com o robô, utilizamos comunicação bluetooth (BLE GATT), sendo o serviço BLEService responsável por tratar dessa comunicação sem fio com a dashboard, sendo ele responsável pela interpretação dos comandos enviados pela dash e retorno dos dados solicitados. Os comandos recebidos e enviados pelo robô são comandos de texto e para simplificar a interpretação deles utilizamos a biblioteca BetterConsole para extrair as partes importantes dos comandos e executar as funções relativas à esses comandos que estão na pasta CMDWrapper que encapsula a função executada por cada comando.

Para mais informações sobre o dashboard, acesse o repositório a seguir: LineFollower_CCenter_Code