# Wii Motion Plus



## Zuri (Abr 20, 2010)

Tengo que realizar un proyecto que es algo parecido a la wii. Digamos que se trata de un sistema de seguimiento del movimiento humano. Dispongo de un acelerómetro, un giróscopo y una brújula electrónica, todos de 3 ejes con salida digital. Mi duda es la siguiente: se como funcionan y que salida obtengo de cada uno de ellos pero no sé como utilizar esa información para caracterizar movimientos de un brazo, como por ejmplo, levantarlo, bajarlo y desplazarlo horizontalmente.

¿Existen algoritmos?


----------



## asherar (Abr 20, 2010)

Si la "salida" es la representación de una mano humana, deberían ser las 3 
coordenadas x,y,z de la muñeca y sus dos ángulos de orientación (en términos 
náuticos serían rolido y cabeceo). 

rolido: rotación de la mano alrededor del eje longitudinal del brazo
cabeceo: rotación de la mano alrededor de un eje transversal al brazo

Espero que esto te sirva al menos de guía.

Saludos


----------



## Zuri (Abr 20, 2010)

Si, pero mi pregunta va más allá!

El problema que tengo es que no se como utilizar esas salidas para caracterizar un movimiento, se decir, el acelerómetro me va da la aceleración en los ejes, x y z, el giróscopo la rotación alrededor de cada eje, y la brújula, los grados con respecto al norte.

Para hacerlo sencillo, se supone que estos tres sensores irian en la mano, y que los movimientos que se realizan van a ser rectos, es decir, sin doblar el codo.


----------



## asherar (Abr 20, 2010)

En general deberas utilizar las formulas de la Fisica (Cinematica)

x = x0 + V0x t + 1/2 Ax t**2, 
Vx = V0x + Ax t

y lo mismo para las otras 2 coordenadas (y,z). t**2 es t al cuadrado.

*X0,Y0,Z0*, y *V0x, V0y, V0z* son los valores iniciales 
*Ax, Ay, Az* te las da el acelerometro.

Para los angulos es parecido.

Qué chips   tienes ?


----------



## Zuri (Abr 20, 2010)

El acelerómetro MMA745xL me da la Ax Ay y Az (aceleraciones en cada eje)

El gyroscopo ITG-3200 me da la Wx Wy Wz (velocidad angular, es decir grados/segundos)

La brújula HMC6343 me da el Heading (grados con respecto al norte)


----------



## asherar (Abr 20, 2010)

Entonces no dispones de aceleracion angular. 
Supongo que Wx significa velocidad angular alrededor del eje x.
Las formulas en este caso son mas simples. Si los angulos son qx qy qz: 

qx = qx + Wx dt

idem para y,z.

dt es el intervalo entre dos mediciones. Como no tienes datos de aceleracion angular esto tendra mas error cuanto mas grande sea dt.

La brujula se me hace que no te sirve mas que para corregir la orientacion cada tanto.


Para no necesitar valores iniciales, ni tiempo absoluto, al ser referidas a las mediciones en el 
instante anterior las formulas para x,y,z quedan:

x = x + Vx dt
Vx = Vx + Ax dt

idem y,z.


----------



## Zuri (Abr 20, 2010)

Supongamos por ejemplo que tenemos el brazo hacia abajo, y lo levantamos al lateral hasta la altura de los hombros: (supongamos que el eje sobre el que rotamos es el x)

Mediante esta formula obtendría  los grados, que ha levantado el brazo? aproximadamente 90 grados.


----------



## asherar (Abr 20, 2010)

Zuri dijo:


> Supongamos por ejemplo que tenemos el brazo hacia abajo, y lo levantamos al lateral hasta la altura de los hombros: (supongamos que el eje sobre el que rotamos es el x)
> 
> Mediante esta formula obtendría  los grados, que ha levantado el brazo? aproximadamente 90 grados.



Claro. 
Los errores existen, como dije, ya que las formulas suponen que todo ocurre a *velocidad angular* (Wx,Wy,Wz) constante. En x,y,z, en cambio, se supone que la *aceleracion lineal *es constante. 
Estos errores seran menores cuanto mas pequeño sea dt, el tiempo entre mediciones.


----------



## Zuri (Abr 20, 2010)

Ya, pero supongamos que estos errores se van a acumulando, y al final nada va ser exacto ni casi exacto.¿Qué se puede hacer?

Pero, es esta la forma de seguir el movimiento humano que utiliza por ejemplo la nueva wii, o los elementos que se venden en xsens? (http://www.xsens.com/?gclid=CLGe3Y6LlaECFUGX2AodkC1VPA)


----------



## asherar (Abr 20, 2010)

Una cosa mas: 
Al calcular x,y,z debes probar como es mas exacto: 

si usar 

1) medir Ax
2) Vx=Vx + Ax dt 
3) x = x + Vx dt

