You are on page 1of 6

Cmo funciona un control proporcional derivativo (PD)?

Adaptacin del artculo: http://iesseveroochoa.edu.gva.es/severobot/2011/01/29/como-funciona-un-controlador-pd/ para el aller de !niciacin a la "obtica 2012 organi#ado por el $"%-&A%.

El tren de traccin diferencial


'a forma m(s simple de mover un robot es usando dos motores independientes) uno a cada lado. Variando la velocidad de uno y otro conseguiremos que el robot gire, mientras que si los dos motores giran a la misma velocidad, el robot ir recto. A esto se le llama configuracin diferencial y es el mecanismo utilizado, por ejemplo, por las orugas de un tanque o una excavadora. El tercer punto de apoyo se consigue con una rueda loca, por ejemplo en robtica se usa una bola que gira libremente dentro de un casquillo de plstico. Esta configuracin es la ms utilizada, ya que en todo momento los 3 puntos estn apoyados en el suelo aunque aya irregularidades, confiri!ndole al robot mayor estabilidad y agarre.

Control proporcional
*uestro robot tiene una tira de + sensores separados m(s o menos 0., cm) as -ue podemos detectar la posicin de la lnea con una precisin de medio centmetro. .i la lnea se mueve) tendremos un /error0) -ue puede ser positivo o negativo seg1n si el despla#amiento es a la i#-uierda o a la derecha. Si la lnea est situada exactamente entre los dos sensores centrales, el error es 0 (lo deseado para un seguidor de lnea). 2ero si el error es positivo) significa -ue la lnea se est( moviendo a la derecha) por tanto nosotros tambi3n nos moveremos a la derecha para corregir el error. 4n caso de error negativo es lo mismo) slo -ue corregiremos girando a la i#-uierda. El error nos indica el radio de la curvatura: cunto ms alto sea, significa que la curva es ms cerrada. 2ara evitar salirnos en las curvas) lo lgico es girar m(s o menos seg1n sea la curva m(s cerrada o m(s abierta) multiplicando el error por una constante. 4sta ser( la constante proporcional Kp

A la velocidad -ue lleva el robot en lnea recta le llamamos velocidad de crucero. $uando -ueremos girar) simplemente a un motor le sumamos la 5v anterior) 6 al otro se la restamos:

$uando el robot va despacio) el control proporcional funciona mu6 bien 6 es suficiente. 4l problema a altas velocidades es -ue los motores llevan inercia 6 cuando les obligamos a cambiar de velocidad) este cambio no sucede inmediatamente) sino -ue tarda un tiempo. "i, por ejemplo, el robot se sale por la izquierda de la l#nea y corregimos girando a la derec a, probablemente el robot se pasar la l#nea y se saldr por la derec a. $olveremos a corregir acia la izquierda, pero la inercia le ar salirse otra vez. $er#amos que el robot va aciendo eses por encima de la l#nea, y si las oscilaciones son muy bruscas, asta se saldr#a.
%&uente' ttp'((elm)c an.org(*or+s(ltc(report. tml,

Control derivativo
4l control derivativo se llama as por-ue en ve# de utili#ar el error) utili#a la derivada del error respecto del tiempo) es decir la velocidad con la -ue vara el error. !ara calcular la velocidad con la que cambia el error, basta con restar el error anterior al actual y dividir por el tiempo transcurrido. .i hacemos esto a intervalos fi7os) el tiempo transcurrido siempre es el mismo) se convierte en factor com1n 6 la divisin se puede omitir haciendo mucho m(s simples los c(lculos. 4n la figura ha6 dos dibu7os. 4n ambos la lnea est sobre el tercer sensor) con lo -ue el error es ". $omo la lnea est( a la derecha) nuestro controlador proporcional decidir mover el robot a la derec#a, pero $#ay una di%erencia importante& 4n el primer dibu7o) la lnea se est ale'ando del centro 8error actual 9 error anterior : 1; 6 deberamos re%or(ar el giro) 6a -ue aparentemente nos vamos a salir pronto. 2or el contrario) en el segundo caso la diferencia de errores es -1) lo -ue significa -ue ya nos estamos acercando al centro 6) por tanto) #ay que amortiguar un poco el giro para no pasarnos de la lnea. 4n definitiva) el control proporcional se encarga de decidir la direcci)n y velocidad del giro ) mientras -ue el control derivativo tiene cierto carcter predictivo que le permite amortiguar o re%or(ar el giro para evitar oscilaciones . 2

'a suma de ambos nos da un control proporcional*derivativo:

A-u aparece una nueva constante: la Kd o constante derivativa) -ue es el factor -ue multiplica a la velocidad del error.

Cmo se calculan las constantes Kp y Kd?


2ues) lamentablemente) a o'o. -n robot de estas caracter#sticas es muy dif#cil de modelar matemticamente. .ay que tener en cuenta el par de los motores, la tensin de la bater#a, el agarre de las ruedas %que a su vez depende de la superficie,, la distribucin de pesos, longitud y un sinf#n de parmetros ms. <a6 varios m3todos empricos para a7ustar un controlador 2=) pero a nosotros nos ha funcionado 3ste) -ue es bastante f(cil: A7ustar la >p de manera -ue el t3rmino proporcional cubra todo el rango de velocidades desde 0 hasta la velocidad crucero. +s decir, que si el robot se sale por un lado, la rueda interior debera pararse mientras la otra gira a Vcrucero. Al principio probar con la >d : 0. 4l robot debera oscilar 6 salirse. ,r subiendo la Kd #asta que de'a de oscilar.

Control de la velocidad
'a 5v anterior se utili#a para variar las velocidades de los motores seg1n las frmulas -ue hemos visto antes:

2ero esto no es del todo correcto 6 #ay que poner unos lmites: la velocidad nunca puede ser negativa) 6 tampoco -ueremos superar en ning1n momento la velocidad de crucero 86a -ue en las curvas el robot podra acelerar demasiado 6 salirse;. $omo se ve) la velocidad de cada motor puede estar entre 0 6 la velocidad de crucero) pero nunca podr( sobrepasar esta 1ltima.

Algunas notas sobre el control PD


/odos los puentes en . tienen dos modos de 0parar1 un motor' una es frenndolo y otra dejndolo girar libremente. 2a diferencia es que en el modo 0frenado1, internamente se cortocircuitan las dos patas del motor. .aciendo esto se genera una fuerza electromotriz que se opone al giro del motor, frenndolo. 3uando usamos 456 para controlar el motor conviene usar esta configuracin porque en teor#a tendremos una respuesta ms precisa de los motores. En la prctica los motores de robtica son tan peque7os que la f.e.m. autoinducida apenas frena, pero algo es algo. En robtica de competicin se necesitan velocidades muy elevadas, y para conseguir un mejor rendimiento del control 48 incluso se fuerza a retroceder a los motores, logrando as# frenarlos de forma casi instantnea. !ara este taller no usaremos ni el modo de parada rpida ni el retroceso de los motores, ya que suponen un es%uer(o adicional para las bateras, lo que resulta en picos de tensi)n que acaban por reiniciar la -rduino.
Adaptacin 6 e7ercicios propuestos por $arlos @arca .aura 8http://AAA.carlosgs.es;

Ejercicios de control proporcional


1. ,mplementar la %unci)n int error_linea(). =ebe devolver un valor comprendido entre -+ 6 + indicando la posicin de la lnea negra. 4s decir:

