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.
 
 

lunes, 22 de octubre de 2012

Práctica I

Esta es nuestra primera actualización de nuestro blog. Correspondiente a la práctica 1. Ahora vamos a contar en mayor o menor medida los sucesos que nos han ocurrido en estas dos semanas:

Preparacion y montaje de Gorki:

No pudimos esperar demasiado a poner nuestras manos sobre el robot, así que en un tiempo record lo montamos a nuestro gusto (exacto, igual que en el manual de instrucciones)
La verdad es que daba gusto ver a Gorki entero, pero para desilusión nuestra, ya por fin leída la práctica 1, acabaríamos desmontándolo para poder hacer los ejercicios.




Primeros ejercicios:

La verdad es que el primer ejercicio no dio excesivas dificultades.Con estos sencillos ejercicios aprendimos las nociones básicas para poder interactuar con nuestro robot a través de los botones para los ejercicios posteriores.

Ya en el ejercicio de odometría, el cual se trababa de que aprendiésemos como se distribuían los píxeles por nuestra pantalla, pero de manera muy sencilla, mostrando el ángulo que nuestro motor recorría.
Para hacer este ejercicio tuvimos algún problema con los grados ya que lo máximo que debería de girar el motor eran 360 grados y nos salía mucho más. Por otro lado si el motor del robot rotaba en dirección contraria teníamos grados negativos lo cual tampoco es del todo correcto.

Además que los números nos aparecían de manera intermitente en la pantalla. Esto era
porque procesábamos demasiado rápido y no daba tiempo a enseñarlo asique lo arreglamos
con una pequeña espera.

  Creo que donde mas hemos sufrido ha sido en este ejercicio, donde nos hemos pasado bastante tiempo en arreglar la forma de mostrar por pantalla los datos que recopilábamos. El problema consistía que aunque el código para calcular nuestras variables eran correctos, las ordenes para mostrarlos no (nos parpadeaba la pantalla, mostraba unos números sin lógica..)
  Se consiguió solucionar al darle un pequeño respiro en enviar los datos a nuestro robot, haciéndolo cada cierto tiempo.




Cuadrado:

A partir de entonces, la verdad es que todo ha sido un poco mas fácil. Los problemas que tuvimos con el cuadrado, como son lógicos fueron la calibración de Gorki. Aquí dejamos un ejemplo de un cuadrado de 20 cm:

 

Se nos pedía que nuestro robot hiciese un cuadrado de 40 cm en una hoja.
En este punto tuvimos problemas de calibración es decir, teníamos que asegurarnos de que
cada una de las ruedas estaba a la misma distancia respecto del eje ya que sino nuestro robot
aumentaba su error en el giro y el cuadrado que tenía que pintar era amorfo.

Este problema era más visible cuando se nos pedía calcular la matriz de covarianza a partir de
varias repeticiones ya que si dejábamos mal equilibrado el robot te salían valores demasiados
elevados y no éramos capaces de pintar dos cuadrados seguidos. Cuando averiguamos sus covarianzas, conseguiamos calcular la media de nuestras desviaciones de cada eje de nuestro robot. verdaderamente útil ya que nos daba la respuesta de qué eje era menos constante.

Visualización de la trayectoria:

Por último el mayor problema que tuvimos en el ejercicio de mostrar por pantalla el recorrido de Gorki, fue el de mostrarlo "en tiempo real". Lo conseguimos de manera parecida a el ejercicio 2 de esta práctica. Cada décima de segundo enviamos una actualización de nuestros píxeles y los imprimimos por pantalla.  No hay mucho más que comentar sobre esto.



Y estos son nuestros primeros pasos con Gorki, espero que os haya gustado, y tranquilos que próximamente habrá mas. saludos!

domingo, 30 de septiembre de 2012

Presentación


¡Bienvenidos! este será el blog donde podréis seguir nuestro progreso con la asignatura de robótica.
 Nuestro robot "Gorki" estará en breves en pleno funcionamiento, tened un poco de paciencia.

¡Actualizaremos en breves!