El control del robot, es una combinación de la aplicación del control Proporcional Integral Derivativo (PID) y el uso oportuno de la capacidad de frenar que nos brinda el Driver TB6612FNG.
Antes de continuar con la publicación del código, esbocemos algunos conceptos importantes para el control de robots velocistas.
1. ¿Qué es el Control PID?
Un PID es un mecanismo de control por realimentación que calcula la desviación o error entre un valor medido y el valor que se quiere obtener, para aplicar una acción correctora que ajuste el proceso. (http://es.wikipedia.org/wiki/Proporcional_integral_derivativo)
La explicación del uso de sus parámetros se basa en:
- Proporcional: La proporcional tiene que ver con el error directo, es la respuesta que se tiene que entregar de manera inmediata.
- Integral: La integral tiene como propósito el disminuir y eliminar el error en estado estacionario provocado por el modo proporcional.
- Derivativo: La función de la acción derivativa es mantener el error al mínimo corrigiendo proporcionalmente con la misma velocidad que se produce, de esta manera evita que el error se incremente.
2. ¿Y como se aplica esté en robots velocistas?
La mayaría de los robots velocistas usan tracción diferencial, es decir varían la velocidad de alguna de las dos ruedas para conseguir un giro hacia un determinado lado, de allí la importancia del uso del Control PID, esté nos permite obtener un valor apropiado para asignarle al PWM de los motores según el estado del robot sobre la línea, aplicando un correctivo necesario en su dirección de desplazamiento para que esté no se salga de la línea.
Para velocistas la "Integral" de este control no se utiliza porque tiene que ver con errores acumulativos ocasionados por estados estacionarios, es decir cuando el robot esta totalmente detenido o en movimiento con velocidad constante. Debido a que a lo largo de la trayectoria en su recorrido por la pista se esta acelerando y desacelerando, el robot experimenta cambios dinámicos que imposibilitan el uso de este parámetro haciéndolo tender a 0. (es decir no lo usaremos).
Nota: En muchos caso se le llama Control PD
3. Frenos y su Importancia
Los frenos son sin duda alguna muy importantes cuando se trata de obtener un mayor control en los robots velocistas, nos permiten tener una segunda opción cuando nos salimos del rango de visión que nos muestran los sensores infrarrojos (estos eventos tienen mucha probabilidad de ocurrir en curvas obtusas o de 90°, haciendo de verdad muy difícil el control sin la opción de los frenos).
Cuando se aplican, es necesario tomar en cuenta que debemos hacerlo dándole dirección a la inercia que ocasiona el frenado hacia la toma correcta de la curva, para ello debemos frenar la rueda interna y liberar la rueda externa.
Nota: El frenado del robot Lenin, se hace de manera acumulativa usando una espera de un microsegundo, liberándose una vez que vuelve a la línea.
Recomiendo la publicación de Robot Zero en el año 2012
(http://webdelcire.com/wordpress/archives/1330)
La libreria QTRSensors.h la puede descargar de este lugar.
La libreria QTRSensors.h la puede descargar de este lugar.
NOTA: Este código puede no funcionar en tu robot velocista. Recuerda que debes modificar los pines de dirección, sensores, etc. También los valores de P, D y la potencia aplicada a los motores varían según el peso y su distribución, el centro de masa, la potencia de los motores, el largo y ancho, la distancia entre las ruedas, el alto de los ejes, la vibración generada por los motores, la rigidez de la parte delantera (cabeceo de los sensores). Incluso debes modificar estos valores dependiendo del tipo de pista en el que corra el robot.
El código funcional lo pueden conseguir por acá:
https://github.com/abrahamjoc/robot-lenin
El código funcional lo pueden conseguir por acá:
https://github.com/abrahamjoc/robot-lenin