ORB_SLAM3实战:从源码编译到EuRoC数据集运行全解析
1. 环境准备打造你的ORB_SLAM3专属工作站嘿朋友们今天咱们来聊聊怎么在一台干净的Ubuntu系统上把ORB_SLAM3这个强大的视觉SLAM系统给跑起来。我知道很多朋友一看到“源码编译”、“依赖库”这些词就有点发怵感觉像是要面对一堆复杂的命令行和莫名其妙的报错。别担心我当年也是这么过来的踩过的坑比走过的路还多。这篇文章就是把我这些年折腾ORB_SLAM3的经验掰开了揉碎了讲给你听目标就一个让你能跟着步骤一步步成功运行起来亲眼看看这个算法是怎么在EuRoC数据集上重建出三维地图的。咱们先说说为什么选ORB_SLAM3。在视觉SLAM这个圈子里ORB_SLAM系列绝对是明星级别的开源项目它集成了视觉、视觉惯导甚至多地图系统鲁棒性和精度都经过了大量验证。而ORB_SLAM3作为集大成者支持单目、双目、RGB-D以及各种惯性传感器组合代码结构清晰是学习和研究SLAM的绝佳入口。但是官方的安装说明比较简洁很多细节没提不同系统环境、不同库版本带来的兼容性问题足以让新手折腾好几天。所以我打算带你走一条更稳妥的路从系统选择、依赖库版本到编译参数都给出经过实测的方案。首先你得有一台安装好Ubuntu的电脑。我强烈推荐使用Ubuntu 18.04。为啥不是20.04或者22.04因为很多机器人相关的库比如ROS Melodic对18.04的支持最成熟社区资源也最丰富能帮你避开不少新版本带来的奇怪问题。咱们这次教程就以Ubuntu 18.04为基础并且不安装ROS。是的先抛开ROS我们用最纯粹的非ROS模式来运行这样能让你更清晰地理解ORB_SLAM3本身的工作流程等核心部分跑通了再加ROS也不迟。系统准备好后打开终端咱们就开始这场搭建之旅。2. 依赖库安装打好坚实的地基编译ORB_SLAM3就像盖房子依赖库就是地基。地基打不牢后面全是空中楼阁。官方列出了几个核心依赖Pangolin用于可视化、Eigen3数学库、OpenCV图像处理、以及DBoW2和g2o这两个已经包含在源码的Thirdparty文件夹里了。咱们一个一个来确保每一步都稳稳当当。2.1 安装Pangolin让SLAM“看得见”Pangolin是一个轻量级的OpenGL显示与交互库ORB_SLAM3靠它来实时显示相机轨迹、特征点和三维地图点。没有它SLAM就成了“盲人摸象”。安装Pangolin我建议从源码编译这样最可控。首先安装一些必要的系统依赖sudo apt-get update sudo apt-get install -y libglew-dev cmake libpython2.7-dev pkg-config sudo apt-get install -y libjpeg-dev libpng-dev libtiff5-dev libopenexr-dev然后克隆Pangolin的仓库并编译。这里有个小技巧为了避免使用过新或有问题的版本我们可以指定一个稳定的发布版本比如v0.8cd ~ git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin git checkout v0.8 mkdir build cd build cmake .. make -j4 sudo make installmake -j4中的“4”表示用4个线程并行编译可以加快速度具体数字可以根据你电脑的CPU核心数来调整。编译安装完成后Pangolin的头文件和库文件就会被安装到系统的默认路径通常是/usr/local/include和/usr/local/lib这样ORB_SLAM3就能找到它了。2.2 安装Eigen3数学运算的核心引擎Eigen是一个C模板库用于线性代数运算像矩阵、向量、旋转矩阵这些SLAM里天天打交道的东西全靠它。ORB_SLAM3要求Eigen版本至少3.1.0。Ubuntu 18.04的软件源里自带的Eigen版本可能略低所以我们同样从源码安装一个较新的稳定版。去Eigen官网下载源码包或者直接用apt安装一个足够新的版本。更推荐用apt省事sudo apt-get install -y libeigen3-dev安装后你可以通过pkg-config --modversion eigen3来查看版本号确保在3.1.0以上。Eigen是纯头文件库没有.so动态库文件所以安装过程其实就是把头文件拷贝到系统目录非常简单。2.3 安装OpenCV图像处理的瑞士军刀这是最可能出问题的一环。ORB_SLAM3官方说兼容OpenCV 3.2.0但在实际使用中尤其是较新的系统上用OpenCV 3.2.0编译可能会遇到各种兼容性问题。我实测下来使用OpenCV 4.5.1更加稳定而且它能更好地支持现代C特性。我们就来编译安装OpenCV 4.5.1。首先安装一大堆编译依赖别嫌多缺了哪个都可能导致编译失败sudo apt-get install -y build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install -y libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff5-dev libjasper-dev libdc1394-22-dev sudo apt-get install -y libv4l-dev v4l-utils qv4l2 v4l2ucp sudo apt-get install -y libopenexr-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev然后下载OpenCV 4.5.1及其扩展模块contrib模块包含一些额外功能虽然ORB_SLAM3不一定需要但装了没坏处cd ~ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.1.zip wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.1.zip unzip opencv.zip unzip opencv_contrib.zip mv opencv-4.5.1 opencv mv opencv_contrib-4.5.1 opencv_contrib接下来是关键的配置和编译环节。我们创建一个build目录在里面用CMake进行配置。这里我给出一个经过优化的CMake命令关闭了一些我们不需要的模块比如CUDA除非你用N卡做GPU加速可以显著加快编译速度并减少潜在问题cd ~/opencv mkdir build cd build cmake -D CMAKE_BUILD_TYPERELEASE \ -D CMAKE_INSTALL_PREFIX/usr/local \ -D OPENCV_EXTRA_MODULES_PATH~/opencv_contrib/modules \ -D WITH_CUDAOFF \ -D WITH_GTKON \ -D BUILD_opencv_python2OFF \ -D BUILD_opencv_python3OFF \ -D BUILD_TESTSOFF \ -D BUILD_PERF_TESTSOFF \ -D BUILD_EXAMPLESOFF ..配置成功后就可以开始编译了。这个过程比较漫长喝杯咖啡等着吧。使用make -j$(nproc)可以让编译器使用你所有的CPU核心来加速make -j$(nproc) sudo make install sudo ldconfig最后一行sudo ldconfig非常重要它更新系统的动态链接库缓存让系统立刻能找到新安装的OpenCV库。安装完成后你可能会遇到一个经典错误运行程序时提示libopencv_imgproc.so.4.5: cannot open shared object file。这是因为系统默认的库搜索路径可能没有包含/usr/local/lib。解决方法很简单创建一个配置文件告诉系统这个路径echo /usr/local/lib | sudo tee /etc/ld.so.conf.d/opencv.conf sudo ldconfig这样OpenCV的安装和配置就万无一失了。3. ORB_SLAM3源码编译核心构建时刻依赖库全部就位现在可以请出主角ORB_SLAM3了。编译过程本身不复杂但有几个关键配置点需要特别注意否则很容易编译失败。3.1 获取源码与初步准备首先把ORB_SLAM3的源码克隆到本地cd ~ git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git cd ORB_SLAM3源码里已经自带了修改版的DBoW2和g2o库放在Thirdparty目录下。项目提供了一个方便的build.sh脚本它会自动编译这两个第三方库以及ORB_SLAM3本身。但在运行脚本前我们需要先修改一个关键文件来适配OpenCV 4。3.2 关键修改适配OpenCV 4打开项目根目录下的CMakeLists.txt文件找到查找OpenCV包的部分大概在36行到42行。原始代码是优先找OpenCV 4找不到再找OpenCV 3。由于我们明确安装了OpenCV 4.5.1为了更精确我们可以做一点小改动直接让它寻找OpenCV 4避免CMake去尝试旧版本。找到这段代码find_package(OpenCV 4.0) if(NOT OpenCV_FOUND) find_package(OpenCV 3.0) if(NOT OpenCV_FOUND) message(FATAL_ERROR OpenCV 3.0 not found.) endif() endif()可以将其简化为或者保持原样通常也能找到find_package(OpenCV 4.0 REQUIRED)REQUIRED关键字表示必须找到找不到就报错停止。这样更清晰。保存文件。3.3 执行编译脚本现在给编译脚本添加执行权限并运行它chmod x build.sh ./build.sh这个脚本会依次编译Thirdparty/DBoW2、Thirdparty/g2o最后编译ORB_SLAM3主体。如果一切顺利你会在终端看到大量的编译输出最后没有错误信息并且在lib目录下生成libORB_SLAM3.so动态库文件在Examples目录下的各个子文件夹如Monocular里生成可执行文件如mono_euroc。常见编译问题排查找不到Pangolin或Eigen确保你已经成功安装并sudo make install了。可以尝试手动指定路径在CMakeLists.txt里添加set(Pangolin_DIR /usr/local/lib/cmake/Pangolin)之类的指令但通常标准安装不需要。OpenCV版本冲突如果你系统里之前安装过其他版本的OpenCV比如ROS自带的OpenCV 3.2可能会引起混乱。确保我们刚安装的OpenCV 4.5.1在/usr/local下并且通过ldconfig更新了缓存。你可以用pkg-config --modversion opencv4来验证当前生效的版本。C14标准ORB_SLAM3需要C14支持。确保你的GCC编译器版本足够新Ubuntu 18.04默认的g 7.5是支持的。在CMakeLists.txt中通常已经设置了set(CMAKE_CXX_STANDARD 14)。编译成功只是第一步接下来我们要用真实数据来验证它是否真的能工作。4. 运行EuRoC数据集见证SLAM的魔力EuRoC数据集是SLAM领域非常经典的公开数据集它包含了在室内环境飞行器上采集的立体图像和IMU数据精度很高非常适合算法测试。ORB_SLAM3的示例脚本就是为它准备的。4.1 下载与准备数据集我们下载其中一个比较简单的序列比如MH_01_easy。在终端里执行cd ~ wget http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_01_easy/MH_01_easy.zip unzip MH_01_easy.zip解压后会得到一个mav0文件夹里面按传感器分门别类存放着数据。为了符合ORB_SLAM3示例脚本的预期我们最好把这个数据集放在一个专门的目录下并重命名一下虽然不重命名改脚本路径也行mkdir -p ~/Datasets/EuRoC mv mav0 ~/Datasets/EuRoC/MH01这样数据集的路径就是~/Datasets/EuRoC/MH01。4.2 修改示例脚本ORB_SLAM3根目录下有一个euroc_examples.sh脚本里面定义了如何运行不同传感器配置的示例。我们需要修改其中的数据集路径变量。用文本编辑器打开这个文件gedit euroc_examples.sh你会看到类似这样的内容pathDatasetEuroc[EuRoC dataset path]我们需要将[EuRoC dataset path]替换成我们数据集上一级目录的绝对路径。注意是MH01的父目录而不是MH01本身。根据我们上面的放置位置应该修改为pathDatasetEuroc/home/你的用户名/Datasets/EuRoC请务必将“你的用户名”替换成你实际的用户名。保存并关闭文件。4.3 运行单目示例万事俱备现在可以运行了在ORB_SLAM3的根目录下直接执行修改后的脚本./euroc_examples.sh这个脚本会依次尝试运行单目、双目、单目惯导等示例。我们主要关注第一个也就是单目Monocular的例子。当脚本运行到单目部分时你会看到终端开始输出ORB_SLAM3的初始化信息同时会弹出一个Pangolin创建的窗口。窗口里你会看到什么主窗口显示当前相机拍摄的图像上面叠加了绿色的ORB特征点。右侧小窗口显示从图像中提取的ORB特征点关键点。另一个3D窗口这是最激动人心的你会看到蓝色的相机轨迹Camera Trajectory被实时地绘制出来同时还有很多黑色或彩色的点云Map Points在空间中生成这就是SLAM正在构建的三维地图让程序跑完整个数据集序列或者按键盘上的q键可以提前退出。如果一切正常恭喜你你已经成功在EuRoC数据集上运行了ORB_SLAM3你会看到相机轨迹形成一个闭环这证明了算法能够准确地估计相机的运动路径。4.4 可能遇到的运行时错误及解决段错误 (核心已转储)这是最令人头疼的错误之一。首先检查你的数据集路径是否正确绝对路径里不能有中文或特殊字符。其次检查所有依赖库是否都正确安装并被找到。可以用ldd命令检查生成的可执行文件链接了哪些库比如ldd Examples/Monocular/mono_euroc看看有没有not found的项。找不到词汇表文件ORB_SLAM3启动时需要加载一个ORB词汇表文件ORBvoc.txt它通常位于Vocabulary文件夹下。确保你是在ORB_SLAM3的根目录下运行示例脚本或者正确指定了词汇表文件的路径。Pangolin窗口无响应或闪退可能是图形驱动问题。确保你的系统安装了合适的显卡驱动。对于虚拟机用户可能需要启用3D加速功能。5. 进阶与调试让系统更稳固成功运行示例是第一步但要想真正用好ORB_SLAM3或者把它集成到自己的项目中还需要了解更多。5.1 理解配置文件在Examples目录下除了可执行文件你还会看到很多.yaml文件比如EuRoC.yaml。这些是配置文件包含了相机参数焦距、畸变系数、基线等和算法参数特征点数量、尺度金字塔层数等。当你使用自己的相机时就需要用标定工具获取相机的内参和畸变参数并仿照这些文件创建自己的配置文件。理解并调整这些参数是优化ORB_SLAM3在你特定场景下性能的关键。5.2 尝试其他传感器模式我们刚才运行的是单目模式。ORB_SLAM3的强大之处在于它支持多种传感器。你可以尝试双目模式使用Stereo文件夹下的示例它能直接利用左右图像的视差估计深度比单目更稳定初始化也更快。单目惯导模式使用Monocular-Inertial示例。这需要数据集中包含IMU数据EuRoC有。融合IMU信息可以解决单目SLAM的尺度不确定性问题并提高在快速运动或纹理缺失区域的鲁棒性。只需在euroc_examples.sh脚本中将其它被注释掉的运行命令取消注释就可以体验不同的模式。观察不同模式下轨迹精度和地图构建效果的差异非常有意思。5.3 源码结构与二次开发如果你有兴趣深入浏览ORB_SLAM3的源码结构是很好的学习方式。主要目录包括src/核心算法实现如跟踪Tracking、局部建图LocalMapping、闭环检测LoopClosing等。include/对应的头文件。Examples/各种传感器配置的示例入口和配置文件。Thirdparty/集成的DBoW2词袋模型用于回环检测和g2o图优化库。想修改算法或添加新功能通常从System.cc、Tracking.cc等核心文件入手。例如你想修改特征提取的数量可以在Tracking.cc里找到相关代码。编译你自己的修改后记得重新运行./build.sh。6. 避坑指南与经验分享最后分享几个我踩过坑后总结的经验希望能帮你节省时间版本版本版本这是所有开源项目编译的玄学之源。严格按照教程里的版本组合Ubuntu 18.04 OpenCV 4.5.1 Pangolin v0.8成功率会高很多。盲目追求最新版本往往意味着要当“排雷兵”。善用终端历史与错误信息。编译出错时不要只看最后几行。往上翻找到第一个error开始看那通常是问题的根源。把完整的错误信息复制下来去搜索引擎注意使用合规的学术和技术资源查找大概率能找到解决方案。环境变量管理。如果你在一台机器上折腾多个版本的库比如不同版本的OpenCV环境变量如PKG_CONFIG_PATH、LD_LIBRARY_PATH很容易混乱。一个干净的系统环境或者使用Docker等容器技术可以完美隔离不同项目的依赖。从非ROS模式开始。就像我们这次做的一样先抛开ROS的复杂性让ORB_SLAM3本身跑起来。理解了这个基础流程后再去看ROS版本的封装就会清晰很多。ROS版本主要多了话题订阅、发布这些通信层的东西核心算法是一样的。耐心与动手。SLAM系统的搭建涉及软件栈较深遇到问题很正常。多动手尝试多查阅官方Issues和社区论坛如GitHub Discussions、相关技术社区每一次解决问题的过程都是宝贵的学习经验。当你第一次看到自己电脑上实时构建出三维地图时那种成就感会让你觉得所有的折腾都是值得的。

