Powered By Blogger

domingo, 17 de março de 2013

LINUSBot - Line Follower Robot - Controle PID






LINUSBot - Controle PID


Este é um complemento do primeiro posto do LINUSBot.

Agora o controle dos movimentos do seguidor de linha é com PID; controle Proporcional, Integral, Derivativo. Isso torna os movimentos durantes as curvas muito mais suave e durante as retas, ele pode desenvolver maior velocidade, chegando à velocidade máxima.
O controle PID proporciona ao Robot uma "aprendizagem", fazendo com que o robot possa desenvolver melhor nas curvas e retas do circuito.

Agora vamos a uma breve introdução e resumo sobre o controle PID.
Basicamente, este tipo de controlador efetua as seguintes ações:


Sistema PID básico


1 - Controle Proporcional:
Multiplica o "erro" corrente por uma constante Kp.
O "erro", é a diferença entre a saída real e a saída desejada e é realimentado no sistema, ou seja: 
A saída real é subtraída da saída desejada (set point), assim, é calculado o erro.  Esse erro é inserido no controlador PID como entrada, e o controlador PID (calculando os termos P I D), comanda o sistema para tentar eliminar esse erro.
Garantindo assim o ganho necessário para chegar próximo do sinal de saída desejado o mais rápido possível e com a melhor estabilidade do sistema.

2 - Controle Integral:
O termo Integral, multiplica o erro corrente e sua duração por uma constante Ki, fazendo uma somátorio de toda essa informação.
O termo Integral quando somado ao termo Proporcional; acelera o processo de chegar ao estado estacionário do seu sistema, além de proporcionar um sinal mais próximo da saída desejada. Em outras palavras, ele também elimina (ou pelo menos tenta eliminar) a parcela residual de erro e chega mais rápido ao resultado desejado.


3 - Controle Derivativo:
O termo Derivativo, faz com que a razão de mudança do sinal de erro seja multiplicada por uma constante Kd. A intensão é predizer o erro e assim diminuir a taxa com que os erros produzem mudanças no sistema.



Podemos usar os 3 termos juntos para formar um controlador PID, ou suas variaçãoes, tais como:


Controlador P (algumas vezes utilizado):
Neste caso o uso de pequenos vlores da constante Kp é a melhor maneira de conseguir chegar ao valor desejado, mas o seu controle será lento (ele demora pra chegar ao valor desejado).  Se você aumentar o valor de Kp, sobre-impulsos podem ocorrer e o seu sistema ficará estável.



Controlador PI (mais usado):

Ele remove a parcela residual de erro no caso estacionário (melhorando a resposta a transientes), mas neste caso você poderá ter sobre-impulso e também inversão de estado, ocorrendo oscilação do sistema e causando instabilidade, podendo o sistema ser sobre-amortecido,  ou sub-amortecido, ou oscilatório.
Este tipo de controle deixa o sistema mais lento. Usando valores maiores de Ki, é possível deixar o sistema mais rápido, porem aumenta o sobre-impulso diminuíndo a margem de estabilidade do seu sistema.


Controlador PD (raramente utilizado):
Usado para diminuir a magnetude do sobre-impulso dos sistemas que usam Controlador Integral e melhorar a estabilidade do sistema. Porém o controle Derivativo, amplifica a magnetude de ruído do termo de erro do sistema e pode deixar o processo instável. O controlador PD diminui o tempo para chegar ao valor desejado, consideravelmente.... para isso o ganho derivativo Kd deve ser alto. Isso diminui o tempo de controle, porém aumenta a largura de banda do sistema, deixando o sistema susceptível a ruídos.


Controlador PID (algumas vezes utilizado):
Usando PID (combinação de PI+PD), removemos a razão de erro do sistema e diminuímos  o tempo da resposta com uma resposta transistória razoável (sem oscilações ou instabilidades).


Este estudo pode ser encontrado no link: http://www.youtube.com/watch?v=wbmEUi2p-nA




Esta é  o modo básico de implementação de um PID via software:


previous_error = 0
integral = 0 
start:
  error = setpoint - measured_value
  integral = integral + error*dt
  derivative = (error - previous_error)/dt
  output = Kp*error + Ki*integral + Kd*derivative
  previous_error = error
  wait(dt)
  goto start


Veja Mais em: http://en.wikipedia.org/wiki/PID_controller

No projeto do LINUSBot, foi usado os seguintes parãmetros:
Kp = 1/20 
Ki  = 1/10000
Kd = 3/2

O código completo pode ser baixado do link:



http://www.4shared.com/file/iPVAVCwy/LINUSBot_9_3pi_modelo_PID.html


Obtenha todos os arquivos necessários no GitHub:
https://github.com/Arduinobymyself/LINUSBot.git


Veja o vídeo do LINUSBot em ação e confira os resultados.

http://www.youtube.com/watch?v=FKq6WeBBH14




Dúvidas e sugestões para: arduinobymyself@gmail.com





Um comentário:

  1. Ótimo conteúdo, porém gostaria de saber se tem uma proporção ideal entre o valor do I em relação ao do P e do D.

    ResponderExcluir