ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Ubuntu下双目ORB-SLAM2跑EuRoC数据集:环境搭建、参数调优与轨迹评估实战

Ubuntu下双目ORB-SLAM2跑EuRoC数据集:环境搭建、参数调优与轨迹评估实战

1. 项目缘起与整体思路拆解

双目视觉里程计这个方向,我断断续续折腾了快两年。最开始上手的是单目方案,跑着跑着就发现尺度漂移实在让人头疼——初始化那一下的尺度基本靠运气,跑长了轨迹就飘得没法看。后来换成双目,虽然标定和同步麻烦一点,但尺度是实打实的,心里踏实多了。这次要聊的就是在公开的EuRoC数据集上把双目ORB-SLAM2完整跑起来这件事,从环境搭建到参数配置再到结果验证,我会把中间踩过的坑和关键细节都摊开讲。

先说清楚这个内容适合谁看。如果你刚接触视觉SLAM,手里有一台还行的电脑,想找个靠谱的开源方案入门,那这套流程非常适合你。如果你已经在用单目方案但被尺度问题折磨,想切到双目,那这篇也能帮你少走弯路。甚至你只是想验证一下自己的双目相机标定参数对不对,也可以拿EuRoC数据集当基准来对照。核心关键词就几个:双目SLAM、ORB-SLAM2、EuRoC数据集、视觉里程计、轨迹评估。这些词后面会反复出现,但我会尽量用大白话把每个环节讲透。

为什么选EuRoC数据集而不是别的?这里有个很实际的考量。EuRoC是苏黎世联邦理工发布的微型飞行器室内数据集,里面包含了双目灰度图像、IMU数据、以及高精度的运动捕捉系统提供的真值轨迹。它的双目图像是全局快门,同步做得很好,而且场景有纹理丰富的室内环境,也有光照变化和快速运动的片段。对于验证双目SLAM算法来说,这个数据集的质量和标注精度都是第一梯队的。更重要的是,它足够小,不像KITTI那样动辄几十个G,下载和跑实验的门槛低很多。我实测下来,一个完整的MH_01序列也就几个G,普通笔记本就能跑。

ORB-SLAM2这个方案本身也值得说道说道。它是基于特征点法的经典SLAM系统,支持单目、双目和RGB-D三种模式。双目模式下,它利用左右图像的视差直接计算深度,不需要像单目那样等初始化,启动就能工作。它的核心是三个线程并行:跟踪线程负责每帧的位姿估计,局部建图线程管理关键帧和地图点,闭环检测线程负责消除累积误差。这种多线程架构在当年是很超前的设计,放到现在也依然能打。选它作为入门方案,一方面是因为代码结构清晰,另一方面是社区资料多,遇到问题容易找到参考。

整体思路其实不复杂:先把环境搭好,包括操作系统、依赖库和ORB-SLAM2本体;然后准备EuRoC数据集,注意目录结构要对;接着配置双目模式的参数文件,这里面的门道最多;最后运行并评估轨迹精度。听起来就四步,但每一步都有细节能让你卡半天。我见过太多人卡在依赖版本冲突上,或者参数文件里一个路径写错导致跑不起来。所以下面我会把每个环节拆开,把容易出问题的地方重点标出来。

2. 环境搭建与依赖处理

2.1 操作系统与基础工具的选择

我用的环境是Ubuntu 18.04,这个版本在SLAM社区里算是比较稳的。为什么不用更新的20.04或者22.04?主要是ORB-SLAM2依赖的Pangolin和OpenCV版本在18.04上兼容性最好。当然你在20.04上也能跑,但可能需要手动编译一些库的特定版本,对新手不太友好。如果你已经在用别的版本,也不用急着换系统,先试试看能不能编译通过,实在不行再考虑用Docker或者虚拟机。

基础工具方面,cmake、g++、git这三样是必须的。安装命令很简单:

sudo apt update sudo apt install cmake g++ git

cmake的版本建议3.10以上,g++建议支持C++11标准。这些在18.04的默认源里都满足。另外我强烈建议装一个terminator或者tmux,因为ORB-SLAM2运行时会开三个可视化窗口,用普通终端切来切去很麻烦。tmux可以分屏,一边看运行日志一边看轨迹窗口,效率高很多。

2.2 核心依赖库的安装与版本控制

ORB-SLAM2的依赖主要有四个:OpenCV、Eigen3、Pangolin和DBoW2。其中DBoW2是ORB-SLAM2自带的,不用单独装。前三个需要自己处理。

OpenCV我推荐用3.4.x版本,具体来说是3.4.5或者3.4.10。为什么不用OpenCV 4?因为ORB-SLAM2的代码里有一些API在OpenCV 4里被移除了,比如cv::FileStorage的某些用法,直接编译会报错。如果你非要用OpenCV 4,需要改代码,对新手来说没必要。安装OpenCV 3.4的步骤稍微有点长,我列一下关键命令:

sudo apt install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev git clone https://github.com/opencv/opencv.git cd opencv git checkout 3.4.10 mkdir build && cd build cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. make -j4 sudo make install

这里有个坑要注意:make -j4里的数字根据你CPU核心数来,核心多就写大一点,但别超过实际核心数,否则可能内存不够导致编译失败。我试过在4核8G的机器上开-j8,结果编译到一半直接卡死。另外安装完之后要配置一下环境变量,不然编译ORB-SLAM2的时候可能找不到OpenCV:

sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf' sudo ldconfig

Eigen3的安装就简单多了,直接apt装就行:

sudo apt install libeigen3-dev

但要注意,有些系统默认装的是Eigen 3.2,而ORB-SLAM2需要3.3以上。检查一下版本:

pkg-config --modversion eigen3

如果低于3.3,就去Eigen官网下载源码编译安装。Eigen是纯头文件库,编译安装很快,不会出什么幺蛾子。

Pangolin是用来做可视化的,ORB-SLAM2用它显示当前帧、地图点和轨迹。安装Pangolin需要先装一些依赖:

sudo apt install libglew-dev libpython2.7-dev git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin mkdir build && cd build cmake .. make -j4 sudo make install

Pangolin的版本也有讲究。新版的Pangolin对C++标准要求更高,可能和ORB-SLAM2的代码不兼容。我建议用v0.5这个版本,比较稳。如果编译ORB-SLAM2时报Pangolin相关的错误,大概率是版本问题,回退到v0.5试试。

2.3 ORB-SLAM2的编译与常见报错处理

依赖都装好之后,就可以编译ORB-SLAM2了。先克隆代码:

git clone https://github.com/raulmur/ORB_SLAM2.git cd ORB_SLAM2 chmod +x build.sh ./build.sh

这个build.sh会依次编译DBoW2、g2o和ORB-SLAM2本体。整个过程大概需要十几分钟,取决于你的机器性能。编译过程中最常见的报错有这么几类:

第一类是找不到OpenCV。报错信息通常是fatal error: opencv2/core/core.hpp: No such file or directory。这说明编译器没找到OpenCV的头文件路径。解决办法是在CMakeLists.txt里手动指定OpenCV路径,或者检查/usr/local/include/opencv2是否存在。如果不存在,说明OpenCV没装好,重新装一遍。

第二类是C++标准问题。报错信息里会出现std::atomic或者nullptr相关的错误。这是因为ORB-SLAM2的CMakeLists.txt里默认用的是C++11,但有些系统默认标准不对。解决办法是在CMakeLists.txt里加上set(CMAKE_CXX_STANDARD 11)和set(CMAKE_CXX_STANDARD_REQUIRED ON)。

第三类是链接错误,报错信息里有一堆undefined reference。这通常是库的链接顺序问题,或者某个库没装全。我遇到过一次是Pangolin没装好,导致链接时找不到符号。重新装一遍Pangolin就好了。

编译成功后,你会在ORB_SLAM2目录下看到Examples文件夹,里面有针对不同数据集的运行脚本。双目对应的脚本在Examples/Stereo目录下,后面我们会用到。

3. EuRoC数据集准备与目录结构

3.1 数据集下载与序列选择

EuRoC数据集可以从官网下载,里面有很多个序列,比如MH_01到MH_05是微型飞行器在室内悬停和慢速飞行的数据,V1_01到V1_03是更剧烈的飞行,V2_01到V2_03是带有光照变化的场景。对于初次跑双目ORB-SLAM2,我建议从MH_01开始,因为这个序列运动平稳,纹理丰富,最容易出好结果。