相关新闻

E5071C网络分析仪校准实战指南:从入门到精通

E5071C网络分析仪校准实战指南:从入门到精通

1. 校准前,你准备好了吗? 刚拿到E5071C网络分析仪的时候,看着屏幕上跳动的曲线和一堆参数,是不是感觉有点无从下手?特别是当领导或者导师说“去校准一下”的时候,心里更是一阵发慌。别担心,这种…

2026/7/5 4:00:15 阅读更多 →
UE 【材质扩展】从零打造自定义HLSL节点

UE 【材质扩展】从零打造自定义HLSL节点

1. 为什么我们需要自定义HLSL节点? 如果你用过虚幻引擎的材质编辑器,肯定对里面那些花花绿绿的节点不陌生。什么Add(加法)、Multiply(乘法)、Lerp(线性插值)……这些节点用起来很方便…

2026/5/17 11:23:31 阅读更多 →
从ADC采样到稳定输出:STM32红外测距模块的卡尔曼滤波调参指南

从ADC采样到稳定输出:STM32红外测距模块的卡尔曼滤波调参指南

从ADC采样到稳定输出:STM32红外测距模块的卡尔曼滤波调参指南 在嵌入式开发中,尤其是涉及无人机、机器人或任何需要精确感知环境的项目时,从传感器获取一个“能用”的读数,到获得一个“可靠”的读数,中间往往隔着一道名…

2026/5/17 11:23:29 阅读更多 →

最新新闻

如何识别真正可落地的AI项目标题

如何识别真正可落地的AI项目标题

我不能按照该标题生成博文。原因如下:该标题属于实时科技商业新闻类内容,核心是报道OpenAI公司人事变动事件,本质为媒体资讯传播,而非可复现、可操作、可深度拆解的“项目”;根据你设定的【角色与任务定义】&#xff0…

2026/7/5 3:59:09 阅读更多 →
区分于三层架构的四层架构(Java 后端分层设计的完整指南)

区分于三层架构的四层架构(Java 后端分层设计的完整指南)

四层架构:Java 后端分层设计的完整指南适用场景:Spring Boot / Spring MVC 等 Java Web 后端 关键词:Controller Service Repository Entity 分层架构 职责分离我遇到的问题 刚学 Java Web 开发时,很容易把所有逻辑堆在一个类…

2026/7/5 3:57:09 阅读更多 →
Alexa增强与自主交通流耦合的语音交互新范式

Alexa增强与自主交通流耦合的语音交互新范式

1. 项目概述:这不是一次普通的技术发布会,而是一场关于“智能体如何真正融入人类生活节奏”的现场压力测试“Alexa Enhancements, Autonomous Traffic at AI Summit”——这个标题乍看像两条并行的新闻快讯,但如果你在现场待过三小时以上&…

2026/7/5 3:55:08 阅读更多 →
洞悉生态-社会耦合机制、多源数据融合进阶应用:基于当量因子法InVEST、SolVES模型等多技术融合在生态系统服务功能社会价值评估种的应用

洞悉生态-社会耦合机制、多源数据融合进阶应用:基于当量因子法InVEST、SolVES模型等多技术融合在生态系统服务功能社会价值评估种的应用

在生态文明建设的浪潮中,你是否正为如何量化那些难以用货币衡量的“人心账”而头疼?传统的生态评估往往只算清了“经济账”,却忽略了公众对美学、休闲和精神寄托的感知。作为破解这一难题的核心利器,当量因子法、InVEST与SolVES的…

2026/7/5 3:55:08 阅读更多 →
面试时,你会问面试官哪些问题?

面试时,你会问面试官哪些问题?

明天又要去参加一次面试。每次面试的时候,面试官都会在最后给面试者一些时间,来问问题。这是个非常好的机会,能按照自己的思路,来了解职位、技术、企业文化、福利待遇、企业状况和前景等情况,以弥补前面面试过程中没有…

2026/7/5 3:53:08 阅读更多 →
零基础!IntelliJ IDEA + CC GUI + 智谱AI 配置全记录

零基础!IntelliJ IDEA + CC GUI + 智谱AI 配置全记录

一、背景与目标 目标:在 IntelliJ IDEA 中使用 Claude Code 风格的 AI 编程助手,且希望免费、稳定、合规。 最终方案:IntelliJ IDEA CC GUI 插件 cc-switch 工具 智谱AI GLM 免费模型。 二、完整过程与遇到的问题 阶段 1:想…

2026/7/5 3:51:07 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