视觉SLAM
SLAM学习日志
参考书籍为高翔《视觉SLAM十四讲》
旋转矩阵
基础概念
首先引入点、向量和坐标系,这些在初高中已经学过了。之后引入了内积和外积,内积的结果是一个数字,外积的结果是一个与做外积运算的两向量相互垂直的向量
内积的运算可以写成这样:
a·b = a(T)*b = |a|*|b|*cos<a,b>
外积的运算可以写成这样:
a×b = a^b
外积结果的大小为a*b*sin<a,b>
tips:外积的具体运算方法可以参考《微积分(下)》
外积运算可以表示旋转。对于一个向量来说,旋转后他的模的大小不变,改变的只有方向,而外积的大小则可以反映旋转的夹角的大小,所以通过一个旋转向量可以很轻松的算出旋转后的向量。
坐标系的欧式变换
在实际应用中,机器人的坐标系是移动的,当不将机器人的坐标系作为惯性系时,我们需要用到坐标转换。
在坐标转换时,我们通常使用一个变换矩阵T
具体计算参考《线性代数》
变换矩阵为行列式为1的矩阵,所有行列式为1的矩阵都可以作为变换矩阵
qr分解
在高翔的《视觉slam十四讲》中,关于旋转矩阵,书上举了一个利用Eigen库解矩阵方程的例子。
在这里面使用到了直接求逆然后相乘的方法,然后还使用到了先对矩阵进行qr分解然后再解方程的方法
书上说qr解法速度会更快,然而我的虚拟机上基本都是直接求逆更快(楽)
之后查了一下,在矩阵大小大于100时,直接求取的速度不稳定,所以采用qr解法
实践后,资料正确
旋转向量与欧拉角
旋转向量
在上面描述外积的应用的时候,外积的大小与方向分别反映了旋转的角度与旋转轴
一次变换可能会涉及到旋转与平移,对于一个三维坐标系,旋转向量3维,平移向量也为3维,那么我们使用一个六维的向量即可表示一次变换
但是当我们要使用旋转向量时,我们需要先将其变为旋转矩阵,由旋转向量变为旋转矩阵的过程由罗德里格斯公式表示,详细公式可以在这里查看
欧拉角
欧拉角是为了便于人们直观理解旋转过程而创造的,它将一次旋转分为分别绕当前XYZ轴旋转一次的三次旋转。我们将三次旋转用一个三维向量来表示。
[r,p,y]的旋转顺序为ZYX,其他顺序的旋转没有确切的名字
关于万向锁,其实就是九十度的旋转导致的两次旋转在绝对空间坐标系下旋转轴相同
四元数
为了清晰且简洁地描述三个自由量地旋转,我们导入了四元数。
四元数是由一个实部和三个虚部构成的数。
四元数在参与运算之前通常会进行归一化处理,在编写程序时,已经存在的矩阵相关的库通常会有归一化函数
我对于四元数的理解有限,所以就不过多阐述了