我有两个IMU(惯性测量单元),希望能计算它们的相对旋转。不幸的是,IMU的输出给出了相对于全局坐标系的四元数(我认为这就是四元数的工作方式)。然而,我需要获取一个传感器相对于另一个传感器的旋转测量值。同时,这两个传感器已经从它们在全局坐标系中的初始方向进行了旋转。
例如:我将一个传感器固定在胸部,另一个传感器固定在手臂上。这两个传感器都校准到了全局坐标系。如果我保持这种姿势,我可以很好地计算旋转。然而,当我将身体旋转到不同的方向(向右旋转90度)并执行相同的动作时,传感器绕其本地轴旋转,但输出相对于全局轴的四元数(传感器y轴的旋转被输出为绕x全局轴的旋转)。
我希望相同的动作在不同的方向(躺下、面向左、右、前或后)产生相同的四元数(因此显示相同的旋转)。
基本上,我希望其中一个传感器成为旋转“参考”轴,并且我想使用另一个传感器相对于参考传感器(旋转参考轴)测量旋转变化。
例如:我将一个传感器固定在胸部,另一个传感器固定在手臂上。这两个传感器都校准到了全局坐标系。如果我保持这种姿势,我可以很好地计算旋转。然而,当我将身体旋转到不同的方向(向右旋转90度)并执行相同的动作时,传感器绕其本地轴旋转,但输出相对于全局轴的四元数(传感器y轴的旋转被输出为绕x全局轴的旋转)。
我希望相同的动作在不同的方向(躺下、面向左、右、前或后)产生相同的四元数(因此显示相同的旋转)。
基本上,我希望其中一个传感器成为旋转“参考”轴,并且我想使用另一个传感器相对于参考传感器(旋转参考轴)测量旋转变化。
q1
,然后应用Q1intoQ2
,那么数学公式为q2=Q1intoQ2 * q1
,因此q1
的逆应该从右侧应用到q2
,而不是从左侧。什么才是正确的方法? - Itamar Katzq2 * q1.inversed()
是将q1
旋转到q2
的旋转,但是在原始参考系中。为了改变到q1
参考系,我们从左边乘以q1.inverse()
,从右边乘以q1
,得到你的表达式。 - Itamar Katz