En un post anterior ya hablé de los formatos de archivo para la captura de movimientos corporales.
En este quiero explicar uno en contrato el formato BVH (Biovision Hierarchical Data) de paso añado algo de documentación sobre él en la red ya que se usa mucho pero parece que a nadie le ha dado por documentarlo, supongo también que esto se debe a que existen multitud de editores de movimientos que dan como resultados este tipo de archivos pero realmente no tienes porqué enfrentare al código.
Bueno lo dicho, aquí expongo a modo de documentación lo que he descubierto sobre el formato BVH.
Esto es lo que contiene un archivo BVH:
HIERARCHY
ROOT hip
{
OFFSET 0.00 0.00 0.00
CHANNELS 6 Xposition Yposition Zposition Xrotation Zrotation Yrotation
JOINT abdomen
{
OFFSET 0.000000 3.422050 0.000000
CHANNELS 3 Xrotation Zrotation Yrotation
JOINT chest
{
OFFSET 0.000000 8.486693 -0.684411
CHANNELS 3 Xrotation Zrotation Yrotation
JOINT neck
{
OFFSET 0.000000 10.266162 -0.273764
CHANNELS 3 Xrotation Zrotation Yrotation
JOINT head
{
OFFSET 0.000000 3.148285 0.000000
CHANNELS 3 Xrotation Zrotation Yrotation
End Site
{
OFFSET 0.000000 3.148289 0.000000
}
}
}
JOINT lCollar
{
OFFSET 3.422053 6.707223 -0.821293
CHANNELS 3 Yrotation Zrotation Xrotation
JOINT lShldr
{
OFFSET 3.285171 0.000000 0.000000
CHANNELS 3 Zrotation Yrotation Xrotation
JOINT lForeArm
{
OFFSET 10.129278 0.000000 0.000000
CHANNELS 3 Yrotation Zrotation Xrotation
JOINT lHand
{
OFFSET 8.486692 0.000000 0.000000
CHANNELS 3 Zrotation Yrotation Xrotation
End Site
{
OFFSET 4.106464 0.000000 0.000000
}
}
}
}
}
JOINT rCollar
{
OFFSET -3.558935 6.707223 -0.821293
CHANNELS 3 Yrotation Zrotation Xrotation
JOINT rShldr
{
OFFSET -3.148289 0.000000 0.000000
CHANNELS 3 Zrotation Yrotation Xrotation
JOINT rForeArm
{
OFFSET -10.266159 0.000000 0.000000
CHANNELS 3 Yrotation Zrotation Xrotation
JOINT rHand
{
OFFSET -8.349810 0.000000 0.000000
CHANNELS 3 Zrotation Yrotation Xrotation
End Site
{
OFFSET -4.106464 0.000000 0.000000
}
}
}
}
}
}
}
JOINT lThigh
{
OFFSET 5.338403 -1.642589 1.368821
CHANNELS 3 Xrotation Zrotation Yrotation
JOINT lShin
{
OFFSET -2.053232 -20.121670 0.000000
CHANNELS 3 Xrotation Zrotation Yrotation
JOINT lFoot
{
OFFSET 0.000000 -19.300380 -1.231939
CHANNELS 3 Xrotation Yrotation Zrotation
End Site
{
OFFSET 0.000000 -2.463878 4.653993
}
}
}
}
JOINT rThigh
{
OFFSET -5.338403 -1.642589 1.368821
CHANNELS 3 Xrotation Zrotation Yrotation
JOINT rShin
{
OFFSET 2.053232 -20.121670 0.000000
CHANNELS 3 Xrotation Zrotation Yrotation
JOINT rFoot
{
OFFSET 0.000000 -19.300380 -1.231939
CHANNELS 3 Xrotation Yrotation Zrotation
End Site
{
OFFSET 0.000000 -2.463878 4.653993
}
}
}
}
}
MOTION
Frames: 1
Frame Time: 0.033333
0.000000 43.528519 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
Se pueden distinguir dos partes bien diferenciadas, HIERARCHY y MOTION.
HIERARCHY
En la primera se representa la estructura del esqueleto describiendo los huesos o partes del cuerpo en una jerarquía, de este modo por ejemplo en este ejemplo podemos ver como la raíz de todas las partes del cuerpo es la cadera, y tiene como uniones hijas al abdomen y las 2 piernas, a su vez el abdomen tiene como hijo al pecho, y así sucesivamente hasta completar las partes del cuerpo que se quieran simular.
Cada una de estos huesos o partes del cuerpo vienen caracterizadas por unos parámetros.
OFFSET indica las coordenadas x, z e y donde comienza.
CHANNELS indica el numero y nombre de las variables que pueden cambiar la posición y rotación del hueso. (Solo se indica posición en la raíz, en los demás solo se indicará la rotación.
JOINT indica los huesos hijos a los que está unido y cuyo OFFSET será su límite Nota: el valor de las variables de rotación de un hueso siempre se consideran con respecto al hueso padre.
MOTION
En la segunda parte se representa el movimiento del esqueleto.
Para ello primero se indica el numero de frames (numero de movimientos a realizar), después indicamos la velocidad de esos movimientos(Frames Time).
A partir de ahí cada línea (hasta un retorno de carro explicito “/n” no de los que ocurren con el auto-formateado para que no se salga de la pantalla) representa uno de estos frames con una serie de cifras que se corresponden con las variables declaradas en la estructura del esqueleto en cada canal en el orden en el que se han declarado. De esta manera cuanto más complicado es nuestro esqueleto más cifras habrá en cada línea de movimiento.
Ejemplo de frame (aunque aparezca formateado en varias líneas en realidad solo tiene un retorno de carro al final):
0.000000 43.528519 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 60.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
Este frame solo tiene valores distintos de 0 para un par de variables,
El valor 43.528519 se corresponde con Yposicion del elemento hip, esto se traduce en que el esqueleto tiene una posición absoluta elevada, (suponiendo que en 0 está el suelo se habrá elevado la cadera que es el origen de todas las demás partes para que al estar de pie el modelo virtual los pies estén en posición 0).
Y el valor 60.00000 se corresponde con Xrotation del elemento neck (cuello), lo cual significa que el modelo está mirando hacia arriba.
Concurso Universitario de Software Libre
Hola! Còmo va lo de los brazos? Ànimo, que està muy chulo!
ah, creo que ya lo he visto màs abajo!
Hola, me gustaría saber qué otros tipos de formatos de captura de movimiento existen. Estoy por comenzar un proyecto y necesito esa información.
Gracias.
Puedes consultar otros formatos de captura de movimiento en este enlace:
http://en.wikipedia.org/wiki/List_of_motion_and_gesture_file_formats
Muchísimas gracias!
Es interesante el estado del arte sobre ésta temática. actualmente estoy tratanto de desarrollar un sistema de captura de movimiento corporal con vision estereo.