miércoles, 16 de mayo de 2007

Desarrollo de un seguidor de paredes inteligente (Parte 3 de 7: Decisión de las variables de entrada)

Durante la aproximación reactiva utilicé el incremento del error, la distancia frontal y la distancia lateral. Pero llegué a la conclusión de que la distancia lateral la podía sustituir por el error (Diferencia entre Distancia lateral y Distancia de referencia) que es una información mucho más completa al tener signo.
Por lo que a partir de ahora nuestras variables de entradas serán:
  • AF: Incremento del error.
  • DF: Distancia frontal.
  • ERROR: Diferencia entre distancia lateral y distancia de referencia.

Seguidamente, descompuse el problema en tres casos para los que creé los datos necesarios para el controlador.

1-Seguimiento de pared (la pared derecha)
Si la distancia lateral está entre
[-DISTANCIA_DE_REFERENCIA, +DISTANCIA_DE_REFERENCIA],
el giro que haré es
(-1) * errorActual * Máximo_giro siendo:
  • DISTANCIA_DE_REFERENCIA: La distancia lateral a la que intentamos mantenernos de la pared.
  • errorActual: Es la diferencia entre la Distancia lateral y la Distancia de referencia.
  • Máximo_giro: Es el valor máximo de giro que permitiremos para el vehículo. En nuestro caso el simulador permite valores entre 0 y 1, y tomaremos un valor máximo de 0.5.
  • Signo negativo (multiplicar por -1): En el simulador un giro positivo es un giro a la izquierda y un giro negativo a la derecha, si el error es positivo significa que me encuentro más lejos de la DISTANCIA_DE_REFERENCIA y que tengo que girar a la derecha, así que multiplico por -1 para cambiar el signo. En caso contrario funciona de la misma manera.

Resumiendo, la fórmula lo único que hace es un giro suave y proporcional a la magnitud del error cuando se encuentra cerca de la distancia de referencia, logrando eliminar el “zigzagueo” que tenía el navegador reactivo visto en el apartado anterior.


2. Evitar obstáculo cerrado
Para este caso busqué la forma de describir una circunferencia perfecta para que al salir de esquivar el obstáculo no hubiera que volver a buscar la distancia de referencia, y salir directamente al punto correcto.
Para ello, como el controlador no usa coordenadas cartesianas, no era posible hacerlo por trigonometría. Por lo que, teniendo en cuenta la máxima capacidad de giro, y haciendo algunas pruebas, comprobé que la distancia exacta a la que había que empezar a girar era a 2.5 metros del obstáculo.
El único dato necesario para esquivar el obstáculo es la distancia frontal.

3. Evitar obstáculo abierto
Cuando aparece un obstáculo de este tipo se produce un crecimiento anormalmente grande en el incremento del error.
Evidentemente esto se debe a un aumento del errorActual respecto al error en la iteración anterior. Para este caso la solución es sencilla: girar hasta que se restablezca un error aceptable.
Como consecuencia de un error positivo y con un valor absoluto mayor de lo normal, el vehículo comienza a girar a la derecha. Acabará detectando la nueva pared a seguir con el sensor lateral, por lo que a partir de ese momento hará las correcciones siguiendo el comportamiento del seguimiento de la pared.

Estos tres casos son suficientes para definir los ejemplos de aprendizaje del seguidor de pared.

No hay comentarios: