lunes, 22 de marzo de 2010

Práctica 4 - Modelo de movimiento probabilístico mediante filtro de partículas

 Bienvenidos blogueros, aquí os traemos una nueva práctica en la que empezamos a utilizar las partículas de la clase Particle para la autolocalización relativa del robot, además también haremos cálculo de rutas con puntos intermedios (waypoints) haciendo cálculos de ángulos y orientación.

- Modelo de movimiento mediante la clase MCLParticleSet: La realización de este apartado consiste en la utilización de un cojunto de partículas y mostrarlo en la pantalla con el movimiento que va realizando el robot. Es decir, primero creamos un mapa con un rectángulo y un conjunto de líneas u obstáculos (en este caso nuestro mapa es un cuadrado simple). Después inicializamos todas las partículas que se crean de forma aleatoria, y las colocaremos en un mismo punto (origen relativo), que se supone será el punto de partida del robot.

El comportamiento de las partículas es sencillo, para modelar la trayectoria relativa de nuestro robot, vamos almacenando la distancia que va recorriendo, y obteniendo la variación respecto a la anterior aplicamos esa mismo cambio a cada una de las particulas con un error de desplazamiento tanto en los ejes X e Y, como en el ángulo. Así, como podemos observar en el vídeo, inicialmente las partículas estarán ordenadas y poco a poco irán acumulando error y se irán expandiendo de la trayectoria original del robot. Aquí nuestro compañero DeathFate nos comenta el video:



- Cálculo de trayectoria: En este apartado se va a pedir unas coordenadas que se introducirán mediantes los botones del robot, y un cierto ángulo de giro una vez llegado al destino, éste ángulo será relativo al punto de origen de la orientación con la que comienza el robot. Para hacer este apartado hemos tenido que realizar una serie de cálculos de trayectoria, calculando ángulo y módulo dependiendo del cuadrante en el que se encuentre la resultante según un eje imaginario que tiene el robot al inciarse. Un video de demostración:



En la próxima práctica profundizaremos más en el tema de la localización y el cálculo de trayectorias con nuestro Piticli. Feliz semana santa! y aquí os dejo un juego flash en la sección de juegos de la derecha para poder prácticar un poco como tendría que moverse un robot, tiene funciones y según aumentan los niveles hay que darle al coco, sabiendo que "código" habría que repetir ya que las casillas tienen un límite, haber hasta que nivel llegáis.

jueves, 11 de marzo de 2010

Práctica 3 - Navegación local evitando obstáculos

Seguimos avanzando con Roboticly, en esta práctica probaremos una nueva arquitectura en la cual se podrán realizar programas semi-complejos, con la implementación de comportamientos.
Se tendrán diferentes comportamientos, con prioridades determinadas y dependiendo de situaciones de entrada, se optará por uno u otro, de esta forma, nos permite jerarquizar y modularizar los objetivos.

Evitar obstáculos con Sensor de Tacto:
El robot debe de chocar contra un obstaculo (una lata), y dependiendo que sensor de choque lo haga, realizara un arco para la derecha o izquierda recuperando su trayectoria. Mostramos el vídeo:



Evitar obstaculos con sensor de ultrasonido:
Para evitar las latas ahora, nos basaremos en el algotimo de vector de fuerzas virtuales, comportamiento es sencillo de comprender pero bastante dificil de implementar, debido a los impedimentos fisicos que nos ponen los sensores.
El algoritmo empieza cuando se ve un objeto a una cierta distancia mínima, en ese momento se obtiene tanto la distancia a la que está, y a que dirección está del robot, una vez con ésto, se irán calculando los vectores de repulsión (proporcional a la distancia), y sumandolo con el vector de dirección, obtendremos una resultante, a la cual mandaremos al robot, este proceso se repite hasta que se ha superado por completo el obstáculo y se retoma la dirección adecuada. Mostramos el vídeo:



Comportamiento de ir hacia la luz:
Primero calibramos los valores altos y bajos del umbral de los sensores, para asi hacer este comportamiento genérico a cualquier escenario.Una vez con esto, nuestro robot tomara rumbo a la luz segun la intensidad luminosa llegue a uno u a otro sensor, realizando cambios bruscos si el desnivel entre un sensor y otro es demasiado, y poco a poco si la diferencia entre sensores es pequeña. Mostramos el vídeo:




Comportamiento de ir hacia la luz evitando obstáculos:
Por último, combinaremos los comportamientos de ir hacia la luz, con el de evitar obstaculos con sensores de tacto, asi, nuestro robot ira hacia la luz, y si ve un obstáculo lo esquivara, y despues retomara rumbo hacia la luz. Se implementara alternando comportamientos en diferentes casos, con distintas prioridades. Mostramos el vídeo: