Seguidor de Linha com controle PID: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
 
(29 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 5: Linha 5:
;[[Sistemas de Controle]]: Um resumo da teoria sobre '''Sistemas de Controle em Malha Fechada''' e do '''Controle Proporcional Integral Derivativo'''.
;[[Sistemas de Controle]]: Um resumo da teoria sobre '''Sistemas de Controle em Malha Fechada''' e do '''Controle Proporcional Integral Derivativo'''.


==Vetor de Sensores e Determinação do Erro==
==Ações de Controle PID sobre o Seguidor de Linha==


O '''Seguidor de Linha''' utiliza um '''vetor com sete sensores''' para seguir a linha e determinar o '''erro''' do robô em relação a linha.  
;[[Ações de Controle PID sobre o Seguidor de Linha]]: Descrição das ações de Controle PID sobre o Seguidor de Linha, hipóteses e problemas a serem experimentados.


Dependendo da posição do vetor sobre a linha, '''apenas um''' ou '''dois sensores''' podem reconhecer a linha ao mesmo tempo, como mostra as figuras abaixo <ref NAME=LabGaragem>http://labdegaragem.com/profiles/blogs/tutorial-rob-seguidor-de-linha-com-controle-pid-e-ajustes-por</ref>:
==Controle de velocidade de robô Seguidor de Linha==


[[Arquivo:VetorSensores1.png|400px]]
Um robô Seguidor de Linha equipado com dois motores de '''corrente contínua''', os quais tem seu '''controle de velocidade''' e '''sentido de rotação''' a partir de '''tensão elétrica''' variável aplicada em seus terminais:
:Apenas sensor central (s3) reconhece a linha.
*'''Sentido de rotação''': Tensão positiva gira em um sentido e tensão negativa em outro sentido;
*'''Velocidade''': Controlada pela amplitude da tensão aplicada.


[[Arquivo:VetorSensores2.png|400px]]
;Arduíno e Ponte H: O '''Arduíno''' equipado com um módulo '''Ponte H''' permite o controle de motores de corrente contínua através de '''saídas digitais e analógicas''':
:Sensor central (s3) e sensor (s4) reconhecem a linha.
#O '''sentido de rotação''' dos motores é realizado a partir de '''saídas digitais''', com LOW para um sentido e HIGH para o outro.
#O '''controle da velocidade''' dos motores é realizado a partir de '''"saídas analógicas"''', com '''modulação PWM''' de 8 bits, correspondendo a valores decimais entre O e 255. Estes valores correspondem a faixa entre 0 V e 5 V em caso de tensão nominal de 5 V.


;Possibilidades para o vetor de sensores: Quando o sensor central está sobre a linha o erro é zero.
:Entretanto, dependendo dos motores, a faixa de ajuste da velocidades geralmente varia de '''valorMínimo''' a '''255''', onde o valorMínimo é a modulação PWM mínima para romper a inércia dos motores (algo entre 60 e 80, dependendo do tipo de motores e do peso do robô).
:Quando o carrinho deriva para esquerda, sensibilizando os sensores a direita do ponto central, o erro é positivo. Quando deriva para direita, sensibilizando os sensores a esquerda do ponto central, o erro é negativo.
  Sensores
0 1 2 3 4 5 6 
-------------
1 0 0 0 0 0 0  --> Erro -6
1 1 0 0 0 0 0  --> Erro -5
0 1 0 0 0 0 0  --> Erro -4
0 1 1 0 0 0 0  --> Erro -3
0 0 1 0 0 0 0  --> Erro -2
0 0 1 1 0 0 0  --> Erro -1
'''0 0 0 1 0 0 0  --> Erro  0'''
0 0 0 1 1 0 0  --> Erro  1
0 0 0 0 1 0 0  --> Erro  2
0 0 0 0 1 1 0  --> Erro  3
0 0 0 0 0 1 0  --> Erro  4
0 0 0 0 0 1 1  --> Erro  5
0 0 0 0 0 0 1  --> Erro  6


==Ação de Controle Proporcional==
;Funcionamento do Seguidor de Linha e a ação do Controle: 
#Suponha que um '''Seguidor de Linha''' seja programado para percorrer a pista com uma '''velocidade normal''' estabelecida com a modulação PWM '''velNormal = 120''' e que tenhamos somente o '''controle proporcional''' ativo, com '''Kp = 20'''.
#Suponha que em dado momento tenhamos '''erro = 1''', com o robô derivando para esquerda.
:Neste caso, a ação do controle proporcional modificará a trajetória do robô aumentando a velocidade do motor esquerdo e diminuindo a velocidade do motor direito:
velMotorEsq = velNormal + Kp * erro = 120 + 20 * 1 = 140
velMotorDir = velNormal - Kp * erro = 120 - 20 * 1 = 100


A ação de '''controle proporcional''' do Seguidor de Linha vai corrigir a trajetória do robô, ajustando a velocidades dos motores a partir de um '''ganho Kp''', proporcional ao '''erro''':
;Ajuste dos parâmetros PID: O projeto apresentado em <ref NAME=LabGaragem/> utiliza motores de passo também controlados por modulação PWM. O autor sugere iniciar com '''Kp = 25''', com '''Ki = 0''' e '''Kd = 0'''.
<math>Controle P = Kp * erro</math>
:*Experimentalmente foi aumentando o valor de '''Kp''' de forma que o robô continuasse a seguir linha de forma '''estável'''. O autor chegou a um valor de '''Kp''' = 50 após testes.
:*Posteriormente, ajustou novo valor para '''Kp''' e '''Kd''' para '''1/2 Kp''' utilizado com o controle proporcional único e prosseguiu com novos testes.
:*O autor não implementou o controle '''Ki'''.


Caso o robô derive para esquerda, a velocidade dos motores é ajustada para que o robô volte para a linha:
==Hardware do Robô Seguidor de Linha==
*a '''velocidade do motor esquerdo''' é '''acrescida''' do valor '''<math>Kp * erro</math>''';
*a '''velocidade do motor direito''' é '''diminuída''' do valor '''<math>Kp * erro</math>'''.


Caso o robô derive para direita, a ação de controle ajusta a velocidade dos motores para corrigir a trajetória para o outro lado.
O '''hardware''' do '''Robô Seguidor de Linha com Controle''' PID possui como módulos principais um '''Arduíno Micro''', um '''vetor de sensores de reflectância QTR-8''', um '''drive para motores DC L9110''' e um '''regulador de tensão'''.


==Ação de Controle Proporcional Integral==
[[Arquivo:SeguidorLinhaPIDa.jpg|300px]]


A ação de '''controle proporcional integral''' do vai corrigir a trajetória do robô combinando a ação proporcional e a integral.  
===Arduíno Micro===
[[Arquivo:PinosArduinoMicro.png|400px]]


O '''controle integral''' ajusta a ação de controle em função ao '''somatório do erro''' em um dado intervalo de tempo, chamado '''tempo integral'''.
===Vetor de sensores QTR-8===


====Hipótese I: Análise sobre a ação do controle integral====
O '''vetor de sensores de reflectância QTR-8''' possui '''8 leds IR/fototransistores''' (emissores infravermelho/receptores) montados em uma única placa, projetado para ser utilizado em '''seguidores de linha'''.
Algumas hipóteses de análise do controle integral sobre o robô Seguidor de Linha:
;Caso de uma RETA: Algumas situações possíveis são:
#O robô '''segue a linha''' com '''erro zero'''.
#O robô '''deriva aleatoriamente para um lado e para outro''' resultando, provavelmente, em '''somatório de erro''' também '''zero'''.
#:Nestes dois casos, portanto, como o '''somatório de erro''' é '''zero''', '''controle integral''' tem '''ação nula'''.
#O robô '''deriva sistematicamente para um lado''' devido a possíveis '''desequilíbrios de velocidades dos motores''', levando com o passar do tempo a um '''somatório de erro diferente de zero''' para um dos lados.
#:Neste caso, inicialmente somente o controle proporcional atua, ajustando a trajetória do robô em função do desequilíbrio de velocidades. Entretanto, '''a medida que o somatório do erro cresce''', o '''controle integral''' passa a atuar. Quando o robô passar a '''seguir linha''' com '''erro instantâneo zero''', o '''controle integral''' continua agindo equilibrando as velocidades a partir do '''somatório de erro acumulado'''.
#:Vemos esta ação como equivalente a eliminação do '''erro residual'''<ref name="OGATA">OGATA, Katsuhiko. Engenharia de Controle Moderno, LTC, 2011.</ref> existente em alguns controles de ação proporcional.
;Caso de uma CURVA: O '''somatório de erros''' será '''diferente de zero''' em função do lado da curva.
:Inicialmente somente o controle proporcional atua, ajustando a trajetória do robô à curva. Entretanto, '''a medida que o somatório do erro cresce''', o '''controle integral''' passa a atuar. A partir de um dado momento, o '''controle integral''' passa a prevalecer, fazendo o robô '''acompanhar a curva''' com '''erro instantâneo zero''', portanto, sem ação proporcional.


<math>Controle PI = Kp * erro + Ki * \sum erro</math>
Há dois tipos de sensores '''QTR-8''':
*[https://www.pololu.com/product/960 QTR-8A]: Utiliza leitura analógica dos sensores
*[https://www.pololu.com/product/961 QTR-8RC]: Utiliza portas digitais para fazer leitura dos sensores


====Problema I: Verificação da ação do controle integral====
;Biblioteca para Arduíno: [https://www.pololu.com/docs/0J19 Arduino Library for the Pololu QTR Reflectance Sensors]
Construir protótipo Seguidor de Linha e experimentações para verificar a validade destas hipóteses sobre a '''ação do controle integral'''.


===Tempo integral===
;Leitura dos sensores: O programa utiliza uma função disponível na '''biblioteca QTR-8''' que fornece a '''posição''' do vetor em relação a linha, variando de 0 a 7000 (sensor 1 até sensor 8). Com o vetor no centro da linha retorna o valor 3500.
O tempo integral é o tempo da ação do controle integral.


====Hipótese II: Delimitação do tempo integral na pista do Seguidor de Linha====
[[Arquivo:VetorSensoresQTR-RC.png|400px]]
Para os casos relatados acima, seria interessante '''reiniciar''' o '''tempo de integração''' a cada '''início de reta''' e a cada '''início de curva'''.


;Marcações de pista do seguidor de linha: No caso da '''pista''' para o Seguidor de Linha, as '''marcações de início e fim de curva''' poderiam ser utilizadas como delimitadores dos '''tempos integração'''. Neste caso, a '''cada marcação''' encontrada, se poderia '''zerar''' o '''somatório de erros''', iniciando, portanto, um novo '''tempo de integração'''.
:Cálculo do erro:
erro = (posição - 3500)/1000 => -3,5 =< erro =< +3,5


====Problema II: Teste do tempo integral====
===Drive para Motor DC L9110===
Construir protótipo Seguidor de Linha e experimentações para verificar a validade da hipótese sobre '''reiniciar o tempo integral a cada início de reta ou curva'''a.


==Ação de Controle Proporcional Derivativa==
;[http://me.web2.ncut.edu.tw/ezfiles/39/1039/img/617/L9110_2_CHANNEL_MOTOR_DRIVER.pdf Driver L9110]


A ação do '''controle derivativo''' é proporcional a '''taxa de variação do erro''' atuante. Vai ter ação, portanto, nos '''períodos transitórios''' quando o '''erro cresce ou diminui'''.
Exemplo de uso:
*[https://www.bananarobotics.com/shop/How-to-use-the-HG7881-(L9110)-Dual-Channel-Motor-Driver-Module How-to-use-the-L9110]


<math>Controle PD = Kp * erro + Kd * \Delta erro</math>
==Outros protótipos de hardware testados==


No caso do robô Seguidor de Linha, quando o '''erro cresce''', o '''controle derivativo''' atua '''reforçando''' a ação do '''controle proporcional'''.
===Ajuste de parâmetros via Bluetooth===


Quando o '''erro diminiu''', o '''controle derivativo''' atua '''atenuando''' a ação do '''controle proporcional'''.  
Para facilitar o ajuste dos parâmetros, foi introduzido um módulo bluetooth no robô para que os parâmetros sejam transferidos via Bluetooth de um aplicativo em um celular Android.


====Hipótese III: Análise sobre a ação do controle derivativo====
O aplicativo foi desenvolvido com o [http://ai2.appinventor.mit.edu App Inventor].
Algumas hipóteses de análise do controle derivativo sobre o robô Seguidor de Linha:
#Quando o '''erro estabiliza''', isto é, permanece constante, o '''controle derivativo''' passa a ter '''ação nula''' e somente o controle proporcional atua levando o robô de volta a linha.  
#Quando a ação do controle proporcional corrigir a trajetória, fazendo o '''erro diminuir''', o controle proporcional também diminui, e o '''controle derivativo''' atua em '''sentido inverso''', atenuando o controle proporcional e evitando que saia para fora do outro lado da linha.  
#:Esta última ação do controle derivativo visa diminuir a ação do controle proporcional a medida nos aproximamos do ponto de referência.


====Problema III: Verificação da ação do controle derivativo====
A comunicação usando Bluetooth foi construída baseado nos exemplos apresentados em:
Construir protótipo Seguidor de Linha e experimentações para verificar a validade destas hipóteses sobre a '''ação do controle derivativo'''.
*https://appinventor.pevest.com/2015/01/23/part-1-basic-bluetooth-communications-using-app-inventor/
*https://appinventor.pevest.com/2017/01/06/part-3-bluetooth-communications-with-2-arduino-devices-using-app-inventor/


===Tempo Derivativo===
===Vetor de Sensores e Determinação do Erro===


Segundo  <ref NAME=LabGaragem/>, o '''tempo derivativo''' está relacionado a '''taxa de amostragem''' dos '''sensores''', que corresponde ao ''loop'' de execução do programa.  
A primeira versão do '''Seguidor de Linha''' utilizava um '''vetor com sete sensores''' para seguir a linha e determinar o '''erro''' do robô em relação a linha.  


Acelerar ou retardar o tempo derivativo pode fazer uma diferença significativa no desempenho do robô. Isso é definido pelas declarações de '''''delay''''' presentes no código <ref NAME=LabGaragem/>.
Dependendo da posição do vetor sobre a linha, '''apenas um''' ou '''dois sensores''' podem reconhecer a linha ao mesmo tempo, como mostra as figuras abaixo <ref NAME=LabGaragem>http://labdegaragem.com/profiles/blogs/tutorial-rob-seguidor-de-linha-com-controle-pid-e-ajustes-por</ref>:


====Problema IV: Verificação da ação do tempo derivativo====
[[Arquivo:VetorSensores1.png|300px]]
Construir protótipo e experimentações para '''verificar a ação do tempo derivativo''' na estabilidade do Seguidor de Linha.
:Apenas sensor central (s3) reconhece a linha.


==Ajuste dos parâmetros do controlador PID==
[[Arquivo:VetorSensores2.png|300px]]
:Sensor central (s3) e sensor (s4) reconhecem a linha.


Um dos pontos chaves do bom funcionamento de '''controladores PID''' está no '''ajuste dos parâmetros''' do controlador, ou seja, os ganhos '''Kp''', '''Ki''' e '''Kd'''.
;Possibilidades para o vetor de sensores: Quando o sensor central está sobre a linha o erro é zero.
 
:Quando o carrinho deriva para esquerda, sensibilizando os sensores a direita do ponto central, o erro é positivo. Quando deriva para direita, sensibilizando os sensores a esquerda do ponto central, o erro é negativo.
Em muitos controladores PID industriais, o ajuste dos parâmetros fica a cargo do operador especialista na planta a ser controlada.
  Sensores
 
0 1 2 3 4 5 6  
===Regras de sintonia de Ziegler-Nichols===
-------------
 
1 0 0 0 0 0 0  --> Erro -6
Ziegler e Nichols sugeriram '''regras de sintonia para controladores PID''', através dos valores de  '''Kp''', '''Ti''' e '''Td''', baseadas em respostas experimentais.
1 1 0 0 0 0 0  --> Erro -5
 
  0 1 0 0 0 0 0  --> Erro -4
Estas regras devem ser testadas e experimentadas para o caso do Seguidor de Linha.
  0 1 1 0 0 0 0  --> Erro -3
 
0 0 1 0 0 0 0  --> Erro -2
====Problema V: Pesquisa e teste da sintonia de Ziegler-Nichols====
0 0 1 1 0 0 0  --> Erro -1
'''Pesquisar a sintonia de Ziegler-Nichols''' e construir protótipo Seguidor de Linha e experimentações '''testar a sintonia de Ziegler-Nichols''', assim como formas de obter o '''tempo integral''' e o '''tempo derivativo'''.
'''0 0 0 1 0 0 0  --> Erro  0'''
 
0 0 0 1 1 0 0  --> Erro  1
==Controle de velocidade de robô Seguidor de Linha==
0 0 0 0 1 0 0  --> Erro  2
 
0 0 0 0 1 1 0  --> Erro  3
Um robô Seguidor de Linha equipado com motores de '''corrente contínua''' tem seu '''controle de velocidade''' e '''sentido de rotação''' a partir de '''tensão elétrica''' variável aplicada em seus terminais:
0 0 0 0 0 1 0  --> Erro  4
*'''Sentido de rotação''': Tensão positiva gira em um sentido e tensão negativa em outro sentido;
0 0 0 0 0 1 1  --> Erro  5
*'''Velocidade''': Controlada pela amplitude da tensão aplicada.
0 0 0 0 0 0 1  --> Erro  6
 
;Arduíno e Ponte H: Com o '''Arduíno''' equipado com um módulo '''Ponte H''' permite o controle de motores de corrente contínua através de '''saídas digitais e analógicas''':
#O '''sentido de rotação''' dos motores é realizado a partir de '''saídas digitais''', com LOW para um sentido e HIGH para o outro.
#O '''controle da velocidade''' dos motores é realizado a partir de '''"saídas analógicas"''', com '''modulação PWM''' de 8 bits, correspondendo a valores decimais entre O e 255. Estes valores correspondem a faixa entre 0 V e 5 V em caso de tensão nominal de 5 V.
 
:Entretanto, dependendo dos motores, a faixa de ajuste da velocidades geralmente varia de '''valorMínimo''' a '''255''', onde o valorMínimo é a modulação PWM mínima para romper a inércia dos motores (algo entre 40 e 100, dependendo do tipo de motores e do peso do robô).
 
;Funcionamento do Seguidor de Linha e a ação do Controle:  
#Suponha que um '''Seguidor de Linha''' seja programado para percorrer a pista com uma '''velocidade''' estabelecida com a modulação PWM '''velPista = 120''' e que tenhamos somente o '''controle proporcional''' ativo, com '''Kp = 20'''.
#Suponha que em dado momento tenhamos '''erro = 1''', com o robô derivando para esquerda.
:Neste caso, a ação do controle proporcional modificará a trajetória do robô aumentando a velocidade do motor esquerdo e diminuindo a velocidade do motor direito:
  velMotorEsq = velPista + Kp * erro = 120 + 20 * 1 = 140
  velMotorDir = velPista - Kp * erro = 120 - 20 * 1 = 100
 
;Ajuste dos parâmetros PID: O projeto apresentado em <ref NAME=LabGaragem/> utiliza motores de passo também controlados por modulação PWM. O autor sugere iniciar com '''Kp = 25''', com '''Ki = 0''' e '''Kd = 0'''.
:*Experimentalmente foi aumentando o valor de '''Kp''' de forma que o robô continuasse a seguir linha de forma '''estável'''. O autor chegou a um valor de '''Kp''' = 50 após testes.
:*Posteriormente, ajustou novo valor para '''Kp''' e '''Kd''' para '''1/2 Kp''' utilizado com o controle proporcional único e prosseguiu com novos testes.
:*O autor não implementou o controle '''Ki'''.
 
==Vetor de sonsores==
 
;Sensor lines follow: [https://www.pololu.com/product/961 QTR-8 Reflectance Sensor Array]
 
;Biblioteca para Arduíno: [https://www.pololu.com/docs/0J19 Arduino Library for the Pololu QTR Reflectance Sensors]
 
O '''vetor de sensores de reflectância QTR-8RC''' possui '''8 leds IR/fototransistores''' (emissores infravermelho/receptores) montados em uma única placa, projetado para ser utilizado em '''seguidores de linha'''.
 
Há dois tipos de sensores:
*QTR-8A: Utiliza leitura analógica dos sensores
*QTR-8RC: Utiliza leitura digital dos sensores


==Materiais sobre Seguidor de Linha com controle PID==
==Materiais sobre Seguidor de Linha com controle PID==
Linha 166: Linha 115:
*http://www.andrix.com.br/robo-seguidor-de-linha-utilizando-um-controlador-proporcional-derivativo-pd-com-arduino/
*http://www.andrix.com.br/robo-seguidor-de-linha-utilizando-um-controlador-proporcional-derivativo-pd-com-arduino/
*http://www.andrix.com.br/robo-seguidor-de-linha-utilizando-um-controlador-proporcional-derivativo-pd-com-arduino/
*http://www.andrix.com.br/robo-seguidor-de-linha-utilizando-um-controlador-proporcional-derivativo-pd-com-arduino/
*https://www.instructables.com/id/PID-Based-Line-Following-Robot-With-POLALU-QTR-8RC/


;Artigos e TCCs:
;Artigos e TCCs:
*http://www2.uesb.br/computacao/wp-content/uploads/2014/09/ROB%C3%94-SEGUIDOR-DE-LINHA-AUT%C3%94NOMO-UTILIZANDO-O-CONTROLADOR-PROPORCIONAL-DERIVATIVO-EM-UMA-PLATAFORMA-DE-HARDWARE-SOFTWARE-LIVRE.pdf
*http://www2.uesb.br/computacao/wp-content/uploads/2014/09/ROB%C3%94-SEGUIDOR-DE-LINHA-AUT%C3%94NOMO-UTILIZANDO-O-CONTROLADOR-PROPORCIONAL-DERIVATIVO-EM-UMA-PLATAFORMA-DE-HARDWARE-SOFTWARE-LIVRE.pdf
*http://sistemaolimpo.org/midias/uploads/230c61ca8833329f9ffc867a89566dcd.pdf
*http://sistemaolimpo.org/midias/uploads/230c61ca8833329f9ffc867a89566dcd.pdf
*http://sistemaolimpo.org/midias/uploads/576de7878a7614e9d80c2907103fc4c7.pdf http://repositorio.roca.utfpr.edu.br/jspui/bitstream/1/7105/1/PB_COENC_2016_1_04.pdf
*http://sistemaolimpo.org/midias/uploads/576de7878a7614e9d80c2907103fc4c7.pdf
*http://repositorio.roca.utfpr.edu.br/jspui/bitstream/1/7105/1/PB_COENC_2016_1_04.pdf


==Referências==
==Referências==
Linha 179: Linha 130:
----
----


[[Categoria:Sistemas de Controle]] [[Categoria:Arduíno]]
[[Categoria:Sistemas de Controle]] [[Categoria:Arduíno]] [[Categoria:Robótica]]

Edição atual tal como às 12h07min de 14 de abril de 2022

Seguidor de Linha com controle PID

Teoria sobre Sistemas de Controle PID

Sistemas de Controle
Um resumo da teoria sobre Sistemas de Controle em Malha Fechada e do Controle Proporcional Integral Derivativo.

Ações de Controle PID sobre o Seguidor de Linha

Ações de Controle PID sobre o Seguidor de Linha
Descrição das ações de Controle PID sobre o Seguidor de Linha, hipóteses e problemas a serem experimentados.

Controle de velocidade de robô Seguidor de Linha

Um robô Seguidor de Linha equipado com dois motores de corrente contínua, os quais tem seu controle de velocidade e sentido de rotação a partir de tensão elétrica variável aplicada em seus terminais:

  • Sentido de rotação: Tensão positiva gira em um sentido e tensão negativa em outro sentido;
  • Velocidade: Controlada pela amplitude da tensão aplicada.
Arduíno e Ponte H
O Arduíno equipado com um módulo Ponte H permite o controle de motores de corrente contínua através de saídas digitais e analógicas:
  1. O sentido de rotação dos motores é realizado a partir de saídas digitais, com LOW para um sentido e HIGH para o outro.
  2. O controle da velocidade dos motores é realizado a partir de "saídas analógicas", com modulação PWM de 8 bits, correspondendo a valores decimais entre O e 255. Estes valores correspondem a faixa entre 0 V e 5 V em caso de tensão nominal de 5 V.
Entretanto, dependendo dos motores, a faixa de ajuste da velocidades geralmente varia de valorMínimo a 255, onde o valorMínimo é a modulação PWM mínima para romper a inércia dos motores (algo entre 60 e 80, dependendo do tipo de motores e do peso do robô).
Funcionamento do Seguidor de Linha e a ação do Controle
  1. Suponha que um Seguidor de Linha seja programado para percorrer a pista com uma velocidade normal estabelecida com a modulação PWM velNormal = 120 e que tenhamos somente o controle proporcional ativo, com Kp = 20.
  2. Suponha que em dado momento tenhamos erro = 1, com o robô derivando para esquerda.
Neste caso, a ação do controle proporcional modificará a trajetória do robô aumentando a velocidade do motor esquerdo e diminuindo a velocidade do motor direito:
velMotorEsq = velNormal + Kp * erro = 120 + 20 * 1 = 140
velMotorDir = velNormal - Kp * erro = 120 - 20 * 1 = 100
Ajuste dos parâmetros PID
O projeto apresentado em [1] utiliza motores de passo também controlados por modulação PWM. O autor sugere iniciar com Kp = 25, com Ki = 0 e Kd = 0.
  • Experimentalmente foi aumentando o valor de Kp de forma que o robô continuasse a seguir linha de forma estável. O autor chegou a um valor de Kp = 50 após testes.
  • Posteriormente, ajustou novo valor para Kp e Kd para 1/2 Kp utilizado com o controle proporcional único e prosseguiu com novos testes.
  • O autor não implementou o controle Ki.

Hardware do Robô Seguidor de Linha

O hardware do Robô Seguidor de Linha com Controle PID possui como módulos principais um Arduíno Micro, um vetor de sensores de reflectância QTR-8, um drive para motores DC L9110 e um regulador de tensão.

Arduíno Micro

Vetor de sensores QTR-8

O vetor de sensores de reflectância QTR-8 possui 8 leds IR/fototransistores (emissores infravermelho/receptores) montados em uma única placa, projetado para ser utilizado em seguidores de linha.

Há dois tipos de sensores QTR-8:

  • QTR-8A: Utiliza leitura analógica dos sensores
  • QTR-8RC: Utiliza portas digitais para fazer leitura dos sensores
Biblioteca para Arduíno
Arduino Library for the Pololu QTR Reflectance Sensors
Leitura dos sensores
O programa utiliza uma função disponível na biblioteca QTR-8 que fornece a posição do vetor em relação a linha, variando de 0 a 7000 (sensor 1 até sensor 8). Com o vetor no centro da linha retorna o valor 3500.

Cálculo do erro:
erro = (posição - 3500)/1000 => -3,5 =< erro =< +3,5

Drive para Motor DC L9110

Driver L9110

Exemplo de uso:

Outros protótipos de hardware testados

Ajuste de parâmetros via Bluetooth

Para facilitar o ajuste dos parâmetros, foi introduzido um módulo bluetooth no robô para que os parâmetros sejam transferidos via Bluetooth de um aplicativo em um celular Android.

O aplicativo foi desenvolvido com o App Inventor.

A comunicação usando Bluetooth foi construída baseado nos exemplos apresentados em:

Vetor de Sensores e Determinação do Erro

A primeira versão do Seguidor de Linha utilizava um vetor com sete sensores para seguir a linha e determinar o erro do robô em relação a linha.

Dependendo da posição do vetor sobre a linha, apenas um ou dois sensores podem reconhecer a linha ao mesmo tempo, como mostra as figuras abaixo [1]:

Apenas sensor central (s3) reconhece a linha.

Sensor central (s3) e sensor (s4) reconhecem a linha.
Possibilidades para o vetor de sensores
Quando o sensor central está sobre a linha o erro é zero.
Quando o carrinho deriva para esquerda, sensibilizando os sensores a direita do ponto central, o erro é positivo. Quando deriva para direita, sensibilizando os sensores a esquerda do ponto central, o erro é negativo.
  Sensores
0 1 2 3 4 5 6  
-------------
1 0 0 0 0 0 0  --> Erro -6
1 1 0 0 0 0 0  --> Erro -5
0 1 0 0 0 0 0  --> Erro -4
0 1 1 0 0 0 0  --> Erro -3
0 0 1 0 0 0 0  --> Erro -2
0 0 1 1 0 0 0  --> Erro -1
0 0 0 1 0 0 0  --> Erro  0
0 0 0 1 1 0 0  --> Erro  1
0 0 0 0 1 0 0  --> Erro  2
0 0 0 0 1 1 0  --> Erro  3
0 0 0 0 0 1 0  --> Erro  4
0 0 0 0 0 1 1  --> Erro  5
0 0 0 0 0 0 1  --> Erro  6

Materiais sobre Seguidor de Linha com controle PID

Projetos
Artigos e TCCs

Referências


--Evandro.cantu (discussão) 08h58min de 16 de maio de 2018 (BRT)