Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola a todos,
Me hago eco en este hilo de un comentario que salió en otro: Robots para concursos. Kits o lo que veais que pueda interesar al principiante, intermedio o experto.
Esto es lo que JMV comentaba :
Hablando de minisumo (y por hablar un poco de robots para concursos en este foro.. ¬¬) on enlazo un kit que he pedido para hacer uno, a ver si me llega y le hago unas fotos: http://www.fingertechrobotics.com/proddetail.php?prod=ft-kit-cobra-4wd-chassis " onclick="window.open(this.href);return false; , lo he pedido con motores 20:1 ya que los 50:1 me parecen que tienen demasiado par según unos primeros cálculos para 500 gr y lentos @ 6V.
El kit tiene muy buena pinta:
Por si alguno estuviese, por ejemplo, pensando en presentarse a AESSBot (4-6 Mayo) lo mismo está a tiempo.
Saludos,
Sphinx.
Desde mi opinión (con muy pocos conocimientos en estos temas de control):
La función de transferencia del sistema es función de la velocidad, si se hace el diagrama de bloques del robot del que posteriormente se obtiene la función de transferencia, en ese diagrama de bloques que relaciona la entrada con la salida (distancia del centro de la placa de sensores a la línea) habrá un bloque que se corresponde con las ecuaciones cinemáticas del robot, en ese bloque de las ecuaciones cinemáticas hay una variable que es la velocidad, a mayor velocidad la variación de la salida de ese bloque será mayor que a menor para una misma entrada (es decir nos alejamos más de la línea para una misma entrada cuando la velocidad es más alta). Por lo que obteniendo la función de transferencia del conjunto queda que en esa función de transferencia hay una variable velocidad de las ruedas, para distintas velocidades de las ruedas tendrás distintas funciones de transferencia, y por tanto hay que reajustar las variables del regulador (Kp, Kd, Ki) al cambiar la velocidad del robot, como comprobamos experimentalmente que al cambiar la velocidad tenemos que volver a establecer las constantes.
Las constantes si van acopladas: u(s) = k(1+sTd) (regulador PD). Ki y Kd son dependientes del tiempo de muestreo, al usar un tic fijo de programa ese tiempo de muestreo va implícito en las constantes que has ajustado de forma experimental, por lo que simplificas enormemente los cálculos. Si en lugar de usar un tic fijo quieres usar una distancia fija, tendrías que contar el tiempo transcurrido en recorrer esa distancia, medir la variación de error, y con esos datos calcular la derivada. Poniendo el tic fijo ese cálculo te lo saltas y ajustas el robot de forma experimental ya que el tiempo es siempre el mismo y además va implícito en la constante ajustada de forma experimental.
No sé si obtienes alguna ventaja en hacerlo por distancia en lugar de por tic de programa, ya que la velocidad es una variable del diagrama de bloques que relaciona la variación de la salida con la señal de mando, por lo que no hay forma de librarte de ella ya que va en la f.d.t. en función del tiempo, y hacer ese diagrama de bloques en función de la distancia (para cambiar el dominio (?) y hacerlo independiente de la velocidad) en lugar de en función del tiempo no sé cómo puede ser de complejo o si tiene sentido alguno, el tiempo no se puede parar, la distancia si, no sería un sistema de referencia invariable.
Para acelerar y frenar lo único que tenemos son los encoders, por lo que lo hacemos como dices, la pregunta puede ser utilizar varias velocidades distintas en recta para que los movimientos del robot no sean "bruscos".
S2
Yo de las funciones de transferencia no hablo porque todo eso se me olvidó hace años (nunca lo he usado).
Respecto a la velocidad, hablo de mi caso como lo hacía, usaba una interrupción del timer1 cada 1 ms y entonces leía sensores, calculaba error y hacía el cálculo pid. Las lecturas de encóder iban por otras interrupciones independientes. Como con un encóder en la rueda la frecuencia de pulsos de éste es muy baja (incluso con 48 ppr que me daba el encóder en cuadratura de pololu) comparada con 1 ms, el cálculo de la velocidad (velocidad = encoder_actual - encoder_viejo) lo hacía cada 10 ms. Eso quiere decir que yendo a 2 m/s no se la velocidad hasta 2 cm después y la resolución que tengo es penosa. Tan solo me sirve para ver claramente cuando estoy en curva o voy en recta. Si hiciese las lecturas cada 20 ms mejoraría un poco la resolución pero sabría la velocidad 4 cm después. Con este nivel de error no me parece muy "provechoso" saber la velocidad. Alguien con solo 4 rayas en el encoder de la rueda debería hacer el cálculo del encóder mucho más tarde por lo que se incrementa tanto el error creo que es inviable. Para esto sí que veo que medir el tiempo entre pulsos puede ayudar mucho, así sabría a que velocidad voy mucho antes y con más precisión. Quizá valdría la pena probarlo a ver si resulta. Seguir contando pulsos para medir la distáncia, pero contar tiempo para saber la velocidad.
La función de transferencia no debería ser función de la velocidad, eso sería que el sistema está mal diseñado.
Tu entrada es la posición del robot respecto a la línea que sigue, tu error es la desviación respecto a esa línea y tu salida es la diferencia de velocidad de tus ruedas (en un robot diferencial esto provoca un giro).
Tu planta es cómo se comporta el robot a partir de esa velocidad para corregir la desviación del robot, y la función de transferencia es el modelado de ese comportamiento.
Por lo tando el PID lo que tiene que hacer es recoger la desviación (error) medida con los sensores y ajustar la velocidad de acuerdo a esta ultima.
Existe una forma de calcular los parámetros PID a partir de las oscilaciones del robot cuando se aplica una función pulso.
S2
Ranganok Schahzaman
La función de transferencia no debería ser función de la velocidad, eso sería que el sistema está mal diseñado.
Tu entrada es la posición del robot respecto a la línea que sigue, tu error es la desviación respecto a esa línea y tu salida es la diferencia de velocidad de tus ruedas (en un robot diferencial esto provoca un giro).
Ranganok SchahzamanNo veo eso claro, ya he dicho que la teoría no la controlo, pero de la práctica sí te puedo decir alguna cosa. Si a un robot velocista, del tipo diferencial, le pones una velocidad muy baja, casi la mínima para moverse, con prácticamente cualquier valor de kp, y con la parte D a cero, conseguirá seguir la línea durante todo el circuito. Ahora bien, súbele la velocidad y verás que eso ya no sirve de nada, a la mínima curva se sale recto.
Si no recuerdo mal de las clases de física de hace 20 años, hacer la derivada del espacio respecto al tiempo es equivalente a calcular la velocidad (que a su vez si se vuelve a derivar da la aceleración). Pues la parte D del controlador PID es eso mismo, no? error/tiempo=velocidad.
Pero puede que me haya equivocado o confundido fácilmente, ya que hace mucho que no reviso estos temas.
Decir que la función de transferencia no depende de la velocidad pero sí del error no tiene sentido si error y velocidad están intrínsecamente ligadas entre sí.
Si tu PID está bien ajustado dará igual la velocidad a la que circule, sin embargo los fallos del ajuste serán más evidentes a mayor velocidad.
S2
Ranganok Schahzaman