El grupo

El grupo

jueves, 24 de febrero de 2011

DIa 8 (Practica 2)

Hoy toca tarde de medidas.

Tenemos que comprobar la eficiencia de nuestro sensor de ultrasonidos, ya que las mediciones que hace se  asimilan a las de la realidad pero no llegan a ser exactas, y eso es lo que vamos a comprobar, cual es el   error de nuestro sensor.

Lo primero que comprobamos es el rango de distancias que nuestro robot es capaz de medir. Para ello alejamos  y acercamos el robot a una pared con el sensor activado. El rango de DISTANCIA medido es [5cm, 240cm].
*
Ahora comprobamos el rango de ángulos, esto se hace girando el robot respecto de la pared y viendo cuanto  es capaz de medir, el rango de ÁNGULO medido es
[45º, -45º ].

El siguiente paso es comprobar si el sensor tiene un error sintomático, es decir, que tomando varias medidas  y haciendo la media, ver si esta es distinta de 0. Esta es la tabla de las distintas medidas:


Distancia X 20 30 40 50 60 70 80 90 100
Distancia medida 23 32 42 52 62 72 81 92 101


La media del error sintomático es 1,8 cm.

Por ultimo tenemos que calcular la incertidumbre del sensor, tanto en el eje X(dirección del haz del sensor)  como en el eje Y(perpendicular al haz).



}

Para el eje X, situamos al robot a distintas distancias y tomamos para cada distancia varias medidas y así  poder realizar una media:


Distancia X (x1) (x2) (x3) (x4) (x5) (x6) (x7) (x8) (x9) (x10) Media Error
40 39,5 39,5 40,5 39,5 40,5 40,5 39,5 39,5 39,5 40,5 0,5
50 50,5 50,5 50,5 50,5 50,5 51,5 50,5 49,5 50,5 49,5 0,6
60 59,5 60,5 59,5 59,5 60,5 59,5 58,5 59,5 59,5 60,5 0,6
70 70,5 70,5 69,5 68,5 68,5 69,5 69,5 68,5 69,5 70,5 0,7
80 80,5 79,5 79,5 80,5 80,5 81,5 80,5 80,5 79,5 79,5 0,7
90 90,5 91,5 91,5 90,5 91,5 90,5 90,5 89,5 88,5 89,5 0,8
100 101,5 100,5 101,5 100,5 100,5 99,5 99,5 100,5 100,5 101,5 0,7
110 112,5 111,5 111,5 111,5 110,5 1115 110,5 110,5 111,5 111,5 0,9
120 122,5 122,5 121,5 122,5 121,5 120,5 122,5 121,5 121,5 121,5 1,05

Viendo la media del error, deducimos que el error no varía con la distancia.

Para el eje Y, colocamos una carpeta perpendicular al eje X y tomamos el valor de la distancia a la cual el   sensor deja de medir. Esta es la tabla con 10 medidas para cada distancia:


Distancia X (y1-y) (y2-y) (y3-y) (y4-y) (y5-y) (y6-y) (y7-y) (y8-y) (y9-y) (y10-y) Media
40 11 10 12 11 11 10 10 11 11 10 11,5
50 13 12 13 12 13 13 13 12 14 12 12
60 15 15 15 16 17 16 15 16 15 15 15
70 19 19 20 20 20 19 19 20 19 20 20,5
80 13 13 12 14 14 14 13 12 14 14 14
90 9 9 8 8 8 9 10 8 9 9 8,5
100 10 10 9 9 10 10 10 9 10 9 10,5
110 8 8 7 7 8 8 7 7 8 8 8,5
120 4 4 5 5 5 6 5 6 6 5 6

Teóricamente, si representaramos estos datos en una gráfica deberían dar como resultado un cono de apertura.  Pero como siempre la realidad es muy diferente

      -Al principio el cono es de apertura, pero llega un momento en que el cono se cierra, invirtiéndolo. Evidentemente  cuanto mas alejemos la carpeta del robot, menor ángulo de visión tendrá porque la carpeta esta muy alejada.
De esto deducimos que yi-y si que depende de la distancia al robot.

Por ultimo, y para finalizar la practica nos queda hayar la matriz de covarianza, al igual que hicimos en la  practica anterior. Esta matriz representa la incertidumbre del sensor:


40cm 0,25 5,75
100cm 0,49 7,35

5,75 102,8

7,35 92,16







50cm 0,36 7,2
110cm 0,81 7,65

7,2 161,7

7,65 57,76







60cm 0,36 9
120cm 1,25 6,3

9 218,2

6,3 26,01







70cm 0,49 14,35




14,35 380,2










80cm 0,49 9,8




9,8 176,89










90cm 0,64 6,8




6,8 91,2



miércoles, 23 de febrero de 2011

DIA 7 (Practica 2)

