Controle PID para robôs: roteiro de aprendizagem
Você pode transformar uma medição ruidosa em um sinal de erro suave e ajustar um controlador PID estável que acompanhe a referência sem oscilar.
Um controlador PID é uma das ferramentas mais importantes da robótica: transforma a diferença entre onde um robô está e onde ele deveria estar em uma correção. Mas um controlador só é tão bom quanto o sinal sobre o qual atua; por isso, este roteiro começa limpando leituras ruidosas de sensores e depois ensina a ajustar os termos proporcional, integral e derivativo para que o robô acompanhe a referência com suavidade, em vez de oscilar.
As etapas práticas são onde a ordem importa. Primeiro, ajuste uma malha PID simples, em que uma única referência e uma única planta deixam observar isoladamente sobrepasso, oscilação e erro em regime permanente. Só depois use os mesmos três ganhos no seguidor de linha, em que a planta resiste e o erro vem de um sensor real — é aí que o ajuste deixa de ser simples.
O roteiro termina em um lugar que os nós anteriores não alcançam. Toda planta até esse ponto é estável: ignorada, ela permanece no lugar, portanto o ajuste busca melhorar algo que já funciona. Um robô autoequilibrador não é estável — se você o deixar sozinho, ele estará no chão em menos de um segundo. Essa única mudança transforma o bom ajuste em requisito, não melhoria, e impõe a ideia estrutural que encerra o roteiro: quando você não pode comandar aquilo que realmente importa, aninha duas malhas e deixa a externa mover o alvo da interna.
Antes de começar
Você já deve conseguir ler um sensor e acionar um motor na velocidade comandada — a trilha de controle de motores cobre as duas tarefas. Leve um robô ou um simulador em que você possa alterar um número e ver imediatamente o efeito.
O que você será capaz de fazer
- Ajustar P, depois I e depois D em uma ordem deliberada, em vez de alterar três números ao mesmo tempo e torcer pelo resultado.
- Ler uma curva de resposta e nomear o problema a partir de seu formato: sobrepasso, oscilação sustentada ou erro em regime permanente que nunca desaparece.
- Reconhecer o windup integral quando o atuador satura e corrigi-lo limitando o acumulador, em vez de reduzir o ganho até esconder o sintoma.
- Aninhar duas malhas de modo que um controlador externo mova a referência do controlador interno.
Onde as pessoas costumam travar
Ajustar os três ganhos ao mesmo tempo. Com três ganhos que interagem e uma única saída, alterar tudo de uma vez significa que o resultado não ensina nada. Aumente P até ele oscilar e reduza; só então adicione D; adicione I por último e somente se permanecer um deslocamento constante.
Derivar o erro. Quando a referência dá um salto, o erro dá um salto com ela, e sua derivada é brevemente enorme — o robô se move bruscamente sem motivo físico. Derive a medição. A matemática é quase idêntica e o salto desaparece.
Fornecer um sinal ruidoso a D. A diferenciação amplifica o ruído. Se o sensor oscilar, D transforma essa oscilação em comandos de motor. Filtre primeiro — por isso esta trilha começa pelo ruído dos sensores e não pelo controlador.
Supor que os ganhos se transfiram. Os ganhos são propriedades de uma planta específica. Baterias novas, um chassi mais pesado ou uma superfície diferente alteram a planta, e o ajuste perfeito de ontem não será perfeito hoje.
Uma taxa de execução da malha inconsistente. I e D dependem de quanto tempo passou. Se a malha roda sempre que termina, ambos os termos são calculados com base em uma informação falsa. Corrija o intervalo ou meça-o e passe ao cálculo o tempo real decorrido.
O que você precisa
| Item | Por que esta trilha precisa dele | Observações |
|---|---|---|
| Uma planta que você possa excitar | Algo que responda a um comando e se estabilize — um motor, um aquecedor, um robô | Os simuladores substituem os três, se você não tiver nenhum |
| Uma forma de plotar | Ajustar observando um robô é adivinhação; ajustar lendo uma curva não | Monitor serial ou os laboratórios desta trilha |
| Um intervalo fixo para a malha | I e D são calculados com base no tempo decorrido. Uma malha que roda quando termina calcula ambos com base em uma informação falsa | O padrão millis() |
| Paciência para mudar um ganho por vez | O método inteiro | — |
Você pode concluir todos os nós desta trilha no navegador. Os três laboratórios são controladores reais em plantas reais (simuladas), e o procedimento de ajuste se transfere diretamente ao equipamento — que é o propósito de fazê-lo aqui primeiro.
Por que a trilha segue esta ordem
A ordem foi escolhida para que cada etapa acrescente exatamente uma dificuldade nova.
A filtragem vem primeiro porque um controlador só é tão bom quanto sua entrada, e D pune você por omiti-la. A diferenciação amplifica o ruído: um sensor com variação de ±2 contagens, amostrado a cada 10 ms, produz uma estimativa da derivada que varia 200 contagens por segundo, e D converte isso diretamente em comandos de motor. Ajustar um controlador com um sinal sem filtro ensina a lição errada — que D é inútil.
A malha simples vem antes do robô porque isola o controlador. Uma referência, uma planta, três ganhos, sem geometria de direção, posicionamento de sensor ou patinação das rodas. Quando a resposta tem sobrepasso aqui, a causa são os ganhos, e não existe outra possibilidade.
O seguidor de linha vem em seguida porque acrescenta duas coisas ao mesmo tempo, ambas legítimas: o erro agora vem de um sensor real com campo de visão limitado, e a planta resiste — o próprio movimento do robô altera o erro mais rápido do que o controlador espera. É aqui que um ajuste que parecia concluído deixa de estar concluído.
O robô autoequilibrador vem por último, pois é o objetivo de toda a trilha. Toda planta antes dele é estável: ignorada, ela permanece no lugar, e o ajuste é uma otimização. Um pêndulo invertido não é estável — se você o deixar sozinho por um segundo, ele estará no chão. Essa única mudança transforma o bom ajuste de melhoria em requisito e impõe a ideia estrutural que encerra a trilha: quando você não pode comandar aquilo que importa, aninha duas malhas.
Pontos de verificação: como saber que uma etapa foi dominada
| Etapa | Verificação | Como é um resultado aprovado |
|---|---|---|
| Filtragem | Plote o sinal bruto e o filtrado nos mesmos eixos enquanto perturba o sensor | Você pode indicar em milissegundos o atraso introduzido pelo filtro e dizer por que vale pagá-lo |
| Somente P | Aumente P até a oscilação ficar constante, anote o valor e reduza-o à metade | Você tem um número para o ganho crítico, e a resposta agora tem sobrepasso e se estabiliza |
| Adicione D | Aumente D até o sobrepasso ser amortecido | O sobrepasso diminui sem a resposta ficar lenta; D demais a torna irregular |
| Adicione I | Somente se permanecer um deslocamento constante | O deslocamento desaparece, e você limitou o acumulador antes de testar perto da saturação |
| Leia uma curva | Observe três respostas e nomeie o problema de cada uma | Você distingue sobrepasso, oscilação sustentada e erro em regime permanente apenas pelo formato |
| Windup | Comande uma referência muito além do alcance do atuador e libere-a | O sistema não ultrapassa ao ser liberado — se ultrapassar, falta a limitação |
| Taxa da malha | Exiba o intervalo real durante um minuto | Ele é fixo, ou você passa o tempo decorrido medido para o cálculo |
| Cascata | Comande uma posição em uma planta de equilíbrio | A malha interna roda várias vezes mais rápido que a externa, e você pode informar a razão |
Onde esta trilha termina
O PID é uma ferramenta importante, mas não cobre todo o campo, e esta trilha deixa claro onde termina.
Ela para no controle com uma entrada e uma saída. Robôs reais frequentemente têm várias malhas acopladas que interferem entre si, e existe uma disciplina inteira para isso que o PID não aborda.
Não cobre controle de pré-ação, a maior melhoria prática que quase todas as malhas de robôs deixam de lado. O PID é reativo por construção — não pode atuar antes que exista um erro. Se você já sabe qual movimento está comandando, pode calcular antecipadamente a maior parte da saída necessária e deixar o PID corrigir apenas a diferença. O tutorial de perfis de movimento é a primeira metade dessa ideia.
Não cobre controle baseado em modelo — LQR, alocação de polos ou qualquer método que comece escrevendo as equações da planta. Esses métodos produzem melhores resultados quando você tem um modelo preciso, e a maioria dos robôs pequenos não tem.
Também não cobre escalonamento de ganhos, a resposta padrão ao fato de que os ganhos não se transferem: manter vários ajustes e alternar entre eles conforme a velocidade, a carga ou a tensão da bateria.
Roteiro de aprendizagem
O caminho
Siga os nós em ordem — cada um desbloqueia o próximo depois que você o conclui. Seu progresso fica salvo neste dispositivo.
0 / 7 concluídos
Dúvidas comuns
Perguntas frequentes
Em que ordem devo ajustar os ganhos PID?
P, depois D, depois I, e sempre apenas um por vez. Aumente o ganho proporcional até a resposta oscilar de forma constante e então reduza-o para cerca de metade desse valor — este é o ponto de partida clássico de Ziegler–Nichols e permite chegar perto rapidamente. Adicione o termo derivativo para amortecer o sobrepasso deixado por P. Adicione o termo integral por último, e somente se permanecer um deslocamento constante que P sozinho não elimina. Alterar os três ao mesmo tempo não ensina nada, porque, com três ganhos que interagem e uma única saída, você não consegue atribuir a mudança observada ao ganho que mudou.
Por que meu controlador PID oscila?
Geralmente o ganho proporcional está alto demais para o atraso da planta. Toda malha tem atraso — filtragem do sensor, inércia do motor e o próprio intervalo da malha; e P atua sobre um erro que já está desatualizado. Acima de certo ganho, a correção chega tarde o bastante para piorar o resultado, e a malha oscila. Reduza P e adicione D, que atua sobre a taxa de variação e, portanto, antecipa o movimento. Se a oscilação for rápida e irregular, em vez de suave, suspeite de ruído chegando a D: a diferenciação amplifica o ruído, e um sensor instável gera comandos de motor instáveis.
O que é windup integral e como corrijo?
O windup integral ocorre quando o atuador satura — os motores já estão na potência máxima; o erro deixa de diminuir, mas o termo integral continua acumulando-o. Quando a referência é alcançada, o termo integral contém um grande valor armazenado que precisa ser descarregado; assim, o sistema ultrapassa o alvo e demora muito para voltar. A solução é limitar o acumulador integral a uma faixa razoável ou interromper o acúmulo sempre que a saída saturar. O que você não deve fazer é reduzir o ganho integral até esconder o sintoma, pois isso troca o sobrepasso por um deslocamento constante que nunca desaparece.
Meus ganhos PID transferem para outro robô?
Não, e muitas vezes nem para o mesmo robô no dia seguinte. Os ganhos são propriedades da planta, não do algoritmo, e a planta inclui o estado de carga da bateria, a massa do chassi, a superfície e a temperatura da caixa de engrenagens. Um ajuste perfeito com baterias novas será lento com baterias fracas, porque o mesmo ciclo de trabalho agora produz menos torque. Por isso, esta trilha exige ajuste por procedimento, não por cópia de números — o procedimento se transfere, mesmo que os ganhos não se transfiram.
Por que derivar a medição em vez do erro?
Porque, quando a referência dá um salto, o erro dá um salto com ela, e a derivada de um degrau é brevemente enorme. O robô se move bruscamente por um motivo que não tem relação com a física — nada realmente mudou; você apenas pediu algo diferente. Derivar a medição fornece a mesma informação sobre a velocidade real de mudança do sistema, sem o salto causado pela referência. A mudança tem uma linha de código e quase sempre é a escolha certa.
O que é PID em cascata e quando preciso dele?
São duas malhas aninhadas, em que a saída da malha externa define a referência da interna. Você precisa delas sempre que não pode comandar diretamente aquilo que realmente importa. Em um robô autoequilibrador, você quer controlar a posição, mas os motores controlam o torque das rodas, e a única maneira de se mover é inclinar-se deliberadamente — uma malha interna mantém a inclinação no ângulo fornecido, e uma externa solicita a inclinação necessária para avançar. A malha interna deve ser várias vezes mais rápida que a externa; caso contrário, a externa persegue um alvo que a interna ainda não alcançou.