miércoles, 30 de marzo de 2011

Práctica 5 (1ª Sesión)

Ahora dejaremos de lado lejOS y nos centraremos en el simulador 3D Gazebo, el cual nos permite cargar diferentes tipos de robots, sensores y actuadores dentro de un mundo arti cial. También utilizaremos JDE, que nos permitir a desarrollar comportamientos para nuestro robot. Utilizaremos ambas herramientas a la vez, empleando JDE para lanzar los comportamientos que desarrollemos y Gazebo para visualizar el resultado fi nal.

La práctica a realizar consiste en simular con las herramientas dadas un comportamiento de sigue-líneas utilizando la cámara del robot y obteniendo información sobre la imagen recogida podremos decidir como deberá comportarse.

Después de la explicación de la práctica únicamente jugueteamos un poco para ver como funciona el simulador, por ejemplo, cambiando la velocidad lineal y angular y observamos como nuestro robot 3D avanza y gira (hasta chocar con la pared claramente). Tampoco nos ha dado tiempo a más en esta sesión, por tanto la próxima semana veremos como debemos implementar el comportamiento requerido.

martes, 22 de marzo de 2011

Práctica 4 (2ª Sesión)

Seguimos con nuestro robot equilibrista, ahora hemos introducido la componente derivativa que nos faltaba para completar nuestro controlador PID, esta constante nos permitirá actuar más o menos suave en función de si debemos corregir más rapidamente o no la posición del robot.
Después de unos minutos de deliberación y consenso en lo referente a los valores que debíamos poner a las constantes (y básicamente de ver que el robot se comportaba relativamente bien) obtuvimos el siguiente resultado:


Claro que antes obtener el resultado requerido, digamos que hemos tenido que pasar por estado intermedios, donde el robot tenía un comportamiento más nervioso...


...o simplemente tenía tendencia a caerse de espaldas o darse de bruces


...o a revelarse contra nosotros cuando le dábamos un pequeño empujoncito.

Debemos tener en cuenta que según el calibrado de la luz inicial podemos obtener variaciones en el comportamiento, pero si no variamos la luz durante la ejecución no debería pasar nada extraño.

Después de pequeños retoques podemos decir que lo que vemos en el siguiente vídeo es nuestro resultado final.


martes, 15 de marzo de 2011

Práctica 4 (1ª Sesión)

En esta última práctica con lejOS debemos conseguir que nuestro robot tenga un comportamiento similiar a un segway, para ello debemos utilizar un controlador PID y para ello tenemos que ajustar las constantes Kp, Ki y Kd para conseguir una buena respuesta del robot según vaya estando más o menos inclinado y así poder rectificar su posición correctamente.

En esta primera sesión para empezar hemos utilizado únicamente la constante proporcional obteniendo como resultado el siguiente video:

Controlador P

Como vemos, se comporta relativamente bien, pero sólo cuando no se inclina demasiado, es decir, cuando el error no es demasiado grande. Por esto observamos que en cuanto el robot se inclina mucho no es capaz de rectificar su posición correctamente.

Seguidamente hemos añadido la constante integral, aunque no hemos conseguido un mejor comportamiento hemos observado que si aumentamos el valor de Ki el robot tarda algo más de tiempo en reaccionar a los cambios.

Para la siguiente sesión continuaremos intentando ajustar correctamente estas dos constantes anteriormente mencionadas y además añadir la constante derivativa para completar así nuestro controlador PID para el robot.

jueves, 10 de marzo de 2011

Práctica 3 (2ª Sesión)

Continuamos peleándonos con nuestro robot para seguir con los 2 ejercicios restantes.

