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

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

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

有帮助吗?

解决方案

进一步思考,加速度计值我正在寻找的向量的组件......你只需要将参考向量和这个向量之间的最短弧表示为四元数。

例如,如果 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}作为参考矢量,因为它是加速度计在“静止位置”的值。 (在桌子上,指着你)。

这提供了X / Z加速度计俯仰/滚转转换所做的相同类型的移动,但没有垂直位置的万向节锁定。

唯一的问题是你没有获得有关在地球重力轴上进行旋转的信息......我想这就是为MotionPlus制作的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top