
/>
简介
ORB-SLAM3
是由UZ-SLAMLab开发的开源实时SLAM(Simultaneous
Localization
Mapping,同时定位与建图)库,于2021年12月22日发布V1.0版本。
作为ORB-SLAM系列的最新演进,它是首个能够使用单目、双目和RGB-D相机,结合针孔与鱼眼镜头模型,执行视觉、视觉惯性及多地图SLAM的实时库。
在各类传感器配置下,ORB-SLAM3均展现出与文献中最佳系统相当的鲁棒性,并在精度上显著超越。
该项目不仅为学术界提供了强大的研究基准,也为工业界提供了可直接部署的高精度定位与建图解决方案。
核心价值:
多模态融合:首次统一支持纯视觉、视觉惯性及多地图SLAM
传感器全面:兼容单目、双目、RGB-D相机,支持针孔与鱼眼模型
精度领先:在多个标准数据集上实现当前最高的定位精度
实时性能:在普通计算机上即可实现实时处理
技术定位:ORB-SLAM3代表了视觉SLAM技术的前沿水平,通过引入惯性测量单元(IMU)融合和多地图系统,解决了长期运行中的尺度漂移、累积误差和场景变化适应等关键挑战。
其开源特性促进了整个SLAM领域的技术进步与应用普及。
主要功能
1.
视觉-惯性SLAM深度融合
ORB-SLAM3实现了视觉与惯性测量的紧密耦合,通过创新的惯性初始化方法,快速准确地估计尺度、重力方向、速度及IMU偏差。
系统采用最大后验概率估计,在初始化阶段仅使用惯性测量进行优化,确保视觉-惯性融合的稳定性和准确性。
这种深度融合使系统在快速运动、纹理缺失或动态干扰等挑战性场景中仍能保持鲁棒跟踪。
2.
多地图系统(Atlas)
引入基于位置识别的多地图管理系统,能够创建并管理多个独立子地图。
当系统检测到已访问区域时,自动进行地图合并;当跟踪丢失时,创建新的子地图。
这种机制支持长期、大规模环境下的连续运行,有效解决了传统SLAM系统在长时间运行后因累积误差导致的地图不一致问题。
系统能够智能地在不同子地图间切换,实现无缝导航体验。
3.
相机模型扩展支持
除了传统的针孔相机模型,ORB-SLAM3新增对鱼眼镜头模型的支持,特别适用于广角视觉系统。
鱼眼模型处理大幅度的图像畸变,扩展了系统的适用场景,如无人机、车载环视系统等需要大视野的应用。
系统提供统一的接口处理不同相机模型,用户只需在配置文件中指定相应参数即可切换。
4.
改进的特征处理与匹配
基于ORB(Oriented
FAST
BRIEF)特征,系统在特征检测、描述和匹配环节进行了多项优化。
采用多尺度金字塔策略处理不同距离的特征,增强尺度不变性。
改进的特征匹配算法在保持实时性的同时提高匹配准确性,特别是在低纹理或重复纹理区域。
系统支持在线图像校正,处理原始相机输入。
5.
增强的闭环检测与重定位
集成改进的DBoW2位置识别系统,支持视觉词袋的快速场景匹配。
闭环检测模块能够准确识别已访问场景,触发全局优化以校正累积误差。
重定位功能在跟踪失败后通过查询关键帧数据库快速恢复相机位姿,提高系统鲁棒性。
支持多地图间的跨地图位置识别,实现子地图的智能合并。
6.
分层优化架构
采用三层优化策略:短期跟踪的运动估计、中期局部地图的束调整、长期闭环后的全局优化。
局部束调整优化当前关键帧及其共视关键帧,确保局部一致性;全局束调整在闭环检测后优化整个地图,保证全局精度。
优化过程使用g2o图优化库,最小化重投影误差和惯性测量误差。
7.
ROS全节点支持
提供完整的ROS(Robot
Operating
System)节点,支持单目、单目惯性、双目、双目惯性及RGB-D相机的实时处理。
ROS节点便于与机器人系统的其他组件集成,如路径规划、控制模块和传感器融合。
节点支持在线图像校正和CLAHE直方图均衡化(主要用于TUM-VI数据集)。
安装与配置
环境要求
操作系统:
推荐Ubuntu
16.04或18.04,其他平台也可编译
需要C++11或C++0x编译器支持
建议使用性能较强的计算机(如i7处理器)以确保实时性能
核心依赖:
Pangolin:用于可视化和用户界面,需从GitHub下载安装
OpenCV:用于图像处理和特征操作,至少需要3.0版本,支持3.2.0和4.4.0
Eigen3:线性代数库,g2o优化库的依赖,至少需要3.1.0版本
DBoW2和g2o:已包含在项目的Thirdparty文件夹中,无需单独安装
Python:用于计算轨迹与地面真值的对齐,需要Numpy模块
ROS(可选):如需使用ROS节点,需要ROS
18.04)
安装步骤
基础环境准备:
确保系统已安装必要的开发工具和编译器。
更新软件包列表,安装CMake、Git等构建工具。
检查C++编译器版本,确保支持C++11标准。
依赖库安装:
安装Pangolin:从GitHub克隆仓库,创建构建:cd
ORB_SLAM3。
设置脚本执行权限:chmod
+x
build.sh。
运行构建脚本:./build.sh。
构建过程将编译第三方库和ORB-SLAM3核心库,生成共享库文件和可执行示例。
ROS节点构建(可选):
如需使用ROS功能,需要将Examples/ROS/ORB_SLAM3路径添加到ROS_PACKAGE_PATH环境变量中。
编辑.bashrc文件,添加相应的导出语句。
运行ROS构建脚本:chmod
+x
./build_ros.sh。
构建成功后,将生成相应的ROS节点。
配置说明
相机标定文件:
ORB-SLAM3需要相机标定参数文件,这些文件定义了相机的内参、畸变系数和传感器配置。
项目为EuRoC和TUM-VI数据集提供了预配置的标定文件。
用户处理自己的数据时需要创建相应的标定文件,可参考Calibration_Tutorial.pdf教程。
词汇表文件:
系统使用预训练的ORB词汇表进行位置识别,文件位于Vocabulary/ORBvoc.txt。
这个词汇表包含了ORB特征的视觉单词,用于快速图像匹配和闭环检测。
词汇表文件较大,但只需加载一次。
运行参数调整:
用户可以根据具体应用调整系统参数,如特征数量、关键帧选择阈值、IMU噪声参数等。
这些参数影响系统的性能和精度,需要根据场景特点进行优化。
配置文件采用YAML格式,便于阅读和修改。
如何使用
基本工作流程
环境准备与激活:
确保所有依赖库已正确安装并配置。
如果使用ROS,确保ROS环境已正确设置。
准备输入数据,可以是数据集文件或实时相机流。
EuRoC数据集处理:
下载EuRoC数据集序列(ASL格式)。
修改项目根。
执行脚本处理所有序列的所有传感器配置:./euroc_examples。
评估轨迹精度:./euroc_eval_examples计算RMS
ATE(绝对轨迹误差)。
TUM-VI数据集处理:
下载TUM-VI数据集。
修改"tum_vi_examples.sh"脚本,将pathDatasetTUM_VI变量指向数据集目录。
执行脚本处理所有序列:./tum_vi_examples。
评估漂移误差:./tum_vi_eval_examples计算序列结束时的漂移。
实时相机处理
Intel
RealSense相机支持:
项目提供了针对Intel
RealSense
T265和D435i相机的示例程序。
对于D435i双目惯性相机,运行:./Examples/Stereo-Inertial/stereo_inertial_realsense_D435i
./Examples/Stereo-Inertial/RealSense_D435i.yaml。
用户可根据自己的相机型号修改相应示例。
自定义相机集成:
校准相机并创建标定文件(参考Calibration_Tutorial.pdf)。
修改提供的演示程序以适应特定相机模型。
构建修改后的程序。
连接相机并运行ORB-SLAM3。
ROS实时处理
单目节点:
对于单目输入话题/camera/image_raw,运行节点:rosrun
ORB_SLAM3
PATH_TO_SETTINGS_FILE。
单目惯性节点:
对于单目图像话题/camera/image_raw和惯性话题/imu,运行:rosrun
ORB_SLAM3
[EQUALIZATION]。
可选第三个参数为true时应用CLAHE均衡化。
双目节点:
对于双目输入话题/camera/left/image_raw和/camera/right/image_raw,运行:rosrun
ORB_SLAM3
ONLINE_RECTIFICATION。
对于鱼眼相机模型,无需在线校正。
双目惯性节点:
对于双目图像和惯性输入,运行:rosrun
ORB_SLAM3
[EQUALIZATION]。
RGB-D节点:
对于RGB-D输入话题/camera/rgb/image_raw和/camera/depth_registered/image_raw,运行:rosrun
ORB_SLAM3
PATH_TO_SETTINGS_FILE。
ROS示例运行:
下载EuRoC数据集的rosbag(如V1_02_medium.bag)。
打开三个终端标签页,分别运行:roscore、rosrun
ORB_SLAM3
Examples/Stereo-Inertial/EuRoC.yaml
play
/cam0/image_raw:=/camera/left/image_raw
/cam1/image_raw:=/camera/right/image_raw
/imu0:=/imu。
加载词汇表后,在rosbag标签页按空格键开始播放。
性能分析
运行时间测量:
在include/Config.h文件中取消注释#define
REGISTER_TIMES,激活时间测量功能。
执行后,终端将显示时间统计信息,并存储在ExecTimeMean.txt文件中。
这些数据有助于分析系统各模块的计算开销,指导性能优化。
应用场景实例
实例1:无人机自主导航与建图
场景描述:无人机在复杂环境中执行巡检、测绘或搜救任务,需要精确的自主导航能力。
传统GPS在室内或城市峡谷中不可靠,视觉惯性SLAM提供补充定位方案。
解决方案:在无人机上部署ORB-SLAM3系统,使用双目惯性相机作为主要传感器。
视觉惯性融合提供准确的6自由度位姿估计,即使在快速机动或短暂视觉遮挡时也能保持稳定跟踪。
多地图系统支持大规模环境探索,当无人机返回基站时自动合并子地图。
鱼眼镜头模型适用于广角视野,增强环境感知能力。
实施效果:
导航精度显著提高,视觉惯性融合减少累积误差
环境适应性增强,在GPS拒止区域仍能可靠工作
建图效率提升,多地图系统支持分段探索与自动合并
任务灵活性扩展,支持长期、大规模环境作业
实例2:增强现实设备空间定位
场景描述:AR眼镜或手机AR应用需要将虚拟内容准确叠加到真实世界,传统基于标记或IMU的方法存在漂移问题,影响用户体验。
解决方案:集成ORB-SLAM3为AR设备提供稳定的视觉惯性定位。
单目惯性配置在资源受限的移动设备上实现高效运行。
系统实时构建稀疏特征地图,为虚拟内容提供空间锚点。
闭环检测纠正长期漂移,确保虚拟对象稳定锚定。
重定位功能在设备重新进入场景时快速恢复位姿。
实施效果:
定位稳定性大幅提高,视觉惯性融合抑制IMU漂移
用户体验显著改善,虚拟内容抖动问题得到解决
启动速度加快,重定位支持快速场景识别
交互自然性增强,支持大范围移动和复杂手势
实例3:自动驾驶车辆环境感知
场景描述:自动驾驶汽车需要精确理解周围环境,包括静态结构和动态物体。
高精度地图维护成本高,视觉SLAM提供实时环境建模能力。
解决方案:将ORB-SLAM3集成到自动驾驶感知系统。
双目惯性配置提供准确的尺度估计和运动状态。
系统实时构建周围环境地图,识别道路特征、交通标志和障碍物。
多地图系统支持城市级规模建图,不同车辆的地图可共享融合。
视觉惯性融合增强在隧道、桥梁等GNSS受限区域的定位能力。
实施效果:
环境感知能力增强,视觉提供丰富的语义和几何信息
定位冗余性提高,多传感器方案增加系统安全性
地图更新效率优化,众包建图支持实时地图维护
成本效益改善,视觉系统补充昂贵传感器阵列
实例4:服务机器人长期自主运行
场景描述:商场导购、酒店服务或家庭助理机器人需要在动态环境中长期自主运行。
传统SLAM系统在长时间运行后因累积误差导致地图不一致,影响导航可靠性。
解决方案:部署ORB-SLAM3的多地图系统,支持机器人的长期自主运行。
当环境发生显著变化(如家具移动、装饰更新)时,系统创建新的子地图。
基于位置识别的地图合并机制确保全局一致性。
视觉惯性配置增强在人员密集区域的跟踪鲁棒性。
RGB-D支持提供更丰富的环境信息。
实施效果:
长期运行稳定性提高,多地图系统适应环境变化
导航可靠性增强,闭环检测纠正累积误差
人机交互改善,准确位姿支持自然导引
维护成本降低,软件更新优于硬件改造
实例5:工业检测与维护
场景描述:工厂设备巡检、管道检测或结构健康监测需要精确的3D记录和缺陷定位。
传统方法依赖预先布置的标记或高精度测量设备,部署复杂。
解决方案:使用搭载ORB-SLAM3的移动检测平台。
双目惯性系统在复杂工业环境中提供稳定的位姿估计。
系统构建设备或结构的精确3D模型,标注检测位置。
多会话建图支持大型设施的分布检测,数据自动对齐。
鱼眼镜头适用于狭窄空间的全景记录。
实施效果:
检测效率大幅提高,实时建图指导完整覆盖
定位精度保证,视觉惯性融合提供亚厘米级精度
数据一致性增强,多会话建图支持分布式作业
部署灵活性改善,无需预先布置标记
实例6:虚拟制作与影视特效
场景描述:影视制作中需要将虚拟特效准确合成到实拍场景,传统基于标记点的方法限制摄像机运动,影响创作自由度。
解决方案:在摄影机上安装惯性测量单元和相机,运行ORB-SLAM3实时跟踪摄像机运动。
视觉惯性融合提供平滑准确的6自由度轨迹,支持自由运动拍摄。
系统构建拍摄场景的稀疏地图,为特效合成提供空间参考。
实时位姿输出驱动虚拟摄像机,实现精确的虚实合成。
实施效果:
拍摄自由度扩展,支持复杂摄像机运动
合成精度提高,视觉惯性跟踪减少位置误差
制作效率提升,实时位姿支持现场预览
创作灵活性增强,减少对标记点的依赖
GitHub地址
项目地址:https://github.com/UZ-SLAMLab/ORB_SLAM3
项目信息:
⭐
Stars:持续增长中,是视觉SLAM领域最受欢迎的开源项目之一
📄
许可证:GPLv3开源许可证,商业使用需联系作者获取闭源版本
💻
主要语言:C++
📅
最新版本:V1.0(2021年12月22日)
学术资源:
ORB-SLAM3论文:"ORB-SLAM3:
Accurate
Robotics,2021年
IMU初始化论文:"Inertial-Only
Optimization
Initialization",ICRA
2020
ORBSLAM-Atlas论文:"ORBSLAM-Atlas:
robust
2019
ORBSLAM-VI论文:"Visual-inertial
monocular
Letters,2017年
ORB-SLAM2论文:"ORB-SLAM2:
Open-Source
Robotics,2017年
ORB-SLAM论文:"ORB-SLAM:
Versatile
Robotics,2015年(获2015
IEEE
Robotics最佳论文奖)
DBoW2位置识别论文:"Bags
Binary
Robotics,2012年
资源内容:
完整源码:核心SLAM系统实现
示例程序:EuRoC、TUM-VI数据集处理示例,RealSense相机示例
ROS节点:实时相机处理节点
词汇表文件:预训练的ORB视觉词汇表
标定文件:常用数据集的相机标定参数
文档资料:安装指南、使用说明、校准教程、依赖列表
评估脚本:轨迹精度计算工具
快速开始:
安装依赖:Pangolin、OpenCV、Eigen3
克隆仓库:
gitclone
https://github.com/UZ-SLAMLab/ORB_SLAM3.git
ORB_SLAM3
构建项目:
cdORB_SLAM3
./build.sh
运行示例:处理EuRoC或TUM-VI数据集
集成相机:校准相机并修改示例程序
ROS集成:构建ROS节点并运行实时处理
技术生态:
ORB-SLAM3构建了完整的视觉惯性SLAM技术栈:
传感器融合:视觉与惯性测量的紧密耦合
地图管理:多地图系统的创建、合并与切换
位置识别:基于DBoW2的快速场景匹配
优化框架:基于g2o的分层非线性优化
相机模型:针孔与鱼眼模型的统一处理
可视化:基于Pangolin的实时3D显示
ORB-SLAM3通过其创新的多地图系统和视觉惯性深度融合,将SLAM技术推向新的高度。
无论是学术研究中的算法验证、工业应用中的高精度定位,还是教育领域的技术教学,这个项目都展现了卓越的价值。
其清晰的架构设计和完整的文档支持,使得研究人员能够深入探索SLAM前沿,开发者能够快速集成到实际系统中。
随着机器人、自动驾驶、增强现实等领域的快速发展,ORB-SLAM3将继续在精确空间感知与定位方面发挥关键作用,推动整个行业的技术进步与应用创新。


