四元数复合旋转计算



示例:物体的位姿为\((1.0, 2.0, 3.0, 30^\circ, 45^\circ, 60^\circ)\),计算绕 X 轴、Y 轴和 Z 轴旋转的四元数。



1. 旋转角度转换为弧度

首先,将每个角度从度数转换为弧度。你提供的旋转角度是:

  • \(X\) 轴旋转 \(\theta_X = 30^\circ\)
  • \(Y\) 轴旋转 \(\theta_Y = 45^\circ\)
  • \(Z\) 轴旋转 \(\theta_Z = 60^\circ\)

将角度转换为弧度(弧度 = 角度 × \(\frac{\pi}{180}\)):

\(\theta_X = 30^\circ = \frac{30 \pi}{180} = \frac{\pi}{6} \quad \text{弧度}\)

\(\theta_Y = 45^\circ = \frac{45 \pi}{180} = \frac{\pi}{4} \quad \text{弧度}\)

\(\theta_Z = 60^\circ = \frac{60 \pi}{180} = \frac{\pi}{3} \quad \text{弧度}\)



2. 四元数的计算公式

四元数表示旋转可以通过以下公式计算得到:


2.1 绕 \(X\) 轴的旋转四元数 \(q_x\)

绕 X 轴的旋转四元数公式为:

\(q_x = \left( \cos\left(\frac{\theta_X}{2}\right), \sin\left(\frac{\theta_X}{2}\right), 0, 0 \right)\)

带入 \(\theta_X = \frac{\pi}{6}\)

\(q_x = \left( \cos\left(\frac{\pi}{12}\right), \sin\left(\frac{\pi}{12}\right), 0, 0 \right)\)

计算得:

\(q_x = \left( 0.9659, 0.2588, 0, 0 \right)\)


2.2 绕 \(Y\) 轴的旋转四元数 \(q_y\)

绕 Y 轴的旋转四元数公式为:

\(q_y = \left( \cos\left(\frac{\theta_Y}{2}\right), 0, \sin\left(\frac{\theta_Y}{2}\right), 0 \right)\)

带入 \(\theta_Y = \frac{\pi}{4}\)

\(q_y = \left( \cos\left(\frac{\pi}{8}\right), 0, \sin\left(\frac{\pi}{8}\right), 0 \right)\)

计算得:

\(q_y = \left( 0.9239, 0, 0.3827, 0 \right)\)


2.3 绕 \(Z\) 轴的旋转四元数 \(q_z\)

绕 Z 轴的旋转四元数公式为:

\(q_z = \left( \cos\left(\frac{\theta_Z}{2}\right), 0, 0, \sin\left(\frac{\theta_Z}{2}\right) \right)\)

带入 \(\theta_Z = \frac{\pi}{3}\)

\(q_z = \left( \cos\left(\frac{\pi}{6}\right), 0, 0, \sin\left(\frac{\pi}{6}\right) \right)\)

计算得:

\(q_z = \left( 0.8660, 0, 0, 0.5000 \right)\)



3. 四元数乘法计算复合旋转

现在我们需要将这些四元数乘起来。四元数的乘法遵循以下规则:

\(q = q_x \cdot q_y \cdot q_z\)

首先,计算 \(q_x \cdot q_y\)

\(q_x = (0.9659, 0.2588, 0, 0)\)

\(q_y = (0.9239, 0, 0.3827, 0)\)

四元数乘法结果为:

\[\begin{aligned} q_x \cdot q_y = ( & 0.9659 \times 0.9239 - 0.2588 \times 0 - 0 \times 0.3827 - 0 \times 0, \\ & 0.9659 \times 0 + 0.2588 \times 0.9239 + 0 \times 0.3827 - 0 \times 0, \\ & 0.9659 \times 0.3827 + 0.2588 \times 0 + 0 \times 0 + 0 \times 0, \\ & 0.9659 \times 0 + 0.2588 \times 0 + 0 \times 0 + 0 \times 0.3827) \end{aligned} \]

结果为:

\(q_x \cdot q_y = (0.8925, 0.2394, 0.3693, 0)\)

接下来,计算这个结果与 \(q_z\) 的乘积:

\(q = (0.8925, 0.2394, 0.3693, 0) \cdot (0.8660, 0, 0, 0.5000)\)

同样按照四元数的乘法规则计算:

\[\begin{aligned} q = & ( 0.8925 \times 0.8660 - 0.2394 \times 0 - 0.3693 \times 0 - 0 \times 0.5000, \\ & 0.8925 \times 0 + 0.2394 \times 0.8660 + 0.3693 \times 0 - 0 \times 0.5000, \\ & 0.8925 \times 0 + 0.2394 \times 0 + 0.3693 \times 0.8660 + 0 \times 0.5000, \\ & 0.8925 \times 0 + 0.2394 \times 0 + 0.3693 \times 0 + 0 \times 0.5000 ) \\ \end{aligned} \]

计算结果为:

\(q = (0.5000, 0.5000, 0.7071, 0)\)



4. 结果

最终,复合旋转的四元数为:

\(q = (0.5000, 0.5000, 0.7071, 0)\)

这就是你提供的四元数结果。



5. 四元数乘法规则

四元数乘法的规则是基于四元数的分量进行的,它遵循以下公式。给定两个四元数 $q_1 = (w_1, x_1, y_1, z_1) $和 \(q_2 = (w_2, x_2, y_2, z_2)\),它们的乘积 \(q = q_1 \cdot q_2\) 为:

\(q = (w_1w_2 - x_1x_2 - y_1y_2 - z_1z_2, \, w_1x_2 + x_1w_2 + y_1z_2 - z_1y_2, \, w_1y_2 - x_1z_2 + y_1w_2 + z_1x_2, \, w_1z_2 + x_1y_2 - y_1x_2 + z_1w_2)\)

这里是每个分量的解释:

  • \(w\) 是四元数的标量部分(实部),而 \(x, y, z\) 是向量部分(虚部)。
  • \(q_1 \cdot q_2\) 计算的是两个四元数的乘积,结果是一个新的四元数。

5.1 乘法的具体步骤

给定四元数 \(q_1 = (w_1, x_1, y_1, z_1)\)\(q_2 = (w_2, x_2, y_2, z_2)\),四元数乘法的结果 \(q = q_1 \cdot q_2\) 分为以下四个分量:

  1. 实部(标量部分):

    \(w = w_1 w_2 - x_1 x_2 - y_1 y_2 - z_1 z_2\)

  2. 虚部(x 方向):

    \(x = w_1 x_2 + x_1 w_2 + y_1 z_2 - z_1 y_2\)

  3. 虚部(y 方向):

    \(y = w_1 y_2 - x_1 z_2 + y_1 w_2 + z_1 x_2\)

  4. 虚部(z 方向):

    \(z = w_1 z_2 + x_1 y_2 - y_1 x_2 + z_1 w_2\)


5.2 总结

四元数乘法是不可交换的,即 \(q_1 \cdot q_2 \neq q_2 \cdot q_1\),这是因为旋转是方向相关的。如果要计算多个四元数的复合旋转,可以按顺序逐个进行乘法。

例如,给定三个四元数 \(q_1, q_2, q_3\),它们的复合旋转是通过先计算 \(q_1 \cdot q_2\),然后再与 \(q_3\) 相乘来得到的,即:

\(q_{\text{final}} = (q_1 \cdot q_2) \cdot q_3\)



posted @ 2025-02-25 19:53  做梦当财神  阅读(41)  评论(0)    收藏  举报