lunes, 22 de febrero de 2010

Practica2

Bienvenidos a la Práctica 2. Ésta constaba de una serie de ejercicios que una vez realizados nos enseñaban un conocimiento básico de como controlar los sensores de Roxxxy. Si amigos, Roxxxy ya no solo tiene esos ojos tan bonitos, sino que ve por ellos. Los sensores que se utilizaban en los siguientes ejercicios son.

Ultrasonido: Con el cual Roxxxy puede "ver". ¡Oh mierda!, ¿y si no le gustamos?.
Sonido: Roxxxy nos escucha. Siempre que le da la gana.
Tacto: No penseis mal depravadetes.
Sensor de Luz: Con el cual puede ver el brillo de nuestros ojos.

El primer ejercicio era en principio el más sencillo, ya que nos pedía que mostráramos una serie de cosas por pantalla.
Todo fue bastante sencillo de encontrar excepto la memoria libre. Finalmente tras aprendernos la API de memoria conseguimos encontrarlo. También tuvimos problemas con el sensor de ultrasonido ya que siempre nos marcaba el máximo. Esto se debía a que inicializabamos el ultrasonido dentro del bucle de mostrar, una vez sacado fuera de este ya funcionaba correctamente.

Tras este ejercicio pasamos a los ejercicios verdaderamente divertidos. El primero de ellos consistía en hacer que Roxxxy caminara hasta que oyera un sonido fuerte (como por ejemplo una palmada) y una vez escuchado, se paraba y esperaba a que volviera a sonar algo para continuar caminando. Nos peleamos bastante con este ejercicio, lo cual era de suponer ya que las mujeres nunca escuchan. El problema era que escuchaba un sonido como si fueran varios y por lo tanto nunca se paraba. Solucionamos este problema y aqui está la prueba:



En el segundo ejercicio Roxxxy tenía que caminar siempre hacía delante, hasta que chocaba contra algo, en ese momento retrocedía y giraba un angulo aleatorio para volver a caminar. Aqui os dejamos la prueba de los choques frontales de Roxxxy.





Aqui mostramos otra grabacion en la que choca contra nuestra mano como buena amiga:



El tercer ejercicio era prácticamente igual al segundo pero en vez de llegar a chocar contra la pared, cuando Roxxxy se encontraba a una distancia de 20 cm ( buena medida), era cuando caminaba hacia atrás y giraba. Aqui os dejamos la prueba:




En el ejercicio 4, se nos pedia que Roxxxy siguiese una pared, sin chocarse en las esquinas y atravesando puertas, lo que mas lata nos dio fue idear la manera de colocarle la cabeza en angulo, pero una vez encontrada la pieza no fue demasiado dificil, el resultado es el siguiente:



El último ejercicio tenía tres apartados:

En el primero se nos pedía ver cual era la distancia real máxima y mínima del robot y nos salío que ve entre los 21cm a los 247cm.

También se pedía ver el angulo en el que dejaba de ver las cosas y nos ha salido cercano a 50º.

El tercer apartado servía para ver si el robot tiene un error sistemático para ello nos pedían realizar una medida colocando el robot a 10,20,30,40,50,60,70,80,90 y 100 cm de la pared. La media del error entre la medida y la distancia real es igual a 0 ya que a todas las distancias el resultado es el correcto. Hay un ligero error en la de 20cm que da 21cm.


El cuarto apartado era interminable ya que teníamos que colocar el robot a diferentes distancias, 40,50,60,70,80,90,100,110 y 120 cm y realizar diez medidas en cada una para ver cuanto error tenía el robot y si éste dependía de la distancia.
A parte de volvernos unos genios en el arte de desconectar el sensor y volverlo a conectar los resultados obtenidos fueron muy buenos excepto en los 20 cm.

Media a 20cm = 21.6
Media a 30cm = 30
Media a 40cm = 40
Media a 50cm= 50
Media a 60cm= 60
Media a 70cm= 69.9
Media a 80cm= 80.1
Media a 90cm 90
Media a 100cm= 100
Media a 110cm= 110
Media a 120cm= 120

