小编And*_* G.的帖子

态度变化 - 角度和轴问题 - 四元数学

我有一个应用程序,当用户在对象周围走动时记录角度,同时将设备(最好)指向对象的中心.角度会根据用户的命令重置 - 因此参考态度会重置.

使用欧拉角产生万向节锁,所以我目前使用四元数并以这种方式计算角度:

double angleFromLastPosition = acos(fromLastPositionAttitude.quaternion.w) * 2.0f;
Run Code Online (Sandbox Code Playgroud)

这样可以提供良好的精度,并且它可以很好地工作,因为设备的俯仰和偏航不会改变.换句话说,当角度显示360度时,我最终在与圆的开始相同的位置.

问题1:如果设备的偏航和俯仰稍微改变(用户不直接指向物体的中心),angleFromLastPosition也是如此.我理解这一部分,因为我的角度公式只显示了3D空间中两个设备态度之间的角度.

场景:

  • 我标记了旋转姿态的开始,并在指向中心的同时开始围绕物体旋转
  • 我停下来,比如45度,并通过指向更高或更低来改变设备的音高.角度相应地改变.
  • 我希望看到的是:即使俯仰或偏航发生变化,角度仍保持在45度.

问题1是,如何仅使用四元数计算设备的滚动,并忽略其他两个轴的变化(至少在某个合理的度数范围内).

问题2:如果我旋转一点然后完全冻结设备(在三脚架上没有任何振动),angleFromLastPosition以大约10-20秒的1度漂移,并且看起来不是线性的.换句话说,它首先快速漂移,然后大幅减速.有时我根本没有漂移 - 如果设备静止,角度是坚如磐石的.这让我迷失了解正在发生的事情.

问题2,这里发生了什么,我该如何处理漂移?

我经历了不少文章和教程,目前四元数学已经超出了我的范围,希望有人能够提供一些提示,链接或几行代码.

rotation quaternions ios gyroscope core-motion

11
推荐指数
1
解决办法
2786
查看次数

标签 统计

core-motion ×1

gyroscope ×1

ios ×1

quaternions ×1

rotation ×1