大家可能上过线性代数,很多人可能也修过计算机视觉课程,但还是简单过一下,因为每个人的基础不大一样。
下面讲一下无人驾驶中的三维的几何变换。我们讲三维几何变化从坐标系开始,坐标系根据每个轴的位置不同会有不同的分类,最常用的是右手坐标系:
就从x到y,如果大拇指朝向和z方向一样的话,那么就是右手坐标系。反之是左手坐标系,
我们现在车上大部分情况用的是右手坐标系。知道了坐标系分类,我们看一下什么是旋转,从二维旋转开始,旋转就是在一个坐标系下面能不能把一个点从一个位置旋转到另外一个位置,这里给出了右边的一个例子,p从一个θ角的旋转到p',在二维下面就是一个2x2的矩阵,
上图通过矩阵公式标出的R(θ)。
对点的旋转我们可以理解为两个坐标系的一个旋转。我们处在世界坐标系下面,车本身就有一个坐标系,车本身坐标系的一个旋转,相当于当时它的姿态,坐标系之间的旋转,意思就是我的坐标系相对参考坐标系我旋转了多少度。
对于3维来讲就是3*3矩阵:
如果分解来看,它可以通过xyz轴分别去旋转,
对应旋转矩阵的分量,人别是rx,ry,rz,复合起来,就会得到rz,ry,rx,这是一个三维的旋转矩阵。我们可以把它理解为坐标系的旋转,但是三维旋转,给出一个例子:
他有九个元素3*3,他的特点是r*rt(r的转置),是一个单位矩阵,然后他自己的行列式等于一。有时我们对旋转矩阵,进行优化的时候,最后也要做一次归一化,让他满足这样的特点,
大家在写程序过程都有这种体会。对于空间点旋转的话,其实很简单,就是乘它的左边空间点,也是3*1这样的向量,对于坐标系的旋转,三维坐标系和二维一样。需要说一下,它存在的问题,它存在9个元素,如果对九个元素进行优化的话,
其实非常麻烦的。因为它本身只有3个维度,一般情况下,我们在计算过程中可能会用到它,在优化过程中一般不用它。一般我们会用欧拉角:
一个是四元数。欧拉角前面提到了,就比如飞机的轴向:
飞机的轴向和参考坐标系的轴向一个角度的差异,分别对应yaw,pitch和roll,也就是xyz三个轴的旋转。
下面提一下四元数:
四元数和欧拉角有一一对应的关系,也不是完全一一对应,有时候是对应不上的,大部分是对上的,你可以理解他是一个向量,比如向量是u,然后向量本身绕轴去转:
他