Hoy vamos a realizar el penúltimo ejercicio de la práctica, que consiste en hacer que el robot  siga una pared. Para ello utilizaremos el sensor de ultrasonidos de nuevo.

El código es aparentemente sencillo, si el robot se aleja demasiado de la pared, hacemos que gire  hacia esta y si se acerca demasiado hacemos que gira en sentido contrario. 

Primero intentamos que gire con el comando "rotate" para que el movimiento del robot sea mas fluido.
En la primera prueba el robot gira hacia donde le da la gana, sin sentido alguno (algo habremos  hecho mal). Volvemos a programarlo y en la segunda prueba llega un momento (cuando el robot esta alejado de la pared) que no deja de dar vueltas sobre si mismo. Intentamos varias cosas mas y tras  comprobar que sigue sin funcionar, decidimos que ahora nuestro robot va a avanzar a trazas cortas,  en vez de avanzar continuamente. Surgen algunos problemas parecidos a los de antes y empezamos a desesperarnos...

Por fin alguien se da cuenta de una cosa: 
     -¡¡¡Estamos usando una pared inclinada para que el robot la siga!!!

Es probable que el rebote de las ondas de ultrasonido no lleguen al robot porque el plano esta  inclinado:



Lo probamos en una pared recta y tras algún arreglo funciona perfecto!!!


    

Hoy ha sido un quebradero de cabeza pero al final hemos conseguido terminar el ejercicio satisfactoriamente.
El próximo día nos dedicaremos a hacer el ultimo ejercicio que aparentemente es el mas largo y pesado, puesto que se trata de hacer mediciones.

viernes, 18 de febrero de 2011

Dia 6 (Practica 2)

Varias noticias:

1ª- En la primera practica obtuvimos 11/12 puntos!!! Esperemos seguir igual.

2ª- Tenemos nuevo compañero de equipo!!! 
Se nos ha unido Rafael Jiménez, que no ha podido venir antes a clase pero ya se reincorpora  al trabajo, así que bienvenido Rafa.

Gracias a la primera practica hemos cogido bastante soltura con el lenguaje Java y la  programación orientada a objetos. Así que vamos bastante mas rápido a la hora de programar.

Esta segunda práctica trata de que nos familiaricemos con los distintos sensores que tiene  el robot para obtener información de la realidad, además de información propia del robot:

    -Sensor de luz
    -Sensor de ultrasonidos
    -Sensor de contacto
    -Sensor de sonido (micrófono)
    -Batería

Se nos pide resolver una serie de ejercicios que iremos detallando a continuación.

El primero de ellos consiste en tomar una serie de datos con algunos sensores del robot  y mostrarlos por pantalla:

    -Nombre del robot
    -Valor del sensor de ultrasonidos
    -Valor del sensor de luz (tanto crudo como calibrado)
    -Tensión de la batería del robot
    -Memoria libre del robot



El segundo ejercicio que tenemos que hacer se llama ClapControl y se trata de que el robot  se pare cada vez que oiga una palmada, y siga avanzando cuando vuelva a oír otra. Para ello  es lógico que usemos el sensor de sonido.
En la primera prueba nuestro robot avanzaba continuamente y únicamente se paraba mientras  hubiera ruido, pero en cuanto dejabas de hacer ruido continuaba su marcha. Esto era porque  no le dábamos tiempo al sensor para terminar de leer los datos de sonido.




El siguiente problema (Bump&Go) es hacer que el robot avance hasta que choque con algo, en ese momento  el robot debe retroceder unos centímetros, girar un numero aleatorio de grados y seguir su marcha.
Código bastante sencillo que no nos da muchos problemas. Lo único que nos dio problemas fue  el montaje del robot para incorporarle el sensor, en un principio le pusimos el sensor tal cual,  pero no hacia bien contacto y tuvimos que "tunearlo" un poco para que hubiese mayor superficie de  contacto.








El siguiente problema es idéntico al anterior pero esta vez el robot no debe chocar, para ello  se utiliza el sensor de ultrasonido. Al principio el robot retrocede unos centímetros en vez de avanzar porque nada mas ejecutar el programa hace una lectura de ultrasonido y lee la mano de quien haya ejecutado el programa, para evitarlo, hacemos que espere un poco en hacer esa primera medida.




Estamos bastante orgullosos del trabajo de hoy porque hemos avanzado bastante de la práctica y aunque todavía nos queda la otra mitad por hacer creemos que no nos sera muy complicado.

Hasta el próximo día.

jueves, 10 de febrero de 2011

DIA 5 (Practica 1)

Vamos a terminar de poner a punto todos los ejercicios de la practica 1 ya que hoy es la entrega.

