Práctica III
Hoy vamos a enseñaros los resultados de nuestra práctica número tres.
Esta práctica es bastante completa, ya que juntaremos los conocimientos de la práctica anterior con los sensores de luz.
Gorki esta semana ha conseguido un nuevo "look" , y ahora está equipado con dos sensores sensibles a la luz, unos ojos realmente mejorados (¡Por fin tiene un "cuello" con que girar su cabeza!), y un sensor de contacto por si le da por chocar por detrás.
- Evitar obstáculos con el sensor de contacto
En primer lugar, vamos a crear un comportamiento en lazo abierto, esto es, que nuestro robot actuará automáticamente y de forma "ciega" ante un evento que especifiquemos. En este caso, nos serviremos del sensor de contacto, con el que averiguaremos cuándo nos chocamos contra un objeto.
El sistema es sencillo: Una vez que Gorki ha detectado un obstáculo, hará una serie de movimientos siempre iguales. De la forma que lo hemos implementado para que rodee nuestro objeto y siga su curso como si nada hubiera pasado.
Antes de empezar nuestro siguiente problema, debemos implementar una función radar, que nos recopilará las distancias de una pasada de nuestros infrarrojos mientras éstos se mueven un número determinado de ángulos.
Para ello nos hemos servido de la clase ReadReadings que viene en nuestra biblioteca robotics.
Esta clase nos proporciona un array donde almacenamos a que distancia de nuestro robot tenemos obstáculos. De manera que nuestro pequeño Gorki puede hacerse una idea del entorno que le rodea a través de unos algoritmos que aplicaremos para ejercicios posteriores.
A continuación podéis ver un vídeo en el que Gorki va tomando estas distancias con un ángulo de giro total de 180 grados.
- Evitar obstáculos con el sensor de ultrasonido
Ahora nos enfrentamos a un nuevo reto, nuestro robot no debe tocar en ningún momento un obstáculo. Para que Gorki pueda conseguirlo, hará uso de sus ojos (el sensor de ultrasonido). Pero esso no es todo, vamos a utilizar un método específico: el algoritmo de vectores de fuerzas virtuales (VFF).
Su funcionamiento es el siguiente: Vamos a tener tres vectores distintos, un vector atractivo, que será el que nos indique el camino que queremos seguir, un vector repulsivo, que nos indicará los obstáculos que nos encontraremos en nuestro camino y nos variará nuestra ruta para rodearlos, y por último un vector de fuerza resultante, que es la suma de los dos vectores anteriores.
Éste ejercicio fue el que más quebraderos de cabeza nos dio. Ya que la implementación de estas fuerzas no es algo tan sencillo como los otros ejercicios que habíamos implementado con anterioridad.
Utilizando nuestra clase Radar, los datos que recopilábamos cada vez que nuestro robot tomara una acción los agrupábamos en tres datos totales. Estos datos nos mostrarán los posibles obstáculos que tiene Gorki a su alrededor. Uno nos mostrará la menor distancia de estos posibles obstáculos a la izquierda, otro nos enseñará esta distancia con respecto al frente, y el último dirá esta distancia a su derecha.
Una vez recopilados estos datos, las definiremos como tres vectores distintos de repulsión.
Ahora lo difícil es saber qué importancia tiene cada vector en cada momento para que nuestro robot siga el vector de atracción o haga caso a un vector específico de repulsión. Esto es lo que más problemas nos ha dado, ya que requiere mucho tiempo de "prueba y error" para poder ajustar cada valor de forma correcta.
Este es el resultado que Gorki nos ha podido ofrecer:
Ahora se nos pide que Gorki siga la luz. Para esto hemos puesto dos sensores, uno a la derecha y otro a la izquierda de manera equidistante del centro del robot. Con esto conseguimos que si el sensor de la derecha capta mas cantidad de luz irá hacia ese sentido sino, irá en sentido contrario. Y en caso de que estos sensores midan más o menos lo mismo Gorki seguirá recto ya que la luz estará de frente.
Es importante decir que los sensores hay que ponerlos mirando hacia el suelo ya que ponerlo de otra manera su medición no sería válida y Gorki estaría desorientado.
Aquí podemos ver como Gorki juega con la luz de una linterna.
- Siguiendo la luz evitando obstáculos
El último objetivo que tenemos es la combinación de todos los problemas anteriores. Gorki debe seguir una luz objetivo esquivando todo los obstáculos.
Para este ejercicio lo que hemos hecho únicamente ha sido utilizar el código de evitar obstáculos mediante el ultrasonido y añadirle el de seguir la luz. Lo único que debíamos decidir es la prioridad de una acción u otra. Gorki seguirá la luz hasta que detecte un obstáculo, donde tomará prioridad esquivarlo.
El resultado final del entrenamiento de Gorki lo podéis ver aquí!!