2

我想知道是否有可能,因为 Wiimote 有 3 个加速度计,将加速度计读数转换为 3D 矢量。

我知道提取俯仰/滚动的技巧,但它只使用 X 和 Z 加速度计,并且存在万向节锁定问题。

我想要的是一个完整的 3D 矢量,可以转换为四元数旋转表示。

4

1 回答 1

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 的用途。

于 2009-07-31T17:00:08.387 回答