一
背景介绍
大家在过去上学时,或是日常生活中,一定有过这样的体验:老师先说左边,但马上又改口说是右边。也许你在教别人时也有过这样的经历。

师生方向相对
为什么会发生这种情况呢?
因为面对面时,老师的左右和同学的左右刚好是相反的。
所以,正如上期所说,雷达“眼里”的坐标系和相机“眼里”的坐标系是两个坐标系,它们的 x、y、z 轴根本不是一回事,就像两个人的左右是不同的。
那怎么解决这种冲突呢?其实也不困难,一个老师如果想感受学生的视角,只需要走到他的位置,然后转过身来,面对讲台就行了。
这个例子就揭示了一个坐标从雷达坐标系到相机坐标系需要经历的变换:平移和旋转。和这两次变换有关的参数被称为外参。
二
外参概述
内参的定义非常明确,表现形式也比较单一,即大家公认使用两个缩放有关的参数
、
和两个平移有关的参数
、
共 4 个参数。
外参则不同,其表现形式多种多样,不同的人对其定义也存在不同。这就导致了其处理的复杂性。
首先,有些人习惯于用外参来描述雷达坐标系到相机坐标系的变化,另一群人则习惯于用外参来描述相机坐标系到雷达坐标系的变化(本文是前者)。
其次,不同于内参部分统一使用对角矩阵表示缩放变换,在外参部分,旋转矩阵、旋转向量/MRPs、欧拉角、四元数等都能表示旋转变换。
外参由 R 和 T 组成
三
外参的多种形式
3.1 外参矩阵
接下来我们从熟悉的矩阵开始,挨个介绍它们。
旋转变换是线性变换,可以用矩阵乘法表示,平移变换和上期一样使用加法表示。本次变换完整表示出来如下:

上式中
表示一个 3×3 的旋转矩阵、
表示一个 3×1 的平移向量。
仔细一看,这不就是上期提到的仿射变换吗?所以当然也可以升维后,整体表示成一个矩阵乘法的形式:

上式中的 4×4 矩阵便是外参矩阵。由于最后一排都是固定的 0 和 1,所以有时也这样表示:

简写为:

旋转矩阵在计算时简单快捷,但无法直观地看出旋转的角度和方向。
其他外参的表示方式仅旋转变换部分不同,所以下面我们仅介绍旋转变换。
3.2 旋转向量(Rotation Vector)
说明旋转向量前先打个比方:你要给朋友说明离家最近的博物馆的位置,可能你会说“在我家东北方向 1 公里处”,直接用方向+距离的方式来说明两个地点的相对位置。

旋转向量也像这样简洁,它是一个三维向量
。
它的单位向量为旋转轴:
,模长为角度:
表示以
为旋转轴,旋转
角度。
3.3 MRPs
MRPs 是 Modified Rodrigues Parameters 的缩写,它也是一个三维向量,本质上和旋转向量完全相同,都是用 1 个轴 +1 个角来表示旋转。
唯一的不同点是 MRPs 的模长和角度的关系是这样的:

例如我们想表示一次 180° 旋转,向量模长就是 1。
3.4 欧拉角(Euler Angles)
接刚才打的比方,有时虽然直线距离是东南方向1公里,但那个方位上也许被建筑物挡住了,所以我们通常也会这么说:“往东走 0.7 公里,再往北走 0.7 公里就到了”。
欧拉角的思想也是如此,它用绕 3 个轴的 3 次旋转来表示 1 次整体的旋转,这是最直观的表示旋转的方式。
欧拉角又分静态欧拉角和动态欧拉角,也称为外旋和内旋,分别指的是以绝对的世界坐标系(xyz)作为每次旋转的参考系和以自身的坐标系(XYZ)作为参考系。下以动态欧拉角为例说明:
一张形象的动图:

图中的
叫偏航角(yaw),
叫俯仰角(pitch),
叫翻滚角(roll)。
举例来说,上图中的旋转可以这么描述:先绕飞机的 Z 轴旋转
度,再绕旋转后的飞机的 Y 轴旋转
度,最后绕旋转后的飞机的 X 轴旋转
度。形式上,欧拉角也是一个三维向量。
此时就出现了一个问题,既然欧拉角的本质是3次旋转,那就必然涉及到旋转的顺序,比如先绕 x 轴转再绕 y 轴转,跟先绕y轴转再绕x轴转一般是不同的。所以使用欧拉角时还得先指定顺序,例如上面使用的顺序就是 ‘ZYX’。
3.5 四元数(Quaternion)
3.5.1 四元数的定义
欧拉角虽然理解起来简单,但在使用时会出现万向节死锁的问题,这个问题在需要大量应用旋转的场景如 3D 建模中是不可忽视的。
在绿圈和紫圈对齐后,转动蓝圈和转动紫圈实则为同一种旋转,自由度丢失
所以后来人们又开始使用四元数来表示旋转,与欧拉角不同,四元数更抽象,难以理解,但使用起来却具有很多优良性质。
四元数的定义如下:

其中
,
,
,
为实部,
为虚部,i, j, k, 为虚数单位。(有时实部也写在开头)
3.5.2 四元数的自由度
四元数的乘法可以这样拆分开来看:
,左边的
即四元数除以自身模长表示旋转,右边的
表示缩放。
可能你已经发现了,既然我们只讨论三维旋转,那四元数的模长根本就无所谓,所以我们在表示旋转时,使用的都是单位四元数。
即限定了
,这也解释了为什么要用 4 个数的四元数来表示自由度为 3 的三维旋转,因为四元数的运算原本表示的是四维空间里的旋转,当算上这个约束条件后才限制为三维旋转。
3.5.3 四元数的简单理解
为了便于理解,我们也可以用一种较单纯的方式看待四元数(此处省略虚数单位):

表示以向量
为轴旋转了
度。

如果大家对 Xtreme1 感兴趣,欢迎关注 GitHub Repo:
https://github.com/basicai/xtreme1/

往期回顾





