collapse

* Posts Recentes

Cerca eléctrica por SerraCabo
[14 de Junho de 2025, 23:26]


Alguém arranja motores? por almamater
[10 de Junho de 2025, 22:34]


Condensador 4.7uF 0603 por brunus
[09 de Junho de 2025, 15:52]


+ LASERs por dropes
[30 de Maio de 2025, 23:11]


Lenovo IdeaPad 3 Não liga por jm_araujo
[07 de Maio de 2025, 19:10]


Identificar Diodo Zenner por filjoa
[01 de Maio de 2025, 23:07]


Meu novo robô por dropes
[18 de Março de 2025, 14:51]


JBL partybox On-The-Go por almamater
[21 de Fevereiro de 2025, 23:32]


Talking Reverse Engineering with an Absolute Legend! por SerraCabo
[13 de Fevereiro de 2025, 09:56]


Motoserra Stihl 120C por brunus
[11 de Fevereiro de 2025, 16:29]

Autor Tópico: PID utilizando IR  (Lida 6843 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline Arknum

  • Mini Robot
  • *
  • Mensagens: 84
PID utilizando IR
« em: 09 de Junho de 2010, 00:15 »
Bom não sei se será aqui o melhor sitio para colocar isto, mas aqui vai.
Já à algum tempo que ando intrigado com o PID, depois de ler este topico:
http://lusorobotica.com/index.php?topic=1870.30
e este:
http://lusorobotica.com/index.php?topic=993.msg23608#msg23608

e parece-me que os dois estão relacionados. Ora depois de ir ao nosso amigo google e pesquisar o que era isso do PID (e ainda não entender o dito sistema) deparei-me com este robo:
http://www.societyofrobots.com/member_tutorials/node/350
 Pelo vistos utiliza o tal de PID. Então resolvi colocar aqui, pois de todos o que vi é que me parece mais simples. E para saber a vossa opinião, não sobre o robo mas sim sobre o programa que o sujeito disponibiliza. Está feito para um atmega16 por isso não percebo grande parte do programa.
Para quem não tem paciencia de ver aquilo tudo deixo aqui os ficheiros para voces darem uma vista de olhos
Visitem os Açores vale a pena.

Offline preytender

  • Mini Robot
  • *
  • Mensagens: 148
Re: PID utilizando IR
« Responder #1 em: 09 de Junho de 2010, 01:01 »
Tambem tenho andado a investigar esse topico.

Pelo que consegui perceber ate agora PID Control é um metodo utilizado, entre outras coisas, para calcular a velocidade a que cada motor deve operar de forma a suavizar, optimizar os movimentos, no caso de um robot que segue linhas a vantagem na utilização deste metodo é que teoricamente podemos colocar o robot a andar bem mais rapido  ;D

A formula em si não e muito complicada de implementar encontrei varias exemplos deste algoritmo em varias linguagens. O manual do robot 3pi foi o artigo mais elucidativo porque podemos ver um exemplo de codigo simples (sem PID) http://www.pololu.com/docs/0J21/7.b e o upgrade para PID http://www.pololu.com/docs/0J21/7.c

Vai ser por aqui que me vou guiar para implementar isto no arduino.
Abraço.




« Última modificação: 09 de Junho de 2010, 01:02 por preytender »

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: PID utilizando IR
« Responder #2 em: 09 de Junho de 2010, 16:09 »
Um controlador PID serve para o que o nome diz, controlar. O controlo é feito através da aplicação ao erro de um ganho Kp(Proporcional), Ki(Integrador) e Kd(Derivada).



   Vamos considerar o nosso processo(o que aparece na imagem a verde) o accionamento de um motor. Como saída do processo temos a velocidade do motor, vamos supor que é 70rpm. O setpoint é o nosso valor referencia, isto é, a velocidade à qual queremos que o nosso motor funcione. Supondo que queremos que nosso motor roda a uma velocidade de 100rpm então é este o nosso Setpoint ou referencia.
   Neste momento temos a velocidade actual e a referencia, o nosso erro vai ser a diferença entre estes logo o nosso erro=100-70=30rpm.
   Este erro agora vai ser multiplicado pelo Kp, integrado e multiplicado pelo Ki, derivado e multiplicado por Kd. No final estes sinais são todos somados e este valor vai gerar a tensão que devemos aplicar no motor.

   Se não usarem um controlador deste tipo não é possível saber como reage o motor, como este evolui para a velocidade pretendido. Assim ao usarem o controlador conseguem definir como varia a velocidade do motor, qual o overshoot motor, podem definir se atinge mais rápido ou mais lento a velocidade pretendida entre outras coisas.

   Nesse caso dos segue-linhas ele usam o pid para fazer o controlo da possição do robot face à linha. O pensamento é o mesmo do que falei antes. No caso do link que indicas-te ele usa um vector com 8 leds IR. A nossa referencia é que a linha esteja sempre o no meio do vector dos leds IR por isso vamos considerar que se a linha estiver na ponta esquerda o valor é 4, se estiver no meio é 0 e na ponta direita é -4, isto é varia entre -4 a 4, a nossa referencia será 0. imaginem que a linha está na ponta esquerda o valor da posição da linha vai ser 4, logo vamos ter um erro=4. Este erro passa pelo PID e é gerado um valor para controlar a direcção para a qual o motor deve ir para ficando no meio da linha.
« Última modificação: 09 de Junho de 2010, 16:16 por metRo_ »

Offline preytender

  • Mini Robot
  • *
  • Mensagens: 148
Re: PID utilizando IR
« Responder #3 em: 09 de Junho de 2010, 16:33 »

Muito boa explicação, no caso dos segue linhas podemos ainda utilizar duas constantes vel_max e vel_min para evitar que saia disparado  ;D ou seja para restringir o output do processo.

Obrigado.