El tercer ejercicio de esta práctica consiste en la evitación de obstáculos utilizando el sensor de ultrasonidos mediante el cálculo del vector resultante (VFF). Para este apartado lo más costoso ha sido calcular precisamente ese vector resultante, ya que aparecían senos, cosenos, etc. y no es que nos llevemos muy bien con la queridísima trigonometría, pero finalmente hemos conseguido que Menganitor tenga un comportamiento medianamente correcto y que por lo menos no choque con algunos objetos que va encontrando en su camino.
Los comportamientos utilizados para este ejercicio han sido:

        AndaMirando
                  takecontrol( ): true
                  action( ): indicamos a los motores que vayan hacia adelante
                  supress( ): indicamos a los motores que se detengan


         Esquiva
                  takecontrol( ): miramos si la media de las medidas es menor que 255
                  action( ): según la distancia y orientación respecto al objeto detectado giraremos de una forma u otra
                  supress( ): indicamos a los motores que se detengan


Esquivar obstáculos mediante VFF

Esquivar obstáculos mediante VFF

Por último, tenemos que mezclar estos comportamientos utilizados en los ejercicios anteriores para permitir al robot a la vez de que vaya suiguiendo la luz, que sea capaz de esquivar un obstáculo si se interpone en su camino y después continuar el comportamiento sigue-luz.

Los comportamientos utilizados para este ejercicio han sido:

        DriveForward
                  takecontrol( ): true
                  action( ): indicamos a los motores que vayan hacia adelante
                  supress( ): indicamos a los motores que se detengan

        SigueLuz
                  takecontrol( ): takecontrol( ): si el valor absoluto de la diferencia entre el valor de cada sensor de luz es mayor que un determinada cantidad, tomará el control
                  action( ): según hemos declarado los sensores, si dicha diferencia es negativa giraremos a la izquierda (llega más luz por el lado izquierdo del robot) y si la diferencia es positiva giraremos a la derecha
                  supress( ): indicamos a los motores que se detengan

        Esquiva
                  takecontrol( ): si la distancia al objeto detectada es menor de un determinado valor
                  action( ): indicamos que gire adecuadamente para sortear el obstáculo
                  supress( ): indicamos a los motores que se detengan

Video sigue luz y esquiva

miércoles, 2 de marzo de 2011

Práctica 3 (1ª Sesión)

En esta práctica 3 jugaremos con los sensores de luz y ultrasonido mediante la programación de comportamientos. Cada comportamiento debe disponer de tres metodos, el primero de ellos es la toma de control takecontrol( ) que tendrá condición que debe cumplirse para llevar a cabo el comportamiento; después tenemos el método action( ) donde tendremos las instrucciones que se ejecutarán cuando el comportamiento esté activado, y por último, el método supress( ) que finalizará el código que ejecuta el método action( ).

En esta primera sesión hemos comenzado con los dos ejercicios que consideramos algo más asequibles, que son el de un comportamiento de evitación de obstáculo mediante sensor de contacto, donde tenemos los siguientes comportamientos:

         DriveForward
                  takecontrol( ): true
                  action( ): indicamos a los motores que vayan hacia adelante
                  supress( ): indicamos a los motores que se detengan

         HitWall
                  takecontrol( ): si el botón de contacto es presionado
                  action( ): indicamos que retroceda un poco para poder esquivar el objeto
                  supress( ): indicamos a los motores que se detengan



Esquivar obstáculo mediante steer


Esquivar obstáculo mediante rotate

Y el otro ejercicio que hemos visto más asequible es el del comportamiento de sigue-luz, en el que mediante dos sensores de luz nuestro robot deberá desplazarse siempre hacia donde mayor luz esté recibiendo; en este caso tenemos los siguientes comportamientos:

         DriveForward
                  takecontrol( ): true
                  action( ): indicamos a los motores que vayan hacia adelante
                  supress( ): indicamos a los motores que se detengan
         TomaMedidas
                  takecontrol( ): si el valor absoluto de la diferencia entre el valor de cada sensor de luz es mayor que un determinada cantidad, tomará el control
                  action( ): según hemos declarado los sensores, si dicha diferencia es negativa giraremos a la izquierda (llega más luz por el lado izquierdo del robot) y si la diferencia es positiva giraremos a la derecha
                  supress( ): indicamos a los motores que se detengan

Sigue-luz on board

Sigue-luz cámara aérea


