跳转至

4.3 刚体的位置与姿态与变换

刚体的位置指的是一个刚体在空间中的坐标,姿态指的是其朝向的方向。

仅旋转变换

在三维空间中,对于一个刚体位置的描述,可以使用一个三行一列的矩阵描述。

\[p = \left[ \begin{matrix} p_x \\ p_y \\ p_z \\ \end{matrix} \right] \]

我们可以使用矩阵的左乘来完成空间变换,对于使用三行一列的矩阵表达的刚体位置,我们只能表示其旋转变换。具体来说,如果在固定坐标系下,存在一个旋转坐标系,且其坐标轴x、y、z的单位向量分别是

\[ c_x = \left[ \begin{matrix} x_1 \\ y_1 \\ z_1 \end{matrix}\right] \hspace{1em} c_y = \left[ \begin{matrix} x_2 \\ y_2 \\ z_2 \end{matrix}\right] c_z = \left[ \begin{matrix} x_3 \\ y_3 \\ z_3 \end{matrix}\right] \]

则,根据矩阵相乘的运算法则,若记原位置矢量为\(\vec{p}\),变换后的矢量在固定坐标系下的矢量为\(\vec{p'}\),我们不难得出,

\[ \vec{p'} = \left[ \begin{matrix} x_1 \hspace{1em} x_2 \hspace{1em} x_3 \\ y_1 \hspace{1em} y_2 \hspace{1em} y_3 \\ z_1 \hspace{1em} z_2 \hspace{1em} z_3 \\ \end{matrix} \right] \cdot \vec{p} \]

记上式中的矩阵为\(\vec{Q}\),不难看出,\(\vec{Q}\)中的各列分别为旋转后的坐标系的x、y、z的单位向量。我们称\(\vec{Q}\)为旋转矩阵。

Note

其实上述公式描述了这样一个事件:如果我们在固定坐标系上创建一个与之完全相同的重合坐标系,并记为旋转坐标系,那么,我们将这个坐标系连同某个矢量同时旋转,就实现了矢量的旋转。

只不过,显而易见的是,矢量相对旋转坐标系的坐标依旧是原始坐标。既然这个相对坐标是基于旋转坐标系的描述,那么我们将旋转坐标系的各单位向量用其在固定坐标系下的描述,就能知道矢量旋转后在固定坐标系下的坐标。可以使用下面的公式描述。

\[ \begin{align} \nonumber \vec{p'} &= x' \vec{c_x} + y' \vec{c_y} + z' \vec{c_z} \\ \nonumber &= x' (x_1 \vec{x} + y_1 \vec{y} + z_1 \vec{z}) + y'(x_2 \vec{x} + y_2 \vec{y} + z_2 \vec{z}) + z' (x_3 \vec{x} + y_3 \vec{y} + z_3 \vec{z}) \\ \nonumber &= x_o \vec{x} + y_o \vec{y} + z_o \vec{z} \end{align} \]

其中\(x'\)\(y'\)\(z'\)表示相对旋转坐标系的坐标。\(x_o\)\(y_o\)\(z_o\)表示相对固定坐标系的坐标。

位移变换

显然,对于三维空间中的物体,仅做旋转变化是不合理的,三维空间中的物体应该还能做位移变换。即,将整个向量的起点移动。

要实现这一点,我们依然可以创建一个运动坐标系,将整个坐标系的起点移动。

显然,三阶方阵和三维列向量已经无法仅使用矩阵相乘来完成这件事情了,如果一定要使用三阶方阵和三维列向量来描述,我们可以使用下面这样一个公式:

\[ \vec{p'} = \vec{Q} \vec{p} + \vec{O'} \]

式中,\(\vec{Q}\)依然是旋转矩阵,不过这里没有旋转,自然为单位阵。\( \vec{O'} \)为运动坐标系的坐标原点在固定坐标系下的描述。

为了简化和统一计算,我们需要将上述公式整理成矩阵相乘,则可以使用如下这个公式:

\[ \vec{p'} = \left[\begin{matrix} \vec{Q} \hspace{1em} \vec{O'} \\ \vec{0} \hspace{1em} \vec{1} \end{matrix}\right] \vec{p} \]

旋转+位移

由位移变换最终的公式可知,当\(\vec{Q}\)为一具体旋转变换矩阵时,自然就是旋转加位移。

多次变换的先后顺序

接下来,我们需要讨论这样一个问题,当多次变换时,该如何计算变换矩阵。

线性代数的本质这一视频中,我们直到,当基于当前坐标系连续变换时,只需要按照变换顺序,在原矩阵上左乘就行了。

但是,若下一次变换是基于当前的运动坐标系时,情况就恰恰相反,需要在原矩阵上右乘。

这并不难理解,从公式的角度,我们很好推导。从原理的角度,这就好比你在乘坐汽车时,汽车从甲地运动到了乙地,然后你从副驾挪到了后排。

在这个例子中,相比较对于固定坐标系的变换,其更加关心系统内部的变化,而不是相对固定坐标系的整体变换。也就是说,在相对固定坐标系的变换中,讨论的对象内部其实是相对固定的,而相对当前运动坐标系的变换中,讨论的对象内部发送了相对运动。

如果只讨论位移结果,显然,你先做到后座还是先到达乙地并没有什么区别。但是,如果反过来,我们发现,讨论的对象是后者包含前者。也就是,你做到后座这个变换的研究对象是你,而汽车从甲地到达乙地这个研究对象是整辆汽车。在第二个过程中,使用了一个更大的固定坐标系。在第一步你从副驾移动到后座的过程中,汽车相对地面坐标系又没有发生移动,那么我们就可以使用地面坐标系代替,进而,这个过程可以看作是相对一个固定坐标系发生的两次变换,只不过顺序有所不同,所以需要右乘。

注: 目前的例子和解释有点不太合适,将来会修改