9ota' 8efina una variable global int ultima_posicion_linea para poder identificar por que lado escapa la l#nea de la zona de visibilidad de los sensores %si no se ve la l#nea y la :ltima posicin era )3, entonces la nueva posicin ser );,, y para poder devolver ese valor en caso de una lectura problemtica %p.e' se activan a la vez los sensores < y ;,.

2. !robar la %unci)n int error_linea()) le6endo el valor retornado a trav3s del puerto serie 6 asegur(ndose de -ue es correcto. ?. ,mplementar la %unci)n void cabeceo_motores(int desviacion). =ebe a7ustar la velocidad de los motores seg1n: Velocidad_motor_izquierdo = velocidad_crucero + desviacion; Velocidad_motor_derecho = velocidad_crucero desviacion; ,mportante limitar 0 . velocidad/motor . velocidad/crucero *ota: =ebe definir la variable global int velocidad_crucero. &n buen valor inicial puede ser +0. +. !robar la %unci)n void cabeceo_motores()) asegur(ndose de -ue los resultados son eBactamente los indicados. ,. 0acer que el robot siga una lnea negra. &sando las dos funciones creadas 6 una constante proporcional int kp. 4l valor de la constante puede ser kp=velocidad_crucero/4; para as conseguir -ue 0el t!rmino proporcional cubra todo el rango de velocidades desde = asta la velocidad crucero' Es decir, que si el robot se sale por un lado, la rueda interior deber#a pararse mientras la otra gira a $crucero.1 .e debe eBperimentar a cambiar los valores de la constante 6 de la velocidad de crucero para observar cmo influ6en en el comportamiento del robot. ,

Ejercicios de control proporcional derivativo


C. ,mplementar la %unci)n int velocidad_error_linea(int posicion_linea). =ebe devolver un valor comprendido entre -D 6 D indicando la velocidad a la -ue se mueve la lnea sobre los sensores. .e puede utili#ar la funcin millis() de Arduino 8http://arduino.cc/es/"eference/%illis; para reali#ar la medicin una ve# cada t_medicion milisegundos 8esto es necesario para permitir un intervalo de tiempo en el -ue el robot pueda reaccionar;.
9ota' 8ebe definir una variable global int t_medicion. 4uede usar <>=ms como valor inicial, y ajustarlo experimentalmente en los ejercicios posteriores para que sea lo suficiente para que reaccione el robot.

E. !robar la %unci)n int velocidad_error_linea(int posicion_linea)) le6endo el valor retornado a trav3s del puerto serie 6 asegurarse de -ue el valor devuelto es correcto. D. ,mplementar el control proporcional derivativo. &sando las funciones creadas 6 las constantes int kp, int kd) 6 a7ustarlas empricamente) siguiendo el m3todo eBplicado en este documento:
Ajustar la ?p de manera que el t!rmino proporcional cubra todo el rango de velocidades desde = asta la velocidad crucero. Es decir, que si el robot se sale por un lado, la rueda interior debera pararse mientras la otra gira a Vcrucero. Al principio probar con la ?d @ =. El robot deber#a oscilar y salirse. Ar subiendo la ?d asta que deje de oscilar.

You might also like