Slam误差评估

本文详细介绍了如何在单目下运行ORB-SLAM2算法,使用evo工具对TUM、KITTI和EuRoC数据集进行绝对轨迹误差(ATE)、相对轨迹误差(RPE)以及精度统计(RMSE)的评估,包括安装依赖、evo工具的安装与使用、结果比较及数据集的评估步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 算法评价指标

当评估一个SLAM/算法的表现时,可从时耗、复杂度、精度多个角度切入。其中对精度的评价是可以使用两个精度指标ATE和RPE。
这两个evaluation metrics最早是在TUM数据集benchmark中定义的,应用非常广泛。

定义一下公式标注:

  • 算法估计位姿:

(1)系统性能评估-绝对轨迹误差(ATE)

**绝对轨迹误差(absolute trajectory error)**直接计算相机位姿的真实值与SLAM系统的估计值之间的差。
程序首先根据位姿的时间戳将真实值和估计值进行对齐, 然后计算每对位姿之间的差值, 并最终以图表的形式输出, 该标准非常适合于评估视觉 SLAM 系统的性能。

绝对轨迹误差是估计位姿和真实位姿的直接差值,可以非常直观地反应算法精度和轨迹全局一致性。
估计位姿和groundtruth通常不在同一坐标系中,因此我们需要先将两者对其尺度统一。

  • 对于双目SLAM和RGB-D SLAM:

通过最小二乘法计算一个从估计位姿到真实位姿的转换矩阵

  • 对于单目SLAM:

具有尺度不确定性,我们需要计算一个从估计位姿到真实位姿的相似转换矩阵

也可以使用平均值、中位数等来反应ATE亦可。

(2)系统漂移评估-相对轨迹误差(RPE)

**相对位姿误差(relative pose error)**用于计算相同两个时间戳上的位姿变化量的差, 同样, 在用时间戳对齐之后, 真实位姿和估计位姿均每隔一段相同时间计算位姿的变化量, 然后对该变化量做差, 以获得相对位姿误差, 该标准适合于估计系统的漂移。

相对位姿误差主要描述的是相隔固定时间差

除了RMSE,还可以直接使用平均值、甚至中位数来描述相对误差情况。

需要注意的是,RPE包含了两部分的误差,分别是旋转误差和平移误差,通常使用平移误差进行评价已经足够,但是如果需要,旋转角的误差也可以使用相同的方法进行统计。

实际情况中,我们发现对

这样的计算复杂度非常高,很耗时间,因此TUM在自己给定的工具中,通过计算固定数量的RPE样本计算一个估计值作为最终结果。

综上,我们需要注意的是,RPE误差包含了translation和rotation两部分的误差,而ATE只包含translation的误差,二者具有强烈的相关性,却也不尽相同。我们仍需结合实际,选择合适的指标进行算法评价。

(3)精度统计量-均方根误差(RMSE)

均方根误差为回归评价指标。衡量观测值与真实值之间的偏差。

常用来作为机器学习模型预测结果衡量的标准。

在这里插入图片描述

2 安装依赖项

(1)Numpy安装

$ sudo apt-get update
$ sudo apt-get install python-numpy
(2)SciPy安装 
$ sudo apt-get install python-scipy

(3)matplotlib安装

$ sudo apt-get install python-matplotlib

3 evo安装

官网地址https://github.com/MichaelGrupp/evo

(1)pip安装

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

或者

(2)源码安装

$ git clone https://github.com/MichaelGrupp/evo
$ cd evo
$ pip install --editable . --upgrade --no-binary evo

(3)测试

$ evo_ape -h

在这里插入图片描述

  • 运行example
$ cd evo/test/data
$ evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz

在这里插入图片描述
在这里插入图片描述

(4)报错处理

[ERROR] Unhandled error in evo.main_traj
  • 末尾说明是matplotlib版本冲突报错
ContextualVersionConflict: (matplotlib 1.5.1 (/usr/lib/python2.7/dist-packages), Requirement.parse('matplotlib>=1.5.3'), set(['seaborn']))

解决办法

$ pip install matplotlib --upgrade --user

若下载超时

$pip --default-timeout=100 install matplotlib --upgrade --user
  • 末尾说明是numpy版本需要更新
Please upgrade numpy to >= 1.12.0 to use this pandas version

