Wiimote方向作为3D矢量

时间:2009-07-31 12:20:48

标签: quaternions wiimote

我想知道,由于Wiimote有3个加速度计,可以将加速度计读数转换为3D矢量。

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

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

1 个答案:

答案 0 :(得分: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制作的。