Ориентация Wiimote как трехмерный вектор - PullRequest
2 голосов
/ 31 июля 2009

Интересно, возможно ли, так как Wiimote имеет 3 акселерометра, преобразовать показания акселерометров в трехмерный вектор.

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

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

1 Ответ

1 голос
/ 31 июля 2009

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

Например, если 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.

...