Otimização do seguidor de linha


9

Estou trabalhando na construção de um robô seguidor de linha e quero otimizar seu desempenho. Foi sugerido que eu use um algoritmo PID. Eu li muito sobre PID, mas estou um pouco confuso sobre o seguinte:

Eu calculei o valor do erro usando Mas com relação à mudança na velocidade do motor, estou confuso quanto ao que usar durante a comparação, a diferença (isto é, posição atual - ponto de ajuste) ou o valor do erro. Ou seja, devo usarkpproportEuonumaeu+...

if (difference > 0)
{ //code for changing appropriate motor's speed using error_value }

ou

if (error_value > 0)
{ //code for changing appropriate motor's speed using error_value }

Também não há qualquer intervalo especificado para os valores das constantes , e ? Estou usando um robô com rodas diferenciais para o meu seguidor de linha.kpkEukd

Também ficaria feliz se alguém me sugerisse algum outro algoritmo de otimização avançado para melhorar o robô seguidor de linha.


Não tenho certeza de qual terminologia você está usando, mas normal na terminologia dos sistemas de controle, sua "diferença" é o valor do erro e (o mais próximo que posso dizer) seu "erro_valor" é o comando de controle.
TimWescott

Olá, A variável , por exemplo, é o seu ganho proporcional. Você está familiarizado com a teoria do controle? Kp
LeCrazyEngineer 10/07/16

@leCrazyEngineer Não me lembro da maior parte dessa pergunta, como era há 3 anos. Também não tenho idéia da teoria do controle. Talvez os caras que responderam tenham alguma pista.
meteors

Respostas:


8

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

Direção Diferencial

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 ifo 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?


de acordo com você "você deve apenas calcular novos valores com base no valor do erro, pois um valor positivo e um negativo devem ter efeitos opostos e simétricos nos motores". mas como determino qual motor deve obter o efeito do erro?
meteoros

@AnkitShah Ambos fazem. Espero que minha atualização o explique um pouco melhor.
Mark Booth

Obrigado @ Mark Booth que realmente explicou as coisas. Eu não tenho representante suficiente. no site para votar sua resposta, mas realmente foi legal explicado.
meteoros

Que bom que eu poderia ajudar @AnkitShah - Se você editar sua pergunta para remover parte da ambiguidade (por exemplo, se você estiver usando uma direção diferencial ou ackermann), receberá um voto positivo de pelo menos eu e possivelmente outros também. Não deve demorar muito para obter 15 representantes se você ouvir as sugestões que as pessoas fazem.
Mark Booth

Obrigado @ Mark existem outros algoritmos que ajudam a reduzir o erro e fazem o bot mover-se mais suavemente e seguir a linha?
meteoros

3

Você pode querer verificar esta pergunta sobre como ajustar PIDs .

Parece que você está confundindo o papel errordesse cálculo. A equação PID realiza a medição do erro (posição atual - posição desejada) e determina quanto "resposta" deve ser comandada no controlador (por exemplo, quanta força).

Então, em vez de dizer if (error_value > 0) { }, você deveria dizer algo como response = get_PID_calculation(error_value). Dependendo da construção do seu veículo específico, essa resposta seria enviada ao motor de acionamento como a quantidade do acelerador, a direção como o ângulo desejado ou alguma outra entrada de controle.


Este é o link para o meu código arduino, o que você sugere. www1.datafilehost.com/d/5dcbdd4e
meteoros

Isso depende, o que o robô está fazendo de errado?
31413 Ian
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.