o 

1) medir Ax
2) x = x + Vx dt
3) Vx=Vx + Ax dt 

En las simulaciones, cuando uno no mide Ax sino que la va calculando con la ecuación de la dinámica, de una manera se conserva la energia, de la otra no, pero no recuerdo cual era la justa. No se si en este caso habrá diferencia. 

Con los angulos no deberia haber problema.

Saludos



Zuri dijo:


> Ya, pero supongamos que estos errores se van a  acumulando, y al final  nada va ser exacto ni casi exacto.¿Qué se puede hacer?



En los brazos robot uno debe resetear cada tanto (plotters, cnc, etc.). 
Aca *yo haria* lo mismo. Establecer una posicion "cero", a la que se debe ir cada tanto, que la aplicacion lo permita sin molestar demasiado al usuario. Digo yo. 



Zuri dijo:


> ...
> Pero, es esta la forma de seguir el movimiento humano que utiliza por ejemplo la nueva wii, o los elementos que se venden en xsens? (http://www.xsens.com/?gclid=CLGe3Y6LlaECFUGX2AodkC1VPA)



Yo creo que si, de lo contrario habria otra Fisica de la que aun no tengo noticias. 


El problema mayor con estos bichos es el "offset". 
Tal vez alguien que esté en el tema específico te pueda sugerir alguna técnica apropiada.

Googlea "correcciones de offset en acelerometros" a ver que encontrás

Saludos


----------



## Beamspot (Abr 21, 2010)

Las plataformas inerciales no se caracterizan precisamente por su precisión a lo largo del tiempo. Los acelerómetros acaban por generar derivas que se acumulan con el cuadrado del tiempo, mientras que los giróscopos son más lineales (error proporcional al tiempo), aunque se pueden solucionar al tener una brújula, que te da la posición real. Es decir, que si tienes una brújula o magnetómetro triaxial y no tienes campos magnéticos que te distorsionen la medida, podrías pasar precisamente sin los giróscopos.

El valor más importante de los giróscopos se debe utilizar para neutralizar las aceleraciones centrípetas.

La dinámica/cinemática es algo que se explica en física de COU. De ahí debe salir todo. Si a caso, mírate el Tipler de primero de físicas.

Recuerda que la aceleración se puede obtener fácilmente derivando la velocidad, y esta, derivando la posición. Hacerlo al revés implica a partir de aceleraciones (angulares o lineales) integrar para obtener la velocidad, y volver a integrar a partir de esta para obtener la posición.

Tanto derivar como integrar son simples restas o sumas, respectivamente, pero multiplicando por el dT, que debe ser lo más preciso (tiempo real) posible. El jitter del dT, más el error de cuantificación, linealidad y offsets (generalmente dependientes de la temperatura) de los acelerómetros son los causantes del error: el que introduce al integrar la aceleración E, se multiplica por dT, causando un error lineal en la velocidad. Al volver a integrar la velocidad, se vuelve a multiplicar por dT causando un error cuadrático que hace que las IMU sean muy malas a 'largo' plazo (pocos segundos, minutos en el mejor de los casos).

Si aplicamos esto a los giróscopos, la posición se arregla integrando sólo una vez, con el consecuente error lineal de la posición, que se puede arreglar con el magnetómetro. La aceleración, al obtenerse derivando, no genera error, ya que se resta el error de la medida Y del error de la medida Y-1. Por eso, si no hay campos magnéticos interferentes, derivando el ángulo de los magnetómetros puedes determinar la velocidad angular. Derivando esta, la aceleración angular.

Todo este rollo es el motivo por el cual los navegadores GPS más precisos usan la precisión a corto plazo de las IMU (cosa que poca gente sabe) con la precisión a largo plazo (y mala a corto) de los GPS, usando métodos de integración de la información, básicamente, filtros del señor Kalman.

Así que, en resumen, igual te conviene echarles una ojeada a estos últimos que son muy usados para estos menesteres, y sobre todo, son sencillísimos de usar. Para Einstein, claro.

Toma ya parrafada para acabar diciéndote que con acelerómetros y magnetómetros basta, si usas Kalman.

Por cierto, ST tiene un integrado con un acelerómetro y un magnetómetro triaxiales por I2C en un solo integrado, que para este tipo de aplicación, sería perfecto.


----------



## asherar (Abr 21, 2010)

Excelente, Beamspot. 

Sólo deseo agregar unas aclaraciones sobre los errores de las cuentas. 

Toda vez que se efectuen operaciones matemáticas con cantidades numéricas 
se producirá lo que se conoce como "propagación del error". 
Esto tiene toda una teoría que no está tan difundida como la mecánica, sino 
que es más familiar para quienes han tomado cursos en escuelas técnicas o en 
materias de la "facu" con prácticas de laboratorio. 

La propagación de errores es un tema como para entrar en más detalle, pero yo 
aquí resumo unas pocas ideas básicas que me vienen a la mente ahora, y que 
pienso son de las más importantes. Luego se podrán agregar otras. 
Esto puede ser útil si no se va a entrar en detalles de cálculo de la propagación, 
o si lo que se busca es tener una idea gruesa de la confiabilidad del método 
elegido. 

1.- Al cabo de muchas cuentas los errores debidos a causas aleatorias tienden a 
cancelarse, pero los errores debidos a causas sistemáticas tienden a sumarse. 

2.- Al sumar, los errores se suman, y al restar: *también*. 

3.- Al dividir por cantidades pequeñas, normalmente los errores se *amplifican*. 

4.- Siempre es preferible una fórmula expresada directamente en función de los 
datos, que una basada en resultados de otras cuentas.  

5.- En caso de poder elegir, primero conviene calcular las derivadas (mejor no 
tener que derivar)  y recién a lo último integrar. 

6.- Todo cálculo efectuado luego de la medición solo tiende a degradar   (poco o 
mucho) la calidad de la información que contiene el resultado. Lo máximo  que 
uno puede hacer es minimizar esa degradación.  

7.- Los errores no pueden corregirse, ni compensarse, ni calcularse sino solo 
*acotarse*.

Por los puntos 1, 2 y 3 es que se prefieren métodos basados en integrales y no 
en derivadas. Y es por los puntos 3 y 5 que te conviene medir aceleraciones y 
velocidades, para luego calcular coordenadas, en lugar de al contrario. 

Se pueden pensar modificaciones del método de medición para eliminar de raíz 
algunos errores sistemáticos, o hacer que también se cancelen, pero hay que 
ver cuántos otros errores más se están introduciendo en ese mismo trámite. 

Debido al punto 6, luego de medir o calcular se pueden aplicar filtros y métodos  
numéricos, pero la información que no estaba en los datos  originales no se 
puede recuperar. 
Digo esto para que no se vean a los filtros (de Kalman u otros) como "salvadores 
mágicos". Son sólo herramientas que corrigen algunos defectos, y deben ser 
usadas para eso. 

Como consecuencia del punto 7 se entiende que no hay ni medicion, ni cálculo 
libres de error. 

Saludos


----------



## Beamspot (Abr 21, 2010)

Cierto, Alejandro. Como tienes toda la razón, acotaré el tema del error que 'desaparece' al derivar.

Básicamente, la ventaja de derivar en lugar de integrar se debe a que el mayor componente del error de los acelerómetros y giróscopos se debe a un offset variable (lentamente, generalmente debido a la temperatura, y compensable midiendo esta) que al integrar se suma, pero al derivar, se resta (como sabemos, la derivada de una pseudo constante es nula). La linealidad varía poco, y generalmente también se reduce debido al mismo efecto.

La división nunca es recomendable, especialmente si se trabaja con aritmética entera, así que escalando correctamente los valores y tiempos, se puede llegar a eliminar a la hora de hacer la derivada. Simplemente, se resta.

Por otro lado, los errores de cuantificación, tal y como apuntas, siempre se acumulan, no importa si es por derivación o integración. Para mitigar esto, lo habitual es hacer oversampling, conseguir la mayor resolución posible en bits, y filtrados lo más optimizados posible.

En todo caso, el punto fuerte de los filtros de Kalman, es su habilidad no sólo para acotar el error y estimar su estadística, si no sobre todo porque permited coger valores de la misma medida (posición) de diferentes fuentes (integral de la IMU, posicional directo del GPS) y mezclarlo con la mínima desviación y covarianza (estadísticas de error). Eso no significa que sea ningún salvador mágico ni nada, pero es lo que permitión que el proyecto Apolo llegase a buen término (Rudolph Kalman formaba parte del equipo de Von Braun).


----------



## asherar (Abr 21, 2010)

Aclaro que no quise hacer un un teorema de la fatalidad, del tipo "manual de las 
leyes de Murphy". Me pareció oportuno listar algunas ideas que pueden tomarse 
como válidas en general. 

Al analizar el sistema en cuestión, se puede llegar a encontrar (con suerte)  
detalles que permitan hacer aproximaciones o simpificaciones útiles. 
Otras veces sólo queda pedir ayuda o resignarse. 

En este caso sé, por gente que conozco, y trabaja con esto hace un tiempo, que no 
es fácil lidiar con los acelerómetros, en particular por las derivas térmicas del offset 
que mencionaste. 

Saludos


----------

