五自由度机械臂的建模 (4) —— 四元数与空间旋转

四元数 (Quaternion) 是由爱尔兰数学家威廉·卢云·哈密顿在 1843 年提出的数学概念。从明确地角度而言,四元数是复数的不可交换延伸。相对于复数为二维空间,如果把四元数的集合考虑成多维实数空间,四元数就代表着一个四维空间。它可以用于描述现实空间的坐标。单位四元数 (Unit Quaternion) 可以用于表示三维空间中的旋转,它与常用的另外两种表示方式,即三维正交矩阵和欧拉角是等价的,但是避免了欧拉角表示法中的万向锁问题。

四元数

定义

复数是由实数加上虚数单位 \(i\) 组成,其中 \(i^{2} = -1\)。类似地,四元数是由实数加上三个元素 \(i\)\(j\)\(k\) 组成,且这三个元素满足

\[ i^{2} = j^{2} = k^{2} = ijk = -1 \]

每个四元数都是 \(1\)\(i\)\(j\)\(k\) 的线性组合,即四元数一般可以表示为

\[ h = a + bi + cj + dk \]

为了便于说明和计算,这里也将四元数 \(h\) 表示为 \(h = (a, b, c, d)\)

性质

  • 乘法不可交换

    \[ \begin{aligned} & ij = k, ji = -k \\ & jk = i, kj = -i \\ & ki = j, ik = -j \end{aligned} \]

  • 共轭:四元数 \(h = a + bi + cj + dk\) 的共轭定义为

    \[ h^{*} = a - bi - cj - dk \]

    且一般情况下

    \[ (hk)^{*} = k^{*} h^{*} = h^{*} k^{*} \]

  • 模(绝对值)

    \[ |h| = \sqrt{h \cdot h} =\sqrt{h \cdot h^{*}} = \sqrt{a^{2} + b^{2} + c^{2} + d^{2}} \]

  • 乘逆 \[ h^{-1} = \frac{h^{*}}{|h|^{2}} \]

四元数运算

定义两个四元数

\[ \begin{aligned} q & = a + \vec{u} = a + bi + cj + dk \\ p & = t + \vec{v} = t + xj + yj + zk \end{aligned} \]

  • 加法

    \[ p + q = a + t + \vec{u} + \vec{v} = (a + t) + (b + x)j + (c + y)j + (d + z)k \]

    加法遵循实数和复数的所有交换律和结合律。

  • 乘法(格拉斯曼积)

    \[ \begin{aligned} pq & = at - \vec{u} \cdot \vec{v} + a \vec{v} + t \vec{u} + \vec{u} \times \vec{v} \\ & = (at - bx - cy - dz) + (bt + ax + dy -cz)i + (ct + ay + bz - dx)j + (dt + za + cx - by)k \end{aligned} \]

  • 点积(欧几里得内积):四元数的点积等同于一个四维矢量的点积,是一个标量 \[ p \cdot q = at + \vec{u} \cdot \vec{v} = at + bx + cy + dz \] 可以用格拉斯曼积表示为 \[ p \cdot q = \frac{pq + qp}{2} \]

单位四元数与空间旋转

单位四元数 (Unit Quaternion) 可以用于表示三维空间中的旋转,它与常用的另外两种表示方式,即三维正交矩阵和欧拉角是等价的,但是避免了欧拉角表示法中的万向锁问题。用四元数来表示旋转要解决两个问题:一是如何用四元数表示三维空间里的点;二是如何用四元数表示三维空间的旋转。

点的表示

对于三维空间中的一点 \(p\) 的笛卡尔坐标为 \((x, y, z)\),其可用纯四元数(即实部为 \(0\) 的四元数)表示为

\[ p = xj + yj + zk \]

旋转的表示

\(q\) 为一个单位四元数,\(p\) 是一个纯四元数(即空间中的一个点),定义纯四元数

\[ R_{q}(p) = q p q^{-1} \]

表示空间中的点 \(p\) 经过旋转 \(q\) 后得到的空间中的另一个点。

旋转的复合

根据四元数表示空间旋转的定义,有

\[ R_{q_{1} q_{2}} (p) = (q_{1} q_{2}) p (q_{1} q_{2})^{-1} = q_{1} q_{2} p q_{2}^{-1} q_{1}^{-1} = R_{q_{1}} \left[ R_{q_{2}} (p) \right] \]

因此,对于两个旋转的复合,只需要将对应的单位四元数相乘。

旋转矩阵与单位四元数

旋转矩阵、欧拉角和 RPY 角

旋转矩阵

空间中一点绕 \(x\)\(y\)\(z\) 轴旋转的旋转矩阵分别为

\[ \begin{aligned} & R_{x}(\theta_{1}) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos{\theta_{1}} & -\sin{\theta_{1}} \\ 0 & \sin{\theta_{1}} & \cos{\theta_{1}} \end{bmatrix} \\ & R_{y}(\theta_{2}) = \begin{bmatrix} \cos{\theta_{2}} & 0 & \sin{\theta_{2}} \\ 0 & 1 & 0 \\ -\sin{\theta_{2}} & 0 & \cos{\theta_{2}} \end{bmatrix} \\ & R_{z}(\theta_{3}) = \begin{bmatrix} \cos{\theta_{3}} & -\sin{\theta_{3}} & 0 \\ \sin{\theta_{3}} & \cos{\theta_{3}} & 0 \\ 0 & 0 & 1 \end{bmatrix} \end{aligned} \]

其中,有三个独立变量 \(\theta_{1}\)\(\theta_{2}\)\(\theta_{3}\),通常有两种表示方式,即欧拉角和 RPY 角。

欧拉角

下图所示为常用的 ZXZ 顺规欧拉角的定义

ZXZ 顺规欧拉角

\(xyz\) 轴为参考坐标系的坐标轴,\(xy\) 平面与 \(XY\) 平面的交线 \(N\) 称为交点线。则 ZXZ 顺规的欧拉角可以静态地定义为:

  • \(\alpha\)\(x\) 轴与 \(N\) 的夹角
  • \(\beta\)\(z\) 轴与 \(Z\) 轴的夹角
  • \(\gamma\)\(N\)\(X\) 轴的夹角

其旋转矩阵为

\[ \begin{aligned} R & = R_{z}(\alpha) R_{x}(\beta) R_{z}(\gamma) \\ & = \begin{bmatrix} \cos{\alpha} & -\sin{\alpha} & 0 \\ \sin{\alpha} & \cos{\alpha} & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos{\beta} & -\sin{\beta} \\ 0 & \sin{\beta} & \cos{\beta} \end{bmatrix} \begin{bmatrix} \cos{\gamma} & -\sin{\gamma} & 0 \\ \sin{\gamma} & \cos{\gamma} & 0 \\ 0 & 0 & 1 \end{bmatrix} \end{aligned} \]

ZXZ 顺规欧拉角的动态演示如下图所示

ZXZ 顺规欧拉角动态

RPY 角

RPY 角即绕 \(X\) 轴摇摆 (Roll) \(\gamma\)、绕 \(Y\) 轴俯仰 (Pitch) \(\beta\)、绕 \(Z\) 轴偏转 (Yaw) \(\alpha\),这三个变量互相独立。RPY 角表示法与 ZYX 顺规的欧拉角表示方式等价,其旋转矩阵为

\[ \begin{aligned} R & = R_{z}(\alpha) R_{y}(\beta) R_{x}(\gamma) \\ & = \begin{bmatrix} \cos{\alpha} & -\sin{\alpha} & 0 \\ \sin{\alpha} & \cos{\alpha} & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} \cos{\beta} & 0 & \sin{\beta} \\ 0 & 1 & 0 \\ -\sin{\beta} & 0 & \cos{\beta} \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos{\gamma} & -\sin{\gamma} \\ 0 & \sin{\gamma} & \cos{\gamma} \end{bmatrix} \end{aligned} \]

旋转矩阵转换为四元数

已知旋转矩阵

\[ R = \begin{bmatrix} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{12} & r_{13} \\ r_{31} & r_{12} & r_{13} \end{bmatrix} \]

