Mini coisas
Eis a verdade: eu amo qualquer tipo de miniatura.
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.
Além de tudo isso, o que bateu o martelo da compra foi:
- 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.
- 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
- 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.
Montando o robô : It’s Aliiiinve!!
Olha como ficou, depois de um pouco de cola, adesivos e fios:
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.
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.
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.
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
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 :
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:
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:
Be the robot, 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:
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.
- Aqui tá o Código
Muito didático e com linguagem simples e agradável. Parabéns.
CurtirCurtido por 2 pessoas
Obrigado =]
CurtirCurtido por 1 pessoa
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)
.
CurtirCurtido por 2 pessoas
Parabéns pela explicação, simples e descomplicada.
CurtirCurtir
Muito bom, sinceramente muito bom. Fiz engenharia estou especializando em automação e nunca vi explicações que abram tanto a mente.
CurtirCurtir
Muito obrigado ! Pretendo postar de novo em breve, fico feliz com esse feedback =]
CurtirCurtir