Bienvenidos a la práctica 5, denominada Auto-Localizacion basada en filtro de partícluas.
En anteriores prácticas hemos aprendido como funciona básicamente un filtro de párticulas. En esta práctica tendremos que utilizarlo!!!. Esta práctica se divide en 3 ejercicios, en los que vamos duplicando la complejidad de resolverlo.
El primer ejercicio fue más o menos sencillo, consistía en cargar el mapa desde un archivo, inicializar las párticulas aleatoriamente por el mapa y mostrar en pantalla el resultado. Cargar el mapa era la primera tarea, y no fue demasiado complicada, tras cambiar algunas cosillas, importar librerías estaba solucionado. Mostrarlo por pantalla fue algo más complicado ya que a pesar de tener el mapa, para mostrarlo hubo que dibujarlo "a capón" en la pantalla. Dibujar párticulas ya sabíamos con la cuarta práctica así que no era nuevo.
El ejercicio dos tuvo tela, estaba dividido en diferentes partes, pero eran dificilmente probables por separado. La primera parte consistía en realizar un escaneo de 360 grados guardando las diferentes medidas con su angulo respectivo en un array RangeReadings. Este escaneo debe realizarse con la velocidad, amplitud, resolución... pasadas por el usuario. Este escaneo lo utlizaremos para crearnos dos Array RangeReadings diferentes por cada punto.
Una vez guardadas las medidas de cada punto previamente establecido, situamos al robot aleatoriamente en un punto del mapa. El robot escanea una vez desde su posición y compara el escaneo de frecuencias con los guardados en su memoria, el que mas se asemeje será el punto en el que el robot cree que se encuentra. Como esto del asemeje queda un poco naive lo explicaremos más detalladamente. El robot saca la diferencia entre su medida 0, y la medida guardada 0 del punto 1, y asi sucesivamente con el resto de medidas. Cada diferencia la elevamos al cuadrado para evitar restas y sumamos todas las diferencias. Luego realizamos los mismos cálculos pero con el punto 2, el punto cuya suma de diferencias sea menor, será el punto elegido.
Pero tranquilos, no sólo nos sirve con saber el punto, tenemos que saber en que angulo respecto a la medida original nos encontramos. Esto se realiza con el histograma de medidas, comparamos los histogramas, y calculamos la suma como anteriormente, y ahora rotamos el histograma diez grados y volvemos a realizarlo. Esto quiere decir que vamos intentando que ambos histogramas cuadren lo mejor posible, una vez que vemos en que rotacion cuadran, sabemos el angulo en el que nos encontramos. Lo mostramos por pantalla.
Nos hemos encontrado con muchísimos problemas a la hora de realizarlo:
* El robot mide lo que le da la gana: Desgraciadamente contra esto no hemos podido hacer nada, hemos reducido la velocidad de escaneo para que el error sea lo menos posible, pero pruebas el programa y a veces acierta perfectamente y otras por poco se cree que está fuera del mapa.
* El mapa estaba ocupado: A medida que avanzaban los días el mapa estaba mas ocupado y a pesar de la colaboración entre compañeros ha sido dificil realizar todas las pruebas que creíamos necesarias.
* El mapa cada día estaba mas perjudicado: El mapa cada día ha estado mas roto, con las paredes despegadas, supongo que todos hemos tenido mucho cuidado pero es inevitable que alguien se tropieze que el mapa se mueva y un largo etc de cosas que han hecho que el mapa se encuentre en malas condiciones.
* Al estar el mapa peor las medidas tomadas no son las tomadas previamente, y eso lleva a Roxxxy a confundirse.
* A parte de los problemas mencionados, tuvimos otro adicional y es que Roxxxy no tiene precisamente memoria de elefante, así que no le cabían 10 archivos(1 para el histograma de frecuencia y otro para el de posición de cada uno de los cinco puntos) para guardar las medidas tomadas por el radar(RangeReadings), así que tuvimos que ingeniárnoslas solo con 5 y finalmente pudimos resolver el problema derivando de el histograma de ángulos y medidas el histograma de frecuencias necesario para calcular la posición.
A pesar de todo conseguimos que Roxxxy sepa donde se encuentra la mayoría de las veces, a veces se equivoca, pero "todos somos humanos". Lo que está claro es que cuanto más tiempo pasamos con Roxxxy más nos exige, como casi todas las mujeres.
miércoles, 14 de abril de 2010
domingo, 21 de marzo de 2010
Practica 4.
Nos encontramos con la cuarta práctica junto a nuestra querida Roxxxy. Gracias a dios, esta vez Roxxxy no necesitaba tantos complementos estéticos y pudimos concentrarnos en la programación de los ejercicios y no en ponerla guapa.
Esta práctica nos explicaba como funcionaba la Auto-localización mediante filtros de partículas. La teoría es bastante sencilla: Tenemos un espacio donde el robot puede encontrarse pero no sabemos exactamente su localización. Lo primero que hacemos es situar un número elevado de partículas aleatoriamete en ese espacio, cada una de ellas con una posición x,una y, un peso igual a todas y una dirección a la que apunta. Cada vez que el robot se mueve actualizamos cada particula con ese movimiento, ya sea giro o translación, añadiendo a cada una un error aleatorio calculado teoricamente. Una vez que el robot detecta una pared, ya tenemos un primer indicio de que partículas no son correctas, y estas son las que estan mas alejadas de la distancia a la pared, asi que asignamos diferentes pesos a cada partícula en función de la posibilidad de que esa partícula sea la correcta. Ahora que tenemos diferentes pesos, borramos todas las partículas creadas anteriormente y volvemos a generarlas basandonos en los pesos obtenidos, esto hará que las partículas se concentren en las zonas clave. Así, tras varias informaciones recibidas, sabremos con bastante exactitud por que zona se encuentra el robot.
Trás este muermo de explicación teórica nos pusimos con los ejercicios.
Antes de ponernos a realizar los ejercicios, decidimos hacer un calculo del error al avanzar de Roxxxy. Al haber cambiado el diseño, los datos obtenidos podían ser distintos asi que ejecutamos un programa en el que Roxxxy solo tenia que caminar 20 cm y medimos la medida real.Repetimos el proceso 10 veces hasta tener un numero de muestras aceptables y realizamos los calculos para calcular la desviacion tipica. Trás realizar los cálculos el error de Roxxxy es de mas menos 0.25 cm cuando camina y 2 grados al girar.
Ahora ya con todo listo, nos pusimos con el primer ejercicio: En él, Roxxxy debia describir un cuadrado e ir actualizando las particulas en funcion de su movimiento, e ir mostrandolas por pantalla. Nos costo un poco de tiempo encontrar las funciones adecuadas y entendernos con los filtros de particulas, pero consultando la API y probando, sobre todo probando conseguimos realizarla.
Aqui dejamos un video de como dibuja el cuadrado por pantalla.
El segundo ejercicio, consistía en crear un menu para que el usuario pudiera introducir unas coordenadas en Roxxxy, una X, una Y, y un angulo de giro, y una vez introducidas Roxxxy debía ir a esas coordenadas en linea recta, y posteriormente orientarse con el angulo indicado.
Aquí os dejamos la muestra de como lo realiza.
Esta práctica nos explicaba como funcionaba la Auto-localización mediante filtros de partículas. La teoría es bastante sencilla: Tenemos un espacio donde el robot puede encontrarse pero no sabemos exactamente su localización. Lo primero que hacemos es situar un número elevado de partículas aleatoriamete en ese espacio, cada una de ellas con una posición x,una y, un peso igual a todas y una dirección a la que apunta. Cada vez que el robot se mueve actualizamos cada particula con ese movimiento, ya sea giro o translación, añadiendo a cada una un error aleatorio calculado teoricamente. Una vez que el robot detecta una pared, ya tenemos un primer indicio de que partículas no son correctas, y estas son las que estan mas alejadas de la distancia a la pared, asi que asignamos diferentes pesos a cada partícula en función de la posibilidad de que esa partícula sea la correcta. Ahora que tenemos diferentes pesos, borramos todas las partículas creadas anteriormente y volvemos a generarlas basandonos en los pesos obtenidos, esto hará que las partículas se concentren en las zonas clave. Así, tras varias informaciones recibidas, sabremos con bastante exactitud por que zona se encuentra el robot.
Trás este muermo de explicación teórica nos pusimos con los ejercicios.
Antes de ponernos a realizar los ejercicios, decidimos hacer un calculo del error al avanzar de Roxxxy. Al haber cambiado el diseño, los datos obtenidos podían ser distintos asi que ejecutamos un programa en el que Roxxxy solo tenia que caminar 20 cm y medimos la medida real.Repetimos el proceso 10 veces hasta tener un numero de muestras aceptables y realizamos los calculos para calcular la desviacion tipica. Trás realizar los cálculos el error de Roxxxy es de mas menos 0.25 cm cuando camina y 2 grados al girar.
Ahora ya con todo listo, nos pusimos con el primer ejercicio: En él, Roxxxy debia describir un cuadrado e ir actualizando las particulas en funcion de su movimiento, e ir mostrandolas por pantalla. Nos costo un poco de tiempo encontrar las funciones adecuadas y entendernos con los filtros de particulas, pero consultando la API y probando, sobre todo probando conseguimos realizarla.
Aqui dejamos un video de como dibuja el cuadrado por pantalla.
El segundo ejercicio, consistía en crear un menu para que el usuario pudiera introducir unas coordenadas en Roxxxy, una X, una Y, y un angulo de giro, y una vez introducidas Roxxxy debía ir a esas coordenadas en linea recta, y posteriormente orientarse con el angulo indicado.
Aquí os dejamos la muestra de como lo realiza.
miércoles, 10 de marzo de 2010
Practica 3 Falling to Hell
Bienvenidos a la practica 3. Esta práctica nos ha traido por el camino de la amargura y hemos acabao totalmente desquiciados. Parte de ello se ha debido a la nueva reestructuracion de Roxxxy, ella no queria ser como el resto de los robots, tenia que ser especial y nos pusimos manos a la obra a complacerla. Tras miles de intentos, piezas por alli, motores por alla y cables por todos lados conseguimos un diseño con el que quedamos medianamente complacidos. Señoras y señores les presentamos a la nueva Roxxxy.
.jpg)
Esta práctica era mas corta que las demás en cuanto a ejercicios y además disponiamos de mas tiempo para hacerla, pero la inclusion de vectores de fuerzas nos ha dado muchos quebraderos de cabeza. A parte de los ya mencionados vectores, se nos pedia programar el codigo como comportamientos frente a diferentes estimulos. Si me choco-esquivo objeto, si no estoy orientado- me oriento, si todo es favorable-avanzo etc.
El primero ejercicio era sencillo. Roxxxy caminaba hacia delante hasta chocar contra un objeto, una vez colisionado lo esquivaba a capon. Esto era sencillo, vas para atrás, giras para alante etc.
Aqui os dejamos una muestra de como lo realiza.
En el ejercicio dos el comportamiento a efectuar por Roxxxy era el mismo, pero la diferencia de este era que a la hora de esquivar el objeto Roxxxy debia hacerlo basandose en suma de vectores de repulsion y atraccion. La trigonometria no es algo que nos fascine, y a esto habia que añadirle que cuanto mas lejos esta el objeto menos tiene que afectarte su vector de repulsion y vicebersa. Tras miles de intentos en el que Roxxxy se atuoahoracaba con el cable, bailaba la conga y giraba incomprensiblemente el cuello mas veces de las que ponía el código conseguimos que esquivara el objeto.
Aqui os dejamos el resultado de tan ardua tarea.
El tercer ejercicio era una ampliacion del segundo ya que ahora Roxxxy en vez de dirigirse siempre hacia alante, tenia que orientarse hacia la luz e ir directamente hacia ella. Si por el camino encontraba un obstaculo debía esquivarlo convenientemente y orientarse de nuevo. El problema de este ejercicio fue conectar los dos sensores a nuestro diseño personal ya que no parecía haber manera eficiente de hacerlo. Una vez conseguido, el codigo para orientarlo hacia la luz fue sencillo. Aqui os dejamos una muestra del resultado final.
.jpg)
Esta práctica era mas corta que las demás en cuanto a ejercicios y además disponiamos de mas tiempo para hacerla, pero la inclusion de vectores de fuerzas nos ha dado muchos quebraderos de cabeza. A parte de los ya mencionados vectores, se nos pedia programar el codigo como comportamientos frente a diferentes estimulos. Si me choco-esquivo objeto, si no estoy orientado- me oriento, si todo es favorable-avanzo etc.
El primero ejercicio era sencillo. Roxxxy caminaba hacia delante hasta chocar contra un objeto, una vez colisionado lo esquivaba a capon. Esto era sencillo, vas para atrás, giras para alante etc.
Aqui os dejamos una muestra de como lo realiza.
En el ejercicio dos el comportamiento a efectuar por Roxxxy era el mismo, pero la diferencia de este era que a la hora de esquivar el objeto Roxxxy debia hacerlo basandose en suma de vectores de repulsion y atraccion. La trigonometria no es algo que nos fascine, y a esto habia que añadirle que cuanto mas lejos esta el objeto menos tiene que afectarte su vector de repulsion y vicebersa. Tras miles de intentos en el que Roxxxy se atuoahoracaba con el cable, bailaba la conga y giraba incomprensiblemente el cuello mas veces de las que ponía el código conseguimos que esquivara el objeto.
Aqui os dejamos el resultado de tan ardua tarea.
El tercer ejercicio era una ampliacion del segundo ya que ahora Roxxxy en vez de dirigirse siempre hacia alante, tenia que orientarse hacia la luz e ir directamente hacia ella. Si por el camino encontraba un obstaculo debía esquivarlo convenientemente y orientarse de nuevo. El problema de este ejercicio fue conectar los dos sensores a nuestro diseño personal ya que no parecía haber manera eficiente de hacerlo. Una vez conseguido, el codigo para orientarlo hacia la luz fue sencillo. Aqui os dejamos una muestra del resultado final.
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.
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
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.
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.
jueves, 28 de enero de 2010
Creacion del Blog!
Creamos el blog a dia de hoy como se nos ha pedido. Iremos actualizandolo con los avances que hagamos con el robot y subiremos videos o fotos.
Suscribirse a:
Entradas (Atom)
