Controladores PID – Sintonia Prática

Mini coisas

Eis a verdade: eu amo qualquer tipo de miniatura.

SAM_0724
Dispensa legendas

Mini-biscoitos, mini-canetas , mini-computadores, mini-ferramentas, mini-robôs, mini-rolamentos, mini-drones, mini-cadernos etc.  Isso me fez comprar esse conjunto chinês de montagem de um carrinho movido a energia solar. Um ser-humano são e bem-alimentado vê na imagem um brinquedo.

Resultado de imagem para carrinho solar
Eu vejo apenas essa mini chave philips e essa mini placa solar

Além de tudo isso, o que bateu o martelo da compra foi:

  1. Se eu tirasse essa placa solar sobraria uma quantidade razoável de espaço pra sensores, módulos, baterias, talvez até um arduino pro mini.
  2. Essas engrenagens na imagem são M0.5, o mesmo módulo das outras que eu tenho, então eu poderia controlar a razão de redução, fazendo que o carrinho pudesse suportar mais peso e se movesse mais rápido
  3.  Com tudo isso, o chassi, apesar de pequeno, vai ser útil em vários projetos futuros que tenho em mente (seguidor de linha, pêndulo invertido e até um carrinho controlado por RF)

Lembrei então desse video do Ivan Seidel , onde ele explica muito bem (usando LEGO) o que é um controle PID (se vc não faz a menor idéia do que é, vá lá conferir homi). Surgiu então a idéia de montar um robô e implementar um controlador, mostrando toda a mágica nessa técnica.

O problema e um desenho lamentável

Um modelo simples: um carro dotado de um atuador (motor DC com redução) e um sensor de distância (ultrassônico). A variável a ser controlada é a posição x do carro em relação a uma parede (que deve ser mantida fixa em 15 cm, por exemplo) e a variável controlada é a potência u no motor.

esquema
Juro que tentei

 Montando o robô : It’s Aliiiinve!!

alive
A sensação única de passar uma hora apertando parafuso, colando trecos, conectando fios, programando e o negócio funcionar

Olha como ficou, depois de um pouco de cola, adesivos e fios:

SAM_0720
Wall-E ?

O esquemático da ligação, hardware e o software tá no fim do post (e no instructables, futuramente)

Mas pera, precisa de PID?

Claro, se a idéia é se manter a uma distância fixa da parede, porque complicar? Basta a seguinte lógica: se a distância medida é menor que o desejado, se afaste da parede, caso contrário, se aproxime.

O problema é que isso não funciona bem por causa de uma coisa chamada inércia . O carro pega um embalo, armazena energia em movimento e passa ‘voando’ da distância desejada. Isso pode ser melhorado sem usar PID, mas precariamente e sem consistência.

Controle P – Proporcional ao erro

Então uma maneira de obter uma resposta mais rápida e diminuindo o problema anterior é: agir de acordo com o erro, ou seja, o quão longe se está do setpoint (distância desejada), multiplicado por uma constante (que é chamada de ganho proporcional).

No nosso caso:

Aumentando o Kp, o carro fica mais robusto e responde rapidamente a distúrbios. Mas termina oscilando muito (aumenta o sobrepasso) e sensível a variações pequenas na entrada, o que gera instabilidade. É como se aumentar o Kp fosse prender uma mola bem forte entre o carro e a parede.

Kp_alto

Diminindo o Kp, o carro tem uma resposta mais lenta e suave, raramente oscilando, mas é comum apresentar um erro de regime permanente: isso porque quando o erro é pequeno, a ação calculada não é suficiente pra mover o carro. É como prender uma mola bem fraca (molenga) entre o carro e a parede.

Kp_baixo

Controle I – Proporcional a persistência do erro

Para resolver o problema de oscilação rápida e erro de regime permanente, uma idéia é agir de acordo com a persistência do erro (o somatório/integral do erro) . No nosso caso:

Aumentando Ki, o sistema responde um pouco mais rápido a distúrbios, oscila mais suavemente (mas durante um tempo maior) e corrige o erro de regime . É como se o carro ficasse mais pesado.

Ki_alto

Diminuindo Ki, o carro responde mais lentamente, oscila menos e corrige lentamente erros de regime. Um Ki muito pequeno não causa grandes alterações no comportamento.

