1

我正在使用 WiiM+ 陀螺仪来计算旋转。

我将沿偏航、俯仰和横滚轴的转动速率积分,并将其存储在一个名为 angleSum 的向量中

因此对于每个读数,angleSum(reading) 表示从初始方向开始的 y、p 和 r 旋转。

然后我使用四元数(我完全不熟悉)来表示如下:

q = Quaternion.createfromyawPitchRoll(angleSum.yaw, angleSum.pitch, angleSum.roll*(-1))

但是当我将我的 wiimote 向一个方向旋转 90 度并打印出 qx、qy 和 qz 以进行转弯时,所有读数都会受到转弯的影响(它们都显示 90 度的转弯和返回,尽管其中两个的幅度较小)

我的问题很基本:我究竟如何使用这个四元数结构来表示方向?我需要偏航、俯仰和滚动方面的绝对(或至少相对)方向。

谢谢!

4

1 回答 1

1

四元数是一个四维结构,松散地定义为轴和围绕定义轴的旋转分量(通常表示为{x, y, z, w})。看看您引用的方法,我假设您以弧度而不是度数提供偏航、俯仰和滚动。这将从表中删除最常见的实现错误。

假设您的实现是正确的(而且看起来是正确的),q.x, q.y, 并且q.z都将随着任何轮换而改变。请记住,您正在定义一个四维对象;四元数与欧拉角不同。

如果您想更人性化的欧拉表示法获得读数,请考虑将您的四元数转换回偏航、俯仰和滚动。这是在 XNA 中这样做的讨论。

于 2010-12-07T05:38:51.623 回答