Objetivo:
Capturar datos de acelerómetros (en tiempo real o por archivo) y aplicarlos a un esqueleto en Blender como animación (armature).
¿Qué necesitas?
Dispositivo con acelerómetros (Arduino, ESP32, smartphone, etc.)
Transmisión de datos en tiempo real vía:
Serial (USB) o WiFi (sockets, MQTT)
Script en Python (externo o dentro de Blender)
Armature en Blender correctamente mapeada
BVH loader o rig controller personalizado
Opción A: Tiempo real (con Python externo + Blender Socket)
Enviar datos desde el microcontrolador o teléfono en formato JSON o CSV con valores XYZ por sensor.
Python listener externo:
Recibe los datos y se conecta a Blender vía sockets (TCP) o guarda en un archivo que Blender puede leer.
Blender: Script en Python que escuche esos datos y actualice los huesos del armature usando pose.bones["BoneName"].rotation_euler o location.
Aquí un esqueleto básico del script:
Código:
import bpy
import socket
import json
bone = bpy.data.objects["Armature"].pose.bones["Spine"]
bone.rotation_mode = 'XYZ'
# recibir datos
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost", 5000))
s.listen(1)
conn, addr = s.accept()
while True:
data = conn.recv(1024).decode()
if not data:
break
angles = json.loads(data)
bone.rotation_euler = (angles["x"], angles["y"], angles["z"])
bpy.context.view_layer.update()
Conecta múltiples sensores a distintos huesos.
Opción B: Datos guardados por lotes (formato .BVH o .CSV)
Si grabas los datos como ficheros .bvh, asegúrate que cada frame corresponde al formato correcto de huesos.
En Blender, puedes importar múltiples BVH en una misma armature, pero necesitarás combinar las acciones o usar NLA (Non Linear Animation Editor).
Si usas .csv, un script de Python dentro de Blender puede leerlos y convertir los datos por frame en rotaciones para los huesos.
¿Cómo aplicar múltiples archivos BVH al mismo rig?
Importa los BVH como Actions.
Abre el Dope Sheet > Action Editor.
Guarda cada uno con un nombre distinto.
En el NLA Editor, presiona Push Down y organiza las acciones una tras otra.
Consejo práctico:
Es más estable enviar los datos ya interpretados como ángulos desde el dispositivo o desde un script intermedio. Los acelerómetros por sí solos no ofrecen orientación completa (para eso necesitas también giroscopios/IMUs).