miércoles, 21 de marzo de 2012

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

 Sin duda alguna esta semana nos enfrentamos a la practica mas dura por el momento, y es que hemos tenido que resolver unas cuantas incógnitas en cuanto al montaje del robot o la manera en la que combinar todos los apartados de esta practica en uno solo para que el robot funcionase a "full-equipe" .

Para empezar la realización de la primera parte de la practica la hemos resuelto con dos códigos distintos. Uno que seria el mas completo seria para la realización de esta parte teniendo montado el robot con dos sensores de contacto posicionados a la derecha o a la izquierda de la parte delantera del robot, y dependiendo de cual es el que presione giraría hacia un lado o hacia otro.
Pero teníamos un problema y es que dos sensores de contacto en la parte delantera junto con dos sensores de luz y uno de ultrasonidos para la realización de la ultima parte de la practica no tenían cabida en nuestro robot, por lo tanto como montaje final se ha justado de tal manera que robot coste de  un sensor de contacto (repartidos por toda la parte delantera), dos sensores de luz y uno de ultrasonidos.

Fotos de la evolución en el montaje de nuestro robot:








Metiéndonos un poco mas en materia especifica os contamos que en esta practica utilizaremos los comportamientos que se implementan en la clase Behavior.Destacaremos 3 métodos:


boolean takeControl(). Devuelve verdadero si se dan las condiciones necesarias para que cierto comportamiento tome el control del robot.

void action(). El código de este método se ejecuta cuando el comportamiento se activa

void suppress(). Este método debe terminar inmediatamente el código que ejecuta el método action(). Puede terminarlo de inmediato (si es un bucle infinito, o la ejecución es larga) o esperar a que termine, si la ejecución es corta.

En esta primera parte de la practica deberemos montar un robot con un sensor de contacto. Cuando el sensor se pulse el robot deberá retroceder unos centímetros y rodear el obstáculo.








En este vídeo se muestra como el robot va moviéndose hacia delante, y por medio de un sensor giratorio que tiene colocada en la parte superior, va observando a través de ultrasonidos si hay algún objeto que se encuentre a (-45º 45º) de su parte delantera y si lo hay en ese caso esquivarlo para seguir con la misma dirección. En el vídeo se ve como se comporta de forma distinta ante los dos objetos que se le presentan, en el primero lo ve muy centrado y lo pasa haciendo un medio circulo; En el segundo al no estar exactamente de frente a el solo lo esquiva o bordea sin salirse tanto del camino. En este vídeo solo se muestra que gira para el mismo lado en las dos situaciones, pero esta programado para que elija el lado que mejor le convenga. En el ultimo vídeo se puede ver como gira para el lado derecho al esquivar un obstáculo







A continuación os mostraremos como el robot va siguiendo la luz. Dependiendo de la intensidad con la que le lleguen a los dos sensores que tiene colocado con una separación entre ellos respecto del centro de 45º, girará para un lado o para otro. Cuando la intensidad que recibe es parecida el robot piensa que esta en la dirección correcta y por lo tanto no realiza ningún giro.
El mayor problema que hemos tenido con este apartado de practica, es que los dos sensores de luz que tiene el robot tienen una calibración distinta, que ante la misma potencia de luz, pueden dar dos valores distintos. Solucionamos este problema con una calibración de los dos sensores al inicial la ejecución del programa.







Por ultimo, la parte final de esta semana consistía en poner todas las acciones que realiza el robot juntas con el fin de que ahora nuestro robot anda hacia adelante y se desplaza en dirección donde haya mas luz, si por el camino se encuentra algún obstáculo ya sea porque lo detecte el ultrasonidos o por los sensores de contacto de la parte delantera, lo esquivará.











No hay comentarios:

Publicar un comentario