El objetivo es llegar a un destino que generara en el robot una fuerza atrayente, mientras que los obstáculos generaran una fuerza repulsiva que alterara la trayectoria. El robot trazara un mini mapa de su entorno, calculara las fuerzas repulsivas, calculara la fuerza atractiva, calculara la fuerza resultante, girara y avanzara un paso (distancia determinada) esto lo repite hasta terminar en las proximidades del destino.
----------------------------------------------------------------------------------------------------------------------------------
Soluciones que han ido surgiendo
-La practica al principio la enfoqué partiendo desde la idea de unas coordenadas absolutas y una pequeña corrección para la fuerza objetivo.El mundo tendría unas coordenadas globales, el robot estaría referenciado frente a esas coordenadas globales y los obstáculos los iría calculando y pasándolos a las coordenadas globales.
Lo idee de esta forma porque mi idea era ir fabricando un mapa global.
Ventajas:
Al tener los obstáculos en absolutas podría en teoría corregir mi posición ya que la odometria mete una cierta incertidumbre.
Construir un mapa global seria fácil. Iría almacenando en las celdillas las posiciones donde ha detectado un obstáculo.
Inconvenientes:
Descubrí que el NXT usando Lejos no soporta la creación de ficheros mediante las ordenes de java comunes.
Se me complicaba un poco la navegación cuando las coordenadas estaban en negativo o el robot no giraba lo que debía.
-Primera idea, Tipo de coordenadas de trabajo:
Cartesiana para todo.
Ventajas:
Al tener todo en el mismo sistema de coordenadas cartesianas y referencias desde el origen los cálculos son fáciles.
Inconvenientes:
El sensor de ultrasonidos solo captaría obstáculos en linea recta. Usando tornillo sin fin y eje haría un barrido horizontal. No es fácil hacer el montaje con las piezas que tenia.
Cartesianas para origen, posición del robot y polares para obstáculos.
Ventajas:
El sensor de ultrasonidos lo puedo acopar sobre un motor y realizar las medidas en un sistema natural.
Inconvenientes:
Cambio de coordenadas obligatorio. Y el robot siempre tiene que tener la misma orientación. Generando mas adelante movimientos innecesarios de corrección.
Añadir angulo de orientación del robot.
Ventajas:
El robot ya tiene un apoyo para controlar su orientación.
Inconvenientes:
Deja de ser útil el sistema de coordenadas absolutas.
-Segunda idea, Olvidarme de mapa global y trabajar con coordenadas relativas al robot:
Debido a problemas al intentar hacer un mapa con la memoria desistí, consulte con mi profesor como reorientar la practica. Me aconsejo que la enfocase en trabajo en relativas. Esto supuso cambiar el destino a coordenada relativas y usar los valores de los obstáculos directamente.
----------------------------------------------------------------------------------------------------------------------------------
Solución Final
- Particionado del problema en fases:+Sonar:Se encargaría de generar un mapeado de los obstáculos.
Esto lo logra tomando 20 medidas en un arco de 180 grados, cada medida seria la media de 5 medidas en cada dirección. Esto lo he hecho de esta forma para reducir los errores de medida que ofrecen los sensores y tener cubierto todo el campo bien.
+Calculo de Fuerza repulsiva: Una formula y trigonométria permiten convertir la posicion de los obstáculos en una fuerza |Fr|=Krepulsiva/distancia ør=øobstaculo+180
luego se sumarían todas para generar un único vector repulsivo.
+Calculo de Fuerza atractiva: Calcular la posición del objetivo en coordenadas relativas teniendo en cuenta la orientación del robot y la posición.|Fa|=Katractiva*distancia øa=øobjetivo-ørobot
+Calculo de la resultante: Suma de fuerzas ya con sus limitaciones y conversiones, esto genera un vector que debe ser interpretado por los motores.
+Conversión en magnitudes físicas y movimiento.
+Odometria para calcular la nueva posición y orientación.
-Pequeños parches:
Para evitar que obstáculos muy lejanos pero continuos como una pared tengan mucho peso he limitado la distancia a la que tiene en cuenta un obstáculo, cuando un obstáculo esta a mas de 60 cm lo ignora.
Para garantizar que no se haga el valiente golpeándose, y no haya divisiones entre 0 cuando el obstáculo esta a una distancia menor del paso genera fuerza máxima. (Esto generaba el comportamiento que me tenia mosca, la superficie de la lata no le da una distancia correcta, se la daba un poco mayor por la forma redonda así que el podía avanzar hasta justo toparse pensando que todavía tenia espacio).
Tiene un corrector para permitir usar las coordenadas desde el robot de forma natural para el hombre x y, "y" adelante, "x" lados.
Los ángulos están en sentido anti horario para que el 0 estuviese en el mismo punto, y sea fácil la conversión entre el mundo real y el de fuerzas.
----------------------------------------------------------------------------------------------------------------------------------
Vídeos de sus comportamientos
-coordenadas y=160 x=-80 (Prueba de entrega)-coordenadas y=-140 x=-80 (Prueba de robustez)