消除来自传感器的四元数数据中的符号翻转

Eliminating sign flips in quaternion data from sensors

我从 AR 耳机获取传感器数据,它以四元数形式输出用户的头部方向。当我检查原始数据时,我发现连续的四元数样本中有几个明显的跳跃,尤其是对于 qw 和 qy 分量,如下所示。

因为我想在这个数据上使用一些机器学习算法,所以连续性很重要。为了摆脱翻转,我按照 this 答案中的建议翻转了所有四元数分量的符号,如果 qw < 0。这是有效的,因为 q 和 -q 表示相同的旋转,假设 q 是一个单位四元数。 使用这种方法,大部分翻转都消失了:

但是,我注意到这在 t=25000 左右为 qy 创建了另一个跳跃,其中 qy 的幅度非常接近 1.0。检查发生跳跃的具体样本,我将四元数值转换为欧拉角(偏航,俯仰,滚动)以获得更好的理解:

e1 = [175.84487617, 4.24149047, 170.7215615]
e2 = [175.0441748, -0.47157242, 169.98347392]

很明显,角度非常相似,除了音高值中的零交叉似乎导致 qy 翻转。我是否必须忍受这些发生在范围边界的不连续性,或者是否有办法使四元数完全连续?

不要根据四元数的一个特定元素翻转符号(例如,总是看着 qw)。这不是一个好的方案。相反,根据当时幅度最大的元素翻转符号。也就是说,在每一步重新计算哪个四元数元素的量级最大,并确保特定元素的符号在整个步骤中保持不变。有的时候你可能会根据qx翻牌子,有的时候你可能会根据qw翻牌子等等