Visitas totales

jueves, 7 de abril de 2011

Última práctica

Hola!!

Ya sin Manolito nos despedimos en esta útlima entrada de práctica, con el mal sabor de boca de no haber podido acabar la última práctica de simulación en Gazebo, debido a los problemas surgidos con el entorno y el poco tiempo una vez arreglado.
La semana pasada nos quedamos en un punto de la practica parados y es que, la práctica consistía en recorrer toda la imagen con un for desde 1 hasta 320 y desde 1 hasta 240 como si se tratase de un array bidemensional, donde cada posicion tenia 3 subposiciones relacionadas con los 3 colores de la gama RGB y se sacaba los valores de cada uno de los pixeles. En cuestion, cada pixel que fuese distinto de rojo sería un 0 y los que fuesen de color rojo deberian dar unos valores distintos de 0.

Con los valores sacados nada mas que habria que fijarnos en 2 lineas de la imagen: una casi a la mitad de la pantalla y otra la de debajo.
Con la linea de debajo cogeriamos una media de la linea y un valor min y un valor max.
El robot  cuando vea en la zona de arriba la linea roja y debajo también, irá todo recto a toda pastilla.
Si el robot arriba no viese linea roja tiene que reducir la velocidad y mirar en la linea de debajo 2 casos:
  - Cuando la linea roja se vaya a la izquierda de la media, que el robot tendra que girar a la izquierda y el grado de giro dependerá de a cuanto esta la linea media.
  - Cuando la linea roja se vaya a la derecha estamos en el mismo caso pero al contrario

jueves, 31 de marzo de 2011

5º Montaje(desmontaje)

Una imagen vale mas que mil palabras...

Desmontamos a Emanuel para realizar simulaciones con Gazebo...
Ya os iremos contando.

Gracias por todo...

miércoles, 23 de marzo de 2011

PRACTICA 4 - Segway

Saludos!!

La practica de esta semana consistia en que Emanuel se mantuviese en equilibrio sobre 2 ruedas como lo hace un segway. La verdad que ha sido un poco desesperante para conseguir que Emanuel mantuviera el equilibrio, hemos hecho muchas pruebas y hemos tenido muchas caidas, cuando parecia que lo teníamos y nos disponiamos a grabar, nuestro robot se ponía nervioso ante las cámaras y decidia tirarse al suelo.....

En un principio solo utilizamos la parte proporcional al error (Kp), pero oscilaba demasiado en sus movimientos y se caia rapidamente y para evitar esas oscilaciones debiamos de utilizar tambien la parte derivativa e integral.

Por lo que utilizamos un controlador PID (proporcional, integral y derivativo) para conseguir dicho equilibrio, calculando cada parte por separado y ajustando cada una de sus constantes para obtener una resultante, que es la suma de ellas:

Para ajustar el valor de las constantes Kp,Ki y Kd utilizamos el método ensayo y error, es decir, modificar los valores hasta dar con los exactos para mantener el equilibrio. Esta fue la parte desesperante hasta dar con las contantes. Por lo que Emanuel sufrio alguna que otra caida:


Una vez dado con las constantes y la velocidad de reajuste de equilibrio de las ruedas correctas, el resultado ha sido bastante satisfactorio como podemos ver en los videos siguientes, donde en el primero aguanta 4 minutos en el laboratorio y aun asi sigue sin caerse y en el siguiente llega a casa y hay que cortar el video ya después de 8 minutos porque sigue y sigue y sigue...




Nos vemos en la ultima practica!!

domingo, 20 de marzo de 2011

4º Nuevo montaje

Saludos!


Una semana mas(y ya nos quedan pocas) os avanzamos lo mas novedoso y puntero de mi nuevo desarrollo. Esta vez he tenido que mutar mi cuerpo nuevamente para transformarme en equilibrista.
Sisi...sobre dos ruedas.
Y no lo hago mal, aunque a veces me gusta fastidiar y me tiro al suelo...por dar emoción.
Eso si, en la prueba con los profesores estaré tieso como una vela! hasta que se me acabe la batería...palabra de robot(1011101110).


Nos vemos pronto.

miércoles, 9 de marzo de 2011

PRACTICA 3

