Open Matheus-de-Sousa opened 2 years ago
Busquei algumas referências para métodos de sintonização do PID e apontei algumas considerações em relação a sua implementação.
Inicialmente foquei nos métodos clássicos para ajuste dos parâmetros, já que são muito utilizados pela comunidade em sistemas de controle aplicadas na categoria segue-linha. Outra frente seria utilizar métodos adaptativo, que utilizam aspectos de inteligência computacional, algo interessante de se explorar, mas temos que ver a viabilidade e eficiência para competições.
Descrição: basicamente é um ajuste manual analisando o comportamento do Braia, assemelhando muito ao que fizemos nessa competição, porém achei uma descrição mais detalhada de como utilizar esse método de maneira sistemática.
Para análise do comportamento podemos observar as influência que cada parâmetro produz no robô, talvez tenha como usar os dados do dashboard para analisar a curva de saída dos encoders e identificar as características.
-> Equação PID:
-> Tabela do método:
IDEIA DE ALGORITMO: pensei em utilizar os dados de distância do encoder para calcular tempo e o sinal de erro através do setpoint e a saída para assim determinar o período $T_u$ e aplicar as regras da tabela, isso tudo implementado em C++ sob um classe criada chamada PIDAutoTune. O problema é que para determinar $K_u$ temos que realizar voltas nas pistas reais ou em ambientes simulados, neste último caso as possibilidade de simulação estão na outra issue (Mapeamento com IA).
Referências
Referência
Procurando referências, encontrei alguns papers de pessoas que aplicaram alguns modelos de NN em seguidor de linha, na maioria ou utilizando simuladores ou aplicando o algoritmo NN online.
Vantagens: extremamente adaptativos (algo interessante para pista com diversos tipos de curvas), habilidade de aprendizado e capacidade de mapeamento não-linear.
Desvantagens: custos computacionais dependendo das especificações do microcontrolador, ou seja, utilizado o algoritmo em real-time e trabalhando online temos desafios em relação a sistemas extremamente não-lineares [1].
Na minha opinão, podemos abordar de duas maneiras a implementação de auto-tuning do controlador PID:
Em ambas abordagens a saída da rede neural considerando apenas os parâmetros lineares seria: $u(t) = K{p,NN} e(t) + K{i, NN} \int {e dt} + K_{d, NN} \frac{d e(t)}{dt}$
No caso de limitação computacional podemos talvez tentar redes menores, como ADELAINE que só tem uma única camada. Outro modelo seria utilizar backpropagation networks, só que seria necessário um algoritmo de aprendizagem secundário para estabelecer os ganhos PID.
Observação: o TensorFlow Lite funciona no ESP32, abrangendo implementações em C++ e Python, o que facilitaria a utilização de bibliotecas para construir as redes neurais. Além disso, o ESP32 tem como ser programado na linguagem Python através do MicroPython module, mas temos que lembrar que o Python não é uma linguagem com alta performance, então não sei como compartaria-se o sistema em real-time utilizando essa linguagem.
Algoritmo iterativo que pode ser utilizado para otimização de controladores em sistemas robóticos.
Baseado em em algoritmos off-policy, ou seja, aprende com ações que não foram aplicada (ações aleatórias) para aprender um politíca própria ("regra") para maximizar a recompensa total.
Algoritmo de valor que atualiza as funções de valor com base na equação de Bellman;
Antes de começar a execução assumem condições inciais otimistas.
**Implementação:" utilizando a tabela Q, selecionando as ações de acordo com estado disponível (exploit) para tomada de decisão buscando a recompensa máxima futura; ou explorando de maneira aleatória para identificar novos estados.
Objetivo do Q-Learning: encontrar a melhor ação do agente a partir do estado atual que ele se encontra.
Grande de parte das pesquisas que fiz aplicam eles para sintonização do controlador em ambiente simulado. Mas o vídeo [2] apresentou um seguido de linha utilizando somente RL, parace interessante mas acredito que não seja tão eficiente quanto a abordagem clássico com PID devido a sua complexidade de estabelecer uma off-policy ótima para controlar os motores em pistas com grau de dificuldade maior.
É um algoritmo influênciado por parâmetros específicos, como taxa de aprendizagem, fator de desconto para recompensas futuras e condições iniciais adotadas.
@mCaburlao se juntará a atividade; @Pedromone buscará materiais complementares.
Utilizar sensores laterais e frontais para sintonizar o PID.