Chocagira en Gazebo

Con el gazebo perfectamente configurado y conectado con el jde, pasamos a probarlo utilizando nuestro chocagira.

Para ello copiamos el código elaborado para el chocagira en el navegacion.c (dentro del procedimiento yourcode_iteration) del  nuevo introrob.

El resultado es el siguiente:

Como podéis comprobar, en este escenario se podría afinar aún más el comportamiento del robot (añadir más velocidad, los giros, etc) aunque eso lo dejaremos para más adelante…

Conectando con gazebo…

Ya tenemos gazebo instalado, pero ahora tenemos que conectarlo con jde para poder acceder a los parámetros del robot y controlarlo con nuestro software.

Pues manos a la obra… lo primero descargar todo lo necesario de la web de la asignatura:

  1. Fichero de configuración de jde que permita conectar con gazebo.
  2. Nuevos ficheros introrob para controlar el robot desde jde en gazebo.

Con todo esto bajado, lo primero que vamos a hacer es compilar e instalar el driver de gazebo para jde, que viene dentro del directorio «drivers» de jde (en mi caso la versión 4.2.1):

…./4.2.1.r174/drivers/gacebo$ make

…./4.2.1.r174/drivers/gacebo$ sudo make install

Tras lo cual tendría que haberse copiado el fichero gazebo.so al directorio de jde que estemos usando, en mi caso: /usr/local/share/jde-robot.

Con todo esto podemos hacer la prueba de que jde conecta correctamente con gazebo. Para ello desde un terminal iniciamos gazebo mediante el comando:

$ wxgazebo <fichero-configuración>

El fichero de configuración que tendremos que utilizar está incluido en  el siguiente archivo comprimido (el pioneer2dx.world), aunque en mi caso lo he tenido que modificar para que utilice la renderización glx, utilizando este.

Finalmente:

$ wxgazebo pioneer2dx-renderGlx.world

Tras lo cual tendremos gazebo funcionando.

gazebo1

El paso siguiente será iniciar el jde, pero con el fichero de configuración que nos descargamos al principio (para que conecte con gazebo).

$ jde jde-conf-siguelinea

Si recibes un error del graphics_gtk, edita el fichero de configuración anterior y lo comentas (anteponiendo # a las líneas: driver graphics_gtk y end_driver).

Si todo ha ido correctamente, tendremos lo siguiente:

gazebo_jde

En la siguiente entrada mostraremos el funcionamiento del chocagira en gazebo…

Instalación y configuración del Entorno: Segunda parte (Gazebo)

Aquí estamos otra vez! intentando terminar la dichosa instalación de gazebo.

Os cuento cómo va la cosa…

En principio parecía que todo iba bien… me descargué gazebo 0.7.0, leí el archivo README y comprobé que necesitaba de otros paquetes (que novedad!): ODE y GDAL. Pues nada, a descargarlos e instalarlos………………… y comprobar que no compila, de ninguna de las maneras.

Finalmente, José María posteó una receta para instalarlo en un Ubuntu 8.04. Dado que mi portatil tiene el Guadalinex V5, basado en el anterior, seguí todos los pasos de la misma.

Resultado: ERROR.

Parece que tengo problemas de renderización. Gazebo utiliza la renderización off-screen y el soporte para esta varía de una máquina a otra.

Gazebo-0.7 soporta 4 tipos de renderización off-screen (unas aceleradas y otras no): glx, sgix, xlib y glxp.

Para poder especificar cuál de ellas se quiere utilizar se utiliza el parámetro <renderMethod> en el fichero de configuración de gazebo.

En mi caso, con el fichero de configuración siguiente y tras probar con cada uno de los anteriores métodos, tan solo funciona el «xlib» pero, aunque no obtengo ningún error, el resultado no es el esperado. Os lo muestro en la siguiente imagen:

error-gazebo

Finalmente, con un poco de ayuda he conseguido hacerlo funcionar. Para ello he deshabilitado la opción de Composite en mi servidor X, agregando en /etc/X11/xorg.conf  las siguientes líneas :

Section «ServerFlags»
Option «AIGLX» «off»
EndSection

Section «Extensions»
Option «Composite» «Disable»
EndSection

Y luego, en la configuración pioneer2dx-rendering.world, agregando el soporte para GLX :

<model:ObserverCam>

<renderMethod>glx</renderMethod>
</model:ObserverCam>

<model:Pioneer2DX>
….
<renderMethod>glx</renderMethod>
</model:Pioneer2DX>
Resultado:

gazebo

Mi primer programa: «ChocaGira»

Parece ser que el Chocagira es como el «HolaMundo» en la robótica… ¡pues mal empezamos!… a nosotros nos ha costado un poco más!!.

La mayoría de las cositas que nos frenaban eran tonterías, que si estás en clase, el profe (o un compañero) puede ayudarte y lo solucionas en un momento,  pero si estás sólo te bloqueas durante un buen rato.

Por ejemplo, tras modificar navegacion.c, hacemos el make y el make install de introrob, pero al ejecutar el entorno el robot sigue comportándose igual que antes.

– Ummmm, ¿qué pasa?

– No se debe haber modificado el introrob.so

– Sí, se ha modicado, la fecha es la actual.

– … Será que no se ha copiado el introrob.so al directorio jde_robot.

– Pues, a ver…., sí aquí está, sí se ha copiado.

– Es verdad, mira, el makefile hace el cp.

– ¿Entonces qué pasa?

Volvemos a modicar navegacion.c, make, make install, lanzamos el robot…nada! Se comporta igual que al principio. Hasta que descubrimos que la ruta no era la correcta. Modificamos el makefile para que haga el cp a la ruta correcta. Es probable que durante la instalación (como la realizamos en dos tardes) creáramos el otro directorio.

Vale, el robot ya se mueve hacia adelante. Comenzamos a plantearnos cómo hacer que se comporte según las especificaciones. Las indicaciones de Vicente y de José María nos vienen estupendamente.

Identificamos 3 estados: avanzando, retrocediendo, girando.

estados

Lo que nos queda por determinar son esos ‘cuando choque’, ‘cuando haya retrocedido suficiente’ o ‘cuando haya girado suficiente’, así que nos ponemos a hacer pruebas, de forma que se escriba en la salida el valor de laser(60),laser(90),laser(120) miestras el robot avanza, para hacernos una idea de los valores que contiene el array según se acerca el robot a los objetos.

Con unas cuantas pruebas fue suficiente para hacer que nuestro robot ejecute el chocagira sin problemas: