Sensores de línea y algoritmos

10

Click here to load reader

Transcript of Sensores de línea y algoritmos

Page 1: Sensores de línea y algoritmos

Sensores de línea y algoritmosPublicado el 28 de febrero de 2008, por Ibrahim Kamal, en Robótica , etiquetados

Seguimiento de línea es un concepto muy importante en el mundo de la robótica, ya que dan al robot un esquema de navegación de errores menos y fácil de implementar precisa.

Como habrás visto, muchas competiciones de robótica promover este concepto, añadiendo líneas en el patio para que el robot siga, o, a veces, el único propósito de la competencia es de raza con otros robots siguiendo una línea a lo largo de una pista.

En este tutorial, voy a confiar en la experiencia lograda por la construcción de los sensores de línea de los robots que participaron al concurso Robocon 2007.

Número de células en un sensor

figura 1

Como se puede ver en la figura 1, un sensor de línea se compone de un número de células y cada célula se compone de un emisor y un receptor. La particularidad de este par emisor / receptor, es que envía la luz que se refleja en la línea para ser detectado, pero no por el fondo con el tiempo opaco que rodea esta línea.Cualquier par emisor / receptor que es capaz de hacer una diferencia entre una línea y el resto de la tierra (de un color diferente) se puede utilizar en un sensor de línea.

Por lo general, para que sea más fácil para el diseñador del sensor, hay un importante contraste entre la línea y el suelo (por ejemplo: la línea blanca sobre fondo azul oscuro), pero en caso de que no hay suficiente contraste, hay una método para construir fácilmente un sensor de línea adaptada a la situación específica, basándose en las reglas de la física de edad que establece que una superficie de color absorbe la luz de diferentes colores, y reflejan la luz del mismo color. Por ejemplo, si usted quiere construir una línea de sensor para detectar las líneas blancas dibujadas en un piso de color azul claro, se puede enviar la luz roja, ya que el azul va a absorber todo, y la línea blanca reflejará todo. En realidad, este fue el caso en el patio de recreo de la competencia Robocon 2007, no había suficiente contraste entre las líneas blancas y el suelo azul, así que tuvimos que usar LEDs ROJOS como emisores en lugar de nuestros LEDs IR preferidos

Así el primer aspecto que afecta a la precisión y la calidad de un sensor de línea, es el número de células. Algunos expertos en robótica utilizan sólo dos células para saber si la línea está a la izquierda oa la derecha del robot, pero como se verá más adelante en la parte de software, esta muy pobre fuente de información no permitirán el controlador para guiar gradualmente el robot de nuevo en el camino, en vez te darás cuenta de que el robot mantendrá brutalmente girando a la derecha y la izquierda, pero nunca será capaz de seguir sin problemas la línea. Por otra parte, un sensor de ocho línea de células dará un

Page 2: Sensores de línea y algoritmos

espectro de información relativamente rica al controlador, que indica si el robot está muy cerca de la línea, cerca, lejos o muy lejos. Esta variedad de información permitirá que el controlador a tomar acciones que son proporcionales a la distancia entre el robot y la línea, lo que resulta en un sistema de seguimiento de línea suave.

Distancia entre las células

figura 2

El segundo aspecto, el considerar al construir un sensor de línea, es el espaciado de celda (o la distancia entre una célula y la otra). Para comprender el efecto de las células espaciamiento, tenga en cuenta que el robot accionamiento diferencial se muestra en la figura 2, con un sensor de línea de células de ocho, cuyas células están numerados del 1 al 8 (de la izquierda a la derecha). Tres situaciones diferentes se muestran, en el primero, las células 4 y 5 detectan la línea, lo que indica que el robot está perfectamente centrada en la línea. En la primera situación, el espacio entre las células no es muy crítica, pero si el robot accidentalmente hace unos 10 ° hacia la línea (segunda situación), te darás cuenta de que sólo el número de células 6 detecta la línea, que es la única indicación de que el controlador tendrá sobre ese error 10 °. Esto significa que, muy probablemente, un error menor que 10 ° incluso no ser notado.

Pero en la tercera situación, las células están estrechamente coteja, y usted puede notar que con el mismo 10 ° desviación de la línea, las células del sensor 6 y 7 detectan la línea, dejando a algunos otros estados posibles entre la posición perfectamente centrado y la desviación 10 °. En otras palabras, cuanto más cerca están las células de cada uno de los demás, más habrá la resolución del sensor.

