Ориентация Wiimote как трехмерный вектор

Интересно, возможно ли, поскольку Wiimote имеет 3 акселерометра, преобразовать показания акселерометров в 3D-вектор.

Я знаю трюк для извлечения тангажа/крена, но он использует только акселерометры X и Z и имеет проблему с блокировкой подвеса.

Я хотел бы получить полный трехмерный вектор, который можно преобразовать в представление вращения кватерниона.


person Luper Rouch    schedule 31.07.2009    source источник
comment
Wii MotionPlus предлагает более точное управление.   -  person geowa4    schedule 31.07.2009
comment
Да, я знаю, но мне интересно, почему вы не можете получить трехмерную информацию от чего-то, что имеет 3 независимых датчика...   -  person Luper Rouch    schedule 31.07.2009


Ответы (1)


Если подумать, значения акселерометров являются компонентами вектора, который я искал... Вам нужно только выразить кратчайшую дугу между эталонным вектором и этим вектором в виде кватерниона.

Например, если accel является (нормализованным) вектором, содержащим значения акселерометра:

reference = Vector3(0, 0, 1)
axis = crossp(accel, reference)
angle = acos(dotp(accel, reference))
q = Quaternion::from_xyzr(axis, angle)
rotation_matrix = q.matrix()

Я выбрал {0, 0, 1} в качестве опорного вектора, потому что это значения акселерометров в «положении покоя» (Wiimote на столе, направленный на вас).

Это дает тот же тип движений, что и преобразование тангажа / крена акселерометров X / Z, но без блокировки карданного подвеса в вертикальных положениях.

Единственная проблема в том, что вы не получаете информацию о вращениях вокруг оси земного притяжения... Думаю, для этого и создан MotionPlus.

person Luper Rouch    schedule 31.07.2009