El robot no tiene ningun error sistemático en el eje de las X ya que los resultados obtenidos son los esperados, el robot siempre da la medida real para este rango de medidas sin ningun error, es más verosimil que el error sea nuestro al colocar el robot antes que pensar que el robot se equivoca.
Para el eje de las Y teniamos que colocar una carpeta a diferentes distancias y alejarla tambien en el eje de las X. Los resultados obtenidos no son los esperados ya que no se dibuja el cono de apertura.

A 40 cm en el eje de las X, ve el obstaculo a 13 cm en el eje de las Y.
A 50 cm en el eje de las X, ve el obstáculo a 18 cm en el eje de las Y.
A 60 cm en el eje de las X, ve el obstáculo a 18.5 cm en el eje de la Y.
A 70 cm en el eje de las X, ve el obstáculo a 20 cm en el eje de las Y
A 80 cm en el eje de las X, ve el obstáculo a 18 cm en el eje de las Y.
A 90 cm en el eje de las X, ve el obstáculo a 15 cm en el eje de las Y.
A 100 cm en el eje de las X, ve el obstáculo a 16 cm en el eje de las Y.
A 110 cm en el eje de las X, ve el obstáculo a 15 cm en el eje de las Y.
A 120 cm en el eje de las X, ve el obstaculo a 15 cm en el eje de las Y.

Como podemos ver, forman un eje de apertura hasta 70 cm, pero luego el robot deja de ver los objetos y hay que acercalos mas asi que forma un cono, pero luego se vuelve a cerrar. haciendo un "rombo".

La matriz de covarianza resultante es =

0.258 2.96

2.96 249.025


miércoles, 17 de febrero de 2010

martes, 16 de febrero de 2010

Resolviendo la practica 1

Bueno, después de horas intentado que funcionase el USB con la maquina virtual hemos desistido y acabamos instalando Ubuntu en el otro ordenador. La instalación del LeJOS ha sido bastante rápida, y la creación de todos los programas también, menos el ultimo. Aquí va un breve resumen de cada ejercicio:

Control básico del motor:

En este ejercicio se pedía mover uno de los motores hasta que se pulsase una tecla, no fue difícil pero al ser el primero hizo mucha ilusión ver al robot moverse como nosotros queríamos.

Esquemático:

Mostrar "pulsa para moverse"
Esperar botón
Mover motor
Esperar botón

También se pedía que la rueda girase 45º de dos formas distintas, una usando rotate y la otra rotateTo, la diferencia entre ambas es que rotate siempre gira los grados que le introduzcas mientras que rotateto gira hasta que el eje llegue a esta posicion, partiendo de que cuando iniciamos el robot el eje esta en el grado 0. Al sólo haber un giro no había diferencia entre ambas ya que siempre partía de 0, pero probamos rotateto con dos giros y efectivamente no giraba la segunda vez si en ambos rotateTo ponías 45º ya que cuando intentaba girar la segunda vez ya se encontraba en ese angulo.

Esquemático:

Mostrar "pulsa para girar"
Esperar botón
girar 45º

Visualización de la odometría del motor

En este ejercicio se nos pedía añadir un "brazo" al robot y conectarlo a un motor para que mostrase por pantalla la posición de este con respecto a como había empezado, no nos complicamos mucho la vida y enchufamos el motor directamente al ladrillo y le pusimos una de la piezas dobladas para simular el brazo, al moverlo con la mano, podíamos ver que en la pantalla cambian los valores. Forzando a Roxxxy para que cambiara la posición del brazo manualmente tenía que cambiar en la pantalla. creo que Roxxxy nos prepara una venganza por maltratarla de ese modo.

Esquemático:

bucle infinito{
conseguir posición del motor
imprimir posición
}

Cuadrado de calibración de movimiento

El comienzo de este apartado fue desastroso, las consecuencias, suelo pintado por todas partes y Roxxxy haciendo todo menos un cuadrado. Tras algunos intentos conseguimos que Roxxxy describiese algo parecido a un cuadrado (de 30 cm y no de 40 ya que hicimos mas pequeño el dibujo en los papeles, menos mal que no hemos hecho una carrera de arte porque menudo espectáculo), el resultado fue el siguiente:



El esquemático es bastante simple:

(Anda 30 cm
gira 90º)x 4 veces