El mismo efecto puede ser observado por el cambio de la distancia entre el sensor y el centro de dirección. En general, es importante para tratar de mantener siempre el sensor de medida de lo posible desde el centro de la dirección, que es la parte posterior del robot en una dirección diferencial uno, porque esto también ayudará a amplificar la desviación detectada por el sensor, lo que resulta en una mejor respuesta desde el controlador.

Page 3: Sensores de línea y algoritmos

La construcción del sensorHay muchos componentes electrónicos que pueden ser utilizados para construir las células de emisor / receptor de un sensor de línea. Dos de ellos se analizan en este artículo, que muestra las ventajas y desventajas de cada uno, y que muestra cómo aplicar cada uno de ellos en un circuito electrónico.

LEDs IR LDRs y LEDsEste método se basa en el famoso proximidad IR sensor con alguna modificación. Tiene la ventaja de ser barato y fácil de implementar, pero desafortunadamente necesita un importante contraste entre la línea y el suelo. Consulte el este tutorial para más información.

Cuando usted necesita para adaptarse a las situaciones de bajo contraste, como se discutió antes, esta es la alternativa más común. Usted elige el color más adecuado de LED para el envío de la luz, entonces, la LDR recogerá la luz reflejada, pero es más lento para responder que los LED IR.

figura 3.A figura 3.B

D 1: LED emisor D 2: Receptor LED R 6: Ajuste de sensibilidad D 1: LED emisor R 1: Ajuste de sensibilidadDespués de muchos experimentos, yo personalmente recomiendo el sensor de línea basada LDR ya que se puede adaptar fácilmente a diferentes ambientes mediante el ajuste de la sensibilidad mediante el potenciómetro R1 o cambiando el color del LED D 1.

Aquí está el circuito electrónico del sensor de línea basada LDR que usamos en nuestros robots en el concurso Robocon 2007. Como se puede ver que se compone de ocho células, cada una de ellas se asemeja a la celda en la figura 3.B. Hay muchas razones para elegir para construir un sensor con exactamente ocho células, ni más, ni menos: Ocho pueden proporcionar la suficiente precisión, se conecta directamente a un puerto del microcontrolador, y está representada por un solo byte de datos, lo que facilita para poner en práctica en la programación y en la memoria de un microcontrolador de 8 bits.

Page 4: Sensores de línea y algoritmos

figura 3.C

Las conexiones de los cables W 3 W a 10 son las salidas de las ocho celdas del sensor.

El valor de R1 a R9 no puede ser inferior a 50 ohmios, en realidad este valor es muy bajo y es por eso que el sensor se hunde mucha corriente. Usted puede tratar de usar valores más grandes en primer lugar, al igual que 220 ohmios, a continuación, si la intensidad de la luz no está en debe, reducirlo gradualmente.

También se dará cuenta de que hay nueve LEDs remitente (no ocho), eso es porque los los LEDs y las LDRs están colocados de tal manera que cada LDR tiene una dirigida a su derecha y otro a su izquierda (como se puede ver en la figura 3.D). El propósito de esta técnica es para asegurarse de que todos los LDRs comparten la misma intensidad de luz reflejada, y de esta manera, sólo un potenciómetro se puede utilizar para calibrar todos ellos.

Page 5: Sensores de línea y algoritmos

figura 3.D

Proporcional Algoritmos de ControlAhora que el sensor está funcionando y está proporcionando una lectura correcta de la línea por debajo de ella, usted todavía tiene que desarrollar algunos algoritmos para usar los datos recogidos por el sensor de línea. La calidad de estos algoritmos es tan importante - si no más importante - de la calidad de la que uno mismo sensor. Sus dichos procedimientos de software que le dará al robot la capacidad de seguir sin problemas y correctamente líneas en una cuadrícula de líneas e intersecciones, realizar giros de 90 º y muchos otros movimientos que se pueden implementar en una cuadrícula como líneas.

Control proporcional, que se utiliza por lo general en línea que sigue a algoritmos, significa que la intensidad de la rotación del robot hacia la línea es proporcional a la distancia entre el robot y la línea. En otras palabras, si el centro del robot se coloca exactamente en la línea, la rotación del robot será igual a cero, pero si el robot se desvió desde el centro de la línea, la intensidad de la rotación aumentará gradualmente, hasta que alcanza la máxima intensidad si la línea está completamente fuera de su alcance. Este algoritmo proporcional evitará que el robot oscile hacia la derecha y hacia la izquierda de la línea al tratar de seguirla.

