使用四元数计算 iphone 的偏航、俯仰和滚动?

Posted

技术标签:

【中文标题】使用四元数计算 iphone 的偏航、俯仰和滚动?【英文标题】:Use Quaternions to compute yaw, pitch and roll from iphone? 【发布时间】:2012-09-07 17:32:10 【问题描述】:

我看到很多问题和文章都提到四元数可以用来从 iPhone 获得更好、准确和稳定的偏航、俯仰和滚动读数,而不是直接读取它的偏航、俯仰和滚动读数。但与此同时,我还没有看到任何在 iPhone 平台上实现四元数的合适方法。作为一个初学者,真的很难知道,这些四元数是如何工作的并在一段代码中实现它们? (抱歉没有提供任何代码,因为我不知道它在苹果的 xcode 平台上是如何工作的)

所以请您回答我的问题,这样大多数用户都会从中受益!

提前致谢!

【问题讨论】:

【参考方案1】:

您不必实现任何东西,API 为您提供了四元数:

CMAttitude Class Reference, quaternion propery

我个人更喜欢旋转矩阵,因为我发现它们更易于理解和使用。

当我阅读你的问题时,我仍然觉得你想要偏航、俯仰和滚动。您必须在代码中无处不在使用四元数来消除偏航、俯仰和滚动导致的问题。

【讨论】:

但是如何在一段代码中连续访问它们来计算偏航、俯仰和滚动? 从四元数计算偏航、俯仰和滚动的那一刻,您将遇到与仅使用偏航、俯仰和滚动相同的问题。您必须在代码中使用四元数EVERYWHERE,而忘记偏航、俯仰和滚动。 @Ali- 实际上从设备准确获取角度变化率的最佳方法是什么?众所周知,积分陀螺仪数据存在漂移和积分误差累积的问题,那么获得稳定读数的最佳做法是什么? :) @sam 我现在很困惑。你想干什么?您想将这些值用于某事,它是什么? 我想沿着 y 轴尽可能准确地跟踪设备角度的连续变化。像这样想,如果你有一个垂直于重力的钟摆。当您向上移动设备时,钟摆的移动角度应该与用户移动的角度完全相同,但同时,如果用户连续移动 10 秒,它应该记录相对于参考垂直位置的准确角度变化正反两方面!

以上是关于使用四元数计算 iphone 的偏航、俯仰和滚动?的主要内容,如果未能解决你的问题,请参考以下文章

四元数到达万向节锁

c_cpp 旋转矩阵的偏航俯仰滚动

如何正确地使用四元数进行旋转

从四元数到 OpenGL 旋转

如何将欧拉角转换为四元数并从四元数中得到相同的欧拉角?

从四元数中提取偏航