iPhone-了解iPhone的旋转

iPhone-了解iPhone的旋转,iphone,core-motion,Iphone,Core Motion,我在拼命想弄明白这一点。请看下一张图片 假设我有一部iPhone放在桌子上。此时,通过堆芯运动的旋转读数为偏航、横摇和俯仰的0,0,0(图A) 然后我把它滚90度。现在它坐在桌子上,左边是home按钮,右边是home按钮。现在读0,0,0(图B) 现在我把它偏转180度。它现在正坐在桌子上,右手放在桌子上。主页按钮在左边。现在读数为180,0,0(图C) 问题来了,如果我现在滚动它。假设我把它转45度。我应该读180,-45,0,但我读180,-45180????(图D) 为什么呢?如果我从未改

我在拼命想弄明白这一点。请看下一张图片

假设我有一部iPhone放在桌子上。此时,通过堆芯运动的旋转读数为偏航、横摇和俯仰的0,0,0(图A)

然后我把它滚90度。现在它坐在桌子上,左边是home按钮,右边是home按钮。现在读0,0,0(图B)

现在我把它偏转180度。它现在正坐在桌子上,右手放在桌子上。主页按钮在左边。现在读数为180,0,0(图C)

问题来了,如果我现在滚动它。假设我把它转45度。我应该读180,-45,0,但我读180,-45180????(图D)

为什么呢?如果我从未改变,为什么它会给我一个音高值?其他角度的旋转如何影响俯仰?谢谢


加速计测量两个加速度矢量之和:重力和用户加速度。用户加速度是用户赋予设备的加速度。由于核心运动能够使用陀螺仪和加速计跟踪设备的姿态,因此它可以区分重力和用户加速度

这可能对您有所帮助:


对于减少四元数或旋转矩阵等任意旋转,欧拉角并不是那么精确。通常有多组角度来描述旋转,因此它不是唯一的

[编辑:]如Harinder core motion所述,将角度转换为规范表示,即存在一些约束-我不确定,但认为俯仰角度限制为[-90;90]


请看一看或阅读一些关于这一现象的类似文章。

这个问题看起来很相关:


我无法复制相同的结果。使用(自由),报告为横滚、俯仰、偏航,我得到位置A的(0,0,0),然后是B的(-90,0,0),C的(-90,0,180)(这实际上导致设备背对我,不像在你的图表中),然后是D的(-45,0,180)

即使翻动它,因为你似乎列出了偏航,横滚,俯仰,这仍然是(0,0,0)->(0,-90,0)->(180,-90,0)->(180,-45,0)。在报告之前增加一个-90的滚动将使俯仰和偏航轴平行,从而产生比I更快的打字机所提到的速度

基本问题是,任何描述三轴旋转的尝试都会给出一个隐式的旋转顺序——它是“围绕x旋转这么多,然后围绕y旋转这么多,然后围绕z旋转这么多”。无论您选择什么顺序,围绕第一个轴的旋转始终有可能与其他两个轴对齐。方向是三维的,因此可以用三个数字来描述(例如,使用单位四元数,但第四项是隐式的),但不能用欧拉角来描述


编辑:参考上面的评论,您可以通过向-startDeviceMotionUpdatesToQueue:withHandler:注册处理程序来获得增量移动。这将接收一系列CMDeviceMotions,从中可以查看rotationRate成员。

如果您可以接受增量移动,则可以使用“四元数差”操作。假设之前有一个四元数的旋转,称为q1,现在是q2。然后可以计算它们之间的增量dQ,这样q2=q1*dQ是有效的。您所要做的就是构建q1(q1^(-1))的倒数,然后得到:

dQ=q1^(-1)*q2

如果deviceMotionInterval足够高,您总是可以使用方便的小Euler角,而不需要任何90°奇点或其他小东西。此解决方案的可能缺点可能是由于错误传播和缺少虚拟空间的反馈而产生轻微漂移。示例:如果您将iPhone放在一张显示立方体的桌子上,然后进行一系列旋转,当您将手机放回起始位置时,您可能会发现立方体的角度位移

[编辑:忘记了某些部分]为了消除漂移效应,您“只”需要一种方式将上一个对象的真实位置(q1)表示为四元数,即屏幕上显示的应用程序中的坐标。如果使用Unity之类的工具,可能只是读取对象的适当属性。如果您无法轻松访问它,您可以手动跟踪此位置


如果您想了解更多信息,请参阅第168页。

我使用四元数转换了所有旋转,问题仍然存在。同样的问题你有没有一个实际的例子来说明应该如何做?元代码会很好,只是给我一个如何解决这个问题的想法。ThanksI在三周前就开始努力解决这个问题,最后我几乎让它工作了,但作为游戏控制器,它变得非常复杂,因此我们扔掉了它:-(在这种情况下,我们使用两个轴进行控制,俯仰的90度限制非常痛苦。基本上这取决于你的需要。你必须使用所有3个旋转轴还是仅使用其中的1或2个?是的,我知道。出于这个原因,我决定使用四元数来计算角度。它工作正常……除了这个“小”之外。”问题。谢谢。我已经读过了,但它缺少一个具体的例子来说明所解释的内容。1.感谢精彩的演讲:-)谢谢!现在我必须有一个好的解决方案":DDo您需要解释四元数以确定绝对位置,或者您可以处理增量移动吗?如果我可以获得增量移动,我将是一个快乐的人,因为我使用绝对角度精确计算增量移动!我已尝试在读取值后重置姿态参考,因此移动将d是相对于上一个读数。我遇到的问题是,如果我将X度旋转到一个方向,然后返回相同的量,我会得到不同的读数。例如:iphone静止时为0,0,0,然后我旋转到某个角度,然后返回到静止状态,我将不再读取0,0,0。好的新想法。我开始一个新的答案,以避免弄乱q