miércoles, 9 de marzo de 2011

Práctica 3. Navegación Local evitando obstáculos

En esta nueva entrada vamos ha demostrar una forma de navegación basada en VFF, en la que tendremos que evitar obstáculos (latas) y en la que haremos uso del sensor de luz para guiar a nuestro robot y los sensores de contacto y el sensor de ultrasonido. Vamos por partes:

Evitando obstáculos con el sensor de contacto

Lo primero, es realizar un buen diseño que se ajuste a nuestros objetivos. En este caso queremos que si detecta un obstáculo por la derecha el robot retroceda y realice un giro por la izquierda sorteando el obstáculo. Igual ocurre con obstáculos que detecte por la izquierda, salvo que en ese caso el giro lo realizará por la derecha. Y por último, si detectamos un objeto bastante centrado se activarán los dos sensores y realizaremos un giro bastante mas pronunciado.
Aquí tenéis un diseño que cumple estos aspectos:



Se ha seguido una técnica basada en casos, avanzar, girar derecha, girar izquierda, y girar_centrado, siendo avanzar el caso con menos relevante y girar_centrado el mas relevante.


Evitando obstáculos con el sensor de US

Primero, antes de nada, debemos construir un buen diseño que se adapte a nuestras necesidades.
En este caso vamos a utilizar el sensor de ultrasonidos, pero de una forma especial. Queremos que recoja datos del entorno, concretamente distancias a obstáculos. Queremos que el sensor vaya girando de un lado para otro, para ello, hemos colocado un tercer motor que manejará el sensor de nuestro robot.
Y lo ultimo, y mas importante, es hacerle una estructura que incline la cabeza ligeramente hacia abajo para que esquive latas por ejemplo.



Este comportamieto calcula el vector resultante a partir del vector atractivo y el vector repulsivo.
Para ello utilizamos el sensor de US para que mida en un array de 10 posiciones (entre -45º y 45º) a que distancia se encuentran los objetos y en función de esto calcularemos los vectores repulsivos.
Una vez que tengamos los vectores repulsivos calculamos el vector resultante sumando el vector repulsivo con el vector atractivo.
Nuestro vector atractivo tiene una magnitud dependiente del vector repulsivo (magnitud_repulsivo - 20) y una dirección contraria al giro del robot (p.ejemplo: Si el robot está girado a -45º el vector atractivo tendrá un ángulo de 45º).



Siguiendo la luz como un mosquito!

Una vez mas, debemos reconstruir nuevo robot, para que el robot recoja intensidades de luz por los lados del robot, hemos creado una estructura para colocar los dos sensores de luz. Algo sencillo.


Este comportamiento realiza una operación bastante sencilla, realiza restas de intensidad lumínica (derecha - izquierda), de tal manera que si la resta es >= 25 gira a la derecha y si es <= -40 gira a la izquierda, estas cifras aparentemente aleatorias corresponden a la diferencia de medidas en cada uno de los sensores, cada uno devuelve valores distintos para la misma intensidad de luz, de ahi ese ajuste de cifras.
La única complicación que tiene, es saber en que modo poner los sensores, ya que como dice en la API,  hay dos modos, Pasivo y Activo, en modo Activo el rango de valores es mucho más pequeño y en modo Pasivo hay mucho más rango de valores, con lo que podemos obtener mas precisión en los sensores.


Evitando obstáculos con el sensor de US y guiando el robot con los sensores de luz

El diseño para este ejercicio, es la combinación de los ejercicios anteriores.


Para evitar obstáculos con el US, no hemos utilizado vectores, hemos hecho una simplificación semejante al ejercicio con el sensor de contacto, si detecta obstáculo por la izquierda el giro se realiza por la derecha, si detecta algo por la derecha el giro se realiza por la izquierda y si detecta algo bastante centrado el giro es mucho mas pronunciado.

No hay comentarios:

Publicar un comentario