解决办法

$ pip install numpy --upgrade --user

若下载超时

pip --default-timeout=100 install numpy --upgrade --user
  • 评估指标
    evo_ape - absolute pose error 绝对位姿误差
    evo_rpe - relative pose error 相对位姿误差

  • 工具
    evo_traj-用于分析,绘制或导出一个或多个轨迹的工具
    evo_res-用于比较evo_apeevo_rpe中的一个或多个结果文件的工具
    evo_fig-用于重新打开序列化图的(实验性)工具(使用--serialize_plot保存)
    evo_config-用于全局设置和配置文件操作的工具

其他功能参考:https://github.com/MichaelGrupp/evo/wiki

(1)轨迹可视化

evo_traj
positional arguments:
{kitti,tum,euroc,bag}
绘制轨迹,则增加可选参数 -p 或 --plot

  • 单个轨迹绘制

如:

evo_traj kitti KITTI_00_ORB.txt -p 

 
  • 1

在这里插入图片描述

如EuRoc数据集,需要将.csv文件形式的groundtruth转换为TUM形式的轨迹文件。

evo_traj euroc V102_groundtruth.csv --save_as_tum
evo_traj tum V102_groundtruth.tum -p 

在这里插入图片描述

  • 多个轨迹绘制
evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz

在这里插入图片描述通过--ref参数指定参考轨迹,并增加参数-a(或--align)进行对齐(旋转与平移)

此外,单目相机会存在尺度的不确定性,使用-s(或 --correct_scale)参数进行Sim(3)上的对齐(旋转、平移与尺度缩放)

(2)轨迹评估

  • evo_ape:计算绝对位姿误差(absolute pose error),用于整体评估整条轨迹的全局一致性

  • evo_rpe:计算相对位姿误差(relative pose error),用于评价轨迹局部的准确性。

两个指令也支持evo_traj的可选参数,轨迹对齐-a与尺度缩放-s

1)计算绝对位姿误差

大多数中论文的指标为测量绝对误差

evo_ape kitti KITTI_00_ORB.txt KITTI_00_gt.txt -p --plot_mode=xz -a -s

显示轨迹误差结果
在这里插入图片描述增加可选参数-p,可以绘制误差相关曲线
在这里插入图片描述
在这里插入图片描述
在进行评估时,若经过了缩放,在命令行中应将真实轨迹(参考轨迹)放在估计轨迹(计算轨迹)前方,避免在缩放时参考轨迹错误而造成误差被错误缩放。

2)计算相对位姿误差

evo_rpe kitti KITTI_00_ORB.txt KITTI_00_gt.txt -p --plot_mode=xyz -a -s -v --save_results /home/chan/Results/rpe.zip

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

(3)结果比较

cd ~/Results
evo_res rpe.zip -p --save_table table.csv
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzA3NDI0Ng==,size_16,color_FFFFFF,t_70#pic_center" alt="在这里插入图片描述">
在这里插入图片描述

(4)格式转换

Evo支持多种数据集的轨迹格式(TUM、KITTI、EuRoC MAV、ROS的bag)和数据格式之间进行相互转换。

"把EuRoc的数据格式转化成TUM数据格式"
evo_traj euroc data.csv --save_as_tum

"TUM数据转换成kitti格式"
evo_traj tum traj_1.txt  --save_as_kitti

" 把TUM数据格式转化成rosbag"
evo_traj tum traj_1.txt --save_as_bag

在这里插入图片描述

(5)配置更改

"查看配置"
evo_config show

"修改配置"
env_config set ***
plot_seaborn_style whitegrid //修改背景栅格 默认 darkgrid
plot_seaborn_palette bright //修改线条颜色 bright、deep6、colorblind、pastel、dark、muted 默认deep6
plot_linewidth 1.5 //修改线宽
plot_reference_color // 默认black 

在这里插入图片描述

(6)时间戳对齐

如果系统采用了IMU进行测量,还要注意时间戳对齐的问题
参考:使用 evo 工具评测 VI ORB SLAM2 在 EuRoC 上的结果

5 运行ORB-SLAM2并评估数据集

安装和编译ORB-SLAM2参考:https://blog.youkuaiyun.com/weixin_47074246/article/details/108690625

