论文笔记-PL-SLAM: Real-time monocular visual SLAM with points and lines

本文提出了一种新的SLAM系统——PL-SLAM,它在ORB-SLAM基础上增加了线特征的支持,提高了在低纹理环境下的性能。系统能够仅依赖线特征完成地图初始化,并提出了一种基于线的重定位方法。此外,文中详细介绍了线特征的参数化方式、误差函数以及如何将其应用于特征匹配、BA优化和全局重定位。

这一篇论文的主要贡献有两个,一个是在orb-slam的基础上加入了线特征,在不影响效率的情况下,提升了系统在低纹理的情况下的表现;二是提出了一个只用到线匹配就估计出初始地图的方法(连续三帧)。这篇论文是基于单目的,还有一个同名的PL-SLAM是双目的SLAM系统,不要弄混了~

I. INTRODUCTION

首先指出了为什么要使用线特征
对于ORB-SLAM,如果在低纹理场景,或者是图像有运动模糊时,系统就会失效,但是在这些场景中往往还有线条,所以就希望能够应用线特征。
同时,论文也说明了使用的线特征的难点在哪里
1)要找到合适的线条检测子和参数化方式
2)从线匹配去计算位姿的可靠性是低于用点的,而且这些线特征对遮挡非常敏感
3)使用端点还可以对orb点特征的代码进行部分复用
最终,选择了用端点来参数化,原因是:这种方式对于遮挡和无检测的情况更加鲁棒

III. SYSTEM OVERVIEW

PL-SLAM的pipeline如下图所示:
在这里插入图片描述
跟orb-slam一样,追踪线程用来估计相机的位姿和决定是否要加入新关键帧;局部建图增加新关键帧信息到地图并用BA优化;闭环线程持续的进行闭环检测并修正。
在PL-SLAM中,和线特征相关的处理包括了:

  • 检测:使用LSD的方法,时间复杂度是O(n)O(n)O(n),n为图片中像素的个数
  • 三角化
  • 匹配:使用了以Line Band Descriptors为基础的方法,通过一个关系图(relational graph)当前的线会和已经在地图中的线进行配对。在获得了初始的map-to-image的线特征对集合后,所有在局部地图中的线都被投影到图像上,进一步寻找匹配对,然后,如果这个图片有足够多的新环境信息,他就会被标记为关键帧,它对应的线会被三角化并添加进地图。
  • 线的剔除:从少于三个视点或少于 25% 的帧中看到的线会被丢弃(剔除)。
  • 优化:线在地图中的位置使用局部BA进行优化。
  • 重定位: 注意,因为对整个地图进行线的匹配的计算量非常大,所以回环检测中只使用点特征。

IV. LINE-BASED SLAM

这一节重点介绍线的参数化方式以及误差函数,还会解释怎么把它用到特征匹配,BA和全局重定位中。

A.基于线的重投影误差

根据参考文献[30], P,Q是一条线段的两个端点,pd,qd∈R2\textbf{p}_d, \textbf{q}_d \in \mathbb R^2pd,qdR2是这两端点在图像平面的2D检测结果,pdh,qdh∈R3\textbf{p}_d^h, \textbf{q}_d^h \in \mathbb R^3pdh,qdhR3是对应的齐次坐标。从齐次坐标,可以得到一个归一化的线系数:
I=pdh×qdh∣pdh×qdh∣   (1)I= \frac{\textbf{p}_d^h \times \textbf{q}_d^h}{\vert \textbf{p}_d^h \times \textbf{q}_d^h \vert} \space \space \space (1)I=pdh×qdhpdh×qdh   (1)
有了这个系数,下面再来看线的重投影误差,它是点到线距离之和,这里点是指的两端点投影后的结果,线是指的在图像中检测到的线段。具体可以看下面这张图:在这里插入图片描述对于左图:
P,Q是三维空间中某一条线段的端点(绿色点),而在图像中也有对应的两个绿点,这个就是由真实的P,Q投影过来的。而在图像中,本身就存在两个拍摄下来的端点pd,qd∈R2p_d, q_d \in \mathbb R^2pd,qdR2(对应于P,Q的观测值),观测值对应三维空间的端点Pd,Qd∈R3P_d, Q_d \in \mathbb R^3Pd,QdR3. III是检测到的线系数,而I~\widetilde{I}I 则是指的投影的线系数。
对于右图:
d1,d2d_1, d_2d1,d2就是我们要的线重投影误差,而d1′,d2′d_1^{'}, d_2^{'}d1,d2是检测到的线重投影误差(检测到的2D线段(蓝色)和对应的投影的3D线段(绿色)之间的误差)。

线重投影误差的公式就为:
Eline(P,Q,I,θ,K)=Epl2(P,I,θ,K)+Epl2(Q,I,θ,K)   (2)E_{line}(P,Q,I,θ,K)=E^2_{pl}(P,I,θ,K)+E^2_{pl}(Q,I,θ,K) \space \space \space(2)Eline(P,Q,I,θ,K)=Epl2(P,I,θ,K)+Epl2(Q,I

### DK-SLAM技术细节 #### 工作原理 DK-SLAM (Deep Keypoint Learning-based Simultaneous Localization and Mapping) 是一种基于深度学习的单目视觉SLAM系统,旨在利用卷积神经网络(CNNs)来改进特征点提取和匹配过程。传统的ORB-SLAM依赖于手工设计的特征描述符(如FAST角点检测器),而DK-SLAM则采用预训练好的CNN模型自动从图像中学习鲁棒的关键点表示[^1]。 #### 实现方法 在DK-SLAM的具体实现方面: - **初始化阶段**:类似于ORB-SLAM,在接收到足够的初始帧之后建立初步的地图结构。 - **跟踪模块**:不同于传统方法的是,这里使用了经过大量数据集训练过的深度学习模型来进行实时特征点检测与描述。这些特征被用于后续的姿态估计过程中。对于每一新到来的画面,都会调用`TrackMonocular()`函数完成当前时刻相机位置姿态更新的任务[^2]。 - **局部映射(Local Mapping)** 和 **闭环检测(Loop Closing)** :这两个部分基本沿用了经典SLAM架构的设计思路,即通过优化已知环境下的轨迹路径并识别曾经访问过的位置从而修正累积误差。不过值得注意的是,在寻找相似场景时可能会借助更先进的机器学习手段提高准确性[^4]。 ```cpp // C++代码片段展示如何加载深度学习模型进行关键点预测 #include "deep_keypoint_detector.h" void System::DetectKeypoints(cv::Mat &image, std::vector<cv::KeyPoint> &keypoints){ DeepKeypointDetector detector; keypoints = detector.Predict(image); } ``` #### 与传统SLAM的区别 相比于经典的几何法构建起来的传统SLAM方案,DK-SLAM主要优势体现在以下几个方面: - 更加精准可靠的特征提取能力; - 对光照变化、纹理缺乏等情况有更好的适应性; - 可能会减少对外部传感器(比如IMU惯导单元)的需求程度; 然而也存在一些挑战,例如计算资源消耗较大等问题需要进一步解决。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值