Lo que quiero decir con la intensidad de la rotación, es la velocidad a la que los que girarán las ruedas (en un robot de dirección diferencial) o el ángulo de la rueda delantera (en una dirección robot tipo coche).

Esto puede ser cierto en teoría, pero en la práctica, debido a la no linealidad del comportamiento de los motores de corriente continua, y muchas otras fuentes de error que no puede ser claramente definido, el robot todavía oscilaría al intentar rastrear la línea, y lo haría a veces no, ya que el error eventualmente aumentar en lugar de disminuir. Por eso es que el esquema de control proporcional tiene que ser adaptado para cada robot, dependiendo de su momento de inercia, el tipo de motor, en él es peso y de muchos otros factores. Después de muchas pruebas, el gráfico de la figura 4.A muestra un esquema de control que ha comprobado que funciona correctamente en la mayoría de los robots de dirección diferencial.

Page 6: Sensores de línea y algoritmos

figura 4.A

Figura 4.A representa una relación entre la velocidad que se debe aplicar a la derecha y las ruedas de un robot dirección diferencial y la posición de la línea en relación con el centro del robot de la izquierda. Como se puede ver, para un sensor de línea de 8 células, la línea se considera que está en el centro del robot cuando se lee 4,5, mientras que se considera que es totalmente a la izquierda cuando la primera celda del sensor está detectando la línea .

La única cosa que puede que tenga que hacer, es definir el valor de Smax adecuado a su robot. La forma más fácil de hacerlo es por ensayo y error.Probablemente se dará cuenta de que los valores altos de Smax se traducirá en una respuesta muy rápida, pero con una gran cantidad de oscilaciones.

Una cuestión importante es la forma de obtener las lecturas analógicas de un sensor de línea de salida digital de este tipo? La respuesta es que en realidad no obtenemos señales analógicas reales, simplemente calculamos un promedio de la posición de la línea, cuando las células de más de detectar la línea. Por ejemplo, cuando el número de células de 4 y 5 de detectar la línea, la media de 4 y 5 es de 4,5, y vamos a considerar este valor como la lectura de la línea que se utilizará en la gráfica de la  figura 4.A. Dependiendo del espesor de la línea de ser rastreado, se puede obtener en linea una multitud de lecturas entre un número entero y el otro.

Con el fin de controlar con precisión la velocidad de los motores en un robot de accionamiento diferencial, es necesario adaptar lo que se llama control de velocidad en bucle cerrado de motores de corriente continua, que se explica en detalle en este tutorial .

Para un microcontrolador 8051 programado en C, aquí es un código fuente de ejemplo de una función llamada follow_line (), que cuando se le llama, lee el valor del sensor que está conectado al puerto 0, calcula el promedio deduce entonces la velocidad requerida de la derecha y izquierda ruedas para ajustar suavemente el robot a la línea.

