Ao usar um loop PID para direcionar usando a linha a seguir, seu ponto de ajuste será sempre o mesmo. Você sempre desejará que a linha esteja na mesma posição em relação ao robô, por exemplo, no centro do seu sensor.
Portanto, se o seu sensor de linha gerar um valor de -1 a 1, com 0 sendo o centro do sensor, você desejará que o seu ponto de ajuste seja zero (e o sensor volte a ler e a diferença será a mesma). Se o seu sensor de linha exibir um valor de 0 a 10, você desejará que o seu ponto de ajuste seja 5 (e o sensor lida novamente e a diferença será diferente).
Como você está dirigindo, configurando as rodas para girar em velocidades diferentes, e para seguir suavemente uma linha a uma velocidade constante, você provavelmente desejará ajustar as velocidades para as duas rodas com base no erro. Por exemplo, se você precisar virar à esquerda para permanecer na linha, diminuirá a roda esquerda e acelerará a roda direita. Quanto mais você precisar girar, mais precisará desacelerar a roda interna e mais precisará acelerar a roda externa.
Considere a situação em que você precisa girar radianos para a esquerda para corrigir o erro e sua velocidade atual é :θeS0 0
Portanto, sua roda esquerda precisa viajar em e sua roda direita precisa viajar em .Seu= r θSR= ( r + b ) θ
Para manter a mesma velocidade geral , você precisa de , para que a roda esquerda precise percorrer
enquanto a roda direita precisará percorrer em .S0 0S0 0= ( r + b / 2 ) θSeu=S0 0- ( b / 2 ) θSR=S0 0+ ( b / 2 ) θ
Como seu erro tende a zero, as velocidades de cada motor também tendem a se aproximar. À medida que o erro aumenta, os diferenciais de velocidade também aumentam.
Você pode até precisar que sua roda interna gire para trás se o sensor estiver lhe dizendo que a linha está se curvando com mais força do que a distância entre as rodas. Essas são complicações que você pode executar passo a passo, pois seu controle fica mais sofisticado.
Além disso, como seu erro terá valores positivos e negativos (para representar o continuum da balança à esquerda ... muito à esquerda ... na linha ... muito à direita ... fora da balança, então você deve Para não precisar perguntar se if
o erro é positivo ou negativo, você deve apenas calcular novos valores com base no valor do erro, pois um valor positivo e um valor negativo devem ter efeitos opostos e simétricos nos motores.
Observe que, para a linha seguinte, você pode se safar apenas do termo de ganho proporcional (ou seja, deixando os outros termos em zero). A implementação de um termo Derivativo pode muito bem permitir que você amplie o termo de ganho proporcional mais alto para obter um sistema mais responsivo, mas é improvável que um termo integral ajude. O fato de que, se o seu robô for na direção errada, o erro aumentará, significa que os movimentos físicos do seu robô funcionarão como um termo integral de qualquer maneira.
Os valores específicos de P, D e I serão determinados pela capacidade de resposta do seu sistema. Para obter conselhos gerais sobre como ajustar os parâmetros do PID, consulte minha resposta e outras sobre Quais são as boas estratégias para ajustar os loops do PID?