Perdón por adelantado por la pedazo de chapa que va a ser este post.
Todo ésto es con respecto a calcular la posición (no la orientación) que me he referido en el anterior post.
Una explicación detallada sobre cómo funcionan los sensores y por qué el DK1 no puede tener posicionamiento absoluto sin añadidos:
--La cámara y los led ir (DK2) -- Lo bueno : Ofrecen posicionamiento absoluto y autosuficiente, es decir, no necesita depende de otro método. Lo malo : La tasa de actualización es relativamente baja.
La cámara capta cada frame la posición de los led, dependiendo de su localización en el fotograma conoce la posición del HMD en el eje vertical y horizontal. La profundidad se calcula utilizando varios led como referencia y cuánta separación entre éstos se ve en el fotograma. Con éste método cada fotograma y su cálculo de la posición es independiente de la anterior ==> posicionamiento absoluto
Sus pegas son que sólo actualiza a 60 frames. (En el peor de los caso podría introducir ~16ms de desfase con la posición real de la cabeza).
-- Los IMU (aclerometros, giroscopios y magnetometros) (DK1 y DK2) -- Lo bueno : Es viable calcular cambios en la posición pero sólo para periodos de tiempo pequeños y con una tasa de actualización muy alta Lo malo : No son autosuficientes para calcular la posición y acumulan pequeños errores realmente rápido.
IMU 1 - El magnetómetro es única y exclusivamente una brújula electrónica y te dice en que dirección está el norte magnético y nada más. IMU 2 - Los giroscopios única y exclusivamente te dicen información relativa al momento angular, nada que ver directamente con la posición tampoco.
IMU 3 - Acelerómetros
El acelerómetro como ya he dicho antes en teoría es el único de los 3 tipos de IMU que puede ayudar directamente. En teoría y suponiendo unos IMU con una precisión y valor exactos y siempre actualizados al instante podrían utilizarse para calcular la posición lo mismo que en la práctica son autosuficientes para la orientación, sin necesidad de cámara ni otros elementos. Pero en la práctica, en la vida real, los sensores IMU no son perfectos y aunque si sirven para calcular la orientación y "autocorregirse", no funciona así para la posición y se necesita utilizar un sistema de posicionamiento absoluto externo (la cámara y los led ir).
Los acelerómetros funcionan muy bien para la orientación pero a la hora de servir para calcular la posición tienen muchos casos de uso en los que no funcionan bien (por eso digo que este no es el método principal):
1.- Sólo funcionan para calcular la posición cuando el cambio de posición implica cambios de cierta magnitud en la aceleración y aun así se necesitan muy buenos sensores para detectar con precisión cualquier pequeño cambio en esa aceleración. Si el cambio en la aceleración es muy pequeño y el sensor no puede no captarlo, simplemente no detecta cambio de posición.
2.- El resultado de los acelerómetros hay que integrarlo 2 veces (una para calcular la velocidad y otra para la distancia desplazada) para concluir cuanto se ha movido el sensor en el espacio y por ende en qué posición queda. Ésto de por sí supone muchas cosas:
a) La primera es que se presupone que la aceleración en el tramo de la medición ha sido constante para que el valor del desplazamiento obtenido sea correcto.
b) El desplazamiento calculado es un valor relativo y no absoluto, ya que dependemos de conocer la anterior posición espacial del sensor.
"nueva_posicion = posicion_anterior + dirección_desplazamiento * espacio desplazado"
, luego el cálculo puede acumular errores.
c) El acelerómetro solo capta cambios en la aceleración, así que si en una medición existía velocidad previa (o no) integrada de otras mediciones debemos tomarlo en cuenta. Luego si las anteriores mediciones llevaban algún pequeño error, se acumulará todavía más error.
3.- El desplazamiento obtenido al integrar la aceleración se conoce únicamente con relación a la gravedad (utilizando el mismo sensor). Por lo tanto necesitarás conocer hacia donde apunta el dispositivo, la orientación. Aunque la orientación con los IMU se corrije cada muy poco, tiene un pequeño error marginal en cada medición, luego acumulas el desplazamiento con un vector "direccion_desplazamiento" ligerísimamente incorrecto.
I7 6700K / MSI 1070 Gaming X / MSI Z170 Gaming M5 / 16GB RAM DDR4 3000Mhz / Aerocool X-Strike 800W Gold