Tutorial:ODE y robots modulares:Caida libre (II)

De WikiRobotics
Revisión del 03:13 5 ene 2009 de Obijuan (Discusión | contribuciones) (Puntos y articulaciones de contacto)

Saltar a: navegación, buscar

Simulación de un cubo en caida libre (II)

Icono index.png Índice del tutorial.

Introducción

En este ejemplo partiremos de la simulación del cubo en caida libre presentada en el capítulo anterior, añadiremos el suelo e implementaremos la detección de colisiones. Ahora el cubo chocará contra el suelo y permanecerá sobre él hasta el final de la simulación. Se presentan los nuevos parámetros que hay que definir para la realización de las colisiones y código necesario para su implementación.

Objetivos

  • Incorporar detección de colisiones en el mundo virtual
  • Presentar los nuevos parámetros que aparecen

Código

Programa principal
Definición de las constantes.

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++  -Iinclude  -o box2 box2_ex/box2.cpp -lm -lode

Conceptos sobre colisiones

Cuerpos y geometrías

Los objetos que se simulan en ODE constan de dos elementos:

  • Cuerpos (bodies): Son los elementos de simulación del ODE. Se comportan como sólidos rígidos. En sus propiedades se definen todas las magnitudes cinemáticas y dinámicas: vector de posición, orientación, velocidades lineales y angulares, aceleraciones lineales y angulares, fuerzas externas, etc.
  • Geometrías: Determinan la forma del cuerpo. Se utilizan para la detección de colisiones y la representación en la pantalla. Un cuerpo puede tener la forma de hexaedro, cilincro, espera, plano, etc.

Los objetos a simular en ODE tiene estos dos componentes: el cuerpo y la geometría. Si no estamos interesados en las colisiones ni en la representación gráfica de los objetos, no será necesario definir ninguna geometro (En el ejemplo de la simulación del cubo en caída libre, del capitulo anterior, no definimos ninguna geometría)

Para la simulación de los objetos utilizaremos la estructura MyBody, que contiene los identificadores del cuerpo y la geometría:

struct MyBody {
  dBodyID body;       //-- The ODE body
  dGeomID geom;       //-- The body's geometries
};

Puntos y articulaciones de contacto

Ode mr collision.png

Espacios de colisión

Parámetros

Explicación del código

Enlaces