目录
往期内容回顾
1.SLAM的运动和观测模型
①在输入uk下,由xk到xk+1 xk通过相机的旋转和平移来描述 即(R,t)或者T
②在xk下,观察路标yj,得到观测数据zkj
2.观测模型的具体形式
→相机成像
3.状态估计问题
由观测数据、传感器输入数据→估计位姿,路标点
批量的状态估计可以通过构建非线性最小二乘模型解决
1.针孔相机模型与图像
成像由3D到2D,丢失了像素点的深度信息,即每个像素的距离。
1.1 内参
实际中的三维点投影,在数学上进行相似对称得到图像坐标系中的坐标X',Y'。
图像坐标系经过伸缩、平移得到像素坐标系中的坐标u,v
一般情况下像素坐标系的原点位于图像中心。则对于分辨率640x480,为(320,240)。
缩放为了保证看起来差不多,一般情况下
假设上式左乘一个倍数,那么对应于真实的三维点P,肯定是远了一些。但是,像素坐标仍然是[u,v,1],由此,证明,在投影的过程中丢失了深度信息。
同一直线上的投影点仍是同一个。
上式首先对三维点除以z,实际上是求了在距离光心z=1处的平面上的投影点坐标,z=1为归一化平面.
1.2 外参
相机坐标系与世界坐标系之间相差的变化,由世界坐标到相机坐标系即
非齐次到齐次的转换过程:
外参是SLAM估计的目标
投影顺序:世界→相机→归一化平面→像素坐标系
即:观测方程被描述为:
1.3 畸变
径向畸变和切向畸变
径向畸变很形象。
切向畸变可以理解为正方向→平行四边形
利用多项式,描述畸变。
畸变系数的确定,可以通过实践进行,先试试小阶的够不够用,一般不推荐高阶,如果高阶解决不了,可能是模型不太好。
例如鱼眼模型,可以利用鱼眼的模型解决。
如果有畸变的话,就在3,4之间添加畸变模型。
1.4 双目相机
由坐标系可以看出,为什么是一正一负的投影关系。z表示为距离。
由上式可得:当点离我们越远,即z越大,视差d应该越小,最小为一个像素。同理,当点离我们越近,即z越小,视差d越大。
1.5 RGB-D相机
物理手段测量深度。
opencv中默认BGR
RGB-D用深度图
2.批量状态估计问题
批量、递归
批量:一段时间内,一起推断
递归:有k时刻,迭代,推出k+1时刻
实际两种都采用。
疑问:这里的误差里的参数是什么意思,是估计的还是什么。xk是估计的,带入上一时刻的不完全符合,但是xk-1也是估计的。
3.非线性最小二乘法
使增量越来越小,表示无限接近。但是,增量应该往哪个方向走?
最速下降法会碰到zigzag问题,过于贪婪,即每次都是梯度方向,相当于走了一个之字形。
牛顿法迭代次数少,但需要计算复杂的hessian矩阵,在局部算一个二阶系数矩阵会比较麻烦。实际中,使用的是改进的方法,回避海森矩阵的计算。一种是高斯牛顿,一种是列文伯格。
3.1 高斯牛顿
高斯牛顿,不是近似,而是一阶近似.
重点在于利用:,回避了H矩阵的计算。
是半正定矩阵,不一定是正定矩阵
3.2 列文伯格
在高斯牛顿上进一步改善。
用一个参数控制近似的范围,改善近似效果。