坐标变换(2)—不同坐标系下的变换

如下图所示,在自动驾驶车辆上会存在大量冗余的传感器,例如轮速传感器、激光雷达,毫米波雷达,摄像头,超声波雷达,GPS,IMU等。不同传感器对同一物体的测量原始结果都是在自身坐标下,所以首先我们需要对多传感器就行标定(即获得不同坐标系之间的变换关系,多传感器的标定是个非常复杂且困难的问题,这里先不介绍),将所有传感器的输出统一到一个坐标系下。

图1.自动驾驶车辆上的多传感器

本文主要介绍不同坐标系之间变换的原理,在这里我们采用一个体系,即存在一个世界坐标系,我们定义的位置或者姿态都是参考世界坐标系或者世界坐标系定义的笛卡尔坐标系,且讨论的维度为3维。

1. 位置、姿态与坐标系

1.1 位置

一旦我们定义了一个坐标系,对于空间中某一点的位置我们就能用一个3\times1的列向量来表示。如图1所示,我们在世界坐标系下还定义了很多坐标系,所以在定义位置向量时,必须附加一个条件,表明是哪个坐标系下的。

在本文中,我们用左上标来描述具体的坐标系,例如^{A}P表明列向量P在坐标系A下定义的。

图2 坐标系A

^{A} P=\left[\begin{array}{l} {p_{x}} \\ {p_{y}} \\ {p_{z}} \end{array}\right]

1.2 姿态

为了描述物体的姿态,我们将在物体上固定一个坐标系,并且给出此坐标系相对于参考坐标系的表达。所以位置用列向量描述,姿态可以用固定在物体上的坐标系描述。

这里我们定义参考坐标系A,用X_{A},Y_{A},Z_{A}表示坐标系A 的三个主轴的单位向量,而^{A}X_{B},^{A}Y_{B},^{A}Z_{B} 为坐标系B的三个主轴的单位向量(相对于参考坐标系A),并利用^{A}X_{B},^{A}Y_{B},^{A}Z_{B}顺序排列,组成了一个3\times3 的矩阵,称为旋转矩阵,用符号_{B}^{A} R表示,

_{B}^{A} R=\begin{bmatrix} ^{A}X_{B}& ^{A}Y_{B} & ^{A}Z_{B} \end{bmatrix}=\left[\begin{array}{ccc} {r_{11}} & {r_{12}} & {r_{13}} \\ {r_{21}} & {r_{22}} & {r_{23}} \\ {r_{31}} & {r_{32}} & {r_{33}} \end{array}\right]

其中,标量r_{ij}也可以利用坐标系B对应主轴在参考坐标系A中各主轴的投影来表示(利用内积求每个坐标轴的投影值),

_{B}^{A} R=\begin{bmatrix} ^{A}X_{B}& ^{A}Y_{B} & ^{A}Z_{B} \end{bmatrix}=\left[\begin{array}{ccc} { {\boldsymbol{X}}_{\boldsymbol{B}} \cdot {\boldsymbol{X}}_{\boldsymbol{A}}} & { {\boldsymbol{Y}}_{\boldsymbol{B}} \cdot {\boldsymbol{X}}_{\boldsymbol{A}}} & { {\boldsymbol{Z}}_{\boldsymbol{B}} \cdot {\boldsymbol{X}}_{\boldsymbol{A}}} \\ { {\boldsymbol{X}}_{\boldsymbol{B}} \cdot {\boldsymbol{Y}}_{A}} & { {\boldsymbol{Y}}_{\boldsymbol{B}} \cdot {\boldsymbol{Y}}_{A}} & { {\boldsymbol{Z}}_{\boldsymbol{B}} \cdot {\boldsymbol{Y}}_{\boldsymbol{A}}} \\ { {\boldsymbol{X}}_{\boldsymbol{B}} \cdot {\boldsymbol{Z}}_{\boldsymbol{A}}} & { {Y}_{\boldsymbol{B}} \cdot {Z}_{A}} & { {\boldsymbol{Z}}_{\boldsymbol{B}} \cdot {\boldsymbol{Z}}_{\boldsymbol{A}}} \end{array}\right]

在上式最右边矩阵中省略了上标,事实上只要点积的各对向量是在同一坐标系中描述的,那么坐标系的选择可以是任意的。由于上式右边矩阵中的向量均为单位向量,所以通过内积计算的结果是两者之间夹角的余弦,所以上述矩阵也称为方向余弦矩阵

