用RGBD相机做了个点-线特征的SLAM,构建了一个统一的优化模型来同时最小化点和线的重投影误差,进一步扩展到BA(后端部分),在这个统一优化模型中,提出了一个基于PnP和PnL的离群点精化算法,主要针对点对线的离群问题。
III. SYSTEM OVERVIEW
包含三个部分,tracking,local mapping和loop closure,这三个部分就是比较基础的,原文也只是简单的介绍。
IV. POINT AND LINE-BASED SLAM METHODS
A. PnP 和 PnL
PnP算法和PnL算法算是基础内容了,就不详细讲解了。关键看本文提出的Line-Based Inliers Refinement Method:
这个是PnP的线性公式,因为线段是由两个端点组成的,因此可以把两个三维端点组成的三维线段用同样的公式表示。相机的位姿可以通过最小化以下目标函数进行迭代优化:
其中是一个2n✖2n的对角矩阵,wi由x决定为0或者1,当wi为0是代表对应的点是一个外点,当wi为1是代表对应的点是一个内点。在初始时,所有的wi都为1,因此W(x)最开始是一个单位矩阵。
使得作为残差向量,对于第i条线段,则是对应的代数误差,设定一个阈值,当代数误差小于该阈值时,则判定为内点,即wi=1,反之为0,由此矩阵W(x)即可不停的更新,而阈值由以下式子确定:
,ρ是一个系数,代表了K%的最低值的边界处对应的代数误差。在本文中,取ρ=2,K=25取得了最鲁棒的效果。
B. 点-线的优化模型
1)基于线的重投影误差
和是线段L的两个端点的世界坐标,因此和是在当前相机平面上两个点对应的二维投影坐标,K和T是内参和外参,l是当前相机平面上和L匹配的线段。因此平面上的单个端点和平面上的线段l之间的误差可以用点到线的距离表示:
λ表示对应点到线的归一化系数,可以用下式表示:
是平面上线段l的端点坐标, 是他们对应的三维齐次坐标。
对于n条线段,每个线段的两个端点,可得到总的误差:
在实际情况中,线段两个端点的误差公式实际上是一样的,所以上式可以简化为:
2)点-线重投影误差目标函数
对于m个点,PnP的误差表示:
所以把线和点的误差函数加起来就变成了:
接下来就可以用迭代算法来解决优化问题,本文使用了g2o来搞定。
V. TRACKING
A. 点和线的特征提取
简单来说就是点特征提取用了ORB,线特征提取用了LSD,传统方法了。
B. 点和线的数据关联(就是点和点的匹配,线和线的匹配)
点匹配用的FLANN,线匹配用了Line Band Descriptor (LBD)
C. 位姿结算
如图,先用点特征匹配解算(OpenCV里面的solvePnPRansac)得到一组内点和初始的位姿,然后用本文的LBIR把不属于线段的外点去除,然后用统一的点线优化模型得到最终的位姿。
后面的VI. LOCAL MAPPING和VII. LOOP CLOSURE AND MAPPING就不看了,大差不差了。