Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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%.
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-u aparece una nueva constante: la Kd o constante derivativa) -ue es el factor -ue multiplica a la velocidad del error.
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.
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. ,
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.