由上式可以看出,矩阵的行是单位向量\{A\}\{B\}中的描述( 即^{B}X_{A} ),即,

_{B}^{A} R=\begin{bmatrix} ^{A}X_{B}& ^{A}Y_{B} & ^{A}Z_{B} \end{bmatrix}=\left[\begin{array}{c} {^{B}{X}_A^{T}} \\ {^{B}{Y}_{A}^{T}} \\ {^{B}{Z}_{A}^{T}} \end{array}\right]

进而,可以得到,

_{B}^{A}R={_{A}^{B}R}^{T}

而,

\left[\begin{array}{c} {^{A}{X}_B^{T}} \\ {^{A}{Y}_{B}^{T}} \\ {^{A}{Z}_{B}^{T}} \end{array}\right]\begin{bmatrix} ^{A}X_{B}& ^{A}Y_{B} & ^{A}Z_{B} \end{bmatrix}= {_{B}^{A}R}^{T} {_{B}^{A} R}=I_{3}

从而还得到旋转矩阵是一个正交矩阵

1.3 坐标系

在自动驾驶中,位置和姿态总是成对出现的,我们将此组合称为坐标系。一个坐标系可以等价的用一个位置向量和一个旋转矩阵来描述。

例如,我们用_{B}^{A}R^{A}P_{BORG}来描述坐标系B,而参考坐标系为A。其中^{A}P_{BORG}是坐标系B在参考坐标系A中的原点的位置向量,而_{B}^{A}R是坐标系B的姿态。

2. 坐标变换

这里的坐标变换指的是将一个坐标系中的向量在其他坐标系中进行变换(描述),向量本身并没有变换,只不过对它的描述变换了

2.1 平移变换

如下图3所示,

图3平移变换

在坐标系B中,我们用向量^{B}P描述了其中一个位置,现在要将该向量变换到坐标系A中,也就是将该向量在A中进行描述,这里假设 AB的姿态相同,易得,

^{A}P={^{B}P}+{^{A}P_{BORG}}

2.2 旋转变换

如下图所示,

图4 旋转变换

我们用_{B}^{A}R表示坐标系B在参考坐标系A中的描述,现在已知参考系B中的位置向量^{B}P,求其在参考坐标系A中的描述?

我们知道,一个位置向量在其参考坐标系中的三个轴的分量都是该向量在对应三个轴上的投影,而投影的大小可以利用向量的点积进行计算。因此我们可以将^{A}P的分量计算如下,

\begin{aligned} ^{A} p_{x}={^{B}{X}_{A}} \cdot{^{B} P}\\ ^{A} p_{y}={^{B}{Y}_{A}} \cdot{^{B} P}\\ ^{A} p_{z}={^{B}{Z}_{A}} \cdot{^{B} P} \end{aligned}

上面式中,我们首先将坐标系A在坐标系B中去描述, 前面介绍过,只要点积的各对向量是在同一坐标系中描述的,那么坐标系的选择可以是任意的。这里{^{B}{X}_{A}}{^{B} P}都是在坐标系B下描述,所以可以利用点积直接计算出^{B}Px轴方向的投影。将上面三式写成矩阵形式,由前面可知,_{B}^{A} R的行就是{^{B}{X}_{A}},{^{B}{Y}_{A}},{^{B}{Z}_{A}}

^{A}P={_{B}^{A} R} {^{B}P}

有个便于记忆的小技巧,前面的矩阵的下标B消去了后面矩阵的上标 B

2.3 旋转平移

考虑下面的情况,既有平移,又有旋转,如何求 ^{A}P

图5 旋转平移

首先,我们将{^{B}P} 变换到一个中间的过渡坐标系,这个坐标系和 A 的姿态相同,原点和 B 重合。然后再利用简单的向量加法将向量进行平移,即

^{A}P={_{B}^{A} R} {^{B}P}+{^{A}P_{BORG}}

但是上述公式不是线性的,利用一点数学变换,可以得到一个更简单的公式,

\left[\begin{array}{c} {^{A}{P}} \\ {1} \end{array}\right]=\left[\begin{array}{c|c} {_{B}^{A} R} & {P_{B O R G}} \\ \hline 0 & {1} \end{array}\right]\left[\begin{array}{c} {^{B}{P}} \\ {1} \end{array}\right]

所以可以变换成下式统一的格式,

^{A}P={_{B}^{A} T} {^{B}P}

其中,称 T4\times4 其次变换矩阵

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容