$ cd ORB_SLAM2
$ chmod +x build.sh
$ ./build.sh

(1)评估TUM数据集

下载官网:http://vision.in.tum.de/data/datasets/rgbd-dataset/download

TUM为RGB-D数据集,下载后进行解压。

命令

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER

         
  • 1

更改TUMX.yaml为TUM1.yaml,TUM2.yaml,TUM3.yaml,分别对应数据集freiburg1, freiburg2 and freiburg3 序列. PATH_TO_SEQUENCE_FOLDER为下载数据集的解压目录。

例:rgbd_dataset_freiburg1_desk

  • 运行
    在这里插入图片描述
  • 复制轨迹和groundtruth文件
cd ORB_SLAM2
mkdir results
cp KeyFrameTrajectory.txt ./results/TUM/freiburg1_desk/1/freiburg1_desk_Trajectory.txt 
cd rgbd_dataset_freiburg1_desk
cp groundtruth.txt  ~/ORB_SLAM2/results/TUM//freiburg1_desk/1/freiburg1_desk_groundtruth.txt

 
  • 1
  • 2
  • 绘制轨迹
cd ~/ORB_SLAM2/results/freiburg1_desk
evo_traj tum freiburg1_desk_Trajectory.txt --ref=freiburg1_desk_groundtruth.txt  -p --plot -s --correct_scale -a --align

 
  • 1
  • 2

保存为freiburg1_desk_trajectories.png freiburg1_desk_xyzview.png freiburg1_desk_rpyview.png

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 评估绝对位姿误差
cd ~/ORB_SLAM2/results/freiburg1_desk
evo_ape tum freiburg1_desk_groundtruth.txt freiburg1_desk_Trajectory.txt -p --plot -s --correct_scale -a --align  -v --save_results ~/ORB_SLAM2/results/freiburg1_desk/freiburg1_desk_ape.zip

 
  • 1
  • 2

在这里插入图片描述

保存为freiburg1_desk_ape.png freiburg1_desk_apemap.png

在这里插入图片描述
在这里插入图片描述

  • 评估相对位姿误差
cd ~/ORB_SLAM2/results/TUM/freiburg1_desk
evo_rpe tum freiburg1_desk_groundtruth.txt freiburg1_desk_Trajectory.txt -p -a -s  -v --save_results ~/ORB_SLAM2/results/freiburg1_desk/freiburg1_desk_rpe.zip

 
  • 1
  • 2

在这里插入图片描述

保存为freiburg1_desk_rpe.png freiburg1_desk_rpemap.png

在这里插入图片描述
在这里插入图片描述

  • 输出ape结果,以便进行比较
cd ~/ORB_SLAM2/results/TUM/freiburg1_desk
evo_res freiburg1_desk_ape.zip  -p --save_table freiburg1_desk_apetable.csv

 
  • 1
  • 2

保存为freiburg1_desk_statistics.png freiburg1_desk_histogram.png freiburg1_desk_boxplot.png freiburg1_desk_violin_histogram.png

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

其中RMSE=0.0148187

(2)评估KITTI数据集

下载官网:http://www.cvlibs.net/datasets/kitti/eval_odometry.php

下载的KITTI数据集为灰度图,下载后进行解压。

命令:

./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTIX.yaml PATH_TO_DATASET_FOLDER/dataset/sequences/SEQUENCE_NUMBER

 
  • 1

更改KITTIX.yaml为 KITTI00-02.yaml, KITTI03.yaml, KITTI04-12.yaml,分别对应压缩包 0 -2, 3, 4-12。PATH_TO_DATASET_FOLDER 为下载数据集的解压目录. 更改SEQUENCE_NUMBER 为00, 01, 02,…, 11.

例:00

  • 复制轨迹和poses、times文件
cd ORB_SLAM2/results
mkdir kitti00
cp KeyFrameTrajectory.txt ./results/kitti00/kitti_00_ORB2.txt 

 
  • 1
  • 2
  • 3
cd poses
cp 00.txt  ~/ORB_SLAM2/results/kitti00
  • 将kitti位姿文件转换为tum格式

将KITTI的ground truth加上时间戳,转换成TUM格式的。在evo文件夹下有一个contrib文件夹,里面有一个kitti_poses_and_timestamps_to_trajectory.py文件。把KITTI数据集下的00.txttimes.txt文件拷贝到该目录,运行如下命令:

