lunes, 19 de abril de 2010

PRACTICA 5

Visualización del mapa y las partículas

Este apartado no ha sido uy complicado ya que simplemente hemos tenido que cargar el map con el código que nos daban en la practica y expandir las partículas de forma aleatorio por todo el mapa.
Para mostrar el mapa le hemos aplicado una escala ya que no cabía sino en la pantalla y simplemente hemos ido pintando pixeles.
Para pintar las partículas exactamente lo mismo que con el mapa. El resultado queda de la siguiente forma:




Diseño del radar

Este apartado tambien ha sido simple. Lo unico que hemos hecho ha sido crear un constructor, el cual se encarga de crear un objeto de tipo radar y una función en la que según el objeto formado sea capaz de hacer un escaneo. En el siguiente video mostramos como realiza el escaneo el robot:

Reconocimiento de posición y orientación

En este apartado hemos realizado 5 escaneos para aprender 5 puntos diferentes. Para el aprendizaje de estos puntos, CAJA11 parte de una orientacion de 90º.
El objetivo en este apartado de CAJA11 es saber en que punto de esos 5 se encuentra y en que orientación se encuentra. Para saber en que punto hemos utilizado el histograma de frecuencias de distancias y comparar las medidas tomadas con cada una de las medidas aprendidas.
Para saber la orientacion, una vez sabido el punto en el que se encuentra CAJA11, lo que hemos hecho ha sido desplazar el histograma de medidas hasta que este sea practicamente igual al histograma que hemos aprendido partiendo de 90º. Ese desplazamiento será en la orientación en la que se encuentra CAJA11.
Mostramos el resultado en el siguiente video, lo mostrado por CAJA11 no se aprecia muy bien, pero muestra el punto en el que se encuentra y la orientacion:



jueves, 25 de marzo de 2010

PRACTICA 4

Modelo de movimiento mediante la clase MCLParticleSet

Este apartado ha sido el mas complicado de la práctica. Nos ha costado encontrar como inicializar las partículas en el punto indicado pero al final lo conseguimos!!!!Para ello hemos creado un objeto de tipo particulas y hemos aplicado el siguiente comando:
Comando para modificar la posición de la partícula:
particulas.getParticle(i).getPose().setLocation(new Point(30,30));
Comando para modificar la orientacióno de la partícula:
particulas.getParticle(i).getPose().setHeading(0));

Una vez inicializado todas las partículas las hemos ido actualizando poco a poco mediante el comando applymove.
Luego simplemente hemos mostrado cada partícula con un punto negro en la pantalla. Para obtener la posicion de cada partícula hemos usado el siguiente comando:
Pose p= new Pose();
p= particulas.getParticle(i).getPose();
posx=p.getX();
posy=p.getY();
LCD.setPixel(1,posx,posy);

El resultado lo mostramos en el siguiente video. Las partículas mostraran la posicion del robot al hacer un cuadrado:



Cálculo de trayectorias

Este apartado nos ha parecido más facil que el anterior. Lo más dificil ha sido calcular el ángulo para orientarse hacia el punto que queremos que fuese.
En el primer basta con calcular la hipotenusa que producen los dos puntos y recorrer esa distancia. Tras llegar al punto se orienta.
En el segundo apartado realizamos una media circunferencia. Para ello calculamos el radio que es la hipotenusa/2. El recorrido que tendrá que hacer será Pi*R.

MEDIDAS QUE HEMOS PROBADO PARA LOS VIDEOS

1º Cuadrante 30,30,180
2º Cuadrante -30,30 -90
3º Cuadrante -30,-20,0
4º Cuadrante 30,-20,90


pathfollow1



pathfollow2


jueves, 11 de marzo de 2010

PRACTICA3

Para esta practica hemos tenido que cambiar el look de CAJA11 para que pueda realizar las tareas. Le hemos colocado el sensor de contacto adelante, le hemos incorporado unos sensores de luz y el vector de ultrasonido lo hemos puesto mas abajo.





Comportamiento de evitación de obstáculos usando sensores de contacto

