我正在使用两个相同类型的IMUs(BHI160,即方向相对于北方且与北方对齐,IMU的本地y轴指向北方)在两个物体上,假设是笔,增加了一个困难,即如果我将两个物体平行放置,则两个IMU的z轴都指向上方,但是一个IMU相对于另一个绕z轴旋转180度。
现在,如果我正确理解这里的数学,我从IMU接收到的四元数数据是相对于北方方向的半角旋转,因此
由于IMUs的旋转,我会认为当两支笔指向同一方向时,我应该能够计算出第二支笔的方向为
因此,如果我想知道笔尖的相对旋转(例如,我需要从第一支笔的笔尖到第二支笔的笔尖旋转),我需要计算
编辑: 这基本上是这个问题的扩展,但我想知道同样的答案是否也适用于我的情况,或者在我的情况下是否需要包括已知的相对IMU旋转。
现在,如果我正确理解这里的数学,我从IMU接收到的四元数数据是相对于北方方向的半角旋转,因此
q * north_dir * q_inv = IMU_y_axis
(其中north_dir
和IMU_y_axis
是全局空间中的3D向量,或者为了计算的简便,是纯四元数)。由于IMUs的旋转,我会认为当两支笔指向同一方向时,我应该能够计算出第二支笔的方向为
q_2 = q_rot_z * q_1
,其中q_rot_z
等于绕z轴旋转90° - -遵循这样的直觉,即如果我将两支笔指向北方,我将通过计算q_rot_z * north_dir * q_rot_z_inv
获得笔2的y轴的全局方向(即笔1的y轴绕z轴旋转180°)。因此,如果我想知道笔尖的相对旋转(例如,我需要从第一支笔的笔尖到第二支笔的笔尖旋转),我需要计算
q_r = q_2 * q_rot_z_inv * q_1_inv
以通过计算q_r * q_1
从tip 1到tip 2吗?或者在这种情况下,“先前”的绕z轴旋转无关紧要,我只需要像往常一样计算q_r = q_2 * q_1_inv
?编辑: 这基本上是这个问题的扩展,但我想知道同样的答案是否也适用于我的情况,或者在我的情况下是否需要包括已知的相对IMU旋转。
q * v * inv(q)
实际上将这个角度应用了两次(导致了180°的旋转)。我从来没有真正明白的是,为什么这与直接的四元数乘法有些不一致,因为我认为从技术上讲,乘积q1 * q_rot
再次被隐式地用于旋转例如y轴。 - Stya
的四元数确实包含了cos(a/2)
和sin(a/2)
这些术语。然而,它仍然是一个旋转a
的四元数(只是以不同的方式编码)。这种编码也是“°”运算符使用两次四元数的原因之一。最终,(单位)四元数描述了某个轴线上的某个角度的旋转。在内部,它被以不同的方式编码。但是,除非您想要进行一些简单库不支持的复杂数学计算,否则这不应该成为问题。 - Nico SchertlerRotateZ(180°)
你指的是一个四元数,你会从指定一个角度和一个轴来获得它,在这个例子中是180°和z轴,但在内部,这将导致计算具有不同分量的90°角的cos
和sin
的四元数 - 是这样吗? - Sty