jueves, 12 de abril de 2012

Practica4 Segway

Y por fin llego el ultimo momento con nuestro robot,solo nos quedaba enseñarle a andar sosteniendose sobre dos ruedas y después de mucha paciencia y con muchas pruebas lo conseguimos.
Para poder realizar esta tarea nos ayudamos de un sensor de luz apuntando hacia el suelo, que toma unos valores de cual es la posición correcta para que se pueda sostener con nuestra ayuda los primeros segundos,  una vez que le soltamos, el robot empieza a inclinarse de un lado a otro, pero con el sensor comentado anteriormente, nos va dando la posición exacta y eso nos ayuda para que el robot tome la decisión de si se esta cayendo hacia adelante, las ruedas se muevan hacia adelante, volviéndose a quedar en equilibrio y viceversa. Todo esto basándose en un controlador PID.
Según su comportamiento, realizamos muchisimas pruebas para ajustar cada constante proporcional. A raíz de estas pruebas llegamos a la conclusión de que la constante proporcional debería tener una valor suficiente mente relevante como para recoger el error actual, la integral debía tener valores muy pequeños ya que al ser el sumatorio de los errores aumentaba mucho la velocidad del motor, también decidimos ponerle un tope, para que no llegase a un numero muy alto nunca,y con la constante proporcional derivativa decidimos ajustarla a valores muy altos, ya que al ser la diferencia entre el error actual y el error anterior si esta diferencia es mucha quiere decir que el robot estará muy desequilibrado por lo que necesitará una mayor velocidad y al contrario si la diferencia es pequeña significará que el robot esta relativa mente equilibrado con lo que la velocidad no deberá aumentar en exceso.La que mejor resultados nos dio es la siguiente: Kp=19, Ki=1,Kd=30.




Dos videos que muestran en funcionamiento final de robot.





sábado, 31 de marzo de 2012

Redes 118: Robots para saber cómo somos

Hoy añado un interesante reportaje que he visto y me gustaría compartir para todos los aficionados de robótica.

http://youtu.be/umF-zK50kF0

Los robots y la inteligencia artificial pueden ser herramientas magníficas para conocer la naturaleza humana. En este capítulo de Redes, Deb Roy, ingeniero informático del MIT, le explica a Punset cómo se valió de la tecnología para entender la adquisición del habla en bebés. Después de plantar cámaras y micrófonos por su casa, Roy grabó su vida familiar durante dos años para ver la evolución de su hijo recién nacido y analizar el contexto en el que aprendió a hablar. El testimonio de otros investigadores como Luc Steels, experto en robots y lenguaje, Ramón López de Mántara, director Instituto de Inteligencia Artificial del CSIC, y Eric Horvitz, jefe del equipo de investigación de Microsoft, se suman al de Roy para explicar el uso de la tecnología para saber cómo somos.

Pero sin duda el comentario que mas me ha llamado la atención es el siguiente:

“Ningún ser humano puede negociar a la velocidad que lo hacen las máquinas”.
Muchos coincidirán conmigo cuando digo que cualquier cerebro humano es capaz de operar muchísimo más rápido que cualquier máquina actual. La diferencia reside en la “especialización”. Estoy seguro de que una sola neurona humana podría realizar cálculos más complejos y a mayor velocidad que cualquiera de los procesadores actuales.
La I.A. actual está limitada por nuestra forma de entender y construir software. Construyendo software perseguimos imitar las conclusiones a las que llegaría un cerebro humano. Creo que esto es un problema de base. Nadie construye software para nuestro cerebro, es el propio cerebro el que se encarga de construir y mejorar su propio software para llegar a una conclusión de forma más eficiente. Esto significa que cualquier I.A. construida actualmente está limitada por su software, el cual está pensado para realizar una tarea atendiendo a instrucciones lógicas diseñadas por su creador. Para hablar de inteligencia artificial real debemos eliminar al creador en algún punto del proceso, sólo así crearemos máquinas que aprendan de forma real.

y es que creo que esa es la gran incógnita que queda por resolver...y si alguna vez se consiguiese..no se hasta que punto puede llegar a ser bueno.

miércoles, 21 de marzo de 2012

Práctica 3 - Navegación local evitando obstáculos

 Sin duda alguna esta semana nos enfrentamos a la practica mas dura por el momento, y es que hemos tenido que resolver unas cuantas incógnitas en cuanto al montaje del robot o la manera en la que combinar todos los apartados de esta practica en uno solo para que el robot funcionase a "full-equipe" .