Hola!!
En esta semana hemos tenido que desarrollar la "Navegación local evitando obstáculos". Engranando varios programas con distintas acciones definiendo el comportamiento en módulos:

takeControl(). Si se cumplen unas condiciones se toma el control del robot.
action(). Este método se ejecuta cuando el comportamiento se activa.
suppress(). Este método termina el código que ejecuta el método action(). 

...que aplicados al entorno de la navegación local y con la ayuda de varios de nuestros sensores evitamos los obstaculos que se interponían en el camino.
Pasamos a describir las cuatro partes de esta practica:


1.- Comportamiento de evitacion de obstáculos. Sensor contacto.
En este programa nuestro robot camina hacia adelante y en el caso de que choquemos con algun objeto, retrocedemos y lo sortearemos rodeandolo por uno de sus lados. Detallamos su partes:

Adelante.java -> programa que avanza en linea recta. Prioridad BAJA
Hit.java -> programa que se activa al chocar el sensor con algún objeto. Prioridad ALTA.
Touch.java -> Encargado de gestionar ambos módulos y sus prioridades.
Video demostrativo:


2.- Comportamiento de evitacion de obstáculos. Sensor ultrasonido.
Evitar obstaculos usando el sensor de ultrasonidos. Similar al ejercicio anterior solo que sin llegar a impactar sobre el objeto implicado. Lo evita cuando esta a una distancia aproximada de 40cm o menor. Detallamos sus partes:

Adelante.java -> programa que avanza en linea recta siempre que puede. Prioridad BAJA
Adel_I.java -> programa que al detectar con el sensor de US un objeto cercano próximo a él, realiza los cálculos para evitar el golpe girando la cabeza 180º y viendo la distancia minima y el ángulo al que se encuentra el objeto para después hacer el cálculo de la fuerza resultante entre la atractiva y la repulsiva y sacar el giro que tiene que hacer para esquivar el objeto y la distancia que tiene que recorrer para volver a sittuarse hacia su destino. Prioridad ALTA.
USVFF.java -> Encargado de gestionar ambos módulos y sus prioridades.
Video demostrativo:


3.- Comportamiento ir hacia la luz
En este apartado hemos usado dos sensores de luz del primo de nuestro robot el RCX colocados a 45º sobre el eje central. En caso de que uno de los sensores reciba más luz que en el otro se ira hacia ese lado.

IrAdelante.java -> programa que avanza en linea recta. Prioridad BAJA
Orientar.java -> programa que gracias a la informacion recogida por los 2 sensores de luz detecta en que direccion hay mas luz y va hacia ella. Prioridad ALTA.
SigueLuz.java -> Encargado de gestionar ambos módulos y sus prioridades.
Video demostrativo:

4.- Comportamiento ir hacia la luz evitando obstaculos
En este apartado vamos evitando obstaculos y siguiendo la luz. Para ello utilizamos todos los programas detallados anteriormente.

IrAdelante.java  -> programa que avanza en linea recta. Prioridad BAJA
Adel_I.java-> Como hemos comentado antes, programa que al detectar con el sensor de US un objeto cercano próximo a él, realiza los cálculos necesarios para sortear el objeto y seguir hacia su destino. Prioridad MEDIA.
Orientar.java -> programa que detecta un en que direccion hay mas luz y va hacia ella. Prioridad ALTA.
USLuz.java -> Encargado de gestionar ambos módulos y sus prioridades.
Video demostrativo:

CALCULO DE DATOS FUERZAS REPULSIVAS:

Tanto para el apartado 2 como para el apartado 4 hemos tenido que hacer una serie de cálculos para poder sacar el vector resultante hacia donde tiene que ir el robot.
Por una parte tenemos un punto donde queremos ir (x,y) con la fuerza atractiva que nos llevara el robot hacia ese punto. Y por otra parte tenemos la fuerza repulsiva, dada cuando el robot encuentra un obstáculo cerca. El robot calculará la distancia mínima al objeto y el ángulo en el que se encuentra, para pasar estas coordenadas polares a cartesianas. Una vez tengamos estas fuerzas, las sumaremos la xatrac con la xrepuls y la yatrac con la yrepuls, para poder hayar sobre ellas la fuerza resultante en la que el robot girará con el ángulo de esa fuerza y se desplazará con su modulo, para mas tarde volver a tomar el rumbo definido.

