El grupo

El grupo

jueves, 24 de marzo de 2011

Practica 4

CR7. EL ROBOT EQUILIBRISTA

Hoy comenzamos con la práctica del robot equilibrista.  Consiste en mantener erguido  a CR7 sobre dos ruedas, usando la teoría de estabilización PID dada en clase de teoría aplicada  a una situación práctica.

Un PID (Proporcional Integral Derivativo) es un mecanismo de control por realimentación que calcula la desviación o error entre un valor medido y el valor que se quiere obtener, para aplicar una acción correctora que ajuste el proceso. El algoritmo de cálculo del control PID se da en tres parámetros distintos: el proporcional, el integral, y el derivativo. El valor Proporcional determina la reacción del error actual. 

La Integral genera una corrección proporcional a la integral del error, esto nos asegura que aplicando un esfuerzo de control suficiente, el error de seguimiento se reduce a cero. El Derivativo determina la reacción del tiempo en el que el error se produce. La suma de estas tres acciones es usada para ajustar al proceso vía un elemento de control

P = Controlador Proporcional.

P_{\mathrm{sal}}=K_p\,{e(t)}


I = controlador integral

 I_{\mathrm{sal}}=K_{i}\int_{0}^{t}{e(\tau)}\,{d\tau}


D = Controlador de la derivada

D_{\mathrm{sal}}=K_d\frac{de}{dt} 


La salida de estos tres términos, el proporcional, el integral, y el derivativo son sumados para calcular la salida del controlador PID. Definiendo u (t) como la salida del controlador, la forma final del algoritmo del PID es:
\mathrm{u(t)}=\mathrm{MV(t)}=K_p{e(t)} + K_{i}\int_{0}^{t}{e(\tau)}\,{d\tau} + K_{d}\frac{de}{dt}
u(t)=(-kp*error) + ki * (integralError) + kd * (ErrorIntegral)))


Aplicando esta teoría a la practica conseguiremos que CR7 se mantenga estable unos minutos.

Comenzamos con el montaje de Cr7, ponemos el sensor de luz próximo al suelo en el centro del robot par que tome bien las medidas.

Ponemos los dos motores a ambos extremos del ladrillo del robot y le ponemos las ruedas hacia adentro del robot para que tenga mas estabilidad.

Para terminar le ponemos una hoja de papel encima del sensor para evitar que la luz del aula modifique los valores del sensor de luz lo menos posible.

Una vez terminado el montaje, nuestro robot tiene este aspecto:






Primero calibramos el sensor de  luz tomando datos de 3 posiciones antes de iniciar el controlador PID. Calibramos al caerse para hacia adelante y hacia atrás y por último calibramos en  el punto de equilibrio.

Observamos que cada vez que calibramos da un valor distinto pero que no influye en en comportamiento del robot, funcionando a veces con valores muy dispares y cayéndose con valores iguales.

Después de programar el código y corregir bastantes errores, y de probar muchas muchas veces conseguimos dar un valor bastante aproximado al ideal de las constantes kp, kd,ki que quedaron con los valores: kp=15, kd=30, ki=1,1.

Con estos valores y una vez cogido el "truco" a las posiciones de calibración, conseguimos que el 60% de las veces funcione con unos resultados mas que aceptables.

Aquí vemos a CR7 en plana acción.





Después de mucho tiempo tenemos terminada la práctica. Nos ha costado lo suyo encontrar el valor de las variables así como los ángulos de calibración pero ya tenemos a CR7 listo para saltar a los terrenos de juego.




miércoles, 9 de marzo de 2011

Dia 9

Dia 9

    Tras la explicacion de la practica, nos ponemos mano a la obra y
    vemos que el primer apartado que tenemos que realizar es conseguir
    que el robot choque con un obstaculo.
    El comportamiento en principio es sencillo,el robot tiene que avanzar
    y cuando choque contra algún objeto,retroceda,gire hacia el lado que
    menos distancia tenga que recorrer y avance por ese lado hasta que
    haya rebasado totalmente el objeto y siga su camino.

 

    Este apartado es aparentemente sencillo,simplemente hemos necesitado el
    sensor de contacto y un obstaculo con un poco de peso,como puede ser una lata
    como aparece en la foto de arriba

    Por ultimo,empezamos a realizar el siguiente apartado.
    Este es muy parecido al anterior solo que esta vez el robot se guía por su
    sensor de ultrasonidos para esquivar el obstaculo.



    Y ya podemos irnos tranquilos que ya hemos entregado la practica 2 y avanzado    bastante en la siguiente