下载下来的数据是压缩包格式,解压后你会看到两个文件夹:mav0和cam0、cam1。实际上EuRoC的数据组织是这样的:mav0下面有cam0和cam1两个子文件夹,分别对应左目和右目相机。每个相机文件夹里有data文件夹存放图像,还有sensor.yaml文件存放标定参数。另外mav0下面还有state_groundtruth_estimate0文件夹,里面是真值轨迹,用来评估精度。

3.2 目录结构整理与路径配置

ORB-SLAM2对数据集的目录结构有固定要求。它期望的格式是这样的:

EuRoC/ └── MH_01_easy/ └── mav0/ ├── cam0/ │ ├── data/ │ └── sensor.yaml ├── cam1/ │ ├── data/ │ └── sensor.yaml └── state_groundtruth_estimate0/ ├── data.csv └── sensor.yaml

如果你下载的压缩包解压后结构不对,需要手动调整。我见过有人把cam0和cam1直接放在MH_01_easy下面,结果运行时报找不到图像。所以这一步一定要仔细检查。

另外,ORB-SLAM2的双目模式需要两个图像文件夹的路径,以及一个时间戳文件。EuRoC的图像文件名本身就是时间戳,比如1403636579763555584.png,所以不需要额外的时间戳文件。但ORB-SLAM2的代码里默认会去读一个times.txt,这个文件在EuRoC里没有。解决办法是修改代码或者用脚本生成一个。我推荐用脚本生成,简单快捷:

cd EuRoC/MH_01_easy/mav0/cam0/data ls *.png | sed 's/.png//' > times.txt

然后把这个times.txt复制到cam1/data下面。注意两个相机的时间戳要对应上,EuRoC的数据是硬件同步的,所以左右目的时间戳应该完全一致。如果不一致,说明数据有问题,需要重新下载。

3.3 标定参数文件的解读与修改

EuRoC的sensor.yaml文件里包含了相机的内参和畸变系数。ORB-SLAM2的双目参数文件在Examples/Stereo/EuRoC.yaml,我们需要把里面的参数改成和数据集匹配的。这个文件里几个关键参数:

  • Camera.fx,Camera.fy: 焦距,单位是像素
  • Camera.cx,Camera.cy: 主点坐标
  • Camera.k1,Camera.k2,Camera.p1,Camera.p2: 畸变系数
  • Camera.width,Camera.height: 图像分辨率
  • STEREO.bf: 基线乘以焦距,这个参数很关键
  • ORBextractor.nFeatures: 每帧提取的特征点数量
  • ORBextractor.scaleFactor: 金字塔缩放因子
  • ORBextractor.nLevels: 金字塔层数

这些参数在EuRoC的sensor.yaml里都有,直接抄过来就行。但有一个地方容易搞错:STEREO.bf这个参数。它等于基线乘以焦距。EuRoC的双目基线是0.11米左右,焦距在sensor.yaml里有。你可以直接算,也可以用ORB-SLAM2提供的标定工具算。我建议直接算,因为标定工具跑起来比较慢。

计算方法是:bf = fx * baseline。比如fx是458.654,baseline是0.11,那bf就是50.45左右。这个值填到STEREO.bf里。如果这个值填错了,深度估计会完全不对,轨迹会飘得离谱。

另外ORBextractor.nFeatures这个参数也值得说一下。默认是1000,对于EuRoC这种分辨率(752x480)的图像来说,1000个特征点有点少。我试过调到1500到2000,跟踪更稳,但计算量也上去了。如果你的机器性能一般,保持1000也行,但可能会在快速运动时丢失跟踪。我个人的建议是1200到1500之间,平衡精度和速度。

4. 双目模式运行与参数调优

4.1 启动命令与运行流程

参数文件改好之后,就可以运行了。ORB-SLAM2的双目运行命令格式是:

./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml /path/to/EuRoC/MH_01_easy/mav0/cam0/data /path/to/EuRoC/MH_01_easy/mav0/cam1/data Examples/Stereo/EuRoC_TimeStamps/MH01.txt

注意最后一个参数是时间戳文件。ORB-SLAM2的Examples里自带了一些时间戳文件,在Examples/Stereo/EuRoC_TimeStamps/目录下。如果你下载的数据集版本和这些时间戳对不上,就需要自己生成。生成方法和前面说的一样,用ls和sed命令。