Para empezar la realización de la primera parte de la practica la hemos resuelto con dos códigos distintos. Uno que seria el mas completo seria para la realización de esta parte teniendo montado el robot con dos sensores de contacto posicionados a la derecha o a la izquierda de la parte delantera del robot, y dependiendo de cual es el que presione giraría hacia un lado o hacia otro.
Pero teníamos un problema y es que dos sensores de contacto en la parte delantera junto con dos sensores de luz y uno de ultrasonidos para la realización de la ultima parte de la practica no tenían cabida en nuestro robot, por lo tanto como montaje final se ha justado de tal manera que robot coste de  un sensor de contacto (repartidos por toda la parte delantera), dos sensores de luz y uno de ultrasonidos.

Fotos de la evolución en el montaje de nuestro robot:








Metiéndonos un poco mas en materia especifica os contamos que en esta practica utilizaremos los comportamientos que se implementan en la clase Behavior.Destacaremos 3 métodos:


boolean takeControl(). Devuelve verdadero si se dan las condiciones necesarias para que cierto comportamiento tome el control del robot.

void action(). El código de este método se ejecuta cuando el comportamiento se activa

void suppress(). Este método debe terminar inmediatamente el código que ejecuta el método action(). Puede terminarlo de inmediato (si es un bucle infinito, o la ejecución es larga) o esperar a que termine, si la ejecución es corta.

En esta primera parte de la practica deberemos montar un robot con un sensor de contacto. Cuando el sensor se pulse el robot deberá retroceder unos centímetros y rodear el obstáculo.








En este vídeo se muestra como el robot va moviéndose hacia delante, y por medio de un sensor giratorio que tiene colocada en la parte superior, va observando a través de ultrasonidos si hay algún objeto que se encuentre a (-45º 45º) de su parte delantera y si lo hay en ese caso esquivarlo para seguir con la misma dirección. En el vídeo se ve como se comporta de forma distinta ante los dos objetos que se le presentan, en el primero lo ve muy centrado y lo pasa haciendo un medio circulo; En el segundo al no estar exactamente de frente a el solo lo esquiva o bordea sin salirse tanto del camino. En este vídeo solo se muestra que gira para el mismo lado en las dos situaciones, pero esta programado para que elija el lado que mejor le convenga. En el ultimo vídeo se puede ver como gira para el lado derecho al esquivar un obstáculo







A continuación os mostraremos como el robot va siguiendo la luz. Dependiendo de la intensidad con la que le lleguen a los dos sensores que tiene colocado con una separación entre ellos respecto del centro de 45º, girará para un lado o para otro. Cuando la intensidad que recibe es parecida el robot piensa que esta en la dirección correcta y por lo tanto no realiza ningún giro.
El mayor problema que hemos tenido con este apartado de practica, es que los dos sensores de luz que tiene el robot tienen una calibración distinta, que ante la misma potencia de luz, pueden dar dos valores distintos. Solucionamos este problema con una calibración de los dos sensores al inicial la ejecución del programa.







Por ultimo, la parte final de esta semana consistía en poner todas las acciones que realiza el robot juntas con el fin de que ahora nuestro robot anda hacia adelante y se desplaza en dirección donde haya mas luz, si por el camino se encuentra algún obstáculo ya sea porque lo detecte el ultrasonidos o por los sensores de contacto de la parte delantera, lo esquivará.











lunes, 5 de marzo de 2012

Practica 2 - Calibración sensor ultrasonidos

Para esta parte de la practica vamos a desarrollar un programa que lea los valores del sensor de ultrasonido y los muestre por pantalla. Para ello montaremos el robot con el sensor ultrasonido perpendicular a una pared y compararemos las lecturas mostradas en la pantalla con la distancia real.

La primera prueba que haremos sera medir la distancia mínima y máxima que es capaz de medir el sensor
Distancia mínima: 6 cm
Distancia máxima: 215 cm




Ahora comprobaremos el máximo angulo para el que el robot es capaz de devolver datos del objeto que tiene delante.

Los resultados obtenidos son: aprox. 48º con respecto al eje X.

Para comprobar si el sensor tiene un error sistemático haremos diferentes pruebas a distancias de 20, 30, 40, 50, 60, 70, 80, 90 y 100cms. Los datos obtenidos son:


20cm → 23cm
30cm → 31cm
40cm → 41cm
50cm → 51cm
60cm → 62cm
70cm → 72cm 
80cm → 82cm
90 cm → 95cm
100cm → 104cm

Para calcular la incertidumbre del sensor lo haremos por separado en el eje de las X y de las Y. Tomaremos 10 medidas para cada una de las distancias. 

EJE X
40cm → 41,41,41,41,41,40,41,41,40,41
50cm → 51,51,52,51,51,51,51,51,51,51
60cm → 62,62,62,62,62,62,62,62,62,63
70cm → 72,72,72,71,72,72,72,73,72,72
80cm → 83,83,83,83,84,86,84,85,83,84
90cm → 94,94,95,94,94,95,94,96,96,95
100cm → 104,105,105,104,105,104,104,104,103,104
110cm → 112,112,113,113,113,113,112,113,113,112
120cm → 126,126,127,126,127,126,125,126,127,126