Normalmente se desvía un poco en el segundo giro, pero esto es debido a que el rotulador no esta justo en el eje así que algún lado esta algo torcido, pero el robot normalmente acaba prácticamente donde ha empezado. Aquí va una foto sobre la catástrofe(suelo pintarrajeado):

Cálculo de la matriz de covarianza

Aquí se nos pedía calcular la matriz de covarianza, así que con mucha paciencia medimos donde había acabado el robot las 10 o 12 veces que le habíamos ordenado que hiciese el cuadrado. El resultado final es el siguiente:

x=(1,5+0.8+0.5+0.5+0.3+0.5+0.1+0.3+0.3+0.1)/10=0.49
y=(0.5+0.5+0.2+0.2+0.5+0.3+0.3+0.3+0+0.5)/10=0.33

A estos datos aplicamos la formula y la matriz que nos queda es.

0,1529 0.08337

0.08337 0.01791

Claramente no es simétrica asi que suponemos que no hemos entendido bien lo que hay que hacer, pero bueno al menos lo hemos intentado a ver si en la siguiente práctica nos queda mas claro.

Visualización de la trayectoria

Esta es la práctica que mas guerra nos ha dado, pero al final lo conseguimos!! Queríamos que Roxxxy hiciese el mismo cuadrado de antes pero ademas que calculase la trayectoria que iba haciendo y la mostrase por pantalla (sin hacer trampas), en el primer intento, Roxxxy solo avanzaba un poco y se paraba, y en alguno otro hacía movimientos extraños e incluso llegamos a temer por nuestras vidas. Después de tener que investigar comandos y de muchas pruebas hemos conseguido que nos devuelva como resultado {0,0,360} Aquí va un vídeo de como ha quedado:

El esquemático del código es este:

Repite 4 veces{
Muevete 30cm
Mientras me muevo actualizo la posicion/pantalla
Gira 90
Mientras giro actualizo la posicion/pantalla}

La verdad es que dejando a un lado los problemas de la MV, lo hemos pasado muy bien. Cuando ha empezado ha pintar todo el suelo o se le caía el edding en mitad de la prueba nos hemos reido bastante, y cuando hemos conseguido que la trayectoria pasase de en principio 2800 grados a los 360 que queríamos también ha sido muy gratificante. Este jueves a por la siguiente!

Roxxxy no nos quiere

Primera vez que intentamos tratar con roxxxy en nuestra casa pero parece ser que a ella el entorno no la gusta, en uno de los ordenadores no funciona y en el otro pone mas problemas que la seguridad social.
Hemos tenido muchas dificultades a la hora de engancharle el boli, ya que no hay una pieza que ponga "enganchar boli" y el invento del siglo (celo) no nos solventa la papeleta. Al final hemos conseguido engancharlo perrymente mediante piezas.

jueves, 4 de febrero de 2010

Primeros contactos con Roxxxy


Hoy ,Jueves 4 de Febrero de 2010, hemos dado nuestros primeros pasitos con el ladrillo, hemos tenido que descargar el firmware y hemos copiado los ejemplos en nuestra carpeta.

Por ahora sólo hemos instalado el mítico "Hello World", y el "LCDUI" para ver ejemplos de menús creados. El robot se apaga de vez en cuando y emite pitidos graciosos cuando le gusta el programa que le hemos metido.

Finalmente, hemos borrado el "LCDUI" con el programa nxjbrowse.

Me parece que vamos a bautizar a nuestro robot(a) con el sexy nombre de Roxxxy, pero será de manera extraoficial ya que debido a problemas con el software nxjbrowse no podemos cambiarlo y se sigue lamando NXJ.

Haciendo pruebas y testeando, cuando algo falla emite el mitico "eeergg" y se tuesta totalmente. Hay que hacer reset para que Roxxxy entre en razón de nuevo. Dándonosla de listos, hemos intentado que reprodujese un sonido con el programa SoundSample, que hemos supuesto que servía para eso, pero no hemos tenido éxito y Roxxxy muy discretamente ha decidido no hacernos ni puñetero caso, por otro lado, vemos que tiene poca capacidad de memoria ya que no le cabían ni unos 2 segundos de wav.

Eso todo por hoy. Roxxxy os manda besitos.