Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola pues me dispongo a desarrollar un velocista en un plazo de un año, es decir, para el próximo cosmobot si dios o la caixa quieren. Y me gustaría pedir consejo y escuchar opiniones sobre diferentes puntos.
La base va a ser un coche rc de escala 1/28, como el miniz del cosmobot, esta vez otro modelo de coche, al que he podido incorporar un microservo de 0.1 s 60 grados, para el giro.
Mi primera duda surge en que tipo de sensores para detectar la línea usar, o cuáles hay disponibles. Lo ideal es que cuanto más pequeños mejor, y probablemente haga lectura analógica sobre digital, ya veremos como afectan los cambios de luz.
Yo hasta ahora sólo conozco dos modelos de sensor, en CNY70 y el QRD1114 de fairchild que nunca he usado, en el cosmobot vi a gente que llevaba diversos tipos de sensores, algunos de ellos eran muy pequeños, a ver si alguien me puede indicar otro modelo de sensores distintos de los dos anteriores, o foto trt y foto diodo.
Segunda duda, es como colocar los sensores, mi idea inicial es volver a usar dos placas de sensores, una delante y otra detrás, la de detrás es muy útil para conocer la posición del robot respecto a la línea, para poder realizar cambios de carril y acelerar, cuando el robot está centrado.
En el cosmobot vi a un robot, este http://es.youtube.com/watch?v=IVLpgTclsrI que usaba esa técnica para seguir la línea, me comentaron que esta era la manera correcta de hacerlo, o como se debia hacer. Me gustaría saber que ventajas tiene de hacerlo de esta forma frente a la clásica placa de sensores fija en el coche. Supongo que de esta forma se podrá obtener un error mucho más exacto.
Y por último que microcontrolador usar, he estado leyendo y creo que la mejor elección para este tipo de proyecto es un DSP, además de un mayor número de MIPS llevas los multiplicadores por hard, bastante útil a la hora de realizar operaciones.
Las señales que habría que leer en principio serían los sensores y un encoder que lleve el coche, que aún no sé muy bien donde se lo voy a poder colocar, quizás en el piñon o en la corona, y luego por último leer la batería. Las salidas el motor y el servo.
Aunque con un micro de 8 bits bien programado se puede hacer todo esto y más, yo creo que es un buen proyecto para iniciarse con micros mayores (almenos para mi), aún no sé la cantidad de operaciones que habría que hacer por segundo, mi idea inicial siendo muy optimista, es alcanzar los 2 m/s de media.
Así que a ver si alguien me puede aconsejar un micro para empezar, de momento yo he pensado en el dsPIC del que ya tendría el programador, por lo que el coste sería cero. Pero puestos a aprender no sé si sería mejor irme al mayor fábricante, es decir texas instruments, lo que no sé es cuánto costaría un DSP de estos, y cuánto el material para el desarrollo. La idea es usar un micro smd frente a un kit, por razones de espacio.
Tb me estoy iniciando estos días con atmel, que supongo que tendrá su alternativa a usar.
Gracias. S2
El error si es proporcional con la distancia ya que es una medida real, para corregir los errores con mayor o menor rapidez se usan los términos D e I.
Con los sensores centrales el error sigue siendo proporcional, ya que el origen se coge en el punto medio, si mirais los cálculos los incrementos son proporcionales para todos los sensores.
Si no hacemos los errores proporcionales que sentido tiene hacer la P?
La P es proporcional con el error no con la magnitud. Lo único que estamos haciendo con este error no lineal es utilizar un sistema x2 (la magnitud se mide en potencias de 2) en vez de un sistema x1 (magnitud lineal).
S2
Ranganok Schahzaman
Por eso lo digo. El sistema de JM tiene el efecto inverso: una variación por un sensor alejado del centro significa que tiene un error físico más grande, debido a que tiene más distancia, sin embargo, desde el punto de vista la lectura en digital, el error es lineal. Con tu explicación, el sistema es exponencial, de manera que genera más error cuanto más lejos del centro.
Ahora sí, el problema aparecería si quisiéramos un punto de ajuste variable, para ir haciendo 'trazada', es decir, 'meternos' en la parte interior de las curvas.
Quizás la mejor idea sería hacer los sensores equiespaciados, y una vez calculado el error, el factor proporcional en lugar de ser lineal, que sea cuadrático o exponencial.
El error debe ser proporcional con la distancia. la Kp es proporcional con este error.
error= (entrada - salida)*k
y esto es la entrada de nuestro sistema.
Si para 1 cm error = 1, entrada deseada = 0, k=2
error= (0-1)*2=-2
Ahora para dos cm ponemos error = 3 (no proporcional), k =2
error=(0-3)*2=-6
es como si usasemos otra k distinta respecto si lo hacemos como en el primer caso.
error=(0-2)*3=-6 k=3
estamos cambiando la K para cada medida.
No sé no le veo el sentido.
Otra cosa distinta es lo que luego hagamos con esta variable de error, que depende del sistema.
Si múltiplicas x1 x2 x3 para todos los sensores igual, sique siendo proporcional. Nuestra K final será 1, 1/2, 1/3 de la resultante.
tenemos 4 sensores separado 1 cm, lo hacemos con potencias como dices.
sensor1 = 1
sensor2 = 2
sensor3 = 4
sensor4 = 8
Esto no se corresponde con la distancia real, y por tanto no lo podemos hacer, podemos multiplicar no hacer potencias. Como en el caso anterior estamos dando un valor de K distinto para incrementos de distancia iguales.
Podría ser, 1,2,3,4 ó 2,4,6,8, etc...
Luego eso error el programa sabrá como tratarlo.
La teoría del PID no es muy complicada, el funcionamiento también se entiende fácilmente. El problema, según mi experiencia, es ajustar bien los valores de las constantes. Y es que un PID mal ajustado quizá sea peor que no usar un PID.
Lorth, ojalá supieramos modelar un sistema como el nuestro de forma matemática, pero eso es bastante complicado. Modelar un sistema mecánico real no es tarea sencilla. Así que supongo que, como los demás, usamos el viejo método del ojímetro. Esto supone muchas pruebas.
Para leer el error no sólo existe la posibilidad de hacerlo con 1 variable, también se puede hacer con dos: error_derecha y error_izquierda. De esa manera se tienen compensados los de un lado con los del otro. Con este método tienen mayor peso los de fuera, siempre y cuando le hayamos asignado el BMS (bit más significativo) al sensor más externo. O sea:
lectura_derecha = sensores_derecha
lectura_izquierda = sensores_izquierda
error = lectura_derecha - lectura_izquierda
siendo la conexión de sensores:
S1 S2 S3 S4 S5 S6 S7 S8
BMS.....bms|bms.....BMS
__izquierda_|_ derecha__
Si la linea es tan fina que sólo se lee por un sensor a la vez o si los sensores están lo suficientemente separados no hay problemas. El problema de este modo es cuando la linea activa dos sensores sensores a la vez, entonces se falsea el error.
Para que eso no ocurra, una solución consiste en leer todos los sensores y asignarle un peso a cada uno. Por ejemplo:
leer_sensores(S1..S8 )
error_S1 = S1 * (-peso1)
error_S2 = S2 * (-peso2)
error_S3 = S3 * (-peso3)
error_S4 = S4 * (-peso4)
error_S5 = S5 * peso4
error_S6 = S6 * peso3
error_S7 = S7 * peso2
error_S8 = S8 * peso1
error_total = suma de todos los errores
Con este método podemos tener un error lineal o exponencial según le demos los valores a los pesos. Funciona muy bien cuando sólo hay una linea que seguir.