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.
miércoles, 30 de marzo de 2011
Práctica 5 (1ª Sesión)
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:
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:
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.
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
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.
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
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
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
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.
Suscribirse a:
Entradas (Atom)