¿Cómo funciona un control proporcional derivativo (PD)? Adaptación del artículo: http://iesseverooch http://iesseveroochoa.edu.gva.es/severobot/ oa.edu.gva.es/severobot/2011/0 2011/01/29/como-funcio 1/29/como-funciona-un-controlador-pd na-un-controlador-pd// para el aller aller de !niciación a la "obótica 2012 organi#ado por el $"%-&A%.
El tren de tracción diferencial 'a forma m(s simple de mover un robot es usando dos motores velo cidad de uno y otro independientes) uno a cada lado. Variando la velocidad 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 configuración diferencial y y es el mecanismo utilizado, por ejemplo, por las orugas de un un tanque o una excavadora. excavadora. El tercer punto de apoyo se consigue consigue con una rueda loca, por ejemplo en robótica robótica se usa una bola que gira gira libremente dentro dentro de un casquillo de plástico. plástico. Esta configuración es la más utilizada, utilizada, ya que en todo momento momento los 3 puntos están apoyados apoyados en el suelo aunque aya irregularidades, 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 posición de la línea con una precisión de medio centímetro. i la línea se mueve) tendremos un error) ue puede ser positivo o negativo segn si el despla#amiento es a la i#uierda o a la derecha. Si la línea está situada exactamente entre los dos sensores centrales, el error es 0 (lo deseado para un seguidor de línea).
ero si el error es positivo) significa ue la línea se est( moviendo a la derecha) por tanto nosotros tambi3n nos moveremos a la derecha para corregir el error. 4n 4n caso de error negativo es lo mismo) sólo ue corregiremos girando a la i#uierda. El error nos indica indica el radio de la curvatura: cuánto más alto sea, significa que la curva es más cerrada.
ara evitar salirnos en las curvas) lo lógico es girar m(s o menos segn sea la curva m(s cerrada o m(s abierta) multiplicando el error por una constante. 4sta ser( la constante proporcional Kp
1
A la velocidad ue lleva el robot en línea 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 dereca, probablemente el robot se pasará la l#nea y se saldrá por la dereca. $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)can.org(*or+s(ltc(report.tml
Control derivativo 4l control derivativo se llama así porue en ve# de utili#ar el error) utili#a la derivada del error respecto del tiempo) es decir la velocidad con la ue varía 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 comn 6 la división se puede omitir haciendo mucho m(s simples los c(lculos.
4n la figura ha6 dos dibu7os. 4n ambos la línea está sobre el tercer sensor) con lo ue el error es ". $omo la línea 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 línea se está ale'ando del centro 8error actual error anterior 1; 6 deberíamos re%orar el giro) 6a ue aparentemente nos vamos a salir pronto. or 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 línea.
4n definitiva) el control proporcional se encarga de decidir la direccin y velocidad del giro ) mientras ue el control derivativo tiene cierto carácter predictivo que le permite amortiguar o re%orar el giro para evitar oscilaciones. 2
'a suma de ambos nos da un control proporcional*derivativo:
Auí aparece una nueva constante: la Kd o constante derivativa) ue es el factor ue multiplica a la velocidad del error.
¿Cómo se calculan las constantes Kp y Kd? ues) lamentablemente) a o'o. -n robot de estas caracter#sticas es muy dif#cil de modelar matemáticamente. ay que tener en cuenta el par de los motores, la tensión de la bater#a, el agarre de las ruedas %que a su vez depende de la superficie, la distribución de pesos, longitud y un sinf#n de parámetros más.
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 debería pararse mientras la otra gira a Vcrucero.
•
Al principio probar con la >d 0. 4l robot debería 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 segn las fórmulas ue hemos visto antes:
ero esto no es del todo correcto 6 #ay que poner unos límites : la velocidad nunca puede ser negativa) 6 tampoco ueremos superar en ningn momento la velocidad de crucero 86a ue en las curvas el robot podría 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 ltima.
?
Algunas notas sobre el control PD /odos los puentes en tienen dos modos de 0parar1 un motor' una es frenándolo y otra dejándolo 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, frenándolo. uando usamos 456 para controlar el motor conviene usar esta configuración porque en teor#a tendremos una respuesta más precisa de los motores. En la práctica los motores de robótica son tan peque7os que la f.e.m. autoinducida apenas frena, pero algo es algo. En robótica de competición 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 instantánea. !ara este taller no usaremos ni el modo de parada rápida ni el retroceso de los motores, ya que suponen un es%uero adicional para las baterías, lo que resulta en picos de tensin que acaban por reiniciar la -rduino.
Adaptado por $.@..
+
Ejercicios de control proporcional 1. mplementar la %uncin int error_linea(). =ebe devolver un valor comprendido entre -+ 6 + indicando la posición de la línea 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 posición era )3, entonces la nueva posición será );, y para poder devolver ese valor en caso de una lectura problemática %p.e' se activan a l a vez los sensores < y ;.
2. !robar la %uncin int error_linea()) le6endo el valor retornado a trav3s del puerto serie 6 asegur(ndose de ue es correcto.
?. mplementar la %uncin void cabeceo_motores(int velocidad, int desviacion). =ebe a7ustar la velocidad de los motores segn: 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 %uncin void cabeceo_motores()) asegur(ndose de ue los resultados son eactamente los indicados.
,. acer que el robot siga una línea 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 eperimentar a cambiar los valores de la constante 6 de la velocidad de crucero para observar cómo influ6en en el comportamiento del robot.
,
Ejercicios de control proporcional derivativo B. mplementar la %uncin int velocidad_error_linea(int posicion_linea). =ebe devolver un valor comprendido entre -C 6 C indicando la velocidad a la ue se mueve la línea sobre los sensores. e puede utili#ar la función millis() de Arduino 8http://arduino.cc/es/"eference/%illis; para reali#ar la medición 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.
D. !robar la %uncin 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.
C. mplementar el control proporcional derivativo. &sando las funciones creadas 6 las constantes int kp, int kd ) 6 a7ustarlas empíricamente) siguiendo el m3todo eplicado 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 debería pararse mientras la otra gira a Vcrucero.
◦
Al principio probar con la ?d @ =. El robot deber#a oscilar y salirse.
◦
r subiendo la ?d asta que deje de oscilar.
B