Hola a todos, me gustaria exponeros en lo que he estado cacharreando últimamente y los problemas que me han surgido por si alguien tiene experiencia en el tema.
Paso a detallarlo:
SISTEMA:
Tracción: Robot compuesto por dos ruedas traseras con tracción + rueda loca delantera.
Sensores Implicados: 2 Encoders de resolucion 128 pasos/vuelta + Brujula digital
SISTEMAS DE CONTROL IMPLEMENTADOS:
PID de Posicion independiente en cada rueda: La señal que se mide proviene del encoder y la señal de control es la entrada al motor trasero correspondiente. Periodo de aplicacion del PID 20 ms.
PID de Velocidad independiente en cada rueda: La señal que se mide proviene del encoder y la señal de control es la entrada al motor trasero correspondiente. Periodo de aplicacion del PID 200 ms.
PID de Navegacion con Rumbo: Para realizar esto hay dos fases. Primero pivotamos hasta conseguir el rumbo correcto y posteriormente una rueda entra en el modo de PID de velocidad mientras que la otra entra en un modo PID de brújula donde intentará mantener el rumbo. De esta manera conseguimos que vaya en el rumbo indicado a la velocidad indicada. Periodo de aplicacion del PID 20ms.
OBJETIVOS:
Crear una librería de maniobras medianamente compleja que permita calcular trayectorias, avanzar, girar , navegar, etc,... Los parámetros de las maniobras son tiempo de duración de la maniobra, velocidad, distancia, ángulo, etc...
MANIOBRAS PROBLEMATICAS:
1 _ Avanzar X metros haciendo uso de los PID de Posición. Para hacer este movimiento se incrementan los PID de posición en la misma cantidad y esto debería producir un avance rectilineo. La realidad es que ambos sistemas (Rueda izquierda y Rueda derecha ) no tienen el mismo comportamiento por lo que aunque en regimen permanente ambas ruedas han recorrido la misma distancia, al no hacerlo exactamente al mismo ritmo, se produce una desviación en la trayectoria que se acentúa con la distancia. Ajustar ambos PID para que sean exactamente iguales es misión imposible.
Cosas que se me ocurren:
a) Crear un PID de seguimiento de rueda. De esta manera una rueda avanzará y la misión de la otra es seguir el movimiento. La señal que se medirá es la diferencia entre las variaciones de los encoders de la rueda independiente y de la "seguidora".
b) Anadir la lectura de la brújula al algoritmo de aplicación del PID. De esta manera el objetivo será ir a una determinada posición del encoder pero la lectura de la brújula influirá en la manera de aplicarlo para evitar desviaciones. El problema es que no he estudiado nada acerca de mecanismos de control donde tenemos dos objetivos simultaneos (posición y rumbo). ¿Alguna sugerencia?
2_ Navegación rectilinea a velocidad constante con PIDs de velocidad:
Tengo dos posibles manera de medir la velocidad
a) Para velocidades altas es factible medir el incremento que ha sufrido el contador del encoder y dividirlo entre el T de aplicación del PID
b) Para velocidades bajas, en cada ciclo de aplicación del PID, con suerte se habrá incrementado al menos una vez el contador del encoder y podemos medir el tiempo que pasó desde la última vez que varió. Si tengo varias muestras, calculo la media.
Ambas maneras de medir son imperfectas y esto se observa a la hora de aplicar el control PID. Lo único que se me ocurre es disminuir el periodo en el que se aplica el PID para que entren más muestras y aumente la precisión de la medida.
3_ Navegación rectilinea con Rumbo y velocidad constante haciendo uso del PID de brújula:
Este tipo de navegación funciona desde el punto de vista del rumbo, todo lo bien que le deja la resolución e imperfecciones de la brújula. Desde el punto de vista de la velocidad, una rueda hace uso de un PID de velocidad y por lo tanto tampoco es muy preciso.
Bueno, pues lo dicho, se agradecen consejos para afinar la precisión de las maniobras y exprimir al máximo el Hardware antes de seguir avanzando.