Controle D – Proporcional a variação do erro

A cereja do bolo é diminuir a amplitude da oscilação (o quando o carrinho ‘passa’ do setpoint, chamado de sobrepasso) e também a sua duração. Para isso, é preciso agir de acordo com a variação (derivada, velocidade) do erro.

Aumentar Kd faz com que o carro tenha um certo amortecimento, como se colocassem um amortecedor entre o carro e a parede, ou se o carro fosse submerso em água. Isso faz com que ele não se mova tão rápido e próximo à posição de equilíbrio.

Kd pequeno                                                          Kd grande

Kd_baixoKd_alto

Juntando tudo : Voilà

Um bom começo é iniciar Kp em um valor pequeno e os outros em 0. Equilibrar velocidade de resposta, oscilações e erros de regime fazem encontrar um bom valor de Kp. Após isso: ainda oscila muito? Se sim, aumente um pouco Kd. Tem um erro de regime grande? Aumente um pouco Ki. E assim, fazendo pequenos ajustes, se chega nessa bruxaria :

final
And it works like a charm

 

Se ele responde bem para setpoint fixo, porque não para um variável? Basta que a resposta seja rápida quando comparada à frequência da função que descreve o setpoint. Por exemplo, para uma senoide de frequência 2.5rad/s, amplitude 7 em torno de 18 cm:

seno
Os picos são 25 cm e os vales são 11cm

seno
Oscilando lindamente de acordo com seno

One more thing

Engenharia de controle é fascinante e o PID é o mascote dessa área, mas perceba o seguinte: se pra sintonizar um controlador basta seguir regras relativamente simples de ajuste de ganhos, será que não dá pra o robô descobrir os ganhos sozinho e se auto-sintonizar? Sem a ajuda (ou tortura) de um pobre ser-humano?

Olha, ninguém ensinou nada pra galinha:

galinha
Essa ai sabe tudo de PID

Be the robot, my friend

bruce
Be water, my friend

Imagine que você acorda de um sono infinito, tem apenas duas percepções e uma vontade latente: olha, eu tenho um motor e um sensor de distância, como seria legal ficar sempre a 15cm da parede! O que você faz? Começa a conhecer seu próprio corpo (através do motor) e como as suas ações afetam o mundo e a si-mesmo (através do sensor). Tenta acelerar o motor um pouco e ver como a distância medida se comporta, como seu corpo reage.

A partir disso todos os fenômenos de sobrepasso, velocidade de resposta, oscilação curta ou longa vão se manifestar e todos eles são mensuráveis e tratáveis. Ou seja, basta que você consiga perceber uma oscilação para ajustar os ganhos (aumentar Kd e diminuir Kp, por exemplo) e eliminá-la. Isso se chama auto-sintonia, um algoritmo bem particular de aprendizado de máquina (machine learning), que será o assunto do próximo artigo sobre controle PID.

Sim nerds, as máquinas aprendem, comece a tratar-las melhor e esteja certo de uma coisa:

violent
Esses prazeres violentos têm (terão) fins violentos.

 

TudoSobControle está no Facebook!

Isso mesmo nerds, curtam e se mantenham atualizados das novidades do blog.

 

 Referências

  • Engenharia de Controle Moderno, Katsuhiko Ogata, 5ªed
  • http://ctms.engin.umich.edu – Control Tutorials for Matlab and Simulink
  • Westworld, série de ficção científica de 2016 da HBO.
  • Frankestein, filme de ficção científica de 1931.
    PID_robot
    Algumas observações: 1. Não usei essa ponte H(l2930), mas funciona também. 2. Usei o sensor ultrasonico que tem pinos de echo trigger, que não é esse da imagem, por isso liguei os 2 pinos no mesmo lugar

     

  • Aqui tá o Código

6 comentários em “Controladores PID – Sintonia Prática”

  1. Muito didático os gifs ajudaram bastante. Com a abordagem de machine learning um exemplo de aplicação seria um robô que embala encomendas para serem enviadas por correio, como o robô poderia aprender o tamanho das encomendas que tem tamanhos diferentes ele sempre faria a embalagem perfeita independente do tamanho do tamanho do objetivo a ser enviado. fica a dica (y)
    .

    Curtido por 2 pessoas

Deixe um comentário