miércoles, 25 de junio de 2008

Para ejecutar Simbad sin tarjeta gráfica

En mis cursos de Agentes Inteligentes he comenzado a utilizar el simulador Simbad (http://simbad.sourceforge.net/) para realizar algunas de las prácticas.

Este simulador utilizar Java3D para hacer el rendering de los mundos virtuales donde se desenvuelve el robot y Java3D a su vez utiliza OpenGL. Esto puede representar un problema cuando tu computadora no tiene una tarjeta de video que soporte OpenGL 1.2 o superior. Afortunadamente hay algunas formas de darle vuelta a este problema tanto para windows como para linux que a continuación voy a presentar.

OJO: En todos los casos, tanto para windows como para linux, es importante que puedas instalar java3D manualmente (si necesitas ayuda haz click aquí )

Ejecutando Simbad en Windows

Tanto si estás utilizando XP como Vista, no tendrás soporte para OpenGL más allá de la versión 1.1. La buena noticia es que Java3D en sus principios ofrecía versiones para DirectX y para OpenGL y el simulador Simbad funciona bien con cualquiera de las dos.

Simbad en Windows con DirectX

Para ejecutar Simbad en Windows con DirectX tienes que bajar el instalador de java3D 1.3.1 y ejecutarlo en tu computadora. Una vez instalado todo debería funcionar bien.

Simbad en Windows con OpenGL

Si deseas utilizar una versión más reciente de Java3D y también utilzar OpenGL para el manejo gráfico, la versión a utilizar es la 1.3.2 (al menos esa es la más moderna que funcionó en mi Dell Inspiron 9400 con tarjeta Intel GMA945). Para acceder a esta versión tienes que descargar el siguiente archivo y después instalar el java3D a mano.

Ejecutando Simbad en Linux

En el caso de linux el asunto es más enredoso ya que no tenemos un equivalente del DirectX y necesariamente tenemos que utilizar OpenGL para hacer el manejo gráfico. En este sentido gracias a la versatilidad de linux tenemos 2 formas de ejecutar Simbad. Personalmente he probado ambas y me he quedado con la segunda opción simplemente para poder disfrutar de las animaciones extras que proporciona el Compiz.

Opción 1: Utilizando la aceleración gráfica por software (MESA)

OJO: La desventaja de esta opción es que estamos deshabilitando completamente la aceleración gráfica por hardware con lo que perdemos, entre otras cosas, todos los efectos "fancy" del compiz y en algunos casos puede que el rendimiento de la computadora se vea afectado.

Tomando en cuenta lo anterior, el procedimiento es el siguiente (suponiendo que ya tienes java3D en su versión más reciente instalada).
  1. Abrir el manejador de paquetes synaptic (Sistema -> Administración -> Gestor de paquetes Synaptic) (deberás introducir el password del administrador)
  2. Con el Synaptic abierto hacer click en "Buscar" y teclear "MESA" (sin comillas)
  3. Buscar el paquete libgl1-mesa-swx11-i686 y seleccionarlo. Vas a recibir la advertencia de que habrán algunos paquetes que se deberán desinstalar y otros más que se deberán instalar. Acepta los cambios y haz la instalación
  4. Reinicia el manejador de ventanas.
¡Listo! Haz perdido todos los efectos 3D de compiz pero haz ganado en la ejecución de Simbad.

Para dejar todo como estaba tienes que llevar a cabo el mismo procedimiento pero seleccionando el paquete libgl1-mesa-dri

Opción 2: Compilar un ambiente gráfico exclusivo para Simbad

Esta opción nos ofrece la oportunidad de utilizar Simbad desde el IDE Eclipse haciendo uso de la libreria MESA para que la aceleración funcione por software pero solamente cuando usamos Simbad, el resto del tiempo seguiremos usando la aceleración por hardware normal.

(las ideas están sacadas de la página de Nicholas Bredeche)

Primer paso: Instalar Java3D en el sistema (ver ayuda aquí)
Suponemos que has bajado el archivo .zip con la versión java3D que quieres utilizar. Debes descomprimir el archivo y dejarlo en un directorio desde donde lo puedas utilizar (para ser coherente con los cánones de unix, utiliza los privilegios de root para crear un directorio /usr/local/lib/java3D). En este directorio tienes que descomprimir el archivo .zip con java
OJO: Esto no instala java en tu sistema, solamente lo deja accesible para ser utilizado desde eclipse.

Segundo paso: Instalar Java3D para Eclipse

Corre Eclipse, en el menú "Window" y "Preferences" elegir "Java" -> "Build Path" -> "User Library" hacer click en "new" y dar el título "Java3D" luego hacer click en "Add JARs" y seleccionar los 3 archivos jar que están en /usr/local/lib/java3D/lib/ext (que se supone creaste en el paso anterior)

Luego, desplegar los 3 jars y hacer click en "Native library location..." -> "Edit" para indicar el directorio donde están los archivos

Instalar java3D para un proyecto en Eclipse

Seleccinar el proyecto para el que se añadirá java3D y hacer click con botón derecho y luego en "Build Path" -> "Add libraries". Elegir "User Library", hacer click en "Next" -> seleccionar java3D.

Tercer paso: Instalar las bibliotecas MESA para java3D (aceleración gráfica por software)

primero recuperar los archivos binarios que están en esta página (elegir el que corresponda a tu instalación):

(Otra opción es que recuperes el código fuente y lo compiles para tu sistema. Yo intenté esta opción y los make generaban toda clase de errores desde sintaxis hasta declaraciones de variables faltantes por lo que abandoné la idea. Si deseas experimentar visita el sito de MESA (http://www.mesa3d.org/)

Una vez recuperados los binarios utiliza tus privilegios de root para crear el directorio /usr/local/lib/mesa (siempre siendo fieles a los cánones de unix) y copia ahí los archivos que resultan de descomprimir el archivo .gz que obtuviste.

Ya que tienes los binarios de java3D y de MESA lo siguiente es crear un shell que lance Eclipse utilizando estas bibliotecas en lugar de las bibliotecas por defecto del sistema. Para ello crea un archivo "EclipseMESA" ($gedit EclipseMESA) donde tienes que tener las siguientes lineas:

###
#!/bin/sh
export AWT_TOOLKIT=MToolkit
export LD_LIBRARY_PATH=/usr/local/lib/mesa:/usr/local/lib/java3D
export XLIB_SKIP_ARGB_VISUALS=1
/usr/bin/eclipse
Suponemos que los directorios son los correctos para todas las instalaciones. Una vez que grabes este archivo necesitas cambiar sus propiedades para poder ejecutarlo para ello utiliza la siguiente linea de código:
$chmod u+x EclipseMESA
Para ejecutar eclipse con las librerías MESA
$./EclipseMESA

Recomendaciones Finales

Una vez que hayas hecho esto puedes seguir los pasos de la documentación de Simbad para crear un proyecto en Eclipse y probar que funcione todo bien (te recomiendo correr el demo).

Esta segunda opción en Linux hace que podamos correr Simbad desde Eclipse (si lo lanzamos utilizando las librerías MESA para aceleración por software) sin embargo no es posible utilizar Simbad desde la línea de comandos (sigo buscando una forma en cuanto tenga noticias se las haré saber).

No hay comentarios: