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

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

我还注意到,在查看滚动时-在滚动滚动时似乎给出了正确的值-稍微倾斜地将其突然移动会大大改变该值。

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



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

Here是源代码



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

最佳答案

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

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

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

08-18 14:17