python3 kitti_poses_and_timestamps_to_trajectory.py 00.txt times.txt kitti_00_gt.txt
cd ORB_SLAM2/results/kitti00
evo_traj kitti 00.txt --save_as_tum


 
  • 绘制轨迹
cd ~/ORB_SLAM2/results/kitti00
evo_traj tum kitti_00_ORB2.txt --ref=kitti_00_gt.txt -p --plot -s --correct_scale -a --align

保存为kitti_00_trajectories.png kitti_00_xyzview.png kitti_00_rpyview.png

  • 评估绝对位姿误差
cd ~/ORB_SLAM2/results/kitti00
evo_ape tum kitti_00_ORB2.txt kitti_00_gt.txt -p --plot -s --correct_scale -a --align -v --save_results kitti_00_ape.zip

保存为kitti_00_ape.png kitti_00_apemap.png

  • 输出ape结果,以便进行比较
cd ~/ORB_SLAM2/results/kitti00
evo_res kitti_00_ape.zip -p --save_table kitti_00_apetable.csv

保存为kitti_00_statistics.png kitti_00_histogram.png kitti_00_boxplot.png kitti_00_violin_histogram.png

(3)评估EuRoC数据集

下载官网:http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets

下载的EuRoC数据集为ASL格式,下载后进行解压。

对于MH序列,命令:

./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml PATH_TO_SEQUENCE_FOLDER/mav0/cam0/data Examples/Monocular/EuRoC_TimeStamps/SEQUENCE.txt 

对于V1和V2序列,命令:

./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml PATH_TO_SEQUENCE/cam0/data Examples/Monocular/EuRoC_TimeStamps/SEQUENCE.txt 


更改PATH_TO_SEQUENCE_FOLDERSEQUENCE

  • 复制轨迹
cp KeyFrameTrajectory.txt ./results/EuRoC/MH_01_easy/MH01_ORB2.txt 


       
  • 复制并转换groundtruth文件
cd MH_01_easy/mav0/state_groundtruth_estimate0
cp data.csv  ~/ORB_SLAM2/results/EuRoC/MH_01_easy/MH01_gt.csv

EuRoc数据集需要将.csv文件形式的groundtruth转换为TUM形式的轨迹文件。

evo_traj euroc MH01_gt.csv --save_as_tum

         
  • 1
  • 绘制轨迹
cd ~/ORB_SLAM2/results/MH_01_easy
evo_traj tum MH01_ORB2.txt --ref=MH01_gt.tum -p --plot -s --correct_scale -a --align

保存为MH01_trajectories.png MH01_xyzview.png MH01_rpyview.png

  • 评估绝对位姿误差
cd ~/ORB_SLAM2/results/MH_01_easy
evo_ape tum MH01_ORB2.txt MH01_gt.tum -p --plot -s --correct_scale -a --align -v --save_results MH01_ape.zip

保存为MH01_ape.png MH01_apemap.png

  • 输出ape结果,以便进行比较
cd ~/ORB_SLAM2/results/MH_01_easy
evo_res MH01_ape.zip -p --save_table MH01_apetable.csv

保存为MH01_statistics.png MH01_histogram.png MH01_boxplot.png MH01_violin_histogram.png


参考:
https://blog.youkuaiyun.com/qq_40307605/article/details/104203474

https://blog.youkuaiyun.com/liu502617169/article/details/99406862

https://blog.youkuaiyun.com/HERO_CJN/article/details/105296614

https://blog.youkuaiyun.com/qq_41080854/article/details/104430828

https://blog.youkuaiyun.com/gyhjlauy/article/details/100598260

https://blog.youkuaiyun.com/hhaowang/article/details/105225595

https://blog.youkuaiyun.com/优快云huaong/article/details/101909888

https://blog.youkuaiyun.com/dcq1609931832/article/details/102465071

https://www.zhihu.com/question/56510863/answer/888846591