运行之后,你会看到三个窗口:一个是当前帧的图像和提取的特征点,一个是地图视图显示相机轨迹和地图点,还有一个是状态窗口显示跟踪状态和关键帧数量。如果一切正常,你应该能看到轨迹逐渐延伸,地图点越来越多。

4.2 关键参数对轨迹精度的影响

有几个参数对轨迹精度影响很大,我逐个说一下。

第一个是ORBextractor.nFeatures。前面提过,特征点数量越多,跟踪越稳,但计算量越大。在EuRoC的MH_01序列上,我试过1000、1500、2000三个值。1000的时候在快速旋转段会丢失跟踪,1500基本能全程跟住,2000更稳但帧率从30降到20左右。所以如果你的机器性能够,建议用1500以上。

第二个是ORBextractor.scaleFactor。这个参数控制图像金字塔的缩放比例,默认是1.2。调小到1.1会增加每层的特征点数量,但计算量也增加。调大到1.3会减少计算量,但可能丢失小尺度的特征。我一般保持默认1.2,除非有特殊需求。

第三个是STEREO.bf。前面强调过,这个值必须准确。如果偏大,深度估计会偏小,轨迹会往相机方向收缩;如果偏小,深度估计会偏大,轨迹会往外扩。你可以通过对比真值轨迹来验证,如果轨迹整体缩放不对,大概率是bf的问题。

第四个是ORBextractor.iniThFAST和ORBextractor.minThFAST。这两个是FAST角点的阈值,默认是20和7。如果图像纹理弱,可以调低到15和5,提取更多特征点。如果图像噪声大,可以调高到25和10,减少误检。EuRoC的图像质量不错,默认值就够用。

4.3 运行过程中的监控与日志分析

ORB-SLAM2运行时会输出一些日志信息,比如跟踪状态、关键帧数量、闭环检测结果等。这些信息对于判断系统是否正常工作很有帮助。

跟踪状态有三种:SYSTEM_INITIALIZING、SYSTEM_OK和SYSTEM_LOST。如果一直是SYSTEM_INITIALIZING,说明初始化没成功,可能是图像没读进来或者特征点太少。如果频繁出现SYSTEM_LOST,说明跟踪丢失,可能是运动太快或者纹理太弱。

关键帧数量也是一个指标。正常情况下,MH_01序列跑完大概会产生100到200个关键帧。如果关键帧数量特别少,比如只有几十个,说明系统可能没怎么建图,轨迹精度堪忧。如果特别多,比如上千个,说明系统频繁插入关键帧,可能是跟踪不稳定导致的。

闭环检测的结果也会在日志里显示。如果检测到闭环,会输出Loop detected之类的信息。EuRoC的MH_01序列是一个闭环轨迹,所以理论上应该能检测到闭环。如果没检测到,可能是闭环检测的参数太严格,可以适当放宽。

5. 轨迹评估与精度验证

5.1 真值轨迹的读取与对齐

跑完ORB-SLAM2之后,你会得到一个轨迹文件,通常是CameraTrajectory.txt或者KeyFrameTrajectory.txt。这个文件里是相机位姿,格式是时间戳加平移向量加四元数。要评估精度,需要和真值轨迹对比。

EuRoC的真值轨迹在state_groundtruth_estimate0/data.csv里,格式是时间戳、位置、四元数、速度、陀螺仪偏置、加速度计偏置。我们只需要位置和四元数。

对比之前需要做时间对齐和空间对齐。时间对齐是因为ORB-SLAM2输出的时间戳和真值的时间戳不一定完全对应,需要找最近邻。空间对齐是因为ORB-SLAM2的坐标系和真值的坐标系可能不一致,需要做相似变换。这个变换包括旋转、平移和尺度。对于双目SLAM来说,尺度是已知的,所以只需要旋转和平移。

我一般用EVO这个工具来做评估,它支持EuRoC格式的轨迹文件,可以自动做对齐和计算误差。安装EVO很简单:

pip install evo --upgrade --no-binary evo

然后运行:

evo_traj tum CameraTrajectory.txt --ref=data.csv --plot --align

这个命令会画出两条轨迹的对比图,并计算绝对位姿误差(APE)和相对位姿误差(RPE)。APE反映的是整体轨迹的精度,RPE反映的是局部轨迹的精度。对于EuRoC的MH_01序列,双目ORB-SLAM2的APE通常在0.05到0.1米之间,RPE在0.01到0.02米之间。如果你的结果比这个差很多,说明参数有问题。

5.2 误差来源分析与改进方向

如果轨迹精度不理想,可以从几个方面排查。

首先是标定参数。如果内参或者畸变系数不对,特征点匹配会出错,导致位姿估计不准。检查方法是把标定参数代回图像,看畸变校正后的图像是否直线变直。如果还有弯曲,说明畸变系数不对。

其次是时间同步。如果左右目图像的时间戳对不上,视差计算会出错。EuRoC的数据是硬件同步的,理论上没问题,但如果你自己生成的时间戳文件有误,就会导致这个问题。检查方法是看左右目图像的文件名是否一一对应。

再次是特征点数量和质量。如果特征点太少或者分布不均匀,位姿估计会不稳定。可以可视化特征点看看,如果都集中在图像某个区域,说明提取有问题。调整ORBextractor.nFeatures和FAST阈值可以改善。

最后是运动速度。如果相机运动太快,相邻帧之间的重叠区域太小,特征点匹配会失败。EuRoC的MH_01序列运动比较平稳,一般不会遇到这个问题。但V1和V2序列有快速运动,可能需要调参或者用IMU辅助。

5.3 结果可视化与报告生成

EVO不仅可以计算误差,还可以生成漂亮的轨迹图和误差曲线图。我一般会生成三张图:轨迹对比图、APE随时间变化图、RPE随时间变化图。这些图可以直接放到报告或者博客里。

生成命令:

evo_traj tum CameraTrajectory.txt --ref=data.csv --plot --align --save_plot trajectory.png evo_ape tum data.csv CameraTrajectory.txt --align --plot --save_plot ape.png evo_rpe tum data.csv CameraTrajectory.txt --align --plot --save_plot rpe.png

这些图能直观地展示轨迹的精度和误差分布。如果APE曲线在某些时间段突然变大,说明那段时间跟踪出了问题,可以回去看日志找原因。

6. 常见问题与排查技巧实录

6.1 编译与运行阶段的典型报错

我在不同机器上跑过很多次ORB-SLAM2,遇到过的报错五花八门。这里整理一个速查表,方便你快速定位问题。

报错信息可能原因解决办法
fatal error: opencv2/core/core.hpp: No such fileOpenCV未安装或路径不对重新安装OpenCV 3.4,检查/usr/local/include
undefined reference to symbol '_ZN5boost...'Boost库链接问题安装libboost-all-dev,在CMakeLists里加-lboost_system
Pangolin could not be foundPangolin未安装或版本不对安装Pangolin v0.5,检查/usr/local/lib
Segmentation fault (core dumped)参数文件路径错误或图像读取失败检查EuRoC.yaml里的路径和实际数据路径是否一致
Tracking lost频繁出现特征点太少或运动太快增加nFeatures,降低FAST阈值,检查图像质量
Stereo baseline is zeroSTEREO.bf参数为0或未设置计算bf = fx * baseline并填入参数文件

这个表里的问题我基本都遇到过,最坑的是Segmentation fault,因为报错信息不明确,只能靠猜。后来发现是参数文件里的路径写错了,导致程序读不到图像,空指针访问就崩了。所以遇到段错误,第一件事就是检查路径。

6.2 轨迹漂移与跟踪丢失的排查思路

轨迹漂移和跟踪丢失是SLAM里最常见的问题。排查思路可以按这个顺序来:

第一步,看图像质量。如果图像模糊、曝光过度或者纹理太少,特征点提取会受影响。EuRoC的数据质量很好,一般不是这个问题。但如果你用的是自己的数据,就要注意了。

第二步,看特征点数量和分布。在ORB-SLAM2的可视化窗口里,特征点会用绿色方块标出来。如果数量很少或者集中在某个角落,说明提取有问题。调整nFeatures和FAST阈值试试。

第三步,看视差。双目SLAM依赖视差计算深度,如果视差太小(比如相机看很远的地方),深度估计会不准。EuRoC的室内场景视差还可以,但如果你跑的是室外数据,可能要注意。

第四步,看时间同步。如果左右目图像的时间戳差太多,视差计算会出错。检查时间戳文件,确保左右目一一对应。

第五步,看标定参数。如果内参或者畸变系数不对,特征点匹配会出错。用标定工具重新标定,或者用EuRoC自带的参数。

6.3 性能优化与加速技巧

ORB-SLAM2在普通笔记本上跑,帧率可能只有十几帧。如果想加速,有几个办法。

第一个是降低图像分辨率。EuRoC的图像是752x480,可以降采样到376x240,计算量减少四分之三。但分辨率降低后,特征点数量也会减少,可能影响精度。我试过降采样,帧率从15提升到30,但APE从0.06米增加到0.1米。所以看你的需求,如果只是验证算法流程,降采样没问题;如果要高精度,还是用原分辨率。

第二个是减少特征点数量。前面说过,nFeatures从1500降到1000,帧率能提升20%左右。但跟踪稳定性会下降,快速运动时容易丢。

第三个是关闭可视化。ORB-SLAM2的三个可视化窗口很占资源,如果不需要实时看,可以在代码里关掉。具体是修改System.cc里的bViewer和bUseViewer标志。关掉之后帧率能提升30%以上。

第四个是用多线程编译。build.sh里默认是make -j,但有些系统上-j后面没跟数字,导致只用单线程编译。可以手动改成make -j4或者make -j8,编译时间能缩短一半。

6.4 独家避坑经验分享

说几个我踩过的坑,都是文档里不会写的。

第一个坑是OpenCV的版本冲突。如果你系统里已经装了OpenCV 4,又装了OpenCV 3.4,编译ORB-SLAM2时可能会链接到OpenCV 4的库,导致运行时报错。解决办法是在CMakeLists.txt里明确指定OpenCV 3.4的路径,或者用update-alternatives管理多个版本。

第二个坑是Pangolin的Python依赖。Pangolin编译时需要Python 2.7的开发头文件,但有些新系统默认只有Python 3。解决办法是装libpython2.7-dev,或者修改Pangolin的CMakeLists.txt跳过Python绑定。

第三个坑是EuRoC数据集的解压。下载的压缩包解压后,有时候会多一层目录,比如MH_01_easy/MH_01_easy/mav0。这时候需要把内层目录移出来,否则路径不对。

第四个坑是时间戳文件的格式。ORB-SLAM2要求时间戳是纯数字,一行一个。如果你用ls生成的时间戳带了文件扩展名,需要去掉。另外时间戳的顺序要和图像文件名的顺序一致,否则会乱序读取。

第五个坑是轨迹文件的保存。ORB-SLAM2默认保存的轨迹文件在运行目录下,但如果你在别的目录运行,可能找不到。建议在运行命令前先cd到ORB-SLAM2根目录,这样轨迹文件会保存在根目录下,方便查找。

7. 扩展方向与个人体会

跑通双目ORB-SLAM2只是第一步,后面还有很多可以折腾的方向。比如你可以试试把IMU数据融合进去,ORB-SLAM2本身不支持IMU,但ORB-SLAM3支持,可以无缝切换。或者你可以试试用自己的双目相机跑,这时候标定就很重要了,需要自己采集数据、标定内参和外参、生成时间戳文件。再或者你可以试试不同的数据集,比如KITTI或者TUM,看看算法在不同场景下的表现。

我个人在实际操作中的体会是,SLAM这个方向,理论看再多不如亲手跑一遍。很多问题只有跑起来才会暴露,比如路径错误、参数不匹配、版本冲突。而且每次解决一个问题,你对整个系统的理解就会深一层。我刚开始跑的时候,光编译就花了两天,各种报错轮番出现。但跑通之后回头看,那些坑其实都有规律,无非是依赖、路径、参数这三类问题。所以如果你现在正卡在某个环节,别急,按我上面说的排查思路一步步来,大概率能解决。

最后再分享一个小技巧:如果你在EuRoC上跑通了,想试试自己的数据,可以先录一段静态场景的视频,看看特征点提取和匹配是否正常。静态场景没有运动模糊,最容易调试。等静态没问题了,再录动态场景。这样循序渐进,比一上来就挑战复杂场景要高效得多。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进