LusoRobótica - Robótica em Português

Software => Software e Programação => Tópico iniciado por: Arknum em 09 de Junho de 2010, 00:15

Título: PID utilizando IR
Enviado por: Arknum 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 (http://lusorobotica.com/index.php?topic=1870.30)
e este:
http://lusorobotica.com/index.php?topic=993.msg23608#msg23608 (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 (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
Título: Re: PID utilizando IR
Enviado por: preytender 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 (http://www.pololu.com/docs/0J21/7.b) e o upgrade para PID http://www.pololu.com/docs/0J21/7.c (http://www.pololu.com/docs/0J21/7.c)

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




Título: Re: PID utilizando IR
Enviado por: metRo_ 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).

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2F4%2F40%2FPid-feedback-nct-int-correct.png%2F300px-Pid-feedback-nct-int-correct.png&hash=ab0402bda5564c5cbecf92417fd4b9d45ace36a7)

   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.
Título: Re: PID utilizando IR
Enviado por: preytender 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.