ROBOT SEGUIDOR DE LINEAS.
Seguir una linea recta es usualmente muy fácil. Seguir una linea con curvas suaves es un poco mas difícil. Seguir una linea con curvas mas cerrada es mas complicado. Si el robot se mueve muy lento cualquier linea podría ser seguida aun con los algoritmos mas básicos. El objetivo es configurar un buen robot seguidor de lineas ("line follower"), de buena velocidad y con capacidad de seguir curvas pronunciadas. (Lineas con esquinas agudas suelen requerir algoritmos mas especializados, que no son objeto de este articulo)
Se configuro el robot "line follower", basado en el modelo "Five Minute Bot" que presentan en la pagina www.NXTprograms.com, para el NXT2, con las siguientes características y modificaciones:
- Ruedas estándar del NXT 2.0.
- Aumento la separación de las ruedas para poder instalarlas hacia afuera y hacia adentro, a fin de evaluar la influencia de la separación de las ruedas..
- Usaron dos sensores así:
- Light sensor calibrado de 0 a 100 entre el blanco (piso color mármol) y el negro de una cinta aislante eléctrica.
- Color sensor para detectar la linea roja que indica que ya completo la vuelta completa del circuito. Esto se usa para cronometrar el tiempo que tarda el robot en dar la vuelta.
- Altura del sensor al piso = 6 mm.
- Rueda loca atrás, que facilita el desplazamiento sin ofrecer resistencia.
- Longitud del circuito 6.35 mt. Para esto se configuro un programa que contara el numero de rotaciones de cada rueda, se promedio y se multiplico por el perimetro de las mismas.
Se configuro un circuito cerrado con lineas rectas y curvas unas mas pronunciadas que otras, con una cinta roja se demarca la linea de salida/llegada.
En todos los programa se usa un cronometro. Para el análisis de los seguidores de lineas con control P, Pi o PID se implementa tambien un contador de ciclos del programa a fin de determinar el tiempo de ciclo de cada programa.
1. LINE FOLLOWER SIMPLE (o de dos niveles)
Este programa basa su operación en un movimiento repetido hacia la izquierda y hacia la derecha, dependiendo de la lectura del sensor, generando un desplazamiento en en zig zag. El principio de operación se muestra en la siguiente gráfica:
Ver programa en el archivo 01 Line Follower Simple.rbt.
https://docs.google.com/file/d/0B7gfmEc7iOZHTlIxUndOQ2ZZQkE/edit?usp=sharing
Para usar el programa es necesario calibrar el sensor de luz de 0 a 100 (Negro a blanco), con la herramienta de calibración del NXT-G
Tomo 94,7 seg completar el circuito completo
El programa completo y su explicación paso a paso se presentan en la siguiente sección, pues como se vera es prácticamente el mismo programa.
2. LINE FOLLOWER OPTIMIZADO:
Corresponde a una mejora del programa anterior. En vez de detener el motor opuesto a la acción de corrección, se le aplica una potencia menor. Después de varios intentos se encontró que con una potencia mínima 30% y máxima del 100% el robot es capaz de completar el circuito sin salirse de la linea.
Ver programa en el archivo 02 Line Follower Simple & Optimized.rbt en:
https://docs.google.com/file/d/0B7gfmEc7iOZHWXdVOEFyRU1wUFE/edit?usp=sharing
https://docs.google.com/file/d/0B7gfmEc7iOZHWXdVOEFyRU1wUFE/edit?usp=sharing
Tiempo para completar el circuito: 40.56 seg. Se redujo el tiempo al 42% del programa anterior.
Subiendo la potencia mínima a 35% se sale de la linea en la curva mas pronunciada del circuito.
El programa completo y su explicación paso a paso se encuentra en:
https://docs.google.com/file/d/0B7gfmEc7iOZHandGS21RWV9OeHM/edit?usp=sharing
https://docs.google.com/file/d/0B7gfmEc7iOZHandGS21RWV9OeHM/edit?usp=sharing
3. LINE FOLLOWER DE 5 ESTADOS: (Tomado de nxtprograms.com)
Este programa usa un método algo mas complejo. El objetivo es seguir la linea tratando de ir lo mas recto y suave posible y por lo tanto más rápido. El programa se configura de la siguiente forma:
Dentro de un loop se chequea repetidamente el sensor de luz, el cual retorna un valor calibrado de 0 a 100 que corresponde a cuanta luz ve el sensor. Una lectura de 100 significa que el sensor esta sobre una superficie completamente blanca, y 0 significa que esta sobre una superficie totalmente negra. Valores intermedios, por ejemplo 50, significa que el sensor esta exactamente centrado en el borde de la linea. La meta es avanzar tan recto como sea posible, y por ende mas rápido, así si el robot esta la mayoría del tiempo centrado en el borde de la linea avanzara derecho. Si se aleja mucho para algún lado, se realizara la corrección realizando un giro fuerte. Si se aleja levemente del centro se realizara una corrección realizando un giro leve.
Para lograr esto, partiremos el rango del sensor de luz en 5 rangos, cada uno de los cuales tendrá una respuesta diferente. Esto se logra dividiendo la lectura del sensor por 20 y usando un suche con 5 condiciones así:
0 = Giro fuerte reduciendo notablemente la potencia del motor C
1 = Giro gradual reduciendo levemente la potencia del motor C
2 = Avaza derecho con ambos motors a igual potencia
3 = Giro gradual reduciendo levemente la potencia del motor B
4 = Giro fuerte reduciendo notablemente la potencia del motor B
Se usan bloques de motor individuales (Move block), en vez de "Motor blocks" para controlar cada rueda. Esto es preferible y mas simple que usar Move blocks y controlar la variable "steering".
La duración de los motores se ajusta a "Unlimited" debido a que queremos mantener los motores en movimiento cada vez que el loop vuelve e inicia. En este caso la instrucción "Unlimited" significa "vaya hacia adelante hasta que le diga otra cosa"
La siguiente tabla muestra los ajustes de potencia de los motores en función de la lectura del sensor de luz:
Tiempo 41.01 seg y 8603 ciclos, es decir 4,77 mSeg / ciclo. Este valor es muy similar al anterior y no presenta una mejora apreciable, en cuanto a tiempo para completar el circuito se refiere. No obstante, si se observa un desplazamiento mas suave o uniforme, sin presencia apreciable de zig-zag.
El programa completo y su explicación paso a paso se encuentra en:
Programa: https://docs.google.com/file/d/0B7gfmEc7iOZHT1FwNFNSSmJDOGc/edit?usp=sharing
Explicación: https://docs.google.com/file/d/0B7gfmEc7iOZHRzk2ejR5MElUck0/edit?usp=sharing
Programa: https://docs.google.com/file/d/0B7gfmEc7iOZHT1FwNFNSSmJDOGc/edit?usp=sharing
Explicación: https://docs.google.com/file/d/0B7gfmEc7iOZHRzk2ejR5MElUck0/edit?usp=sharing
4. LINE FOLLOWER PID.
4.1 LINE FOLLOWER PROPORCIONAL.
En las siguientes secciones se usaran técnicas mas sofisticadas, aunque con explicaciones simples, para lograr un mejor desempeño del seguidor de lineas. Esto es se traduce en un desplazamiento mas suave y homogéneo sin presencia de zig - zag, y por ende un desplazamiento a mayor velocidad, siempre manteniendose en la trayectoria de la linea. Para esto se aplicara la técnica del control PID. (Siglas de Proporcional, Integral y Derivativo)
Un controlador PID es una técnica común que se utiliza para controlar una amplia variedad de variables físicas en maquinaria y sistemas industriales, incluyendo vehículos, robots, hornos, e incluso cohetes. La descripción matemática completa de un controlador PID es bastante compleja, tal como se observa en la formula siguiente, que representa su modelación matemática; pero se puede simplificar y hacerlo bastante simple para utilizarlo efectivamente en esta aplicación.
El siguiente articulo, en ingles, presenta una explicación muy detallada de la aplicación de un control PID para un robot seguidor de linea
https://docs.google.com/file/d/0B7gfmEc7iOZHUjVCVkVsWTJlZ2M/edit?usp=sharing
El link original del articulo es: http://www.inpharmix.com/jps/PID_Controller_For_Lego_Mindstorms_Robots.html
En pocas palabras, el control proporcional consiste en sensar la variable a medir, y compararla con el valor de referencia. El "controlador" calculara el valor de la corrección a aplicar con base en el valor del error. Es decir, la salida del controlador, o la acción de control se obtendrá de multiplicar el valor del error por un valor determinado llamado constante proporcional. Es decir, a mayor error, mayor corrección, a menor error, menor corrección.
Por ejemplo, si queremos que el robot camine al 80% de la potencia siguiendo la linea, tendremos que mientras el sensor de luz sense 50 unidades (recordemos que el sensor de luz esta calibrado para obtener lecturas de 0 a 100 unidades, y 50 es exactamente la ubicación del sensor en todo el limite entre blanco y negro) ambos motores estarán al 90%. 50 es el valor de referencia. Pero al llegar a una curva a la izquierda, el robot se sale levemente hacia la linea generando una lectura de 45 unidades de luz. El controlador calcula el error, el cual es 50 - 45 = 5 unidades. este valor se multiplica por una constante, por ejemplo 2, y se obtiene el valor de la corrección que seria 10 unidades. El controlador entonces da la orden de aumentar el motor derecho en 10 unidades de potencia y disminuir el motor izquierdo en 10 unidades, es decir la potencia aplicada a los motores ya será 90% 70%, lo cual genera que el robot intente corregir el rumbo y acercarse nuevamente a la linea. Esta situación se repite muchas veces a mucha velocidad, lo que genera un comportamiento bastante estable y preciso del robot.
Se implemento el algoritmo de un controlador proporcional descrito en el documento de referencia.
El algoritmo en pseudocodigo es como sigue:
Kp = 2 | Inicializa las variables. | |
Thershold = 50 | Punto medio del rango y valor de referencia | |
TargetPower = 90 | ||
Loop Forever | ||
LightValue= Lectura del sensor. | Almacena el valor del sensor en la variable "LightValue" | |
Error = LightValue- Thershold | Calcula el error | |
Correccion= Kp * Error | Calcula el valor de correcion (Termino P del controlador). Este valor dice que tanto queremos que cambie la potencia de los motores para efectuar la correccion. | |
PowerMotorB= TargetPower + Correccion | Calcula la potencia a aplicar en el motor B | |
PowerMotorC= TargetPower - Correccion | Calcula la potencia a aplicar en el motor C | |
End Loop forever | Vuelve al comienzo y repite de nuevo el loop de control. |
La siguiente tabla resume los resultados obtenidos para diferentes valores de Kp. El parámetro "Target Power" se fijo en 90%, como se lograron comportamientos buenos no se chequearon potencias menores.
Nota: La tabla anterior anterior incluye dos columnas en cero. Estas corresponden a las constante de los modos de control de Integral y Derivativo, que no se usan en un control Proporcional, y por eso su valor aparece en cero.
Un vídeo comparativo entre los diferentes modo de control se presenta al final.
El programa completo y su explicación paso a paso se presentan a continuación:
4.2 LINE FOLLOWER PROPORCIONAL E INTEGRAL (PI)
Al programa anterior se le adiciona el algoritmo que provee la porción o modo de control "Integral" a fin de mejorar la respuesta del controlador.
En palabras simples, el modo integral lo que hace es revisar la historia de los errores y tratar de corregir el error que no se corrigió en la iteración anterior. Es decir, la función integral va acumulando el error, y este valor nuevamente se multiplica por una constante y lo aplica como señal de salida del controlador para reforzar la respuesta del modo Proporcional. Si el modo proporcional del controlador no esta siendo capaz de realizar una corrección adecuada, el modo integral va "mirando" y acumulando el error de los ciclos anteriores y produce una señal de corrección que refuerza la del modo proporcional.
Dicho de otra forma, si el error se mantiene el mismo signo de varios bucles la integral se hace más grande y más grande. Por ejemplo, si revisamos el sensor de luz y calculamos que el error es 1, y en el siguiente ciclo , comprobamos el sensor de nuevo y el error es 2, y al siguiente el error es 2 nuevamente, entonces la integral será 1+ 2 + 2 = 5. La integral es 5, pero el error en este paso en particular es sólo 2. La integral puede ser un factor importante en la corrección, pero por lo general toma un tiempo para llegar hasta el punto en que comienza a contribuir.
Otra función del modo integral es que ayuda a eliminar los errores pequeños. Si en nuestro seguidor de línea del sensor de luz esta bastante cerca del borde de la línea, pero no exactamente en ella, entonces el error será pequeño y sólo será necesaria una pequeña corrección. Esto se podría solucionar aumentando la constante Kp, pero esto a menudo conducen a un robot que oscila (oscilaciones de ida y vuelta). El término integral es ideal para la fijación de pequeños errores. Dado que la integral suma los errores, algunos pequeños errores consecutivos finalmente hace lo suficientemente grande la integral que esta aplica una corrección que desaparece los pequeños errores.
Partiendo del controlador proporcional, el algoritmo del controlador PI es como sigue:
Kp = 2 | Inicializa las variables. | |
Ki = 0.0032 | ||
Thershold = 50 | Punto medio del rango y valor de referencia | |
TargetPower = 90 | ||
Integral = 0 | Variable para almacenar la integral | |
Loop Forever | ||
LightValue= Lectura del sensor. | Almacena el valor del sensor en la variable "LightValue" | |
Error = LightValue- Thershold | Calcula el error | |
Integral = Integral + Error | ||
Correccion= Kp * Error + Ki*Integral | Al Termino P del controlador se le adicona el termino I del modo integral. Se refuerza la salida del controlador en funcion del error historico. | |
PowerMotorB= TargetPower + Correccion | Calcula la potencia a aplicar en el motor B | |
PowerMotorC= TargetPower - Correccion | Calcula la potencia a aplicar en el motor C | |
End Loop forever | Vuelve al comienzo y repite de nuevo el loop de control. |
Para determinar de la constante integral Ki, es mas complicado que la contante del modo proporcional, y precisamente es aquí donde esta la mayor complejidad de los controladores PID. Al proceso de determinar adecuadamente las contantes se le conoce como "sintonizar" el controlador. Hay muchas técnicas para calcular la constantes, uno de estos métodos es el llamado "Método de Ziegler - Nichols", el cual a partir de una estimación "razonable" de la constante proporcional, permite calcular de forma aproximada las otras constantes, aplicando las siguientes relaciones:
En el caso anterior encontramos de Kp = 2, luego para el modo PI tenemos
Kp = 1,5 * 0,45 / 0,50 = 1,35
Previamente se había medido el tiempo de loop dT = .0053 seg / ciclo y Pc = 0,5 seg.
Con lo anterior
Ki = 1.2 * 1,5 * 0,0053 / 0,5 = 0.019
Con los valores anteriores se obtuvieron los siguientes resultados:
Un vídeo comparativo entre la forma como opera el robot con los diferentes con los diferentes modos de control se presenta al final.
El controlador contiene ahora un termino proporcional que corrige el error actual y un termino integral que corrige el error pasado. Ahora se introducirá el termino Derivativo que pretende anticiparse al error y hacer la corrección en tiempo real.
4.3 LINE FOLLOWER PID
Finalmente al programa anterior le adicionaremos el algoritmo que provee la porción o modo de control "Derivativo". Este modo provee otras mejoras adicionales al desempeño del controlador. El modo derivativo es mas comúnmente usado, o provee mejoras en el control de procesos de variables que cambian rápidamente por ejemplo velocidad y flujo. En procesos con respuestas mas lentas, como controles de temperatura el modo derivativo no ofrece mejoras apreciables.
De forma simple, el modo derivativo trata de predecir el error o adelantarse al error que va a ocurrir en el ciclo actual y proveer una salida adicional del controlador reforzando la salida proporcional e integral para tratar de realizar esta corrección antes de que el error ocurra. Esto se logra asumiendo que el próximo cambio del error va a ser el mismo que el ultimo cambio del error. De otra forma, el próximo error se espera que sea el error actual mas el cambio en el error. El cambio en el error entre dos medidas consecutivas es llamada la "derivada" o dicho de otra forma la "rata de cambio del error". Esto puede sonar un poco complejo, pero no lo es tanto. Veamolo con números, asumamos que el error actual es 2 unidades y el error anterior fue 5 unidades, esto significa que el error viene disminuyendo. Cual será el próximo error?. Bien, el cambio en el error es la "derivada" la cual es 2 - 5 = -3. Este valor de (-3) es el cambio del error. De esta forma el error esperado será 2+ (-3) = -1. En la practica no se calcula propiamente el error esperado, en vez de esto se usa la derivada de la misma forma que en el control integral y proporcional. Se multiplica el valor de la derivada por una constante para obtener la señal de corrección del modo derivativo.
El algoritmo del controlador PID queda como sigue (En rojo lo que se adiciono para completar el modo derivativo)
Kp = 2 | Inicializa las variables. | |
Ki = 0.0032 | Constante modo Integral | |
Kd = 15 | Constante modo derivativo | |
Thershold = 50 | Punto medio del rango y valor de referencia | |
TargetPower = 90 | ||
Integral = 0 | Variable para almacenar la integral | |
ErrorAnterior = 0 | ||
Loop Forever | ||
LightValue= Lectura del sensor. | Almacena el valor del sensor en la variable "LightValue" | |
Error = LightValue- Thershold | Calcula el error | |
Integral = Integar + Error | ||
Derivada = Error - ErrorAnterior | Calcula la derivada | |
Correccion= Kp * Error + Ki*Integral + Kd*Derivada | Al Termino P e integral del controlador se le adiciona el termino D del modo Derivativo. Se refuerza la salida del controlador en funcion de la prediccion del error . | |
PowerMotorB= TargetPower + Correccion | Calcula la potencia a aplicar en el motor B | |
PowerMotorC= TargetPower - Correccion | Calcula la potencia a aplicar en el motor C | |
ErrorAnterior = Error | Almacena el Error actual en la variable ErrorAnterior para que pueda ser usado en el proximo ciclo. | |
End Loop forever | Vuelve al comienzo y repite de nuevo el loop de control. |
Nuevamente usamos el método de Ziegler - Nichols para calcular las constantes del controlador PID.
Kp =1,5 * (0,60/0,5) = 1.8
Ki = 2*1,5* (0,0053 /0,45) = 0.035
Kd = 1,5 * 0,45 / (8* 0,0053) = 15,9
Se obtuvieron los siguientes resultados:
El programa completo y su explicación paso a paso se presenta a continuación:
Importante hacer notar que los resultados de las tablas anteriores no son comparables entre los diferentes tipos de control, pero si entre los diferentes registros de cada tabla. Esto debido a que el estado de cargas de las baterías es diferente para cada conjunto de pruebas.
A continuación se muestra el resultado de un prueba que se realizo comparando los tres modos de control P, PI y PID, y con baterías en el mismo estado de carga para cada caso.
Se observa que en términos de tiempo los valores son muy similares, solo un segundo de diferencia entre el modo de control proporcional y el modo de control Proporcional e Integral. Esto es equivalente que el robot en el modo PI completo el circuito en un 3.5% menos del tiempo. La diferencia entre los modos PI y PID no es significativa.
Separación de las ruedas.
Adicionalmente, se realizó una prueba volteando las ruedas del robot, es decir colocandolas mas juntas, obteniendo que para el modo de control Proporcional e integral el robot completo el circuito en 38,91 seg, con un total de 5051 ciclos. Se observa una oscilación muy alta del robot. Vale mencionar que previamente con esta disposición de ruedas se realizaron muchas pruebas y no se logro encontrar una combinación de constantes Kp, Ki y Kd que produjeran un movimiento suave y uniforme del robot.
El vídeo de esta prueba se muestra a continuación.
Posición del sensor
Otra prueba que se realizo fue alargando el soporte del sensor. Aunque la diferencia no es muy notoria, parece que por tener el sensor mas separado de las ruedas la acción de control se anticipara mas al error, y la corrección se realiza mas a tiempo. Esto es mas notorio en la ultima curva, que es la mas pronunciada y con este arreglo del sensor, el robot parece desplazarse mas suavemente por esta curva.
Aumento de velocidad
Se aumento la velocidad con un juego de engranajes en una relación 36 dientes el mayor (motor) y 12 dientes el menor (ruedas). Esto quiere decir que el robot puede andar 3 veces mas rápido que en los ejemplos anteriores. Con esta configuración se repitieron muchas de las pruebas anteriores.
El programa Line Follower optimizado se logro configurar para trabajar con potencias 50% y 10% y completo el circuito en 35,22 seg. (100% - 30% era en el modelo original, y tomo 40,5 seg)
Luego se trato de configurar el control PID, para esta nueva condición en la que se tiene capacidad para desplazarse mas rápido.
No se logro sintonizar adecuadamente al controlador, puesto que no se consiguió una combinación de variables Kp, Ki, y Kd que produjeran un movimiento suave y rápido del robot, y que fuera capaz de mantener la trayectoria de la linea.
La siguiente tabla muestra resultados de las pruebas realizadas:
Como se menciono antes, ninguno de los resultados anteriores fue satisfactorio. Pese a que en varias de las pruebas el robot completó el circuito, no se lograba un desplazamiento suave del robot, por lo cual se procedió a buscar una relación de velocidades diferente, que no aumentara tanto la velocidad del robot.
Se modifico la relación con dos engranajes de 20 y 12 dientes, con una relación de 1: 1,66 es decir el robot se puede desplazar 1,66 veces mas rápido que en la configuración original. (En vez de tres, como en el caso anterior)
Las siguientes fotos muestran detalles de esta configuración con engranajes.
Las siguientes fotos muestran detalles de esta configuración con engranajes.
Se realizaron muchas pruebas buscando "sintonizar" el controlador, es decir buscar el mejor balance entre avance suave y rápido y capacidad de seguir la linea, incluyendo las curvas pronunciadas (que se supone a mayor velocidad serán mas difíciles de pasar). Las siguientes tablas muestran el registro de todas las pruebas realizadas.
Hasta acá solo se ha logrado ajustar el modo Proporcional e Integral. Introduciendo el modo derivativo, se tiene:
Después de muchas pruebas se consiguieron resultados muy satisfactorios puesto que se logro llevar el valor de potencia hasta un nivel considerablemente importante. Ademas el avance del robot era todavía uniforme (con algo de zig zag) y se desplazaba a muy buena velocidad sin dificultad de seguir la linea.
En el siguiente vídeo se presenta una compilación de los tres modos de control con el robot ajustado para esta relación de velocidad. La primera vuelta corresponde al modo proporcional, la segunda al modo Proporcional-Integral y la tercera al modo Proporcional Integral y Derivativo:
El registro del vídeo anterior es:
CONCLUSIONES
El seguimiento de lineas es una actividad o tarea que se presta para cubrir una amplia gama de habilidades de programación y análisis desde los programas mas simple de un seguidor de dos estados, hasta los mas complejos como controladores PID de las facultades de ingeniería.
Aunque es apreciable las diferencias entre los diferentes programas realizados, seguidor simple, optimizado, de varios estados, entre otros, las diferencias en estos modos de control no son muy relevantes. Cuando se introduce el control PID (en cualquiera de sus modos, proporcional, proporcional-integral, o proporcional-integral- derivativo) se observa una mejora notoria, que se centra en la reducción de la oscilación del robot alrededor del borde de la linea que se sigue. Ahora las diferencias principalmente en los modos de control proporcional, integral y derivativo, aunque algo notorias, no son relevantes. Si se analiza desde la óptica del tiempo se vio en la ultima prueba, que en esta variable no hay diferencias apreciables. Otras variables de corte cualitativo, como por ejemplo, la "suavidad" para desplazarse, no varia mucho una vez se tiene medianamente calibrado el controlador.
La separacion de las ruedas es una variable de mucho impacto, al punto que en esta prueba no le logra calibrar o sintonizar un controlador que evitara o anulara las oscilaciones cuando las ruedas estaban muy cercas entre si.
No se concluye fácilmente sobre la influencia de alejar o acercar el sensor. De todas formas si da la impresión que con esta disposición (sensor alejando del robot), el robot presenta un comportamiento en el que parece anticiparse a la acción de control.
El proceso de "sintonizar" el controlador, o determinar adecuadamente las variables Kp, Ki y Kd es complejo y en este caso se uso una combinación de ensayo y error con el método de Ziegler - Nicholds.
Para el robot original el conjunto de constantes de control (Kp, Ki, Kd) encontradas y los tiempos registrados fueron:
Para el robot con la relación de velocidad 1:1,66 el conjunto de constantes de control y sus tiempos fue:
De los cuadros anteriores también podemos deducir que cada sistema es diferente, nótese que al cambiar las relaciones de velocidad, estamos cambiando el sistema a controlar y por ende, las constantes para "sintonizar" el controlador cambian.
No se puede asegurar que los valores anteriores sean los valores "óptimos" para esta aplicación, muy posiblemente existan otros conjuntos de constantes (Ks.. proporcional, integral y derivativa) que ofrezcan soluciones diferentes. Esto en virtud que el proceso, para llegar a estos números es un proceso de ensayo y error.
Queda por explorar temas como seguimiento de lineas con ángulos agudos, esta tarea muy seguramente implica agregar bloques de programación diferentes a los vistos acá; y la implementación de un seguidor de lineas con dos sensores en vez de uno.
Falta el Block CRONO SEG del LINE FOLLOWER DE 5 ESTADOS:
ResponderEliminar