ORB-SLAM3整体流程详解

0. 简介

在之前,作者曾经转过一篇《一文详解ORB-SLAM3》的文章。那篇文章中提到了ORB-SLAM3是一个支持视觉、视觉加惯导、混合地图的SLAM系统,可以在单目,双目和RGB-D相机上利用针孔或者鱼眼模型运行。与ORB-SLAM2相比,ORB-SLAM3在处理大视差和长时间未观测到的场景时效果更好。它还提供了更准确的帧间运动估计和更快的处理速度。此外,ORB-SLAM3还支持更多的传感器,包括RGB-D摄像头和车载LIDAR。ORB-SLAM3的代码结构也比ORB-SLAM2更加简洁,使得它更容易理解和扩展。

1. 主要贡献

一个单目和双目的视觉惯导SLAM系统:全部依赖于MAP(最后后验概率估计),即使是在IMU初始化的时候。

高召回率的场景重识别算法:DBoW2需要匹配三个连续的关键帧,太慢了。作者的方法是:候选的关键帧第一次就进行几何一致性检测,然后利用三个共视的关键帧进行局部的一致性检验,这种策略提升了召回率,并简化了数据关联,从而提高了地图准确性,但计算成本变高。

第一个可以解决纯视觉或者视觉惯导的完整的混合地图的SLAM系统。在单目或者双目的系统中,Atlas代表的是一系列不连续的地图,而且可以把他们应用到所有的建图过程中:场景重识别、相机重定位、闭环检测和精确的地图融合。这就允许地图是在不同的时间构建的(增量的SLAM系统),纯视觉的Atlas是参考的2019年IROS的一篇文章:ORBSLAM-atlas: a robust and accurate multi-map system,本文又添加了视觉惯导的混合地图系统来实现场景重识别。

抽象的相机表示:使SLAM系统与所使用的相机模型无关。并允许通过提供其投影,非投影和Jacobian函数来添加新模型我们提供了针孔和鱼眼模型的实现。

2. ORB-SLAM2 和 ORB-SLAM3 相关改进代码汇总(截止2023.1.30日)

这部分可以看一下作者的《使用ORBSLAM2进行kineticV2稠密建图,实时转octomap建图以及导航》这篇文章。这里来汇总一下2,3中常见的扩展,算是一个大全吧

1.https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map
高翔实现的添加稠密点云地图
 


2.https://github.com/xiaobainixi/ORB-SLAM2_RGBD_DENSE_MAP
 


3.https://github.com/gaoxiang12/ORB-YGZ-SLAM

使用SVO中直接法来跟踪代替耗时的特征点提取匹配,在保持同样精度的情况下,是原始ORB-SLAM2速度的3倍

4.https://github.com/gaoxiang12/ygz-stereo-inertial
双目VIO版本,加入了LK光流和滑动窗口BA优化
 


5.https://github.com/jingpang/LearnVIORB
VI-ORB-SLAM2
 


6.https://github.com/lsyads/fisheye-ORB-SLAM
添加了支持鱼眼
 


7.https://github.com/AlejandroSilvestri/osmap
添加保存和导入地图功能
 


8.https://github.com/Jiankai-Sun/ORB_SLAM2
添加保存和导入地图功能
 


9.https://github.com/AlejandroSilvestri/Osmap-viewer
添加了地图可视化
 


10.https://github.com/atlas-jj/ORB_Line_SLAM

添加了线特征

11.https://github.com/maxee1900/RGBD-PL-SLAM
添加了点线融合
 


12.GitHub - ivalab/gf_orb_slam2: Real-Time SLAM for Monocular, Stereo and RGB-D Cameras, with Loop Detection and Relocalization Capabilities
使用了一种更好的特征选择方法
 


13.https://github.com/Ewenwan/ORB_SLAM2_SSD_Semantic

动态语义SLAM 目标检测+VSLAM+光流/多视角几何动态物体检测+octomap地图+目标数据库

14.https://github.com/Eralien/TE-ORB_SLAM2
用YOLO v3的语义信息来增加跟踪性能
 


15.GitHub - bijustin/YOLO-DynaSLAM

16.https://github.com/qixuxiang/orb-slam2_with_semantic_label

提出了一种构建3D密集语义图的方法,该方法同时利用YOLOv3[3]的2D图像标签和3D几何信息

17.https://github.com/VisionerTech/ORB_SLAM2_Unity
ORB-SLAM2在unity中仿真
 


18.https://github.com/thien94/ORB_SLAM2_CUDA

点击ORB-SLAM3整体流程详解 - 古月居 可查看全文

### 添加线特征支持以提高 ORB_SLAM3 的准确性 为了提升 ORB_SLAM3 中的定位和建图精度,可以考虑引入线特征作为补充信息。这不仅能够增强系统的鲁棒性和精确度,还能改善在复杂环境下的表现。 #### 修改源码结构 要在线特征方面做出改进,需先理解现有框架的工作原理并调整其核心模块: 1. **特征提取阶段** 需要在 `Frame` 类中加入新的成员变量用于存储检测到的直线段数据,并修改相应的初始化函数来处理这些新增加的信息[^2]。 2. **匹配过程优化** 更新 `MapPoint` 和 `KeyFrameDatabase` 结构体中的相似性计算逻辑,使其能考虑到新引入的一维几何约束条件带来的影响。具体来说就是当两帧之间存在共同观测到相同线条时,则认为它们更有可能属于同一位置关系紧密相连的空间区域。 ```cpp // Example code snippet for integrating line feature extraction into Frame class void Frame::ExtractLineFeatures(const cv::Mat &img) { // Implement your own method or use existing libraries like LSD (Line Segment Detector) } ``` 3. **地图管理机制更新** 对于每一条被成功跟踪超过一定次数阈值的新发现线段,创建对应的 `MapLine` 实例存入全局数据库内;同时维护好各节点间连接情况以便后续回环闭合操作利用此部分拓扑关联特性加速收敛速度。 4. **前端视觉里程计算法改造** 将原本仅依赖角点估计相机位姿的方法扩展成综合考量多类不同性质地标物的位置变化趋势来进行联合求解最优解的过程。这样做的好处是可以充分利用场景中存在的各种稳定不变量从而获得更加可靠的运动参数预测结果。 5. **后端非线性优化器配置微调** 调整 Ceres Solver 或 g2o 库内部关于残差项定义方式以及权重分配策略等方面设置选项,确保最终输出的姿态变换矩阵既满足整体平滑过渡的要求又尽可能贴近真实物理世界坐标系下物体间的相对布局形态。 通过上述改动可以使 ORB_SLAM3 更有效地融合多种类型的感知线索进而达到更高的重建质量水平。值得注意的是,在实际开发过程中可能还需要针对特定应用场景做进一步定制化适配工作才能充分发挥出所期望的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值