Tutorial:ODE y robots modulares:Caida libre (III)
Contenido
[ocultar]Simulación de un cubo en caida libre (III): 3D
|
|
|
Introducción
En este ejemplo añadiremos visualización en 3D a la simulación del cubo en caida libre. Para ello utilizaremos la librería drawstuff, creada por Russell L. Smith (el autor del ODE). Esta, a su vez, utiliza OpenGL.
Las simulaciones con visualización en 3D son muy interesantes, ya que con un sólo golpe de vista nos permite conocer cómo ha evolucionado nuestro sistema. Sin embargo, es importante tener en cuenta que el ODE nos permite realizar simulaciones sin visualización. Esto es muy útil para realizar búsquedas mediante algoritmos genéritos, en las que hay que evaluar centenares de individuos intermedios. La visualización 3D se utiliza para observar los resultados obtenidos, pero no los el resto de individuos.
Objetivos
- Añadir visualización 3D a las simulaciones con ODE, usando la librería drawstuff.
Código
Programa principal | |
Creación y dibujo del cubo | |
Definición de las constantes. | |
Definición de los prototipos de body.cpp y las estructuras de datos. |
Compilación
Todos los ejemplos de este tutorial compilan tecleando "make". Sin embargo se describe a continuación cómo se compila directamente usando el GCC:
g++ -o box3 -Iinclude box3_ex/box3.cpp box3_ex/body.cpp libdrawstuff.a -lm -lode -lX11 -lGL -lGLU
Ejecución
Para probar el ejemplo, teclear:
./box3
En la consola aparecerán los siguientes mensajes. El primero lo genera la propia librería drawstuff. Muestra cuáles son las teclas que se pueden emplear para mover la cámara, parar la simulación, simular un paso, volcar las imágenes a ficheros, etc:
Simulation test environment v0.02 Ctrl-P : pause / unpause (or say `-pause' on command line). Ctrl-O : single step when paused. Ctrl-T : toggle textures (or say `-notex' on command line). Ctrl-S : toggle shadows (or say `-noshadow' on command line). Ctrl-V : print current viewpoint coordinates (x,y,z,h,p,r). Ctrl-W : write frames to ppm files: frame/frameNNN.ppm Ctrl-X : exit.
Change the camera position by clicking + dragging in the window. Left button - pan and tilt. Right button - forward and sideways. Left + Right button (or middle button) - sideways and up.
Los últimos mensajes los imprime la aplicación box3:
Keys: 1: Drop the box q: Quit
La tecla '1' sitúa la caja en su posición inicial, por lo que vuelve a caer. La tecla 'q' finaliza la simulación.
Capturas de pantalla
Visualización de la caida del cubo, en tres instantes diferentes:
Vídeo
![]() |
Video en MPEG |
Conceptos previos
Sistema de referencia
En la figura 1 se muestra el aspecto del mundo virtual dibujado con la librería drawstuff. Está formado por un cielo, el suelo y unos puntos de referencia en el suelo. El sistema de referencia es como el mostrado en la figura 2. El eje y se dirige hacia el punto azul y el eje x hacia el rojo.
Texturas y sombras
La librería drawstuff dibuja por defecto los objetos con texturas, incluyendo el suelo y el cielo, y proyecta las sobras de los objetos sobre el suelo. Esto da una mayor sensación de realismos (Figura 4). Sin embargo, para que las simulaciones se ejecuten más rápidamente, es posible eliminar las texturas pulsando control-T (Figura 5) y las sombras con control-S (figura 6).
Movimiento de la cámara
La drawstuff permite que el usuario pueda mover la cámara pinchando en la ventana de la simulación y arrastrando el ratón. Según el botón empleado se consiguen diferentes efectos:
- Botón izquierdo: Cambio de la orientación de la cámara. Hacia arriba y abajo (cabeceo) o hacia los lados (viraje)
- Botón derecho: Movimiento hacia adelante/atras o izquierda/derecha.
- Botón central: Movimiento hacia arriba/abajo o izquierda/derecha
Pulsando control-v se obtienen las coordenadas x,y,z y las orientaciones pitch, yaw, roll de la cámara. Esto nos permite introducirlas en nuestro código para que la cámara se sitúe inicialmente en el punto seleccionado.
Control de la simulación
Es posible congelar la simulación pulsando control-P. Y utilizar los movimientos de la cámara para observar los objetos desde diferentes puntos de vista. Cuando la simulación está parada, con control-O simulamos un único paso. Con ello podemos ir a cámara lenta.
Generación de vídeos
La drawstuff permite volcar las imágenes de la simulación a ficheros con extensión .ppm. Para ello hay que pulsar control-W. Para finalizar la captura de imágenes hay que pulsar nuevamente control-W. Los ficheros con las imágenes se almacenan en el directorio frame y sus nombres son de la forma: framexxxx.ppm, donde xxxx es un número decimal de 4 dígitos que indica el número de frame. Comienza por 0001.
Para generar un vídeo MPEG hay que entrar en el directorio frame y ejecutar este comando:
ffmpeg -f image2 -i frame%04d.ppm misimulacion.mpg
Es necesario tener instalada la aplicación ffmpeg (paquete ffmpeg en Debian)
Explicación del código
Organización del código
El código se ha dividido en dos ficheros: box3.cpp y body.cpp. El primero es el principal y se encarga de la simulación. En el segundo se han agrupado las funciones para crear el cubo, establecer su orientación inicial y dibujarlo en la pantalla.
|
|
|