Dia 10

    Hoy,como CR7 se lesionó recientemente contra el Malaga,hemos decidido
    no forzarle mucho.

   



    Como terminamos antes de lo previsto,hemos decidido continuar en la practica
    Ahora nos toca realizar el comportamiento de seguir la luz,para ello
    hemos hecho uso de los sensores que nos dieron los profesores en la clase anterior






    El codigo parece sencillo, hay que calibrar la luz ambiente antes de empezar
    a ejecutar el codigo.
    Una vez el robot tenga la luz ambiente podrá empezar a moverse.La cuestión a realizar es
    que el robot recibe luz por ambos sensores, si la luz que recibe es igual
    en ambos sensores el robot avanza,si es mayor en el sensor derecho el robot avanza girando
    hacia la derecha y si es mayor la recibida por la izquierda hará lo mismo pero hacia la
    izquierda.
    Para su correcta realizacion necesitamos de una linterna que actua de foco a seguir.

   





 

jueves, 24 de febrero de 2011

DIa 8 (Practica 2)

Hoy toca tarde de medidas.

Tenemos que comprobar la eficiencia de nuestro sensor de ultrasonidos, ya que las mediciones que hace se  asimilan a las de la realidad pero no llegan a ser exactas, y eso es lo que vamos a comprobar, cual es el   error de nuestro sensor.

Lo primero que comprobamos es el rango de distancias que nuestro robot es capaz de medir. Para ello alejamos  y acercamos el robot a una pared con el sensor activado. El rango de DISTANCIA medido es [5cm, 240cm].
*
Ahora comprobamos el rango de ángulos, esto se hace girando el robot respecto de la pared y viendo cuanto  es capaz de medir, el rango de ÁNGULO medido es
[45º, -45º ].

El siguiente paso es comprobar si el sensor tiene un error sintomático, es decir, que tomando varias medidas  y haciendo la media, ver si esta es distinta de 0. Esta es la tabla de las distintas medidas:


Distancia X 20 30 40 50 60 70 80 90 100
Distancia medida 23 32 42 52 62 72 81 92 101


La media del error sintomático es 1,8 cm.

Por ultimo tenemos que calcular la incertidumbre del sensor, tanto en el eje X(dirección del haz del sensor)  como en el eje Y(perpendicular al haz).



}

Para el eje X, situamos al robot a distintas distancias y tomamos para cada distancia varias medidas y así  poder realizar una media:


Distancia X (x1) (x2) (x3) (x4) (x5) (x6) (x7) (x8) (x9) (x10) Media Error
40 39,5 39,5 40,5 39,5 40,5 40,5 39,5 39,5 39,5 40,5 0,5
50 50,5 50,5 50,5 50,5 50,5 51,5 50,5 49,5 50,5 49,5 0,6
60 59,5 60,5 59,5 59,5 60,5 59,5 58,5 59,5 59,5 60,5 0,6
70 70,5 70,5 69,5 68,5 68,5 69,5 69,5 68,5 69,5 70,5 0,7
80 80,5 79,5 79,5 80,5 80,5 81,5 80,5 80,5 79,5 79,5 0,7
90 90,5 91,5 91,5 90,5 91,5 90,5 90,5 89,5 88,5 89,5 0,8
100 101,5 100,5 101,5 100,5 100,5 99,5 99,5 100,5 100,5 101,5 0,7
110 112,5 111,5 111,5 111,5 110,5 1115 110,5 110,5 111,5 111,5 0,9
120 122,5 122,5 121,5 122,5 121,5 120,5 122,5 121,5 121,5 121,5 1,05

Viendo la media del error, deducimos que el error no varía con la distancia.

Para el eje Y, colocamos una carpeta perpendicular al eje X y tomamos el valor de la distancia a la cual el   sensor deja de medir. Esta es la tabla con 10 medidas para cada distancia:


Distancia X (y1-y) (y2-y) (y3-y) (y4-y) (y5-y) (y6-y) (y7-y) (y8-y) (y9-y) (y10-y) Media
40 11 10 12 11 11 10 10 11 11 10 11,5
50 13 12 13 12 13 13 13 12 14 12 12
60 15 15 15 16 17 16 15 16 15 15 15
70 19 19 20 20 20 19 19 20 19 20 20,5
80 13 13 12 14 14 14 13 12 14 14 14
90 9 9 8 8 8 9 10 8 9 9 8,5
100 10 10 9 9 10 10 10 9 10 9 10,5
110 8 8 7 7 8 8 7 7 8 8 8,5
120 4 4 5 5 5 6 5 6 6 5 6

Teóricamente, si representaramos estos datos en una gráfica deberían dar como resultado un cono de apertura.  Pero como siempre la realidad es muy diferente

      -Al principio el cono es de apertura, pero llega un momento en que el cono se cierra, invirtiéndolo. Evidentemente  cuanto mas alejemos la carpeta del robot, menor ángulo de visión tendrá porque la carpeta esta muy alejada.
De esto deducimos que yi-y si que depende de la distancia al robot.

Por ultimo, y para finalizar la practica nos queda hayar la matriz de covarianza, al igual que hicimos en la  practica anterior. Esta matriz representa la incertidumbre del sensor:


40cm 0,25 5,75
100cm 0,49 7,35

5,75 102,8

7,35 92,16







50cm 0,36 7,2
110cm 0,81 7,65

7,2 161,7

7,65 57,76







60cm 0,36 9
120cm 1,25 6,3

9 218,2

6,3 26,01







70cm 0,49 14,35




14,35 380,2










80cm 0,49 9,8




9,8 176,89










90cm 0,64 6,8




6,8 91,2



miércoles, 23 de febrero de 2011

DIA 7 (Practica 2)

Hoy vamos a realizar el penúltimo ejercicio de la práctica, que consiste en hacer que el robot  siga una pared. Para ello utilizaremos el sensor de ultrasonidos de nuevo.

El código es aparentemente sencillo, si el robot se aleja demasiado de la pared, hacemos que gire  hacia esta y si se acerca demasiado hacemos que gira en sentido contrario. 

Primero intentamos que gire con el comando "rotate" para que el movimiento del robot sea mas fluido.
En la primera prueba el robot gira hacia donde le da la gana, sin sentido alguno (algo habremos  hecho mal). Volvemos a programarlo y en la segunda prueba llega un momento (cuando el robot esta alejado de la pared) que no deja de dar vueltas sobre si mismo. Intentamos varias cosas mas y tras  comprobar que sigue sin funcionar, decidimos que ahora nuestro robot va a avanzar a trazas cortas,  en vez de avanzar continuamente. Surgen algunos problemas parecidos a los de antes y empezamos a desesperarnos...

Por fin alguien se da cuenta de una cosa: 
     -¡¡¡Estamos usando una pared inclinada para que el robot la siga!!!

Es probable que el rebote de las ondas de ultrasonido no lleguen al robot porque el plano esta  inclinado:



Lo probamos en una pared recta y tras algún arreglo funciona perfecto!!!


    

Hoy ha sido un quebradero de cabeza pero al final hemos conseguido terminar el ejercicio satisfactoriamente.
El próximo día nos dedicaremos a hacer el ultimo ejercicio que aparentemente es el mas largo y pesado, puesto que se trata de hacer mediciones.

viernes, 18 de febrero de 2011

Dia 6 (Practica 2)

Varias noticias:

1ª- En la primera practica obtuvimos 11/12 puntos!!! Esperemos seguir igual.

2ª- Tenemos nuevo compañero de equipo!!! 
Se nos ha unido Rafael Jiménez, que no ha podido venir antes a clase pero ya se reincorpora  al trabajo, así que bienvenido Rafa.

Gracias a la primera practica hemos cogido bastante soltura con el lenguaje Java y la  programación orientada a objetos. Así que vamos bastante mas rápido a la hora de programar.

Esta segunda práctica trata de que nos familiaricemos con los distintos sensores que tiene  el robot para obtener información de la realidad, además de información propia del robot:

    -Sensor de luz
    -Sensor de ultrasonidos
    -Sensor de contacto
    -Sensor de sonido (micrófono)
    -Batería

Se nos pide resolver una serie de ejercicios que iremos detallando a continuación.

El primero de ellos consiste en tomar una serie de datos con algunos sensores del robot  y mostrarlos por pantalla:

    -Nombre del robot
    -Valor del sensor de ultrasonidos
    -Valor del sensor de luz (tanto crudo como calibrado)
    -Tensión de la batería del robot
    -Memoria libre del robot



El segundo ejercicio que tenemos que hacer se llama ClapControl y se trata de que el robot  se pare cada vez que oiga una palmada, y siga avanzando cuando vuelva a oír otra. Para ello  es lógico que usemos el sensor de sonido.
En la primera prueba nuestro robot avanzaba continuamente y únicamente se paraba mientras  hubiera ruido, pero en cuanto dejabas de hacer ruido continuaba su marcha. Esto era porque  no le dábamos tiempo al sensor para terminar de leer los datos de sonido.




El siguiente problema (Bump&Go) es hacer que el robot avance hasta que choque con algo, en ese momento  el robot debe retroceder unos centímetros, girar un numero aleatorio de grados y seguir su marcha.
Código bastante sencillo que no nos da muchos problemas. Lo único que nos dio problemas fue  el montaje del robot para incorporarle el sensor, en un principio le pusimos el sensor tal cual,  pero no hacia bien contacto y tuvimos que "tunearlo" un poco para que hubiese mayor superficie de  contacto.








El siguiente problema es idéntico al anterior pero esta vez el robot no debe chocar, para ello  se utiliza el sensor de ultrasonido. Al principio el robot retrocede unos centímetros en vez de avanzar porque nada mas ejecutar el programa hace una lectura de ultrasonido y lee la mano de quien haya ejecutado el programa, para evitarlo, hacemos que espere un poco en hacer esa primera medida.




Estamos bastante orgullosos del trabajo de hoy porque hemos avanzado bastante de la práctica y aunque todavía nos queda la otra mitad por hacer creemos que no nos sera muy complicado.

Hasta el próximo día.

jueves, 10 de febrero de 2011

DIA 5 (Practica 1)

Vamos a terminar de poner a punto todos los ejercicios de la practica 1 ya que hoy es la entrega.

Por un lado tenemos que calcular la matriz de covarianza. Tenemos que medir la distancia que avanza y el desvio que comete el robot al avanzar en linea recta (se trata de ver si avanza la distancia que queremos realmente, no llega o se  pasa, que realmente es lo que va a pasar. Anotamos los datos en una tabla:



Con estos datos obtenemos la matriz de covarianza:

         {2.84       -0.19}
P=    {                      }
         {-0.19      0.42 }




CONCLUSIONES FINALES:

    Esta practica nos ha demostrado que el robot no realiza las ordenes que queremos ejecutar, siempre hay que tener en cuenta un margen de error porque no contamos con otros factores que alteran los resultados, como puede ser el rozamiento.
El trabajo realizado ha sido bastante gratificante ya que por primera vez en lo que llevamos de carrera hemos podido ver como un programa que hayamos creado interactua con la realidad.


Tenemos la practica lista para ser entregada.
Ya contaremos como nos ha ido.

Hasta pronto.

miércoles, 9 de febrero de 2011

DIA 4 (Practica 1)

Hoy hemos quedado un día antes para avanzar en la práctica y así tenerla lista para mañana, el día de la entrega.

Empezamos corrigiendo algunos errores del código y bajando un poco la velocidad de CR7 ya que va demasiado rapido para la traza del cuadrado. Una vez hecho eso, mas o menos lo pintaba, aunque se desvía un poco, sobretodo al avanzar en linea recta (para nuestro asombro) ya que los giros de 90º mas o menos los hace bien.

Trazado tras 10 repeticiones


Aqui ponemos el video de demostración , comparandolo cn un cuadrado perfecto de 40 x 40 cm.





Después comenzamos con el último apartado de la práctica , la visualización de las coordenadas por pantalla.
La mayor complicación de este ejercicio es mostrar los datos por la pantalla a la vez que el robot se mueve,  pero nos ayudamos del ejercicio de la odometria. Una vez hecho esto, probamos nuestro código.
La realidad es distinta a la teoría:
    -La teoría dice que el robot al llegar a su posición inicial debe tener estas coordenadas (x=0, y=0, z=360).
    -La realidad es que nuestro robot se desvía de la trayectoria y acaba en estas coordenadas(x=-1, y=1, z=359). Aunque le hemos puesto que avance 40cm, en la pantalla del LCD muestra que avanza 80 y no sabemos por que ocurre esto.

Mañana terminaremos de probar este código y haremos la matriz de covarianza.

De momento buenas impresiones, nos vamos desenvolviendo mejor con Java sesión a sesión, aunque la idea básica la programamos mas o menos bien a la primera, la corrección de pequeños errores para la entrega es lo que nos lleva mas tiempo.

ADRI RECUPERATE YA, QUE NECESITAMOS QUE JAVAMASTER NOS GUIE¡¡