fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Programando el segu...
 
Avisos
Vaciar todo

Programando el seguidor de línea

15 Respuestas
7 Usuarios
0 Reactions
4,879 Visitas
_jm_
Respuestas: 961
 JM
Topic starter
(@_jm_)
Prominent Member
Registrado: hace 19 años

Hola, me encuentro haciendo un robot diferencial, en el que una de sus funciones es hacer de seguidor de línea, para ello cuenta con dos sensores juntos centrales (cny) y otros cuatro dos a dos a cada lado de los centrales.

Mi duda viene en como hacer el comportamiento para seguir la línea, he leído muchas veces el uso de reguladores on-off, p, pid para esto, o seguidores que llevan sus reguladores, para velocidad es simple, la señal de error es la diferencia entre la deseada o la dada por el enconder, o la diferencia entre la velocidad de cada motor... Pero a la hora de seguir la línea como creais esa señal de error para cada sensor de posición?

Una manera puede ser calculando el ángulo de ese sensor respecto al centro del robot, en donde veo útil la disposición en semiesfera de los sensores, a modo de transportador de ángulos.

Otra supongo que puede ser si se activa este sensor variar el duty x, si se encuentra en este otro y, pero aquí saldría una tabla de verdad enorme con las posibles combinaciones de tantos sensores + estado anterior (aquí es tb donde influye la disposición en V?), por lo que supongo que la manera correcta de hacerlo es asignando un valor.

No sé, a ver si alguien experimentado en el tema de los seguidores, que seguro que sois muchos viendo los concursos, me puede contar un poco su experiencia sobre asignar el valor a cada sensor, o usar combinaciones y la ventaja de la disposición en V invertida frente a la disposición sensores en línea recta a la hora de facilitar la programación. Gracias. S2

Responder
14 respuestas
_jm_
Respuestas: 961
 JM
Topic starter
(@_jm_)
Prominent Member
Registrado: hace 19 años

Bueno pues vuelvo a subir este tema del que no obtuve respuesta en su día, después de tener todo el hard del seguidor probado y listo me encuentro con su programación. Foto del bicho:

2129647962 ecabc784ed b

EL programa principal es una máquina de estados, con estados de detectar obstaculos a evitar y bifurcaciones, y uno de esos estados es la correción del error del centro del robot respecto a la línea dado por los sensores. Y no se me ocurre una manera "buena" de asignar este error.

La placa de sensores que estoy utilizando es esta:

2103677155 7fccac7d03 b

En principio considero que cualquier número de sensores puede estar activado, no quiero eliminar ninguna combinación de la tabla de verdad.

Una manera de hacerlo es considerar los 256 estados y mediante una tabla de verdad corregir el pwm directamente o asignar un error relativo a la posición para en el caso de usar algún regulador de tipo p, pid etc... Esta sería la manera bruta de hacerlo, estoy usando asm.

Otras opciones que se me han ocurrido y no me valen es asignar un valor a cada sensor, por ejemplo:

A B C D E F G H
-4 -3 -2 -1 1 2 3 4 sensores de izquierda a derecha

Por lo que mi set point estaría en el cero, esto funciona si no puede haber más de un sesor activado al mismo tiempo. Por ejemplo si está activado el sensor F y G tengo un error de 5, si está activado sólo el sensor G tengo un error de 3, el error de sólo G debería ser mayor ya que la línea está más alejada del centro, por lo que esto no me vale.

Dependiendo de los distintos grosores de línea que hay en los concursos y sus tolerancias tan grandes, podrían estar activados un sensor, dos e incluso tres (con los dos centrales que están más cerca) al mismo tiempo.

La otra opción que había considerado es leer los 8 sensores como un byte, pero tengo el mismo problema que en el caso anterior, la lectura de un sensor y su anterior vale más que la del sensor sólo.

El tema de las bifurcaciones no lo considero para el caso anterior, ya que tienen su propio estado, para detectar una bifurcación habría que leer 101x, 10x1 ó 1001 por lo que es fácil diferenciar de la lectura de línea.

Lo único que se me ocurre es leer los 8 sensores, hacer la tabla de verdad con los 256 casos. Dependiendo de esta lectura pasar de un estado a otro de mi máquina, en el caso de que sea bifurcación no asigno valor de error, y en el caso de estar ante un error asigno un valor a cada caso de la tabla o una correción directa del pwm sin necesidad de regulador.

Cualquier lectura de los sensores con un hueco entre dos unos se considera bifurcación (recordando el estado anterior para detectar el sentido), y cualquier otra lectura línea con un error asignado para ese caso.

La verdad que esta me parece una manera demasiado "costosa" de hacerlo y lo suyo sería hacer un regulador P con detección del set point para eliminar el offset de este o un PID que sería el más indicado.

Pero no consigo una solución de asignar el error de posición en función de los sensores de suelo.

Supongo que en esto de los seguidores está todo descubierto y muchos son los que usan un PID, así que debe de haber alguna forma que mi muy limitada cabeza no alcanza a ver x_x.

A ver si alguien puede explicarme esa función de transferencia que comenta Chispon que ven en la campus.

Gracias. S2

Responder
luison
Respuestas: 495
(@luison)
Reputable Member
Registrado: hace 17 años

Así, rápidamente... podrías asignar en vez de 1-2-3-4... 1-2-4-8-16 Así suma de errores anteriores no te daría tanto error como sólo el sensor del extremo... por lo que esplicas creo que es lo que más problemas te daba, la programación parece que la llevas bien.

Responder
_jm_
Respuestas: 961
 JM
Topic starter
(@_jm_)
Prominent Member
Registrado: hace 19 años

El error es algo real, como la separación entre sensores es la misma los incrementos deben de ser iguales. Si el valor de un sensor fuera 5 veces mayor que el anterior (o dos), eso significaría que ese sensor está 5 veces más lejos de la línea, cuando esto no es así.

No sé, no se me ocurre una idea de modelarlo mas o menos bien, la única forma de hacerlo exacto que se me ocurre es con la tabla de verdad.

Responder
luison
Respuestas: 495
(@luison)
Reputable Member
Registrado: hace 17 años

Pues entonces tabla de la verdad al canto! Y te dejas de tonterías 😉
sino manualmente...:
1-->1
1,2-->1,5
2-->2
1,2,3-->2
2,3-->2.5
3-->3
1,2,3,4 (diremos que no puede ser o sino)-->2
2,3,4-->3
3,4-->3.5
4-->4

Para el otro lado igual, y el resto de estados no es válido... si no pueden ser con decimales, "tiras" o para arriba o para abajo, o multiplicas todo por dos... y sino te gusta mi idea, tabla de la verdad al canto y nos dejamos de bobadas 😈

Responder
furri
Respuestas: 2708
(@furri)
Ardero
Registrado: hace 19 años

Con TarribotV, al cambiar el programa de rastreador por uno de velocista y ponerle unas ruedas un poco mas grandes he llegado a 1m/s, no he tocado techo pero creo que tampoco puedo ir mucho mas allá.

¿sobre que velocidades creeis que nos moveremos en Cosmobot?

furri.

Responder
Página 2 / 3
Compartir: