EVO Evaluation of SLAM 5 --- ORB-SLAM3 精度和性能效果评估

一、前言

上一篇文章已经把怎么编译和运行ORB-SLAM3讲的差不多了:
EVO Evaluation of SLAM 4 — ORB-SLAM3 编译和利用数据集运行

接下来就是基于ORB-SLAM3运行的结果,利用EVO来评估其性能。

二、说明

运行的ORB-SLAM3的代码是:
https://github.com/shanpenghui/ORB_SLAM3_Fixed.git

评估的主要依据ORB-SLAM3各个版本运行的结果来进行评估,下面分版本和数据集进行评估。

三、ros版本的编译和运行

1.EuRoc

(1)Groundtruth

cd MH_01_easy/mav0/state_groundtruth_estimate0
evo_traj euroc data.csv --save_as_tum

(2)APE

A.Stereo
evo_ape tum FrameTrajectory_TUM_Format.txt data.tum -p --plot -s --correct_scale -a --align -v --save_results orbslam3_stereo_ros_euroc.zip

结果:

在这里插入图片描述

在这里插入图片描述

B.Mono
evo_ape tum KeyFrameTrajectory.txt data.tum -p --plot -s --correct_scale -a --align -v --save_results orbslam3_mono_ros_euroc.zip

结果:

在这里插入图片描述

在这里插入图片描述

四、非ros版本的运行(Monocular)

因为比较复杂,已经更新到代码中了,具体参见链接:ORB_SLAM3_Fixed
在本例中,使用的是非ros单目版本,Euroc MH_01_easy的数据集。

1.Run ORB-SLAM3

cd shells
./tum_vi.sh

Get the result file as :

f_dataset-mh_01_easy.txt
kf_dataset-mh_01_easy.txt

2.Process the ORB-SLAM3 result file

一、Copy file

Process the ORB-SLAM3 result fileMove the result files above to the results folder

cd ORB_SLAM3_Fixed
cp f_dataset-mh_01_easy.txt results
cp kf_dataset-mh_01_easy.txt results
cd results

二、Process slam data (output is raw.csv)

A.Change the file name in process_orbslam_result.py Line 6 and Line 25

Line 6-7
dataset_path = './'
file_name = 'f_dataset-mh_01_easy.txt'

B.Process calibration files

python3 process_orbslam_result.py

C.Check trjactory if it is correct

evo_traj tum raw.csv -p

D.Save trjactory into standard format

evo_traj tum raw.csv --save_as_tum

E.Compare itself(or other)

evo_traj tum raw.tum --ref=raw.tum -va -p -s

3.Process the TUM groundtruth (output is gt.csv)

这里不用python脚本转换,可能evo升级了,最新的版本是不用转换的,运行脚本反而会出错。这里直接把gt的原文件转成tum就可以了。

rm -rf gt.csv
cp data.csv gt.csv
evo_traj euroc gt.csv -p
evo_traj euroc gt.csv --save_as_tum

4.Compare the groundtruth and the ORB-SLAM3 result

evo_traj tum raw.tum --ref=gt.tum -v -a -p -s

5.Calculate ATE of ORB-SLAM3 Monocular

evo_ape tum raw.tum gt.tum -v -a -p -s --save_results orbslam3_mono_unros_euroc_mh_01_easy.zip

五、整合不同结果

evo_ape/evo_rpe中将结果保存为.zip文件后,可以利用evo_res对不同的结果进行比较。
例如:MH3.zip、MH3_2.zip均由evo_ape得到的,运行命令evo_res MH3.zip MH3_2.zip -v

六、非ros版本的运行(RGB-D)

1.Run

./tum_rgbd.sh

2.Copy result files to folder

3.Copy groundtruth files to folder

4.Check CameraTrajectory

evo_traj tum CameraTrajectory.txt -p

5.Change CameraTrajectory format

evo_traj tum CameraTrajectory.txt --save_as_tum

6.Check Groundtruth Trajectory

evo_traj tum groundtruth.txt -p

7.Change Groundtruth Trajectory format

evo_traj tum groundtruth.txt --save_as_tum

8.Compare the groundtruth and the ORB-SLAM3 result

evo_traj tum CameraTrajectory.tum --ref=groundtruth.tum -v -a -p -s

9.Calculate ATE

evo_ape tum CameraTrajectory.tum groundtruth.tum -v -a -p -s
<think>好的,我现在需要帮助用户查找ORBSLAM3ORBmatcher相关的代码实现或使用教程。首先,我应该回忆一下ORBSLAM3的结构,了解ORBmatcher在其中的作用。ORBmatcher主要用于特征点的匹配,这在SLAM系统中非常关键,比如在跟踪、地图构建回环检测等模块中都会用到。 接下来,我需要确定用户的需求。用户可能是在开发或研究ORBSLAM3时遇到了特征匹配的问题,想要了解具体的实现细节或如何正确使用这部分代码。用户提到了“代码实现”“使用教程”,所以需要同时提供代码实际应用场景。 根据提供的引用内容,引用[2]提到了ORBextractor.cc,这可能与ORB特征的提取有关,而ORBmatcher可能在不同的文件中。不过,ORBmatcher通常是一个单独的类,可能在ORBmatcher.cc/.h中。我需要确认ORBSLAM3的代码结构,通常这些匹配函数会放在src目录下的ORBmatcher.cpp文件中,比如SearchByProjection、SearchForTriangulation等方法。 然后,用户可能需要了解如何调用这些匹配方法。比如在跟踪线程中,如何利用ORBmatcher进行特征匹配,或者在建图时如何生成新的地图点。这时,可以参考引用[3]中的Initializer::ReconstructF函数,其中可能调用了ORBmatcher的方法来进行特征匹配三角化。 另外,引用[5]提到了MapPointCulling函数,这可能涉及到地图点的筛选标准,这也可能与ORBmatcher的匹配结果有关。比如,在创建新地图点后,需要通过匹配验证其可靠性,不符合条件的会被剔除。 关于使用教程,ORBSLAM3的官方文档可能不够详细,所以可能需要参考一些社区资源,比如CSDN博客或GitHub上的示例项目。比如引用[1]中的CSDN博客GitHub链接可能包含相关的实现分析或教程。此外,逆向索引正向索引的应用(引用[4])可能与特征匹配中的快速检索有关,比如在回环检测中使用词袋模型进行特征匹配时,ORBmatcher可能会与这些索引结构交互。 现在需要将以上信息整合成一个清晰的回答,分点说明ORBmatcher的功能、代码置、核心函数、使用场景以及相关资源。同时,生成相关问题,帮助用户进一步探索,比如性能优化、参数调整、不同传感器的影响等。 需要确保回答符合用户的要求,结构清晰,引用正确,并且使用中文。同时,按照系统级指令,数学公式使用正确的格式,但在这个问题中可能涉及较少数学内容,主要关注代码算法流程。最后,生成的相关问题要围绕ORBmatcher的实现应用展开,帮助用户深入理解。</think>### ORBSLAM3 ORBmatcher 代码实现与使用解析 #### 一、核心功能定 ORBmatcher 是 ORBSLAM3 中实现特征匹配的核心模块,主要负责以下任务: 1. **帧间匹配**:相邻帧的特征点跟踪(Tracking线程) 2. **地图点匹配**:地图点与关键帧的投影匹配(LocalMapping线程) 3. **回环检测验证**:候选关键帧的几何验证(LoopClosing线程) 代码文件于:`src/ORBmatcher.cc` `include/ORBmatcher.h`[^2][^5] #### 二、关键函数实现解析 ```cpp // 基于投影的匹配(Tracking线程核心方法) int ORBmatcher::SearchByProjection(Frame &F, const vector<MapPoint*> &vpMapPoints, float th) { // 通过地图点在当前帧的投影置搜索匹配 // 使用极线约束描述子距离筛选候选点 // 返回成功匹配数量 } ``` ```cpp // 三角化新地图点的匹配(LocalMapping线程) int ORBmatcher::SearchForTriangulation(KeyFrame *pKF1, KeyFrame *pKF2, vector<pair<size_t, size_t> > &vMatchedPairs) { // 使用词袋加速匹配 // 计算特征点方向一致性 // 应用对极几何约束 } ``` #### 三、典型使用场景 1. **跟踪线程初始化**: - 调用 `SearchByProjection()` 实现运动模型预测匹配 - 参考 `Tracking::TrackWithMotionModel()` 实现[^3] 2. **地图点创建**: ```cpp void LocalMapping::CreateNewMapPoints() { // 使用SearchForTriangulation寻找匹配对 // 三角化成功后执行MapPointCulling质量筛选 } ``` 3. **回环检测验证**: - 在 `LoopClosing::DetectLoop()` 中通过词袋匹配候选帧 - 结合逆向索引加速匹配过程[^4] #### 四、参数调优要点 1. **阈值参数**(于 `ORBmatcher.h`): ```cpp #define TH_HIGH 100 // 描述子距离阈值 #define TH_LOW 50 // 低质量匹配阈值 static const float HISTO_LENGTH = 30; // 方向直方图分箱数 ``` 2. **传感器适配**: - RGB-D模式会跳过部分几何验证步骤 - 单目模式需要严格的对极约束检查 #### 五、学习资源推荐 1. 代码精读:`ORBmatcher.cc` 中的 `SearchByBoW()` 实现词袋匹配 2. 实践教程:参考CSDN系列文章《ORBSLAM3源码解析》[^1] 3. 扩展应用:GitHub上的RGBD-Inertial实现案例
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚餐男孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值