jueves, 22 de abril de 2010
Reto de la autolocalizacion
jueves, 15 de abril de 2010
Reconocimiento de la posicion
Localizarnos:
En este apartado lo que realizamos es la toma de histogramas de cada punto, después tomamos otro histograma para comprobar en que punto nos encontramos, y realizamos el algoritmo.
El algoritmo consta de restar el histograma que tenemos actual con todos los que teníamos almacenados, una vez comparados, nos quedamos con el que nos haya dado el menor resultado y esa sera la posición en la que nos encontramos.
Posición estimada:
Para calcular la posición estimada, necesitamos primero realizar un escaneo de todos los puntos con el radar del primer apartado.
Una vez tenemos tomados todos los puntos con ese radar, realizamos un escaneo de la posición en la que estamos, utilizando el mismo radar.
Con el nuevo histograma tomado, y con el que teníamos almacenado con la posición conocida, empezamos a realizar comprobaciones y a rotar el nuevo histograma, de esta forma tras realizar todas las rotaciones y comparaciones, buscamos el valor de la resta menor, que sera los grados a los que esta de nuestro punto de origen
Diseño del Radar
public Radar (int vel, int resol, int amp, UltrasonicSensor sonar, Motor motor)
vel: Velocidad del escaneo.
resol:Resolución del escaneo.
amp:Amplitud del escaneo, es decir grados en los que realiza el escaneo.
Sonar: El sonar con el que realizamos el escaneo
Motor: Motor que mueve el sonar.
Luego hemos realizado, un método que realiza un escaneo y devuelve un RangeReadings con las medidas.
Visualizacion del Mapa y las Particulas
Aquí mostramos una foto de la resolución del ejercicio:
jueves, 25 de marzo de 2010
Calculo de la Trayectoria 3º
Parte 3º
En este apartado nos pedían que como conseguir mediante dos arcos que el robot llegara a su destino con la orientación final.
Para este ejercicio lo que hemos pensado que seria mejor, es realizar un punto intermedio del destino a donde quieres llegar, y dirigirse primero hacia ese destino.
Una vez en el primer destino, tendríamos que realizar otro arco en la dirección opuesta para poder quedarnos en la posición indicada.
Es importante indicar que la orientación en la que tendría que empezar el robot depende de la orientación destino que nos indique, ya que tendríamos que orientarnos de forma similar a la orientación destino para finalmente, cuando realicemos el segundo arco terminar en una posición similar.
También es de interés la amplitud del primer arco, ya que si la orientacion tiene unos valores altos, el primer arco tendría que alejarse bastante del punto para poder realizar en el segundo arco un giro de mayor amplitud.
Aquí indicamos con pseudocódigo como quedaría:
Tomamos los valores de la X,Y,Ang
Calculamos la distancia hacia el punto
Dividimos la distancia en dos puntos dependiendo del ángulo de destino.
Calculamos el primer arco, con un radio determinado y un ángulo de giro dependiendo del ángulo final
Realizamos el segundo arco.
Calculo de la Trayectoria 2º
Parte 2º
En la segunda parte de este ejercicio, es realizar lo mismo que el anterior, pero consiguiendo que el robot realice una curva hacia el destino.
Esta petición nueva complica notablemente la realización de los cálculos ya que ahora no tienes que calcular una recta sino una curva, con el radio y el ángulo que vas a realizar.
Los pasos son los siguientes:
1- Creación de un menú donde introducimos las coordenados X e Y y el ángulo de destino
2- Calculo del radio y el ángulo que tenemos que tomar para llegar al destino
3- Desplazamiento hacia el destino.
Seguidamente mostramos un vídeo ilustrativo de la realización de la practica:
Calculo de la Trayectoria
Parte 1º
En este ejercicio, lo que se nos pedía es que mediante la introducción de unas coordenadas al robot y un ángulo de orientación final, el robot pudiera
dirigirse a ese punto satisfactoriamente.
Los pasos que hemos seguido han sido los siguiente.
1- Creación de un menú donde introducimos las coordenadas X e Y y el ángulo de destino
2- Orientación del robot hacia ese destino
3- Movimiento del robot hacia las coordenadas indicadas
4- Orientación final del robot, al ángulo previamente introducido.
Con estos pasos hemos conseguido que el robot llegue al punto deseado quedándose en el estado indicado.
Con este vídeo ilustrativo podemos observar el resultado de lo dicho:
Practica 4->Modelo de movimiento probabilistico mediante filtro de particulas
Para la realización de la misma, nos hemos tenido que crear un mapa de 100 partículas que se colocan aleatoriamente, después hemos tenido que inicializar esas partículas en el punto de partida de nuestro robot, y seguidamente actualizar las partículas con el movimiento del mismo, consiguiendo de esta forma una estela de partículas que nos va informando del movimiento del robot. Para la actualización de las partículas hemos tenido que introducir un error probabilístico, en el cual nos hemos dado cuenta, que cuanto mas erro metíamos mas se dispersan las partículas.
Para poder mostrar el mapa, hemos tenido que crear un mapa de antemano donde se puedan colocar las partículas.
La creación de este mapa se ha hecho mediante un conjunto de lineas dentro de un rectángulo.
Aquí mostramos un vídeo de la finalización del primer apartado de la practica:
Como podemos observar, vemos como las partículas se mueven por el monitor del robot, dejando la estela antes mencionada
jueves, 11 de marzo de 2010
Practica 3
En este caso hemos realizado la implementacion de los programas de forma distinta a las anteriores practicas.
En esta hemos realizado las acciones del robot mediante comportamientos, estos comportamientos tienen 3 métodos que son obligatorios de implementar ya que extienden de una interfaz llamada Behavior, en esta interfaz tenemos 3 métodos.
TakeControl: Este método se ejecuta constantemente y busca que se cumpla una determinada condición , tras la cual ser cierta, entramos en el método Action.
Action: Este ejecuta el comportamiento del robot cuando se cumple la condición del takeControl
Supress: Este método se ejecuta cuando se cambia de comportamiento.
Esta practica ha sido una de las mas dificil por ahora, sobre todo el ejercicio de VFF, en el cual hemos intentado conseguir llegar al os requisitos sin mucho éxito y con mucho esfuerzo.
Aqui os dejamos unos cuantos videos sobre los puntos que hemos alcanzado
Choque-sigue luz
Luz
miércoles, 10 de marzo de 2010
miércoles, 24 de febrero de 2010
Matriz de covarianza
Todas las matrices son cuando el elemento aparece a 10 cm en el eje y
40cm:
x=1,5 xy=11,25
xy=11,25 y=7,5
50cm
x=1,5 xy=6,75
xy=6,75 y=4,5
60cm
x=1,5 xy=8,25
xy=8,25 y=5,5
70cm
x=1,55 xy=10,075
xy=10,075 y=6,5
Para los demas valores el sensor no nos detectaba el objeto nada mas que cuando estaba enfrente
Ejercicio 4.4
4.4
4.1:
40cm-> 41,5/41,5/41,5/41,5/41,5/41,5/41,5/41,5/41,5/41,5/
media para 40cm->(1,5*10)/10=1.5
50cm->51,5/51,5/51,5/51,5/51,5/51,5/51,5/51,5/51,5/51,5/
media para 50cm->(1,5*10)/10=1.5.
60cm->61,5/61,5/61,5/61,5/61,5/61,5/61,5/61,5/61,5/61,5/
media para 60cm->(1,5*10)/10=1.5.
70cm->71,5/71,5/71,5/71,5/71,5/72,5/72,5/72,5/71,5/71,5/
media para 70cm->15,5/10=1,55.
80cm->82,5/82,5/82,5/82,5/82,5/82,5/81,5/81,5/81,5/81,5/
media para 80cm->21/10=2,1
90cm->93,5/92,5/93,5/92,5/92,5/93,5/92,5/93,5/93,5/93,5/
media para 90cm->31/10=3,1.
Para los demás valores ya no nos detectaba la pared, así que todos los demás son 255
Podemos observar que el fallo incrementa con la distancia, cosa normal ya que tiene que
medir cuanto tarda la honda en llegarle, dándose el caso que cuanto mas lejano este mas se
puede distorsionar la honda o perderse.
4.2
Distancia real-->Distancia robot
40x->10y--->47,5
50x->10y--->54,5
60x->10y--->65,5
70x->10y--->76,5
Para las demas tomas el robot no detecta nada, excepto si se lo ponemos enfrente.
80x->0y---->82,5
90x->0y---->93,5
Si depende de la distancia al robot, debido a que cuanto mas lejos estamos del objeto mas le cuesta comenzar a verlo, viéndolo casi siempre cuando lo tiene justo enfrente
Ejercicio 4.3
Medidas reales->Medidas Robot->error
20cm->24'5cm ->4'5cm
30cm->31'5cm->1'5cm
40cm->41'5cm ->1'5cm
50cm->51'5cm ->1'5cm
60cm->61'5cm ->1'5cm
70cm->71'5cm->1'5cm
80cm->81'5cm->1'5cm
90cm->93'5cm->3'5cm
100cm->255cm
Con estos datos tenemos que nuestro robot tiene una media de fallo de 17/8=2,125.
Si tenemos que nuestra media de error es distinta de 0 y que cuanto mas nos alejemos mas error nos da, excepto cuando estamos cerca que también tiene un error alto.
Ejercicio 4.2
4.2:Para este apartado como dice en el enunciado hemos colocado al robot a 40cm de la pared, desde esa posición hemos ido colocando el robot de 10 en 10 grados desde nuestro eje, dándonos cuenta que el robot como máximo tiene un rango en que ve la pared de (-50,50) grados
Tabla con los valores:
90º->41,5
80º->42,5
70º->43,5
60º->45,5
50º->50,2
-80º->42,5
-70º->43,7
-60º->44,5 -50º 90º 50º
-50º->47,5.
Ejercicio 4.1
4.1
Distancia real mínima: Nosotros colocamos el robot a 7 cm y nos dice que esta a 10cm de la pared, con lo cual la distancia mínima que detecta pero con fallos es 7cm.
Distancia real máxima:Lo colocamos a 90cm y nos dice que estamos a 93cm, a partir de esta distancia el robot no nos detecta nada.
Sigue-Pared
Nuestra experiencia ha sido bastante dura, debido a que en un principio utilizamos la clase motor y la clase tachopilot para mover al robot, esta combinación nos dio dolores de cabeza ya que el robot se volvía loco y cuando le apetecía empezaba a andar marcha atrás(sin decírselo en el código).
También hemos tenido problemas con el sensor de ultrasonidos porque no capta bien las distancias. Pero finalmente con la clase TachoPilot y el steer el robot anda mejor que sus creadores(literalmente) :P!.
ClapControl
Hemos utilizado un sleep debido a que sino el programa se ejecutaba tan rápido que la segunda palmada no la detectaba.
SimpleAvoidObstacle
Lo hemos conseguido sacando la distancia a la que el robot detecta los objetos y cuando ve que esta muy cerca(20cm) da marcha atrás y gira un numero aleatorio de grados, para evitar chocar contra el objeto.
BumpAndGo
jueves, 18 de febrero de 2010
miércoles, 17 de febrero de 2010
Video 2
Visualizacion de la Odometria del Motor
Seguida mente lo hemos realizado pero en el sentido contrario.
Consiguiendo con esto que en la pantalla del robot, nos valla saliendo la información de los grados en los que se encuentra el motor desde el comienzo
Matriz de Covarianza
En este ejercicio, hemos utilizado un folio con los ejes de coordenadas pintado e indicando de donde partia el robot y donde terminaba, tomando las cordenadas respecto del punto de partida al punto de finalizacion.
Hemos realizado la prueba para un numero de 10 iteraciones quedando los siguientes puntos:
1->(1.3,0)
2->(0,1.5)
3->(1.2,-1.5)
4->(3,0)
5->(1.2,-2)
6->(0,-1.5)
7->(0.5,1)
8->(0,0.9)
9->(-1.3,0)
10->(-0.7,-1)
Una vez cogidas todas las tomas, aplicando la formula nos queda la siguiente matriz de covarianza:
1,4236 0
0 1,288
Siendo la media de X=0.42 y la media de Y=-0.26
Practica1
Los primeros apartados han sido sencillos de realizar, incluso el de que haga un cuadrado como trayectoria, la única anéctdota de esto es que el bucle que hace que se ejecute hay que ponerlo hasta 39.5 -39.9 porque sino con la función traveldistancia habría que meterle un valor mayor que 40, ya que el getTravelDistance comete pequeños errores que hacen que falle.
Respecto a dibujar el cuadrado y mostrar la trayectoria del robot en cada momento, el principal problema que hemos tenido ha sido calcular la distancia recorrida ya que al principio utilizábamos la x para ese propósito pero luego cuando el robot pintaba uno de los lados de la x, lo hacia al revés, lo solucionamos añadiendo un par de variables auxiliares;hemos tenido también que truncar los grados ya que nunca giraba 90 grados exactos unas veces salia algo menos que 90,lo hemos truncado para conseguir el cuadrado perfecto.
Por ultimo aunque parezca sencillo el hecho de que pinte el cuadrado en un folio, a nosotros nos sale bien pero el poner el rotulador pegado con celo e intentar que este no modifique la trayectoria del robot nos ha costado mas de la cuenta.
A destacar también que nuestro robot, creemos que debido al uso en años anteriores hace los giros mejor hacia la izquierda que hacia la derecha asique en el ejercicio de mostrar a la derecha giramos a la derecha y en el de pintar el cuadrado hemos hecho que gire a la izquierda para que quede mejor.
Como anotación a la ultima pregunta los errores son mas o menos sistematicos ya que queda un poco por detrás del punto inicial.
Aquí colgamos unas fotos y vídeos de la realización de la practica y la matriz:
jueves, 4 de febrero de 2010
Primer dia
Hoy hemos empezado tenido la primera toma de contacto con el ladrillo, hemos cargado algunos programas de demo para probar el buen funcionamiento e ir trasteando un poco con el sistema operativo cargando cosas , lo malo es que hemos tenido la mala suerte que nos ha tocado un ladrillo al cual no se le podía cambiar el nombre por lo tanto nuestro robot se sigue llamando cacharro.
Mas adelante iremos colgando vídeos de nuestros avances con el robot, un saludo hasta la semana que viene.