Para este apartado hemos aplicado el método rotate y el método travel para esquivar el obstáculo. Este apartado no ha sido muy complicado. El resultado lo mostramos en el siguiente vídeo:




Comportamiento de evitación de obstáculos usando el sensor de ultrasonidos

Este apartado sin duda es el más difícil que hemos realizado hasta ahora, de hecho CAJA11 no se comporta de forma adecuada para esquivar el obstáculo. El comportamiento de CAJA11 "perdido" se muestra en el siguiente vídeo:



Comportamiento ir hacia la luz

En este apartado tiene que ir hacia la luz, para ello usamos dos sensores de luz para que CAJA11 sepa donde se encuentra la luz. Con este comportamiento podemos hacer que CAJA11 nos siga. El resultado lo mostramos en el vídeo:




Comportamiento ir hacia la luz evitando obstáculos

Este es una mezcla de dos comportamientos, el de esquivar obstáculos y el de seguir la luz. En este ejercicio CAJA11 se encargará de seguir a la luz y no chocarse con obstáculos(latas). El resultado se muestra en el siguiente vídeo:


jueves, 25 de febrero de 2010

PRACTICA2

1-Obteniendo información

En este ejercicio CAJA11 nos tiene que dar la información de los distintos sensores asi como de la batería y de la memoria. Simplemente hemos utilizado las funciones que nos devuelven los valores y realizar los LCD. EL resultado es el que muestra la siguiente imagen:





2-Control del robot por sonido

En este apartado tenemos que controlar a CAJA11 mediante el sonido. Para ello hemos empleado la función readvalue(), que nos da el sonido que ha recogido el sensor. AL escuchar el primero sonido andará y al siguiente sonido parara. El resultado se muestra en el siguiente vídeo:





3-Bump & Go! usando sensores de contacto

En este apartado teníamos que determinar cuando encontraba una pared el robot y girar a CAJA11 un ángulo aleatorio. Para ello usamos la función isPressed(), que nos dice si el sensor se encuentra activo o no. Cuando esta activo mandamos al robot que gire y siga su camino. El resultado se muestra en el siguiente vídeo:





4-Bump & Go! usando sensores de ultrasonido

Este apartado es básicamente lo mismo solamente que con el sensor ultrasonido. Usamos la función getdistance() que nos dice a que distancia se encuentra CAJA11 de la pared. Cuando la distancia es menor de 20cm gira un número de grados aleatorio y sigue su camino. EL resultado se muestra en el siguiente vídeo:




5-Comportamiento sigue-pared para salir de un laberinto

En este ejercicio lo que tiene que hacer CAJA11 es seguir la pared a una cierta distancia. Cuando la distancia sea menor que 20 se alejará de la pared y cuando la distancia sea mayor de 25 se acercará a la pared. El resultado se muestra en el siguiente vídeo:




6-Calibración del sensor de ultrasonidos

Este apartado se encarga de realizar cálculos con el robot. Para ello se ha realizado un programa que nos tome las medidas y las muestre por pantalla.

En el primero apartado nos piden la distancia que puede medir el robot. Tras tomar las medidas nos sale que el rango del robot es de 6cm a 240 cm.

En el segundo apartado nos pedía el ángulo. Para ello hemos realizado un programa que vaya girando en ángulo de 7º. Al final el intervalo nos sale [-42º.42º].

En el tercero nos pedía calcular el error sistemático del robot. Para ello tomamos medidas a diferentes distancias.

REAL

SENSOR

DIFERENCIA

100

99.5

0.5

90

89

1

80

77

3

70

68

2

60

58

2

50

48

2

40

39

1

30

29

1

20

20

0


Luego el error sistemático sería: 12.5/9= 1.38 cm.

El cuarto apartado nos pedía calcular las incertidumbres de los ejes:

EJE X:

DISTANCIA

SENSOR

120

120

100

99.95

90

90

80

79.85

70

69.95

60

59.25

50

49.25

40

38.2


EJE Y:

DISTANCIA

SENSOR

120

10

100

10

90

10

80

15

70

20

60

15

50

15

40

10


Con estos datos calculamos la matriz de covarianza, dándonos el siguiente resultado:

0.49325 4.3925
4.3925 147.5