Roll Pitch 和 Yaw 相互依赖

Roll Pitch and Yaw interdependence

我正在使用 this library in where I was hoping to find yaw rotation in degrees from the given reference frame

然而,当开始对其进行测试时,我注意到当以滚动和俯仰方式轻微移动设备时,偏航会发生剧烈变化。将设备放在 table 上并在其中旋转时似乎给出了正确的值。

我在查看滚动时也注意到 - 当以滚动方式旋转它时似乎给出了正确的值 - 轻微移动它的俯仰突然急剧改变值。

给定的值是否相互独立 - 从给定的参考系旋转?


请注意,该库使用四元数 - 因此不应该存在万向节锁定问题 - 或者它是否只是以度数表示旋转(使用欧拉角)?

Here是源码


编辑: 我修改了 react-native-sensors 以在 iOS(滚动、俯仰、偏航)上给我 CMDeviceMotions 态度。他们给了我彼此独立的旋转 - 这解决了问题。

Gimbal lock 是使用欧拉角(即偏航、俯仰、滚动或任何其他组合)的旋转表示的固有 属性。虽然您认为四元数不会遇到此问题是正确的,但您将它们转换成的欧拉角表示确实存在。

一个实践中经常用到的"solution",如果你想继续用欧拉角来表示你的旋转,就是把yaw-pitch-roll(x-y-z)表示换成在您的坐标系中效果更好的不同组合 - 查看 the wiki page 了解您可以尝试的组合。这基本上只是将万向节锁定到不同的角度组合,但对于具有 well-defined 值范围的实际应用,这通常足以避免问题。

根据您的 use-case,更 "correct" 的解决方案可能是完全切换到四元数表示法,这样可以完全避免该问题。