Por un lado tenemos que calcular la matriz de covarianza. Tenemos que medir la distancia que avanza y el desvio que comete el robot al avanzar en linea recta (se trata de ver si avanza la distancia que queremos realmente, no llega o se  pasa, que realmente es lo que va a pasar. Anotamos los datos en una tabla:



Con estos datos obtenemos la matriz de covarianza:

         {2.84       -0.19}
P=    {                      }
         {-0.19      0.42 }




CONCLUSIONES FINALES:

    Esta practica nos ha demostrado que el robot no realiza las ordenes que queremos ejecutar, siempre hay que tener en cuenta un margen de error porque no contamos con otros factores que alteran los resultados, como puede ser el rozamiento.
El trabajo realizado ha sido bastante gratificante ya que por primera vez en lo que llevamos de carrera hemos podido ver como un programa que hayamos creado interactua con la realidad.


Tenemos la practica lista para ser entregada.
Ya contaremos como nos ha ido.

Hasta pronto.

miércoles, 9 de febrero de 2011

DIA 4 (Practica 1)

Hoy hemos quedado un día antes para avanzar en la práctica y así tenerla lista para mañana, el día de la entrega.

Empezamos corrigiendo algunos errores del código y bajando un poco la velocidad de CR7 ya que va demasiado rapido para la traza del cuadrado. Una vez hecho eso, mas o menos lo pintaba, aunque se desvía un poco, sobretodo al avanzar en linea recta (para nuestro asombro) ya que los giros de 90º mas o menos los hace bien.

Trazado tras 10 repeticiones


Aqui ponemos el video de demostración , comparandolo cn un cuadrado perfecto de 40 x 40 cm.





Después comenzamos con el último apartado de la práctica , la visualización de las coordenadas por pantalla.
La mayor complicación de este ejercicio es mostrar los datos por la pantalla a la vez que el robot se mueve,  pero nos ayudamos del ejercicio de la odometria. Una vez hecho esto, probamos nuestro código.
La realidad es distinta a la teoría:
    -La teoría dice que el robot al llegar a su posición inicial debe tener estas coordenadas (x=0, y=0, z=360).
    -La realidad es que nuestro robot se desvía de la trayectoria y acaba en estas coordenadas(x=-1, y=1, z=359). Aunque le hemos puesto que avance 40cm, en la pantalla del LCD muestra que avanza 80 y no sabemos por que ocurre esto.

Mañana terminaremos de probar este código y haremos la matriz de covarianza.

De momento buenas impresiones, nos vamos desenvolviendo mejor con Java sesión a sesión, aunque la idea básica la programamos mas o menos bien a la primera, la corrección de pequeños errores para la entrega es lo que nos lleva mas tiempo.

ADRI RECUPERATE YA, QUE NECESITAMOS QUE JAVAMASTER NOS GUIE¡¡

jueves, 3 de febrero de 2011

DIA 3 (Practica 1)

A  Hoy hemos decidido dedicar la tarde entera a CR7 (aun que no se si se lo merece después del partido de anoche contra el Sevilla).

  Tenemos que hacer un ejercicio que consiste en mostrar la odometría (los grados que gira un motor) por la pantalla o LCD del robot. Este ejercicio requiere que pensemos un poco mas que los anteriores y la verdad que nos ha costado un buen rato sacarlo.
Primero empezamos mostrando valores negativos y positivos dependiendo de hacia donde girásemos el motor para luego darnos cuenta que había que mostrar los grados siempre en positivo, además una vez llegara a 0 o a 360 hay que reiniciar los grados para que pasen de 0 a 360 y viceversa.
  Primeras impresiones:
       -El robot esta loco (o lo hemos programado mal, me declino por esto). Pasa de repente de 110º a 1569º por ejemplo.
       -Los datos mostrados en la pantalla se actualizan continuamente y se hace difícil leerlos.

   Tras varios intentos solucionamos el primer problema, teníamos mal el código. 
El segundo problema viene al limpiar la pantalla cada vez que se va a mostrar algo nuevo,  ya que lo hace tan rápido que no se llega a leer (da la sensación de que parpadea). La  solución esta en usar la función "sleep" del objeto Thread, que hace que la ejecución   se detenga durante un tiempo determinado.

Odometria funcionando correctamente


Empezamos a hacer el Cuadrado (el robot debe dibujar un cuadrado en el suelo). EL código  es bien sencillo, pero cuando vamos a probarlo hace de todo menos el cuadrado. Dibuja una especie de  rombo. Como esto es cuestión de corregir algún error decidimos pasar al siguiente ejercicio.

Hay que calcular una matriz de covarianza...(Creo que lo haremos otro día).

El ultimo ejercicio consiste en que el robot dibuje el cuadrado hecho en el ejercicio  anterior pero además sepa en todo momento en que posición del eje de coordenadas está.
Empezando en la coordenada (x=0, y=0, z=0) {'z' son los grados que gira el robot}. Según esto  al finalizar el cuadrado debería acabar en la misma posición que antes pero habiendo girado 360º.

Se nos ha hecho tarde y hemos avanzado bastante, pero continuará...