如何将2个四元数旋转回起始位置,然后计算相对旋转?

5
我有两个IMU(惯性测量单元),希望能计算它们的相对旋转。不幸的是,IMU的输出给出了相对于全局坐标系的四元数(我认为这就是四元数的工作方式)。然而,我需要获取一个传感器相对于另一个传感器的旋转测量值。同时,这两个传感器已经从它们在全局坐标系中的初始方向进行了旋转。
例如:我将一个传感器固定在胸部,另一个传感器固定在手臂上。这两个传感器都校准到了全局坐标系。如果我保持这种姿势,我可以很好地计算旋转。然而,当我将身体旋转到不同的方向(向右旋转90度)并执行相同的动作时,传感器绕其本地轴旋转,但输出相对于全局轴的四元数(传感器y轴的旋转被输出为绕x全局轴的旋转)。
我希望相同的动作在不同的方向(躺下、面向左、右、前或后)产生相同的四元数(因此显示相同的旋转)。
基本上,我希望其中一个传感器成为旋转“参考”轴,并且我想使用另一个传感器相对于参考传感器(旋转参考轴)测量旋转变化。
1个回答

4
将一个Q1帧转换为另一个Q2帧非常简单,只需执行如下操作即可:
Q1intoQ2 = q1.inversed() * q2;
// check it,  q2 = q1 * Q1intoQ2 == q1 * q1.inversed() * q2 == q2

如果您首先应用 q1,然后应用 Q1intoQ2,那么数学公式为 q2=Q1intoQ2 * q1,因此 q1 的逆应该从右侧应用到 q2,而不是从左侧。什么才是正确的方法? - Itamar Katz
好的,我明白了。q2 * q1.inversed() 是将 q1 旋转到 q2 的旋转,但是在原始参考系中。为了改变到 q1 参考系,我们从左边乘以 q1.inverse(),从右边乘以 q1,得到你的表达式。 - Itamar Katz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接