Después de estos datos podemos afirmar que si depende el error de la distancia a la pared, mientras que en distancias cortas como 40 o 50cm el error medio es de menos de 1cm, en distancias de mas de 1 metro tenemos errores de mas de 5cm.

EJE Y
40cm → 8,11,9,11,8,10,9,8,11,9
50cm → 10,13.5,11,12,11,13,11,12,12,10
60cm → 9,8,7,9,8,8,8,9,7,8
70cm → 7,8,7,6,8,7,6,7,8,8
80cm → 4,2,3,3,2,3,2,3,3,4
90cm → 4,5,5,5,6,5,6,5,4,5
100cm → 5,3,4,4,5,4,3,3,4,4
110cm → 2,3,2,1,1,2,2,3,2,2
120cm → 0,0,0,0,2,1,1,1,1,2


Obtenemos unos datos curiosos ya que podemos observar que en la distancia de 50cm obtenemos los mejores resultados en la detección de un obstaculo en el eje Y, siendo practicamente el eje de coordenadas en distancias mayores a 110cm, es decir, que si el objeto no esta completamente en el centro del eje respecto al robot no lo conseguira detectar.

Los resultados no dan una forma de cono de apertura como sugiere la practica pero puede deberse a los problemas que hemos tenido con el sensor de ultrasonidos ya que no se a mostrado nada preciso en sus medidas.

Practica 2 - Sigue Pared


Es sin duda la parte mas dificil que nos ha tocado implementar desde que tenemos a nuestro robot,y es que el robot mirando hacia un lado en el que se encuentra una pared, la siga, esquivando los obstaculos necesarios.

Lo primero que ya tuvo su trabajito fue como ingeniarselas para que el sensor de ultrasonidos estuviese lo mas cerca de la derecha del robot y que a su vez pudiese girarse unos grados para poder obtener el punto optimo.
Y esto tiene una mencion aparte, el robot hace su cometido bastante bien, pero es curioso que le hemos encontrado un fallo al sensor de ultrasonido. Cuando mide la distancia de frente lo hace relativa mente bien, pero cuando lo tiene que hacer girado de lado es donde mas problemas tiene, midiendo mas del doble de lo que realmente es o incluso creyendo que no tiene nada delante. Y claro..con este problema nos era imposible que realizase la practica, hasta que nos vino la inspiracion del cielo y pensamos que cuando detectase el robot que estuviese cerca de la pared diese un ultimo giro hacia afuera o hacia adentro, para asi colocarse de un poco mas recto y comprobase si esta situado mas o menos bien.

Otro problema fue la duracion de la bateria, esta claro que este tipo de ejercicio le supone mucho a nuestro robot, por lo tanto debemos hacerlo con la bateria bien cargada, ya que si esta a la mitad el sensor de ultrasonidos se vuelve mucho mas inestable.


Y aqui dejo 3 videos en situaciones distintas que nuestro robot resuelve correctamente.








Practica 2 - Bump&GO

El siguiente paso que da nuestro robot es "no chocarse". Para ello utilizamos dos tipos de sensores, el de ultrasononidos (utilizado ya en Obteniendo Informacion) y uno nuevo, el sensor de contacto (foto mas abajo).
La parte mas complicada fue el giro del robot, puesto que lo hace aleatoreamente, podria darse el caso que girase y volviese al mismo sitio o que girase poco y terminase haciendo lo mismo, por lo tanto la solucion que dimos fue que el minimo angulo para que girase fuese 45º y el maximo 315º.








En el video de arriba se muestra la utilizacion del sensor de contacto. Le tuvimos encerrado durante un rato he hizo su cometido a la perfeccion. En el de abajo se muestra claramente como el sensor de ultrasonido al detectar un objeto a 20 cms de el gira aleatoriamente y busca otra salida.



Practica 2 - Control del robot por sonido


La siguiente mision que se nos propone es la del control del robot a través del micrófono.


Para la utilizacion de esta practica hemos
necesitado una pieza nueva que sirve para
capturar el sonido ambiente que acompaña
al robot una vez iniciado. Una imagen de lo
que es el microfono lo podéis encontrar a la
derecha.                            
                                                ----------->



Al realizar la practica nos dimos cuenta
que el robot no nos respondía como
realmente queríamos, y era debido a que
el sonido ambiente que capturaba era menor
que el que capturaba cuando se iniciaba el
motor de las ruedas. Por lo tanto
creímos conveniente que durante los primeros segundos iniciales fuese guardando la información de todos los sonidos que capturaba
y que mostrase por pantalla el resultado final, junto con el limite, creado por nosotros y que se establece como el tripe de lo que realmente escucha. Sirve para que cuando escuche un sonido mas fuerte de lo normal, con una palmada bastaría, se pare o vuelva a andar.


Y esto es la demostración final de su funciona miento: