Tamandutech / LineFollower_Braia_Code

Repositório de códigos do robô segue linha Braia
5 stars 1 forks source link

Q-Learning para otimizar o PID. #53

Open raphera opened 2 years ago

raphera commented 2 years ago

Criar um algoritmo que otimiza um PID relativamente bom já determinado:

mCaburlao commented 1 year ago

Como não existem muitos artigos testando o Reinforcement Learning, é difícil definir quais os parâmetros ideias para o funcionamento do algoritmo, considerando que não podemos deixar o robô rodando por um tempo indeterminado. Por causa disso, seria ideal testar o algoritmo primeiramente em uma simulação.

Eu encontrei uma simulação de um robô segue-linha no programa Webots, além de um framework próprio do programa para Q-Learning. Também é possível transferir um modelo 3D próprio ao programa, mas só encontrei como importar modelos do TinkerCAD por enquanto. Diferente do CoppeliaSim, nesse programa parece ser mais fácil importar uma pista, se ela também for montada no TinkerCAD.

Fontes do modelo e das bibliotecas:

giovannirdias commented 1 year ago

Fase 1 - Construção do Algoritmo de Reinforcement Learning (RL)

Começei a desenvolver o modelo de R utilizando alguns papers de referência, especificamente o modelo soft actor-critic que é um modelo de otimização de política estocástica do tipo off-policy utilizando uma dupla função Q incorporado com redes neurais profundas em estágios denominados ator e crítico.

Como estou me baseando nas informações dos paper, possivelmente falta ainda alguma implementação das equações que eles mostram, então o código que escrevi está ainda em estágio básico, não considerei ainda a parte de comunicação com robô e com relação a possibilidade de escrever-lo com C++, seria necessário utilizar o tensorflowlite, porém acho q a parte de treinamento em real-time não seja efetivo, já rodar na própria ESP é algo computacionalmente custoso, no paper eles utilizam um NVIDA Jetson para isso.

Por ser um esboço não criei a branch aqui, mas deixei em um repositório pessoal público para vcs conseguirem ver e modificarem algo se achar necessário, o link é esse abaixo: https://github.com/giovannirdias/SAC-PID

Descrição do Modelo

Nessa área de aprendizado por reforço muitos nomes são recorrentes para os mais diversos tipos de modelos, então acho que seria interessante resumir um pouco esses termos para facilitar a inserção de alguém interessado neste projeto e também justificar minha escolha pelo modelo que disse anteriormente.

A sua estrutura baseia-se em três estágios com funções específicas:

  1. Ator: uma rede neural profunda que terá como saída as ações, ou seja, os parâmetros PIDs determinados durante a sua execução. Construída com base na distribuição Gaussiana para minimização direta das expectativas de divergências.
  2. Crítico: outra rede neural profunda que fornece informações e avaliação para o treinamento do ator.
  3. Value: rede neural para estabelecer as relação de ação e estado de acordo com as respectivas recompensas, isso ocorre através da aproximação dos valores durante o período de treinamento.
  4. Replay buffers: armazenam os parâmetros do modelo para aplicação em atualização de parâmetros das rede e auxiliares na otimização da política do agente até a condição ótima.

Dúvidas

Referências

  1. http://www.cs.ox.ac.uk/files/9953/Learning%20with%20Training%20Wheels.pdf
  2. A Self-adaptive SAC-PID Control Approach based on Reinforcement Learning for Mobile Robots
giovannirdias commented 1 year ago

Fase 2 - Simulação do Seguidor de Linha com PID Adaptativo

Planejamento

  1. [X] Aprendendo as funcionalidades do simulador e realizando as modificações do modelo exemplo, tentando incluir neste projeto uma rede neural para estabelecer os parâmetros K a partir de algumas epochs (voltas nas pistas) com ganhos inciais ótimos, porém com algumas oscilações, velocidade não ideal e tempo de percurso alto. Prazo estimado: Acredito que até 30/10 completo essa task.

  2. [ ] Simulação utilizando como modelo o Braia, adaptando algumas partes do código exemplo para assemelhar com o código real do Braia. Observação: Estou tendo dificuldade da modelagem do ambiente para incluir o robô no simulador. Estou tendo utilizar a descrição da modelagem do fusion a partir de .obj como algumas referências apresentam, mas o robô não está aparecendo em um mundo estático que criei para testes. Estou pesquisando algumas alternativas para representação do modelo. Prazo estimado: Talvez até dia 19/11 essa task esteja completa.

  3. [ ] Treinamento do modelo: Após treinar o robô dentro do simulador por uma considerável quantidade de instâncias (ainda não sei dizer quantas seriam necessárias), teremos uma rede neural com pesos treinado para levar saídas que proporcionam um erro quadrático minimizado (sinal de erro utilizado no controlador PID) para pistas de testes. Na sequência utilizaremos o conversor do modelo para modo do TensorFlow Lite para permite a geração do modelo que possa ser aplicado dentro do microcontrolador. Observações: Há algumas restrições da utilização de funções e módulos do TensorFlow nos microcontroladores, então o modelo deve possuir algumas adaptações para execução correta no ESP. Prazo estimado: 03/12.

  4. [ ] Adaptações no código do Braia, principalmente nos serviços de PID, para permitir a utilização da rede neural na atualização dos parâmetros proporcional, integrativo e derivativo, e avaliação da efetividade do projeto no desempenho dele em um pista distinta ao do treinamento. Observação: Como nunca mexi com TensorFlow em microcontrolador, provavelmente haverá algumas barreiras durante está tarefa, implicando em maior duração. Prazo estimado: Em Janeiro de 2023 acredito que o projeto esteja finalizado para avaliar a sua efetividade.