2010-12-07 83 views
1

我正在使用WiiM +陀螺仪来计算旋转。使用四元数来表示C中的陀螺仪角度#

我整合沿偏航,俯仰和翻滚轴转的速率,并将其存储在一个叫做angleSum

因此,对于每个读矢量,angleSum(读取)表示从初始的Y,p和r转方向。

我然后使用四元数(其我与完全不熟悉)来表示这样的:

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

但是当我在一个方向上转动我的90度并打印出qx,qy和qz转弯时,所有的读数都受到转弯的影响(它们都显示90度回转和后退, )

我的问题是非常基本的:我如何使用这个四元数结构来表示方向?就偏航,俯仰和俯仰而言,我需要一个绝对(或至少是相对)的方向。

谢谢!

回答

1

A quaternion是松散地定义为绕定义的轴的轴和旋转分量的四维结构(通常表示为{x, y, z, w})。看看the method you've referenced,我会假设你在提供偏航,俯仰和滚动radians而不是度数。这将从表中删除最常见的实现错误。

假设您的实施是正确的(似乎是),q.x,q.yq.z都会随着任何轮换而发生变化。请记住,你正在定义一个四维对象;四元数一样Euler angles.

如果您想喜欢以获得更人性化的Euler标记读出,考虑将你的四元数回偏航,俯仰和滚转。 Here's a discussion在XNA中这样做。

+0

感谢您的澄清。但是如果我将它转换回欧拉角,那么首先创建四元数的目的是什么?我不对它进行任何操作(我的角度最初是度数,我转换为弧度并用于创建四元数) – Imelza 2010-12-07 05:58:30