Autor Tema: Tipos de Control de Traccion Robot  (Leído 5776 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado alcubo01

  • PIC12
  • **
  • Mensajes: 69
Tipos de Control de Traccion Robot
« en: 03 de Noviembre de 2011, 07:16:17 »

 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.


Desconectado alcubo01

  • PIC12
  • **
  • Mensajes: 69
Re: Tipos de Control de Traccion Robot
« Respuesta #1 en: 09 de Noviembre de 2011, 06:12:23 »

 Actualizo con las últimas pruebas realizadas:

 He estado trabajando en conseguir afinar la maniobra para avanzar X metros en linea recta probando dos configuraciones distintas:

 + Rueda Izquierda PID de Posicion que impone como referencia una posición del encoder concreta. Rueda derecha en modo "seguimiento", de manera que vaya reproduciendo el mismo comportamiento que tiene la rueda izquierda. Las pruebas con esta configuración no han sido satisfactorias, el pequeño retraso que se produce en el seguimiento de la rueda Derecha a la izquierda, produce una curvatura de la trayectoria (en el arranque y en la parada sobre todo).

 + Rueda Izquierda PID de Posicion que impone como referencia una posición del encoder concreta. Rueda derecha he implementado un PID un tanto especial.
    U derecha(t) = U izquierda(t) + U Compass(t).  Es decir la entrada a la rueda derecha es la misma que genero para la izquierda pero sumo otra señal de control  cuya referencia es el rumbo actual de la brújula. De esta manera se corrigen las diferencias entre ambos sitemas. Esta configuración ha resultado funcionar bastante bien y la doy por buena.




Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Tipos de Control de Traccion Robot
« Respuesta #2 en: 09 de Noviembre de 2011, 12:42:14 »
Y si haces un PID que tenga como entrada la diferencia de velocidades entre las ruedas? Entonces cualquier perturbacion que provoque una diferencia de velocidad, o sea un giro, va a ser eliminada.
Una pregunta: para leer los encoders, medis periodo o frecuencia?
Saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado alcubo01

  • PIC12
  • **
  • Mensajes: 69
Re: Tipos de Control de Traccion Robot
« Respuesta #3 en: 09 de Noviembre de 2011, 17:01:07 »

 Pues he intentado algo parecido, pero creo que estoy muy limitado por el Hardware porque tengo mediciones de velocidad de muy mala calidad y muy lentas.
 
 Te detallo un poco, para medir la velocidad usé un periodo de aplicación fijo del PID y estuve analizando muestras según los distintos métodos de medición.

 Cuelgo un par de muestras, cada una corresponde a una rueda (un encoder diferente).

 Leyenda:

 Amarillo: Ultima lectura basada en el Periodo (tiempo que pasó entre los últimos cambios de valor del encoder).
 Azul Claro: Media de todas las muestras de Periodo que han entrado en la ventana de tiempo que hay en el ciclo de aplicación del PID.
 Azul Oscuro: Ultima lectura basada en la frecuencia. Cuento el número de pasos que ha sufrido el encoder entre dos aplicaciones del PID.


 




 





 Como puede observarse, la medida basada en el periodo es malísima, supongo que aquí influyen los defectos de fabricación e instalación del encoder. Los otros dos métodos mejoran la calidad de la medida, pero para ser exactos aumentan demasiado el Tiempo de muestreo.


 Al final me he decidido por fijar un Periodo de aplicación del PID medianamente alto (200ms) y usar como medición la media de muestras de periodo. Como es de suponer, cuanto mayor sea la velocidad, más fiables son las mediciones.






Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Tipos de Control de Traccion Robot
« Respuesta #4 en: 09 de Noviembre de 2011, 20:53:13 »
Estas muy limitado por los tiempos, ya que para leer los encoders necesitas un tiempo relativamente grande en comparacion con el periodo del PID.
Y no podes usar la brujula para ir en linea recta? Me imagino que es analogica y podes hacer lecturas con mucha mas frecuencia q los encoders.
Saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado alcubo01

  • PIC12
  • **
  • Mensajes: 69
Re: Tipos de Control de Traccion Robot
« Respuesta #5 en: 10 de Noviembre de 2011, 05:09:16 »

 La brújula según el datasheet necesita 6ms para dar una nueva muestra. Hay una maniobra de velocidad en la que la uso: una rueda la pongo a velocidad constante y la otra tiene como misión mantener el rumbo. De esta manera, como ya has comentado, aseguro que ambas ruedas giran a la misma velocidad, pero la precisión en las rpm está condicionada por el PID de velocidad.

 Quería aclarar que las gráficas que puse en el mensaje anterior no muestran el ciclo de aplicación del PID. El sistema estuvo corriendo y cada cierto tiempo (bastante mayor que el de aplicación del PID) monitorizaba las muestras de velocidad. Lo tuve que hacer así porque sacar por puerto serie estos datos consume demasiado tiempo del micro.

 Por si alguien quiere hacerse una idea del intervalo en cambios del encoder, para 128 pasos/vuelta:

 Para 15rpm
 T = (60 seg) / (15 rpm * 128 pasos/vuelta)  = 31.25 ms

 Para 30 rpm
 T = 15.625 ms
 
 Para 50 rpm
 T = 9.375 ms

 Con estos tiempos se obtiene la medida de peor calidad, que inestabiliza el sistema. Por eso no me quedó más remedio que aumentar hasta 200ms el Ts del PID y usar el método de la media.


 Un saludo!



Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Tipos de Control de Traccion Robot
« Respuesta #6 en: 10 de Noviembre de 2011, 13:00:48 »
Yo creo que es muy muy dificil (por no decir imposible) lograr que el robot se desplace en linea recta tratando de hacer que las ruedas giren a la misma velocidad. Necesitas alguna referencia "absoluta" de la direccion, ya que las mediciones que puedas hacer de la velocidad de las ruedas son muy poco exactas. Ademas cualquier tipo de perturbacion como un obstaculo o una pendiente van a hacer que el robot pierda el curso.

Para implementarlo con la brujula, podrias hacer que los dos motores vayan al maximo si la salida del PID es 0, y que reste velocidad a una rueda o la otra si se desvia. Con un periodo de muestreo de 6ms estas sobrado, son 167Hz.

Yo tambien tuve problemas con el periodo de muestreo por andar mandando datos por el puerto serie. Te recomiendo q pongas un pin del micro como salida y lo conmutes cada vez que tomes una muestra, entonces despues podes medir el periodo con un osciloscopio y ver si el mismo varia cuando imprimis los caracteres.

Saludos y suerte!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein


 

anything