Sigue-luz cámara aérea

Por tanto en la próxima sesión seguiremos con los ejercicios restantes de comportamiento de evitación de obstáculos usando el sensor de ultrasonidos mediante el cálculo de vector de fuerza resultante, y también el comportamiento de sigue-luz evitando obstáculos.

miércoles, 23 de febrero de 2011

Práctica 2 (2ª Sesión)

Continuamos con el siguiente ejercicio propuesto, que tendrá como objetivo que nuestro robot sea capaz de seguir una pared, ya sea de forma rápida o más lenta, pero al fin y al cabo que la siga.

Después de que Menganitor haya tenido atracción (demasiada) por las paredes, se haya comido esquinas o una vez detectadas se haya puesto a girar sin control, este ha sido el resultado final que podemos ver que tiene un comportamiento más o menos decente.

Sigue pared


Calibración del sensor de ultrasonidos.


En esta sesión calibramos el sensor de ultrasonido, los datos resultantes son los indicados en las tablas siguientes.


La distancia real máxima y mínima que puede medir el sensor es:



            distancia real máxima:   130  cm


            distancia real mínima:     16   cm



El máximo ángulo con respecto a la pared para los que los valores son válidos son:



Grados    10˚    20˚    30˚    40˚    50˚
DCHA    255    51     52     54     255
IZQ         50     50      51     53     255




¿La media del error entre la medida y la distancia real es diferente de 0?


CM           20    30    40    50    60    70    80    90    100
Medido     23    30    40    51    61    70    81    90    100

media = 0.666...
Podemos ver como sí es diferente de 0.



La incertidumbre en el eje X.

cm               40    50    60    70    80    90    100    110    120
medida1       41    50    61    71    81    90    102    112    123
medida2       41    51    61    71    81    90    103    113    122
medida3       40    51    60    71    81    91    102    114    123
medida4       41    51    61    70    81    91    102    112    123
medida5       40    51    61    71    80    91    102    113    122
medida6       40    51    61    71    81    91    102    114    123
medida7       41    50    61    70    81    91    101    111    123
medida8       41    51    61    71    81    90    102    112    122
medida9       41    51    61    71    80    90    102    111    122
medida10     41    51    61    71    81    91    103    112    122
media error  0,7   0,8   0,8   0,8   0,8   0,6    2,1     2,4     2,5



La incertidumbre en el eje Y.

cm    40    50    60    70    80    90    100    110    120
y     14,5   15    9,5    6    4,5     5       5        4        3



La matriz de covarianza del error P que representa la incertidumbre
del sensor es:



     699.24      -100.96
    -100.96       18.38


Como hemos visto en clase la matriz no tienen relazion con los resultados que nos deben de dar por lo tanto volvimos ha hacerla, nos dieron los resultados siguientes.


0.5706      -0.7588
-0.7588       18.38


Podemos ver como estos datos ya si tiene más sentido que los anteriores, por lo que debimos confundirnos al hacer los calculos en la 1º matriz.

jueves, 17 de febrero de 2011

Práctica 2 (1ª Sesión)

En esta segunda práctica, trabajaremos con los sensores del robot (tanto internos como externos). En el primero de los ejercicios debemos mostrar cierta información en la pantalla del ladrillo accediendo a sus sensores internos, como pueden ser el de la batería o la memoria libre disponible, así como los sensores exteroceptivos de luz, ultrasonido y micrófono.

En el segundo ejercicio tendremos que controlar el robot mediante palmadas (ClapControl), comenzando con el robot parado, si damos un palmada deberá avanzar hasta que volvamos a dar de nuevo otra palmada y detenerse.

ClapControl

Los dos siguientes ejercicios serán un Bump & Go, es decir, el robot avanzará hasta que, en el primer caso, choque contra un obstáculo, o en el segundo caso, detecte un obstáculo a una determinada distancia, lo que hará que el robot retroceda, gire aleatoriamente y comience de nuevo a avanzar hacia adelante. 


Bump & Go (contacto)

Bump & Go (ultrasonido)