Qual é a melhor maneira de treinar controladores PID?

7

Isso é limítrofe não-gamedev, mas os PIDs são comumente usados ​​em jogos, então pensei em tentar.

Eu tenho alguns controladores PID no meu jogo, usados ​​para coisas como direção e controle do acelerador. Estou tendo problemas para ajustá-los com precisão. Nunca parece que estou me aproximando da solução otimista, e é muito tentador deixá-los "bons o suficiente" com a oscilação ou pico estranho de que não consigo me livrar.

O único controlador que me levou a este post com frustração produz oscilações menores para entradas de erro muito pequenas. Em entradas grandes, está tudo bem, mas não muito estável.

Alguém tem alguma dica ou recursos sobre como eu posso treinar essas coisas de maneira mais confiável?

tenpn
fonte
Eu não acho que os controladores são estáveis. Você é casado com a idéia de usar um controlador PID? Caso contrário, você poderia explicar um caso específico com mais detalhes, talvez eu possa dar uma solução mais estável.
21910 Jonathan Fischoff
Estou procurando abordagens genéricas para ajustar os controladores PID. Você ajusta os coeficientes P, I e D em uma determinada ordem? Você precisa formar um sistema fechado para ajustar ou já o fez dentro do ambiente do jogo?
Dezpn

Respostas:

7

Na verdade, existe um artigo decente no AI Game Programming Wisdom 2, de Euan Forrester, sobre controladores PID.

Vou reiterar o que ele disse sobre o ajuste dos diferentes coeficientes:

  1. Comece com o coeficiente proporcional (P) - Isso tem o maior efeito no comportamento do controlador. Coloque os outros 2 coeficientes em 0 e ajuste P até obter o efeito desejado aproximado.
  2. Varie apenas um coeficiente de cada vez - tenha uma sensação decente de um coeficiente para garantir que ele faça aproximadamente o que faz, mantendo os outros 2 constantes.
  3. Ajuste os coeficientes em tempo real - os benefícios são realmente um pouco óbvios. Você não deseja recompilar tudo toda vez que fizer uma alteração em um valor, isso é apenas senso comum de codificação.
  4. (Opcional) Tenha um recurso de reprodução instantânea em funcionamento - Isso só ajudará caso você observe algo realmente estranho acontecendo com seus valores de PID, para que você possa reproduzir as etapas até esse ponto.

Ele também oferece vários recursos on-line (alguns dos quais são links mortos, por isso, vou postar apenas os que ainda estão disponíveis):

Ajuste do loop visual

Ajustando um Controlador de Temperatura PID

espero que ajude

~ Ray

Ray Dey
fonte
2

Artigo recente #AltDevBlogADay descreve controladores PID bastante bem, e o exemplo WebGL no site do autor pode ser útil para ajustar as variáveis.

arul
fonte
1

Não ajuste pids usando o método simplista de "tentativa e erro"! Você nunca obterá bons resultados porque os parâmetros dependem um do outro. Use o modelo FOPDT (primeira ordem mais tempo morto) junto com as fórmulas IMC para calcular Kp, Ki e Kd a partir dos dados de teste.

Faça um teste de etapa no seu sinal de controle (diretamente em direção à "planta" sem controlador) e registre sua variável de processo que você está tentando controlar no que se refere ao sinal de controle. Em seguida, observe os dados e anote o ganho do processo, o tempo morto e o tempo do processo. (mais informações aqui e aqui ).

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui

Geralmente basta ler o site inteiro do ControlGuru. É um recurso muito bom. Eu usei o modelo FOPDT com bastante sucesso para obter os valores pid corretos instantaneamente, sem qualquer tentativa e erro. Funciona muito bem e produz um controlador ideal. Quando você calcula seu Kp, Ki e Kd a partir de Kp, Ti e Td, você também tem a opção de especificar o valor de "agressividade", que é uma boa maneira de apenas dizer ao seu controlador já ajustado o quão rápido ele deve convergir.

Além disso, você provavelmente deve usar derivada no PV em vez de derivada no erro. Realmente, não há sentido em derivar erros. Para fazer isso, use sinal negativo antes de Kd e use esta fórmula:

insira a descrição da imagem aqui

Isso evita um efeito chamado "chute derivativo" quando você altera seu ponto de ajuste. Mais informações aqui .

Eu nunca mais sintonizo manualmente. Eu acho que o modelo FOPDT é o método mais simples que existe para ajustar os loops PID muito rapidamente. Você também precisa distinguir entre o processo de auto-regulação (auto-estabilização) e um processo de integração (que não se estabiliza - como a posição de um objeto após a aplicação de uma força). Os métodos de ajuste são um pouco diferentes, mas também são descritos no site controlguru aqui .

Martin
fonte