jueves, 3 de marzo de 2011

3º Nuevo montaje

Hola!!


Esta semana he vuelto a evolucionar un poco mas, me e desprendido de algunos sensores que ya no me hacian falta y me he montado una nueva estructura para la nueva práctica que esta en marcha, asi que a ver como va la semana...
Aqui os dejo mi foto:

miércoles, 23 de febrero de 2011

PRACTICA 2

Hola!
En estas dos semanas, hemos seguido con nuestras practicas. cada dia evoluciona mas nuestro robot. En este caso era el turno de ponernos en contacto con los diferentes sensores, dichos sensores son los siguientes:
- Sensor de contacto .
- Sensor de ultrasonidos (nos proporciona la distancia que hay a los obstaculos).
- Microfono.
- Sensor de luz.
- Bateria.
La semana ha sido bastante buena entre el montaje de las piezas y posteriormente los programas donde ya vemos como
interactua con el exterior. 
Pasamos a detallar cada uno de los apartados:


1.- Obteniendo información
Información.java -> mostramos por pantalla las características de nuestro robot:
Nombre - Valores sensor ultrasonido (mm) y luz en modo pasivo - tensión batería(mV) - memoria total - memoria libre (bytes):


2.- Control del robot por sonido
ClapControl.java -> programa con el que avanzaremos en linea recta con una palmada/sonido recibido con el sensor ultrasonido.
Se toman cuatro lecturas previas cada 500 ms. La mayor medida tomada sera el mínimo que el sonido debe superar para hacer avanzar/parar la marcha del robot.
NOTA: En caso de no superar el sonido mínimo el robot lo ignora y continua lo que estuviera haciendo. 
Video demostrativo: (en el segundo 6 ignora la orden por no llegar al minimo)


3.- Bump & GO! Usando sensores de contacto
BumpAndGo.java -> programa que avanza hacia delante. Si encuentra un obstáculo choca con el. Retrocede unos centimetros. y gira aleatoriamente entre 0º - 360º para continuar su marcha.
Vídeo demostrativo:


4.- Bump & GO! Usando sensores de ultrasonido
SimpleAvoid.java -> mismo programa que el anterior usando en este caso el sensor ultrasonidos. Al estar a una distancia menor a 20 cm, retrocede y cambia de direccion.
Video demostrativo:






5.- Comportamiento sigue-pared para salir de un laberinto
SiguePared.java -> programa que sigue el contorno de una pared a una distancia de 20 cm. Si hay un obstáculo lo esquiva. Si se aleja de ella, se aproxima.
Video demostrativo:


6.- Calibración del sensor ultrasonidos
Ejercicio1 -> Aqui mostramos las distancias minimas y maximas del sensor.



 

Ejercicio2 -> Aquí tenemos las medidas tomadas a 40cm entre -90º y 90º. Como podemos observar no todos los valores alcanzan un rango de visión. Los marcados con "-" equivalen a 255, medida erronea segun el sensorLos valores validos rotan entre -50º y 50º aproximadamente, mas allá de eso con algunas dificultades.


Ejercicio3 -> Como bien podemos ver en la grafica existe un error sistemático. La diferencia entre la distancia media del robot y la distacia real esta entre 2-3 cm:



Ejercicio4 -> Ahora vamos a ver la incertidumbre del valor del sensor. Vamos a comprobar por separado la incertidumbre en el eje X (en la dirección del haz del sensor y en eje Y (perpendicular al haz).

Ejercicio4.1 ->Incertidumbre en el eje X: Para ello vamos colocando el robot cada vez a una distancia y desconectando y conectando el sensor vemos lo que marca:
 

En estas 2 gráficas vemos la diferencia entre la distancia real y la obtenida:


 

 


Ejercicio4.2 -> Incertidumbre en el eje Y: Colocamos el robot en el origen de coordenadas y por medio de una carpeta vamos viendo a que distancia, tanto por la izquierda como por la derecha, perdemos la medición (valor=255).


Ya por ultimo calculamos las matriz de covarianza resultante del error P que representa la incertidumbre del sensor: