Javier Santos Paniego
César Pérez Fernández

jueves, 25 de marzo de 2010

7. Práctica4

HansF10 ha vuelto a sus modestos orígenes en apariencia. Volvemos al diseño con el que comenzo. Pero aunque ya no pueda ser aspirante a míster robot 2010 lo ha compensado con un interior particularmente decente.

Auto-localización mediante filtros de partículas

El primer reto al que se enfrentaba era manejar un filtro de partículas utilizando el método de Monte Carlo. No hemos necesitado creárselo nosotros, ya que las librerías del NXJ ya nos lo proporcionaban. Las utilidades de este filtro son proporcionar la posición del robot aproximada y la posición de objetos ajenos a el. En este caso nos interesa la primera de ellas.

*Ejemplo de robot situado dentro de un mapa y usando un filtro de partículas y ultrasonidos para navegar.


En la practica 1 se implementó una forma de que el robot recorriera un cuadrado. No tenía la exactitud que se esperaba por las limitaciones concretas del robot con el entorno. Con la ayuda del filtro de partículas se podría conseguir corregir los pequeños errores.

Resultados de la ejecución del cuadrado auto localizándose con partículas






La prueba de concepto esta en el programa Particulas.java.
Dentro de un mapa 100cm x 100cm sin obstáculos se sitúa el robot en las coordenadas (30 cm, 30 cm, 0 º). En ese punto se sitúan las 100 partículas. El siguiente paso es que el robot empieza a moverse en linea recta, mientras lo hace aplica el movimiento a las partículas usando la odometría de las ruedas.El movimiento aplicado a las partículas también incluirán el ruido en distancia que tenga asignado. Hemos elegido un ruido muy bajo para minimizar la dispersión al máximo, ya que el error en el recorrido era poco mas del 1%.

Al trazar el primer lado del cuadrado el robot gira 90 º y se lo aplica asimismo a las partículas junto con el ruido en ángulo. De aquí en adelante las partículas se dispersan en arco. El ruido para distancia recorrida y giro muy bajo por consiguiente el arco es mínimo.En las dos últimas iteraciones se repite el proceso aumentándose la dispersión en arco cada vez. Para la representación en la pantalla LCD del nxt hemos tenido que establecer una proporción de 0`6 píxeles por cada cm del mapa. Para clarificar el recorrido incluimos también el mapa para que se observara claramente sus limites.




Cálculo de trayectorias

En esta segunda parte se nos pedía implementar un método de navegación para el robot. Siguiendo un eje de coordenadas global, nos manejamos en el espacio de (x,y, rotación).
Una primera idea consiste en navegar siguiendo 3 pasos o etapas:

  1. Orientación al punto de destino
  2. Desplazamiento al punto de destino
  3. Obtención de la orientación final
Aprovechando la clase vector implementada para la práctica anterior pudimos desenvolvernos con soltura en el mundo de los ángulos y las distancias.

El código quedó de la siguiente manera:

Untitled

Una segunda parte nos llevó a plantear el desplazamiento del robot en 2 etapas:

  1. Movimiento en arco hasta el punto de destino
  2. Obtención de la orientación final.

Si bien no pudimos conseguir una limpia consecución del objetivo, al menos lo intentamos.
Conseguimos que el robot recorriese en arco la distancia deseada, pero no con la orientación que debería:


pathfollow2

No hay comentarios: