我想知道是否有可能,因为 Wiimote 有 3 个加速度计,将加速度计读数转换为 3D 矢量。
我知道提取俯仰/滚动的技巧,但它只使用 X 和 Z 加速度计,并且存在万向节锁定问题。
我想要的是一个完整的 3D 矢量,可以转换为四元数旋转表示。
我想知道是否有可能,因为 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} 作为参考向量,因为它是加速度计在“静止位置”的值(Wiimote 在桌子上,指向你)。
这提供了与 X/Z 加速度计俯仰/滚动转换相同的运动类型,但在垂直位置没有万向节锁定。
唯一的问题是你没有得到关于地球重力轴旋转的信息……我想这就是 MotionPlus 的用途。