其对应的四元数 \(q = w + xi + yj + zk\)\(q = (w, x, y, z)\),其中

\[ \begin{aligned} w & = \frac{1}{2} \sqrt{1 + r_{11} + r_{22} + r_{33}} \\ x & = \frac{r_{32} - r_{23}}{4 w} \\ y & = \frac{r_{13} - r_{31}}{4 w} \\ z & = \frac{r_{21} - r_{12}}{4 w} \end{aligned} \]

故可得空间中一点绕 \(x\)\(y\)\(z\) 轴旋转的四元数表示为

\[ \begin{aligned} q_x(\theta_{1}) & = (\cos{\frac{\theta_{1}}{2}}, \sin{\frac{\theta_{1}}{2}}, 0, 0) \\ q_y(\theta_{2}) & = (\cos{\frac{\theta_{2}}{2}}, 0, \sin{\frac{\theta_{2}}{2}}, 0) \\ q_z(\theta_{3}) & = (\cos{\frac{\theta_{3}}{2}}, 0, 0, \sin{\frac{\theta_{3}}{2}}) \end{aligned} \]

四元数转换为旋转矩阵

对于四元数 \(q = (w, x, y, z)\),可以得到对应的旋转矩阵

\[ R = \begin{bmatrix} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{12} & r_{13} \\ r_{31} & r_{12} & r_{13} \end{bmatrix} \]

其中,

\[ \begin{aligned} r_{11} & = w^{2} + x^{2} - y^{2} -z^{2} \\ r_{12} & = 2xy - 2wz \\ r_{13} & = 2xz + 2wy \\ r_{21} & = 2xy + 2wz \\ r_{22} & = w^{2} - x^{2} + y^{2} - z^{2} \\ r_{23} & = 2yz - 2wx \\ r_{31} & = 2xz - 2wy \\ r_{32} & = 2yz + 2wx \\ r_{33} & = w^{2} - x^{2} - y^{2} + z^{2} \end{aligned} \]

RPY 角转换为四元数

若旋转由 RPY 角(或 ZYX 顺规的欧拉角)表示,即绕参考坐标系的 \(Z\)\(Y\)\(X\) 轴依次旋转 \(\gamma\)\(\beta\)\(\alpha\) 角,则此旋转的四元数表示为 \(q = (w, x, y, z)\),其中

\[ \begin{aligned} w & = \cos{\frac{\alpha}{2}} \cos{\frac{\beta}{2}} \cos{\frac{\gamma}{2}} + \sin{\frac{\alpha}{2}} \sin{\frac{\beta}{2}} \sin{\frac{\gamma}{2}} \\ x & = \sin{\frac{\alpha}{2}} \cos{\frac{\beta}{2}} \cos{\frac{\gamma}{2}} - \cos{\frac{\alpha}{2}} \sin{\frac{\beta}{2}} \sin{\frac{\gamma}{2}} \\ y & = \cos{\frac{\alpha}{2}} \sin{\frac{\beta}{2}} \cos{\frac{\gamma}{2}} + \sin{\frac{\alpha}{2}} \cos{\frac{\beta}{2}} \sin{\frac{\gamma}{2}} \\ z & = \cos{\frac{\alpha}{2}} \cos{\frac{\beta}{2}} \sin{\frac{\gamma}{2}} + \sin{\frac{\alpha}{2}} \sin{\frac{\beta}{2}} \cos{\frac{\gamma}{2}} \\ \end{aligned} \]

四元数转换为 RPY 角

对于四元数 \(q = (w, x, y, z)\),可以得到对应的 RPY 角

\[ \begin{aligned} \theta_{R} & = \arctan{\left[ \frac{2(yz+wx)}{w^{2} - x^{2} - y^{2} + z^{2}} \right]} \\ \theta_{P} & = \arcsin{[-2(xz - wy)]} \\ \theta_{Y} & = \arctan{\left[ \frac{2(xy + wz)}{w^{2} + x^{2} - y^{2} - z^{2}} \right]} \end{aligned} \]


参考链接