本文共 2817 字,大约阅读时间需要 9 分钟。
ORB-SLAM提出一种自动初始化流程,能够根据场景自动的选择模型(Homography or Fundamental),当初始化质量不好的时候则延迟初始化。 本文对初始化过程中的诸多细节进行了总结。 本文属于个人记录,比较乱。
选择标准:提取到的ORB特征数量足够多>100个
Homography模型
基于RANSAC框架,采用4对点计算。
Fundamental模型
基于RANSAC框架,采用8对点计算。
这里,RANSAC的迭代次数是固定的。每次迭代,都为H模型和F模型计算一个分数。
其中,
完成所有的迭代步骤之后,选择分数最高的那一个作为
计算比例:
如果
Step 4. 计算位姿和地图点
根据选择的模型恢复出相对位姿和3D地图点。
Step 5. Bundle Adjustment.
最后在来一个BA。BA大家都很清楚了。
这里有几个关键点:1. 如何估计单应矩阵、基础矩阵。2. 如何从单应矩阵和基础矩阵中分解出旋转R和平移t。
在第一帧坐标系下,3D点
整理一下:
由于
将(8)式展开有
可以确定两个方程
由于H是尺度缩放,可以通过调整
由以上推到分析可知,1个点对可以提供两个方程,而我们有8个参数需要求解,这样4个点对就可以求解出
可以计算一个最小二乘解
(9)式具有9个变量,4对点可以确定8个方程:
我们可以获得一个通解
上述两种方法的结果没有太大差别,基本上是一致的。值得说明的是,ORB-SLAM在计算Homography的时候对2D特征点进行了归一化。变成均值为0,方差为1的标准正态分布。作用是什么呢?是不是为了计算稳定呢?可能是吧。
双视对极几何的产物,还是同一个3D点P,投影到两个相机之下。
将转换到相机坐标系下归一化的坐标有
(12)式子两边右叉乘
其中的
再把
其中的
同样的
于是,大于等于8个点形成了方程
利用第2节中的解法2可以获得
对应单应矩阵,计算2D点之间马氏距离的平方
对于基础矩阵,计算的误差为点到极线的距离的平方。具体的,在相机2上的极线方程为
距离的平方为
如果假设距离服从均值为0,方差为1个pixel的正态分布,那么
TODO: 但是为什么
可参考《MVG》中文版的174页,英文版258页。
已知基础矩阵F,可以获得Essential Matrix矩阵
下面根据Essential Matrix分解出R和t。我们知道E的成分有一个反对称矩阵S和一个正交矩阵R,外加一个scale组成。
实际上只有5个自由度。s可以放到反对称矩阵里面。
先给出两个矩阵
W为正价矩阵,Z为反对称矩阵。
对E进行SVD分解为
总共可以得到四个解,分别是
然后根据:
TODO: 详细解读如何求解。
按照ORB-SLAM的做法,可以恢复8个解,然后从8个解中选择一个最优解。
然后根据恢复出的3D点个数,视差等信息筛选出最优解,要求
1.最优个数 > 0.7 次优个数
2. 最优的视差,大于最小要求的视差
3. 最优的个数,大于最小设置的个数
4. 最优个数,大于匹配点个数*0.9
TODO: 详细解读如何求解。
----更多SLAM文章----
杨小东:SLAM轨迹真值获取装置
杨小东:[PnP]PnP问题之EPnP解法
杨小东:[PnP] PnP问题之DLT解法
杨小东:[ORB-SLAM2]卡方分布(Chi-squared)外点(outlier)剔除
杨小东:[ORB-SLAM2] ORB特征提取策略对ORB-SLAM2性能的影响
杨小东:[PR-3]ArUco EKF SLAM 扩展卡尔曼SLAM
杨小东:[PR-2] PF 粒子滤波/蒙特卡罗定位
----相关代码----
ydsf16 - Overviewgithub.com转载地址:http://ufevl.baihongyu.com/