PL-SLAM: Real-Time Monocular Visual SLAM with Points and Lines
PL-SLAM
文章目录
- PL-SLAM
- 摘要
- 系统介绍
- 综述
- 方法综述
- LINE-BASED SLAM
- 一、基于线的SLAM
- 二、基于线和点的BA
- 三、全局重定位
- 使用线条初始化地图
- 实验结果
- 说明
- 位姿求解
- 三角化
- LSD 直线检测算法
- 📊 **一、核心原理**
- ⚙️ **二、实现方法**
- 📐 **三、应用场景**
- ⚖️ **四、优缺点与优化**
- **优缺点对比**
- 💎 **总结**
- End
摘要
译文
- ——众所周知,低纹理场景是依赖点对应的几何计算机视觉算法的主要致命弱点之一,尤其是对于视觉 SLAM。 然而,在许多环境中,尽管纹理较低,但仍然可以可靠地估计基于线的几何基元,例如在城市和室内场景中,或者在结构化边缘占主导地位的所谓“曼哈顿世界”中。 在本文中,我们提出了一种解决方案来处理这些情况。 具体来说,我们建立在 ORB-SLAM 的基础上,大概是当前最先进的解决方案,无论是在准确性还是效率方面,并扩展其公式以同时处理点和线对应。
- 我们提出了一种解决方案,即使大多数点从输入图像中消失,它也可以工作,而且有趣的是,它可以仅通过检测三个连续帧中的线对应关系来初始化。 我们在 TUM RGB-D 基准测试中彻底评估了我们的方法和新的初始化策略,并证明了线的使用不仅提高了原始 ORB-SLAM 解决方案在纹理不良帧中的性能,而且在序列帧中系统地改进了它 结合点和线,不影响效率。
描述
-
首先指出了为什么要使用线特征:
- 对于ORB-SLAM,如果在低纹理场景,或者是图像有运动模糊时,系统就会失效,但是在这些场景中往往还有线条,所以就希望能够应用线特征。
- 同时,论文中说明了使用的线特征的难点在哪里:
- 1)要找到合适的线条检测子和参数化方式
- 2)从线匹配去计算位姿的可靠性是低于用点的,而且这些线特征对遮挡非常敏感
- 3)使用端点还可以对orb点特征的代码进行部分复用
- 最终,选择了用端点来参数化,原因是:这种方式对于遮挡和无检测的情况更加鲁棒。
系统介绍
综述
- 跟orb-slam一样,Tracking线程 用来估计相机的位姿和决定是否要加入新关键帧;通过局部地图构建将新关键帧信息增加到地图并用BA优化;Loop closing线程 持续的进行闭环检测并修正。
-
方法综述
在PL-SLAM中,与线特征相关的处理包括了:
-
检测:使用LSD的方法,时间复杂度是 O ( n ) O(n) O(n),n为图片中像素的个数。
-
三角化:
-
匹配:
- 使用了以
Line Band Descriptors
为基础的方法,通过一个关系图(relational graph)当前的线会和已经在地图中的线进行配对。 - 在获得了初始的
map-to-image
的线特征对集合后,所有在局部地图中的线都被投影到图像上,进一步寻找匹配对,然后,如果这个图片有足够多的新环境信息,他就会被标记为关键帧,它对应的线会被三角化并添加进地图。
- 使用了以
-
线的剔除:从少于三个视点或少于 25% 的帧中看到的线会被丢弃(剔除)。
-
优化:线在地图中的位置使用局部BA进行优化。
-
重定位: 注意,因为对整个地图进行线的匹配的计算量非常大,所以回环检测中只使用点特征。
LINE-BASED SLAM
一、基于线的SLAM
1、线段代替直线
- 对于线的描述,采用了 端点(endpoints) 的方法,毕竟现实中,几乎不不可能碰到无限延伸的直线,几乎都是线段,所以,用端点的方法来描述直线是比较合理的。
2、计算直线齐次方程
-
我们假设 P , Q ∈ R 3 P, Q \in R^3 P,Q∈R3 是空间直线的两个端点, p d , q d ∈ R 2 p_d, q_d \in R^2 pd,qd∈R2是其在图像中的投影坐标,另外,记 p d h , q d h ∈ R 3 p_d^h, q_d^h \in R^3 pdh,qdh∈R3 是对应的齐次坐标。于是,我们可以得到直线的参数:
- I = p d h × q d h ∣ p d h × q d h ∣ I = \frac{p_d^h \times q_d^h}{ |p_d^h \times q_d^h| } I=∣pdh×qdh∣pdh×qdh
-
其次坐标说明:
- 对于向量(x,y,1),可以在几何意义上理解为是在【第三维为常数的】平面上的一个二维向量。
- 这种用3维向量表示2维向量,或者一般而言,用一个n+1维的向量表示一个n维向量的方法称为齐次坐标表示法。。
3、有了直线参数,下面再来看线的重投影误差,它是点到线距离之和。
3.1 图像说明误差
-
-
左图:
- 真实 P , Q P,Q P,Q 两点投影过来
- P , Q ∈ R 3 \mathbf{P}, \mathbf{Q} \in \mathbb{R}^3 P,Q∈R3表示3D线特征上的两个3D点(绿色点)
- $\widetilde{\mathbf{p}}, \widetilde{\mathbf{q}} \in \mathbb{R}^2 $是他们在 Image图像平面上的投影点(绿色点)
- l ~ \tilde{l} l~ 是投影的线的系数。
- 相机本身测量
- p d , q d ∈ R 2 \mathbf{p}_{\mathrm{d}}, \mathbf{q}_{\mathrm{d}} \in \mathbb{R}^2 pd,qd∈R2是提取出的线特征(线段)的两个端点,测量值
- P , Q ∈ R 3 \mathbf{P}, \mathbf{Q} \in \mathbb{R}^3 P,Q∈R3 就是这两个端点反投影回到3D空间中对应的3D点,
- I I I 是检测到的线的系数。
- 真实 P , Q P,Q P,Q 两点投影过来
-
右图:
- d 1 、 d 2 d_1、d_2 d1、d2 就是我们要的线重投影误差。 d 1 ′ 、 d 2 ′ d'_1、d'_2 d1′、d2′ 就是我们要的线重投影误差。
- (检测到的2D线段(蓝色)和对应的投影的3D线段(绿色)之间的误差)。
3.2 定义线的重投影误差
-
投影线段的端点与在图像中检测到的直线之间的点到直线距离之和:
-
E line ( P , Q , I , θ , k ) = E p l 2 ( P , I , θ , k ) + E p l 2 ( Q , I , θ , k ) ( 2 ) E_{\text {line }}(P, Q, I, \theta, k)=E_{p l}^2(P, I, \theta, k)+E_{p l}^2(Q, I, \theta, k) \space \space \space(2) Eline (P,Q,I,θ,k)=Epl2(P,I,θ,k)+Epl2(Q,I,θ,k) (2)
-
而 E p l ( P , I , θ , k ) = I T π ( P , θ , K ) E_{p l}(P, I, \theta, k)=I^T \pi(P, \theta, K) Epl
-