繁体   English   中英

iPhone-了解iPhone旋转

[英]iPhone - understanding iPhone rotation

我正在撞墙,试图理解这一点。 参见下一张图片。

假设我有一个放在桌上的iPhone。 此时,对于偏航,横摇和俯仰,通过铁心运动的旋转读数为0,0,0(图A)。

然后我将其滚动90度。 现在它坐在桌子上,左侧是主页按钮,右侧是。 现在读取0,0,0(图片B)。

现在我将其偏航180度。 它现在正坐在桌子的右侧。 左侧的主页按钮。 现在读取180,0,0(图片C)。

如果我现在滚动它,问题就来了。 假设我将其滚动到-45度。 我应该读180,-45,0,但我读的是180,-45,180 ???? (图D)。

这是为什么? 如果我从不改变它,为什么能给我一个音高值呢? 俯仰角如何受到其他角度旋转的影响? 谢谢。

在此处输入图片说明

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

dQ = q1 ^(-1)* q2

如果deviceMotionInterval足够高,那么您始终会拥有方便的小Euler角,而不会有任何90°奇异点或其他令人讨厌的东西。 该解决方案的可能缺点可能是由于错误传播和虚拟空间缺乏反馈而导致的轻微漂移。 示例:如果将iPhone放在显示立方体的桌子上,然后进行一系列旋转,则将手机放回初始位置时,可能会发现立方体的角度偏移。

[编辑:忘了一部分]要摆脱漂移的影响,您“仅”需要一种方法来将最后一个对象的实际位置(q1)表示为四元数,即在应用程序中在屏幕上显示的坐标。 如果您使用Unity等工具,则可能只是在读取对象的适当属性。 如果您无法轻松访问它,则可以手动跟踪该位置。

如果您想了解更多有关此内容的信息,请看Fletcher Dunn撰写的3D数学基础知识,用于图形和游戏开发,Ian Parberry,第168页。

欧拉角不能精确地描述四元数或旋转矩阵之类的任意旋转。 通常有多个角度来描述旋转,因此它不是唯一的。

[编辑:]如Harinder所述,核心运动将角度转换为标准表示,即存在一些约束-我不确定,但认为俯仰角限于[-90; 90]。

看看Gimbal Lock或有关此现象的一些类似文章。

我无法复制相同的结果。 使用(免费) 陀螺仪应用程序 ,以滚动,俯仰,偏航报告,位置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:注册处理程序来获得增量运动。 这将收到一系列CMDeviceMotion,您可以从中查看rotationRate成员。

加速度计测量两个加速度矢量的总和:重力和用户加速度。 用户加速度是用户赋予设备的加速度。 由于Core Motion能够同时使用陀螺仪和加速度计跟踪设备的姿态,因此可以区分重力和用户加速度

这可能对您有帮助:

绝对度测量

这个问题看起来很相关:

iPhone-偏航,俯仰和横滚的核心运动范围

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM