开始学习之前,先介绍一下什么是刚体:在运动中和受力作用后,形状和大小不变,内部各点相对位置不变的物体。
在三维空间中考虑刚体,它不仅有位置,还有自身的姿态。相机(SLAM中最重要的设备)也可以看成三维空间的刚体,位置是指相机在空间中的哪个地方,而姿态则是指相机的朝向。
旋转矩阵
先从最基本的内容学习:点和向量。
点的几何意义很好理解。向量怎么理解呢?它是线性空间中的一个元素,可以把它想象成从原点指向某处的一个箭头。需要注意的是,不要把向量和向量的坐标这两个概念混淆。一个向量是空间当中的一样东西,比如说,这个时候并不是和若干个实数相关联的,因为不知道它处于哪个参考坐标系中。只有当我们指定这个三维空间中的某个坐标系时,才可以讨论在此坐标系下的坐标,也就是找到了若干个实数来对应这个向量。
下面介绍几个常见的线性代数中关于向量的计算公式:对与
- 内积:
- 外积:。外积的方向垂直于这两个向量所在的平面,大小为,是这两个向量张成的平行四边形的有向面积。
重点:外积只对三维向量存在定义,我们还可以用外积来表示向量的旋转。外积如何来表示旋转呢?
考虑两个不平行的向量,我们来描述从到是如何旋转的?
实际上,我们也是用向量来表示从到的旋转关系的。在右手法则下,我们用右手的四个手指从握向,大拇指的朝向就是旋转向量的方向,事实上这就是的方向。旋转向量的大小由和的夹角决定。
通过这样的方式,我们构造了从到的一个旋转向量,这个向量同样位于三维空间中,在此坐标系下,可以用3个实数来描述。
下面来看一下坐标系间的欧式变换
与向量间的旋转类似,同样可以描述两个坐标系之间的旋转关系。坐标系之间的旋转关系+平移关系,统称为坐标系之间的变换关系。
先来看下面这个场景。
在机器人的运动过程中,常见的做法是设定一个惯性坐标系(也可以称为世界坐标系),可以认为它是固定不动的。同时,相机(或者说机器人)则是一个移动坐标系。如下图:
定义的坐标系是世界坐标系,定义的坐标系是移动坐标系
现在有这么一个问题了:假设在相机视野中某个向量,它的坐标为,在世界坐标系下面看,它的坐标是,这两个坐标之间是如何转换的呢?
这就是这一小节要研究的问题了。
整体思路:先得到该点针对移动坐标系的坐标值,再根据机器人位姿转换到世界坐标系中,这个转换关系可以用一个矩阵来描述。
欧式变换:相机运动是一个刚体运动,它保证了一个向量在各个坐标系下的长度和夹角都不会发生变化,这种变换就是~。
想象一下:如果把手机抛到空中,在手机落地摔碎之前,只可能有空间位置和姿态的变化,而手机的长度、各个面的角度这些性质都不会发生变化。
这样一个欧式变换由一个旋转和一个平移组成。
下面来寻找变换关系:
首先考虑旋转关系:
我们设某个单位正交基,经过旋转变成了。
那么,对于同一个向量(注意它没有因为坐标系的旋转而发生变化),设它在两个坐标系的坐标分别为和。
根据坐标的定义,有下列关系:
写成矩阵的形式就是:
上述等式的两边同时左乘
得到下列关系式:
我们将中间的3*3的矩阵单独拿出来,定义成一个矩阵R。可以看到,这个矩阵是由两个坐标系的两组基之间的内积组成,刻画了旋转前后同一个向量的坐标变换关系。
只要旋转是一样的,那么这个矩阵R就是一样的,因此可以说矩阵R描述了旋转本身,因此也将矩阵R称为旋转矩阵。
旋转矩阵有两个性质:(1)行列式为1;(2)旋转矩阵是正交矩阵。
所以,可以把旋转矩阵的集合定义如下:
下面来寻找平移关系:
考虑世界坐标系中的向量,经过一次旋转(用R描述)和一次平移后,得到了,
把旋转和平移合到一起,就得到了:。
相比于旋转,平移部分只需要把这个平移量加到旋转之后的坐标上,非常简单。通过上式,我们就可以用一个旋转矩阵和一个平移向量来完整的描述一个欧式空间得坐标变换关系。
这一讲暂时学到这里,都是一些理论。下一讲是变换矩阵和齐次坐标。