martes, 13 de noviembre de 2012

Práctica II

Seguimos con las actualizaciones de nuestro blog. En este caso explicaremos nuestra práctica 2. A continuación explicamos los sucesos que han ocurrido en la realización de la práctica. 
En estas semanas hemos experimentado con todos los sensores de Gorki. Por fin ha empezado a enterarse un poco de lo que hay en el mundo, aunque ha necesitado bastante ayuda!

  • Obteniendo información

En primer lugar hemos diseñado un programa que nos muestre todos los datos que reciba Gorki a través de varios de sus sensores:

  • Distancia de ultrasonido
  • Valor del sensor lumínico (en crudo y en porcentaje)
  • Tensión de la batería
  • Memoria libre



Hay que tener cuidado con el sensor de la luz, ya que a la hora de calibrarlo, tenemos que tener el sensor en modo pasivo para medir la intensidad de la luz.
Nuestra imagen muestra la memoria FLASH, aunque podríamos mostrar la memoia RAM libre.

  • Control del robot por sonido

El primer sensor donde nos vamos a centrar es en el micrófono. Gorki ya es capaz de escucharnos, por lo que hemos aprovechado a enseñarle un par de ordenes básicas. La mayor dificultad que hemos tenido a la hora de hacerlo ha sido en calibrar los rangos de intensidad del sonido al recibir una orden, ya que si poníamos un umbral de acción bastante bajo, nos obedecía aun sin quererlo, mientras que si introducíamos el umbral demasiado alto, se convertía en un rebelde y sólo obedecía a gritos!
Aquí podéis ver una muestra de Gorki una vez que más o menos estaba calibrado.



Como veis se para o mueve en línea recta a son de nuestras palmadas. Y con una capacidad de reacción bastante aceptable. Aunque cometa algunos errores por el ruido de fondo.

  • Bump & Go! usando sensores de contacto

Nuestro Gorki ya camina a son de nuestras palmadas. Pero tenemos un problema, si no le decimos que pare, Gorki es especialmente propenso a chocar con todo obstáculo que encuentra e intenta atravesarlo con excesiva confianza.
Es el momento de añadirle un nuevo sensor a nuestro robot, un sensor de contacto. Básicamente cuando Gorki se estrelle con algo, recibirá una señal de contacto, por lo que retrocederá unos segundos y girará aleatoriamente para seguir un nuevo camino.




El problema que hemos encontrado en esta parte de la practica, fue el movimiento aleatorio en el giro del robot. En principio pusimos un número aleatorio de 45 grados. Pero nos surgió un nuevo problema, y es que a veces hacía un giro innecesariamente largo para girar solo 45 grados. (en verdad para Gorki giraba 315 grados). Por lo que lo arreglamos mirando si giraba en un sentido o en otro.
Random aleatorio = new Random();
robot.rotate(180 -(aleatorio.nextInt(7)+1)*45);
 
  • Bump & Go! usando sensor ultrasonido
 
Ahora vamos a repetir el mismo ejercicio pero esta vez no dejaremos que Gorki contacte con nada. Para ello haremos uso de sus ojos. (el sensor ultrasonido) Miraremos la distancia que nos señala nuestro sensor y pondremos un límite. A partir de ese límite retrocederá y girará de manera aleatoria.
Utilizamos también el código del apartado anterior sobre este número aleatorio.
 
 

  • Comportamiento sigue-pared para salir de un laberinto
 Ahora ya se empieza a complicar todo. No es que tengamos que hacer que Gorki se estrelle contra una pared y rectifique su camino, sino que directamente no llegue a chocar nunca mientras sigue una pared. todo esto usando sólo sus ojos!
En este ejercicio realmente si que dio quebraderos de cabeza, pero lo logramos solucionar mediante el viejo método de prueba y error.
Para poder realizar la práctica, empezamos asignando unos parámetros de distancia respecto la pared, donde cada uno de ellos indicará una orden a Gorki. Si se acerca en exceso, Gorki girará para evitar el choque, mientras que si se aleja demasiado, Gorki girará para acercarse.
El gran problema que tuvimos fue la forma de evaluar estas constantes, en principio pusimos una sola constante que dependiera proporcionalmente de nuestra distancia en tiempo real a la pared. Este método no fue el más correcto, ya que da demasiados problemas y muchas oscilaciones.
Asique decidimos cambiar la formad e plantear el ejercicio, y poner unas constantes de distancias preestablecidas. Por lo que Gorki girará con una intensidad constante según estos parámetros.
Así sólo nos quedaba ajustar las constantes según la velocidad de nuestro robot. Por lo que tras varios intentos, mejor dicho, tras innumerables intentos. Mas o menos nos quedó un resultado así:
 
 
 
Definitivamente Gorki está creciendo y aprendiendo muy deprisa! Podemos ver que nuestro robot gira de manera bastante aceptable en el final de nuestra pared. Aunque sea demasiado tímido al verlo en un directo!
 
  • Calibración del sensor de ultrasonidos
 
Por último, tenemos que estudiar realmente bien los ojos de Gorki (el sensor ultrasonido), por lo que vamos a dedicarnos a tomar medidas y recopilar todos los datos posibles sobre este sensor.
 
Empezamos con algo muy simple, queremos medir el error que nos señala Gorki en distintas distancias. Lo vamos a comprobar cada 10 cm.
 
 
 
 
Podemos calcular a partir de nuestras medidas, el error medio que tenemos en cada distancia.
Ahora nos centraremos en el ángulo de visión de nuestro sensor. Vamos a calcular la incertidumbre en nuestro vector Y. Lo haremos de manera que determinamos a qué distancia del eje X comienza a detectar un obstáculo que introduciremos en el rango de visión de nuestro robot:
 
 
 
 
Tomamos la tabla que se ve a continuación:
 
 
 
Vemos como en mayor o menor medida el rango de visión del ultrasonido es en forma de cono. la diferencia del eje y va aumentando a medida que nos alejamos del punto donde se encuentra Gorki (0,0)
 
Por último calculamos la matriz de covarianza, que nos dirá si nuestro sensor tendrá una variación mayor o menos en sus errores al recopilar información.
 
Dándonos como resultado:
 
En conclusión a todos estos datos obtenidos, vemos que el cono de visión es bastante pequeño e inestable, ya que depende mucho del sensor específico que recibimos.
 
 

No hay comentarios:

Publicar un comentario