<think>好的,我现在需要帮助用户了解如何使用EVO工具计算RPE(相对位姿误差)。首先,我要回忆一下EVO的相关知识,确保自己理解正确。根据用户提供的引用[2],EVO是一个用于评估SLAM轨迹误差的工具,支持计算ATE和RPE。RPE主要关注的是相隔固定时间差的两帧之间的位姿差异的精度,相对于真实轨迹来说。 用户的问题很明确,他们想知道具体的步骤来使用EVO计算RPE。我需要分步骤解释,确保每个环节都清晰。首先,可能需要安装EVO工具,但用户可能已经安装了,不过还是应该先提及安装步骤。然后,数据格式是关键,EVO支持多种格式,比如TUM、KITTI等,用户需要确保他们的轨迹文件格式正确。接着,具体的命令使用,包括基本命令和参数调整,比如时间差delta和单位(平移部分或旋转部分)。此外,用户可能需要可视化结果,所以应该包括如何绘制误差曲线或轨迹对比。 需要确保命令的准确性,例如计算RPE的命令是`evo_rpe`,并指定文件格式和路径。参数部分,比如`--delta 1`和`--delta_unit m`需要解释清楚,不同的delta会影响结果。同时,用户可能需要知道如何选择不同的误差指标,比如旋转或平移的均方根误差,引用[2]中提到RPE可以计算旋转和平移的均方根误差,或者仅平移部分。 另外,用户可能遇到常见问题,比如数据格式不匹配或者时间戳不对齐,需要给出解决建议。例如,使用`evo_traj`检查轨迹文件是否正确加载,或者调整时间戳同步。最后,引用相关的参考文献,确保用户知道信息来源于提供的引用内容。 总结步骤:安装EVO→准备数据→运行命令→调整参数→可视化→常见问题处理。要确保每个步骤都有对应的命令示例和说明,同时语言要简洁明了,避免使用过于专业的术语,让新手也能理解。可能还需要提醒用户注意文件路径的正确性和参数的单位选择,比如delta的单位是米还是秒,根据实际情况调整。同时,引用[2]中的内容要正确标注,比如在解释RPE定义和EVO工具使用时添加引用标识。</think>以下是通过EVO计算RPE(相对位姿误差)的详细步骤: ### 一、EVO工具安装 ```bash pip install evo --upgrade --no-binary evo ``` 建议使用Python 3.6+环境,安装后可通过`evo -h`验证是否成功[^2]。 --- ### 二、数据准备 1. **轨迹文件格式要求** - **估计轨迹**:需包含时间戳、位置(x,y,z)、四元数(qx,qy,qz,qw) - **真实轨迹**:与估计轨迹时间戳对齐,推荐使用TUM或KITTI格式 2. **文件示例** ```text # TUM格式轨迹文件 0.000000 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.100000 0.1 0.0 0.0 0.0 0.0 0.0 1.0 ``` --- ### 三、计算RPE核心命令 ```bash evo_rpe [真实轨迹文件] [估计轨迹文件] --pose_relation angle_deg --delta 1 --delta_unit m -v --plot --save_results results/rpe.zip ``` - **关键参数解析**: - `--delta 1`:设置固定时间差为1个单位 - `--delta_unit m`:指定单位为米(可选`s`表示秒) - `--pose_relation angle_deg`:计算旋转误差(角度制),去掉此参数则计算平移误差 - `--plot`:自动生成误差曲线图 --- ### 四、结果解读 输出结果包含: ```text max:0.123456 min:0.012345 mean:0.045678 median:0.034567 rmse:0.056789 sse:1.234567 std:0.023456 ``` 重点关注**rmse(均方根误差)**指标,其直接反映相对位姿误差的总体精度[^1]。 --- ### 五、进阶用法 1. **多轨迹对比** ```bash evo_res results/*.zip -p --save_table results/compare.csv ``` 2. **3D轨迹可视化** ```bash evo_traj tum est_traj.txt --ref=gt_traj.txt -p --plot_mode=3D ``` --- ### 六、常见问题处理 | 问题现象 | 解决方案 | |---------|----------| | 时间戳未对齐 | 使用`evo_traj tum --sync`时间同步 | | 四元数不规范 | 检查四元数是否满足$\|q\|=1$ | | 单位不匹配 | 通过`--transform_right`进行单位转换 | 通过上述步骤,可完整实现从数据准备到RPE分析的流程。EVO通过固定时间差计算位姿变化的误差,能有效评估SLAM/VIO等系统的局部一致性[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值