collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: PID utilizando IR  (Lida 3466 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.