ollow_line () {MAX_SPEED = 8; half_speed = 4; line_to_speed_factor = (velocidad_max) / 4.5 / / El sensor de línea está conectado a P0 if (P0 = 0!) {/ / Sigue la línea vieja lectura en caso de que la línea se pierde old_line = P0;} nueva_linea = P0; l1 = P0_0 / / Almacena los valores de cada celda de las celdas 8 del l2 = P0_1 / / sensor de línea en las variables L1 a L8 l3 = P0_2;. l4 = P0_3; l5 = P0_4; l6 = P0_5; l7 = P0_6; l8 = P0_7; fwd (); / / Llamar a una función que ordena al robot para avanzar si (P0 == 0) {/ / En caso de que la línea está fuera de su alcance , se basan en la última válida si (old_line> 45) {/ / lectura para decidir si se debe girar a la derecha o pivot_left (); / / izquierda para llegar a la línea de again. req_right_pulses = max_speed ; req_left_pulses = max_speed ; } else { pivot_right ( ) ; req_right_pulses = max_speed ; req_left_pulses = max_speed ; } } else { if ( old_line ! = new_line ) { //Calculate la lectura promedio de la line. line = ( l1 ) + ( l2 * 2 ) + ( l3 * 3 ) + ( l4 * 4 ) + ( l5 * 5 ) + ( l6 * 6 ) + ( l7 * 7 ) + ( l8 * 8 ) ; line = line / ( l1 + l2 + l3 + l4 + l5 + l6 + l7 + l8 ) ; //Calculate la velocidad de derecha e izquierda required / / según el graph. req_right_pulses_ = floor ( ( line * line_to_speed_factor ) + 0.5 ) ; req_left_pulses_ = floor ( ( ( 9 - line ) * line_to_speed_factor ) + 0.5 ) ; if ( req_left_pulses_ > max_speed ) { req_left_pulses = max_speed ; } else { req_left_pulses = req_left_pulses_ ; } if ( req_right_pulses_ > max_speed ) { req_right_pulses = max_speed ; } else { req_right_pulses = req_right_pulses_ ; } } } }

Page 7: Sensores de línea y algoritmos

Tenga en cuenta que este código no es autónomo, es una parte del programa más complicado que contiene el control de velocidad en bucle cerrado y muchas otras funciones permitiendo que el robot para navegar de acuerdo a una ruta específica. por ejemplo, los valores 'req_left_pulses' y 'req_right_pulses' tienen que ser alimentados con el control de velocidad en lazo cerrado.

También se dará cuenta de que la velocidad se calcula en dos pasos, el primer resultado se almacena en 'req_right_pulses_' entonces el resultado final se almacena en 'req_right_pulses. Esto es debido a que el gráfico de la figura 4.A se compone de dos relaciones lineales independientes, el primero es para las lecturas de 1 a 4,5, y la otra relación es para el resto de las lecturas, 4,5 a 8, (y lo mismo se aplica a la variable "req_left_pulses '). Esto es sólo un ejemplo, hay muchas maneras de implementar un gráfico de este tipo en un programa de microcontrolador, le toca a usted para ver el método más adecuado de acuerdo a la arquitectura y la organización de su programa.

Navegación a través de líneas e intersecciones

figura 5.A

Ahora que sabe cómo hacer que su robot siga una línea, puede utilizar ese mismo sensor para permitir navegar a través de una red de líneas horizontales y verticales como el de la figura 5.A, utilizando el mismo sensor de 8 células.

La idea principal para una navegación sin errores en un laberinto tal, es ser capaz de detectar con precisión las intersecciones. Para hacer eso, primero hay que analizar la naturaleza de esas líneas, el ángulo de las intersecciones, y las diferentes lecturas del sensor de línea al cruzar intersecciones. En realidad, hay que adaptar el código a cada zona de juegos que esperas que te robot para navegar en.

Después de muchas pruebas, hemos desarrollado esta sencilla técnica para detectar las intersecciones, cualquiera que sea la forma en que el robot atraviesa.

Como se puede ver en la figura 5.B, tres situaciones diferentes se muestran, en cada uno de ellos, el robot cruza una intersección, que viene de un ángulo diferente. Las células de la línea de sensor que detecta la línea se designan con manchas de color rojo brillante, mientras que las células que no detectan que se designan con manchas rojas oscuras.

Page 8: Sensores de línea y algoritmos

figura 5.B

Lo que tratamos de hacer es encontrar lo que es común entre esas tres posibilidades diferentes, y la siguiente regla fue desarrollado para detectar las intersecciones:

"Si una de las celdas extremas (uno u ocho) detecta la línea, mientras que uno o más de los últimos 4 células en el otro extremo también detectar la línea, a continuación, el sensor está cruzando sobre una intersección '

En otras palabras, para una intersección de ser validado, la lectura del sensor debe ser de la siguiente manera:

El número de células 1 a detectar la línea y una o más de las células 5-8 detectar la línea

Oregón

El número de células 8 detecta la línea y una o más de las células 1-4 detectar la línea

Entonces usted tiene que desarrollar el código que analizará las lecturas del sensor, contar intersección, y guiar al robot a través de la trayectoria deseada, lo que se puede hacer con una multitud de métodos. La elección del método para guiar a un robot, y precisamente localizarla en un mapa puede ser una tarea muy difícil, incluso si usted está usando la línea siguiente algoritmos. Algunos métodos incluso implicar una combinación de navegación a estima y la línea siguiente para obtener resultados más precisos. En general, es su trabajo para diseñar el esquema de navegación que es más adecuado para el entorno del robot. Es importante señalar que la navegación de robots está sujeta a muchas investigaciones y se encuentra todavía en una fase de intenso desarrollo en los laboratorios de robótica de todo el mundo.

Page 9: Sensores de línea y algoritmos

Espero que este artículo cubre los principales aspectos necesarios para construir un sistema de navegación simple robot basado en la línea siguiente algoritmos y ayudó a introducir algunos de los principios científicos detrás de la operación de un sistema de este tipo.