俯仰和偏航相互依赖

时间:2019-05-06 12:20:11

标签: android ios quaternions devicemotion

我正在使用this库,希望从给定的reference frame中找到以度为单位的偏航角旋转。

但是,当开始测试时,我注意到以滚动和俯仰方式稍微移动设备时,偏航角发生了急剧变化。将设备放在桌子上并旋转时,似乎可以提供正确的值。

我还注意到注视滚动时-滚动滚动时似乎提供了正确的值-略微倾斜它在俯仰时会急剧改变该值。

给定的值是否不是彼此隔离的-从给定的参考系旋转吗?


请注意,该库使用四元数-因此不应该存在万向节锁定问题-还是因为仅以度数(与欧拉角)表示旋转引起的?

Here是源代码


编辑: 我修改了react-native-sensors,使我在iOS上的CMDeviceMotions姿态(滚动,俯仰,偏航)成为可能。他们彼此独立地给我轮换-解决了这个问题。

1 个答案:

答案 0 :(得分:1)

Gimbal lock是使用欧拉角(即偏航角,俯仰角,横滚角或任何其他组合)表示旋转的固有属性。虽然您确定四元数不会受到此问题的影响,但是将它们转换为四元数的欧拉角表示确实可以。

如果您想继续使用欧拉角来表示旋转,通常在实践中使用的“解决方案”是从偏航-俯仰-横滚(xyz)表示切换为在您的坐标下效果更好的其他组合系统-查看the wiki page中可以尝试的组合。这实际上只是将万向架锁置于不同的角度组合上,但是对于具有明确定义的值范围的实际应用而言,这通常足以避免出现问题。

根据您的用例,更“正确”的解决方案可能是完全转换为四元数表示,从而完全避免了该问题。