SLAM-evo 评估

文章目录


1.evo介绍

evo是一款用于视觉里程计和SLAM问题的轨迹评估工具,它包含数据评估和可视化功能。核心功能是能够绘制相机的轨迹, 或评估轨迹与真值之间的误差。支持TUM轨迹文件、KITTI位姿、EUROC的csv与txt文件、ROS的bag文件, 同时支持这些数据格式之间的相互转换。

1.1.evo安装

Ubuntu20.04安装evo(详细教程)【亲测有效】

1.1.2.evo的安装(evo共有两种安装方式)

1.1.2.1.采用pip安装,直接安装最新的稳定发行版(在翻墙的情况下可以使用)
bash 复制代码
# 遇到网络不好中断,就多试几次(但是一定要翻墙)
 
pip install evo --upgrade --no-binary evo

这个命令来来回回执行了很多次,差不多一个小时才装上。

运行pip安装命令显示pip未安装,用如下代码解决

bash 复制代码
sudo apt install python-pip
将路径添加到系统 PATH 中

在当前会话中添加路径(仅当前终端有效):

bash 复制代码
export PATH=$PATH:/home/damon/.local/bin

永久添加路径到 PATH 中(每次打开终端都会生效): 在终端中编辑 ~/.bashrc 文件:

bash 复制代码
sudo gedit ~/.bashrc
export PATH=$PATH:/home/damon/.local/bin    # 然后在文件末尾添加这一行:
source ~/.bashrc                            # 使得 .bashrc 文件的修改立即生效:
1.1.2.2.源码安装 ,下载源码进行安装(必须翻墙,要不然装不上)

首先切换到你的目录

下载evo源码:

bash 复制代码
git clone https://github.com/MichaelGrupp/evo.git

cd 到evo 目录下

bash 复制代码
pip install --user evo --upgrade --no-binary evo //有一个12.8MB的文件下载,要消耗一些时间,也有可能time out(不翻墙不行)

pip install evo --upgrade 如果有提示你的pip版本低,那么就通过下面的指令升级

bash 复制代码
pip python -m pip install --upgrade pip

1.2.evo评估指标、工具

bash 复制代码
# 绝对位姿误差
evo_ape - absolute pose error 
# 相对位姿误差
evo_rpe - relative pose error 
# 用于分析,绘制或导出一个或多个轨迹的工具
evo_traj
# 用于比较evo_ape或evo_rpe中的一个或多个结果文件的工具
evo_res

1.3.格式转换

bash 复制代码
"把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

2.evo案例--运行单轨迹,即数据集的真实值轨迹可视化:

在~/mav0/state_groundtruth_estimate0 运行: evo_traj euroc data.csv --plot

2.1.对命令 evo_traj euroc data.csv --plot 的详细解读

bash 复制代码
evo_traj euroc data.csv --plot
--------------------------------------------------------------------------------
name:	data
infos:	36382 poses, 80.626m path length, 181.905s duration

以下是对命令 evo_traj euroc data.csv --plot 的详细解读:

命令部分解释

  • evo_trajevo 是一个用于评估SLAM轨迹的工具,evo_traj 是其中的一个命令,用于加载轨迹数据并绘制轨迹图。traj 是"trajectory"(轨迹)的缩写,表示该命令与轨迹相关。

  • euroc :指定输入数据的格式为EuRoc数据集格式。EuRoc是一种常见的SLAM数据集格式,通常包含相机和IMU的轨迹数据。

  • data.csv :这是要加载的轨迹文件,包含相机的位姿信息(时间戳、位置、方向等)。这个文件来自于EuRoc数据集state_groundtruth_estimate0文件夹,记录了相机在SLAM过程中估计的轨迹。

  • --plot :该选项告诉evo_traj绘制轨迹图。执行这个命令后,工具将打开一个窗口,显示轨迹的3D视图,以及其他与轨迹相关的图表。

命令输出解释

  • name: data :表示轨迹数据的名称。在这个例子中,文件名是data.csv,所以数据名称为data

  • 36382 poses :表示轨迹文件中包含的 位姿(pose) 数量,共有36382个。这意味着轨迹文件记录了36382个不同时间点相机的位姿信息(包括位置和姿态)。

  • 80.626m path length :表示相机运动的总路径长度为80.626米。即相机在SLAM过程中移动的总距离。

  • 181.905s duration :表示数据集的记录时间为181.905秒,即数据记录了大约182秒的相机运动轨迹。

总结

此命令用于从EuRoc数据集 中的data.csv文件中读取相机的轨迹数据,并绘制轨迹图。命令输出显示了轨迹数据的基本信息,包括位姿的数量、相机移动的总路径长度,以及数据记录的持续时间。

2.2.trajectories:轨迹图

图中的trajectories(轨迹)是使用evo工具绘制的三维轨迹图,展示了相机在三维空间中的运动路径。以下是对该图的详细解读:

图的组成部分:

3D轨迹图

  • 图中显示了相机在SLAM过程中估计的位姿轨迹,反映了相机如何在xyz三个轴上移动。蓝色的线条代表相机的运动路径。
  • 坐标轴:
    • x轴:表示相机在水平方向(左右)上的移动。
    • y轴:表示相机在垂直平面(前后)方向的移动。
    • z轴:表示相机在高度(上下)方向的移动。
  • 轨迹线条显示出相机从起点出发,在三维空间中进行了一系列运动,形成了一条复杂的运动路径。

顶部选项卡

  • trajectories:当前显示的是相机的三维轨迹。
  • xyz :该选项显示相机在xyz三个方向上的位置变化。
  • rpy :该选项显示相机的欧拉角变化,包括Roll(滚转)、Pitch(俯仰)和Yaw(偏航)。
  • speeds:该选项显示相机的速度变化情况。

右下角的坐标指示

  • 图中右下角显示了当前光标所指的坐标位置,当前光标位于x=-2.5820, y=8.6833, z=-4.4531,表示光标指向了轨迹中的某个点的三维坐标。

轨迹的意义

  • 该轨迹图显示了相机在整个SLAM过程中运动的路径,可以用于分析相机的位姿估计结果。
  • 相机的运动在xyz方向上都有较大的变化,反映了整个环境的三维结构。

总结

图中展示了EuRoc数据集中相机的三维运动轨迹,蓝色的线条表示相机的运动路径。通过这个轨迹图,您可以直观地看到相机在SLAM过程中如何移动、旋转,以及路径的复杂性。这对于分析SLAM算法的性能和轨迹估计的精度非常有帮助。

2.3.xyz_view:xyz轴视图,其中三个图分别代表在xyz三个方向的位置变化

图中的 xyz 视图展示了相机轨迹在时间轴上沿 xyz 三个方向的运动变化情况。以下是对该图的详细解读:

三个子图解释
x轴的位移变化(第一个子图):

  • 纵轴表示沿 x 方向的位移(单位:米,m),横轴表示时间(单位:秒,s)。
  • 从图中可以看到,最初相机在 x 方向上位于大约 5 米的位置,并且保持较为稳定,之后发生了多次上下波动,表明相机沿着 x 方向的运动先后有一段距离的减小和增加。

y轴的位移变化(第二个子图):

  • 纵轴表示沿 y 方向的位移(单位:米,m),横轴表示时间(单位:秒,s)。
  • y 方向上,初始时相机的位置接近 0,之后沿着 y 方向不断增加,并且有一段较长时间内相机在 y 方向上来回波动,表明相机在 y 方向上进行了较为复杂的运动。

z轴的位移变化(第三个子图):

  • 纵轴表示沿 z 方向的位移(单位:米,m),横轴表示时间(单位:秒,s)。
  • 图中可以看到 z 方向的位移在较小的范围内波动,起初相机在 z 方向上的变化较为平缓,之后有较大的波动,但总体范围较小,表明相机在 z 方向上进行了一些上下的运动。

时间轴(t(s))

  • 横轴表示时间,单位是秒。从图中可以看到时间从大约 575 秒到 750 秒,这代表相机在大约 175 秒的时间内的运动轨迹。

总结

  • 这些图表展示了相机沿 xyz 方向的位移变化,其中 xy 方向的运动幅度较大,表明相机在这些方向上的运动较为明显。而 z 方向上的波动相对较小,表明相机在高度上的变化不如 xy 方向显著。
  • 此视图有助于分析相机的运动轨迹在不同方向上的变化,提供了直观的位移信息,从而可以更好地理解相机在SLAM过程中的运动行为。

2.4.rpy_view:欧拉角视图

rpy_view:欧拉角视图,其中三个图分别代表在RPY三个方向的转动变化。Roll(滚转角),Pitch(俯仰角),Yaw(偏航角),分别对应绕XYZ轴旋转的正方向是,从XYZ轴的箭头方向看过去,顺时针为正,逆时针为负。

图中的 rpy 视图展示了相机在SLAM过程中沿 RollPitchYaw 三个旋转轴的角度变化,分别对应绕 XYZ 轴的旋转情况。以下是对该图的详细解读:

三个子图解释
Roll(滚转角)变化(第一个子图):

  • 纵轴表示 Roll 角的角度变化,单位是度(deg)。
  • 横轴表示时间,单位是秒(s)。
  • 从图中可以看到,初始时相机的 Roll 角度较为平稳,但之后出现了大量的角度变化,角度频繁在 -100 到 100 度之间快速波动,表明相机在绕 X 轴的旋转较为剧烈,可能表示在该时间段内相机进行了较大幅度的滚转运动。

Pitch(俯仰角)变化(第二个子图):

  • 纵轴表示 Pitch 角的角度变化,单位是度(deg)。
  • 图中显示,开始时相机的 Pitch 角在 -50 到 -70 度之间发生了剧烈变化,之后保持在一个较为稳定的区间,并伴随着一些较小的波动。说明在最初的时间段内,俯仰角度变化较大,随后相对平稳。

Yaw(偏航角)变化(第三个子图):

  • 纵轴表示 Yaw 角的角度变化,单位是度(deg)。
  • 从图中可以看到 Yaw 角的变化较为平滑,存在一些波动,尤其在图的后半段有较大的跳变。这表明相机在绕 Z 轴的旋转相对较缓慢,但在某些时间点发生了较为显著的偏航变化。

时间轴(t(s))

  • 横轴表示时间,范围从 575 秒到 750 秒,表示相机在这段时间内的姿态变化。

总结

  • Roll 角在后期有显著波动,说明相机在绕 X 轴上有大量快速的旋转。
  • Pitch 角最初变化剧烈,之后相对稳定,表明相机沿 Y 轴的俯仰变化趋于平稳。
  • Yaw 角相对平稳,但在某些时刻有跳变,表示相机在绕 Z 轴的旋转有较大幅度的变化。

这些图表直观地展示了相机在SLAM过程中各个方向的旋转角度变化情况,有助于分析相机的姿态变化,尤其是相机在不同轴上的旋转情况。

2.5.speeds解读

图中的 speeds 视图展示了相机在时间轴上的速度变化情况。以下是对该图的详细解读:

图的组成部分

  • 纵轴(v (m/s))

    • 纵轴表示速度,单位是米每秒(m/s),反映了相机在每一时刻的移动速度。
  • 横轴(t (s))

    • 横轴表示时间,单位是秒(s),显示了相机在这段时间内的运动过程。

速度变化的解读

  • 速度变化的波动

    • 在图的开头,相机速度急剧上升,峰值接近 2.0 m/s,随后有较大的下降。
    • 在大约 600 到 625 秒 之间,速度降到接近 0 m/s,这表明相机在这段时间内几乎没有移动。
    • 随后,速度开始回升,且在 650 秒675 秒 之间,速度有一个明显的峰值,达到大约 2.0 m/s。这表明相机在这段时间内进行了较快速的移动。
    • 整个过程中速度存在频繁的波动,特别是从 675 秒 以后,速度在 0.5 m/s1.5 m/s 之间来回波动,表明相机的移动速度在这些时刻变化较快。
  • 稳定性

    • 图中显示相机的速度没有保持稳定,而是在不同时间点经历了加速和减速的过程,尤其是在 675 秒 之前的运动速度峰值相对较高,而在 675 秒以后,虽然速度有所减缓,但仍存在一定的波动。

总结

  • 该图展示了相机在 575 秒750 秒 时间段内的速度变化情况。相机的速度在最初和 675 秒附近存在较大峰值,显示出相机的快速移动。而在其他时刻,速度波动较为频繁,尤其是在图的后半部分,表明相机在这些时刻内的运动较为复杂。
  • 这些速度波动可以反映出相机的运动模式,帮助分析SLAM过程中相机的运动行为,以及其与环境交互时的速度变化。

3.evo案例--运行多轨迹(多轨迹比较)

参考:evo--slam结果评估

数据集自带真实值文件,文件名后缀是.csv ,需要将.csv 的文件groundturth转换为TUM形式的文件(转换方法已在上面总结)。在home文件夹下新建一个文件夹output,将之前通过测试程序得到的TUM形式的轨迹文件:KeyFrameTrajectory.txt(这个文件保存在orb-slam)和上述指令得到的文件:data.tum 两个文件一块保存到新建的文件夹output中。

3.1.将data.csv文件转为tum形式

这里注意一下:data.csv是euroc格式,但是ORBSLAM生成的txt文件是tum形式,evo不支持euroc同时比对,因此我们需要将data.csv转为tum格式,命令如下:

bash 复制代码
evo_traj euroc data.csv --save_as_tum

会得到tum格式的data.tum

3.2.直接使用命令 evo_traj,出现报错

bash 复制代码
evo_traj tum KeyFrameTrajectory.txt --ref=data.tum -p --plot_mode xyz -a --correct_scale
[ERROR] found no matching timestamps between reference and KeyFrameTrajectory.txt with max. time diff 0.01 (s) and time offset 0.0 (s)

报错解释:

这个错误表示,evo工具在尝试比较两个轨迹文件时(CameraTrajectory.txt 和 data.tum),没有找到可以匹配的时间戳。具体来说,evo工具在允许的最大时间差(max. time diff 0.01 秒)范围内没有发现两个文件中时间戳相匹配的姿态数据。

问题可能的原因:

  • 时间戳不一致:
    • CameraTrajectory.txt 和 data.tum 文件中的时间戳可能在某些行不匹配,甚至有可能它们的时间戳根本没有重叠。即使它们的时间范围接近,但可能由于两个文件的采样频率不同或者时间轴上有偏移,导致没有找到时间相近的姿态。
  • 时间差设置过于严格:
    • evo工具默认的时间差范围(0.01秒)可能过小,导致两个文件中很接近的时间戳仍然无法被识别为匹配。
  • 时间偏移问题:
    • 两个文件可能有固定的时间偏移(例如相机的初始化时间不同),使得它们的时间戳存在一个常数偏移,导致匹配失败。

原因分析

  • KeyFrameTrajectory.txt 文件中的时间戳是常规小数表示法,但这些时间戳看起来像是以纳秒为单位的。
  • 例如:1403636584413555456.000000
  • data.tum 文件中的时间戳是科学计数法表示的
  • 这个时间戳比科学计数法表示的时间戳要大很多,且应该是纳秒级的精度,即每个时间戳比秒多了10^9倍的数量级。

问题解决

为了让两个文件的时间戳匹配,您需要将KeyFrameTrajectory.txt中的时间戳从纳秒转换为秒 ,具体做法是将每个时间戳除以10^9。这样,它们就可以与data.tum中的时间戳匹配

修改时间戳转换的Python脚本:

请使用以下python脚本将KeyFrameTrajectory.txt中的时间戳从纳秒转换为秒:

bash 复制代码
# 命名为convert.py。使用python convert.py执行 

# 打开KeyFrameTrajectory.txt文件并读取内容
with open("KeyFrameTrajectory.txt", "r") as infile:
    lines = infile.readlines()

# 创建并写入转换后的文件
with open("KeyFrameTrajectory_converted.txt", "w") as outfile:
    for line in lines:
        fields = line.split()
        # 将时间戳从纳秒转换为秒
        timestamp_in_seconds = float(fields[0]) / 1e9
        # 保留原来的位姿信息
        rest_of_the_fields = fields[1:]
        # 将新的时间戳和位姿信息写入文件
        new_line = "{:.9f} {}\n".format(timestamp_in_seconds, " ".join(rest_of_the_fields))
        outfile.write(new_line)

print("时间戳已成功转换为秒,输出保存为KeyFrameTrajectory_converted.txt。")

这个脚本将把KeyFrameTrajectory.txt中的纳秒级时间戳转换为秒,并生成一个新的文件 KeyFrameTrajectory_converted.txt,其时间戳将与data.tum中的时间戳匹配。

4.evo案例--计算绝对位姿误差

使用evo_ape工具来计算绝对位姿误差(APE, Absolute Pose Error)

4.1.evo_ape 命令解析:

c++ 复制代码
evo_ape tum data.tum CameraTrajectory.txt  -va --plot --plot_mode xyz -s --save_results results/ape.zip
  • evo_ape:
    • evo工具中的一个命令,用于计算绝对位姿误差(APE, Absolute Pose Error)。
    • APE 是一种评估SLAM或VO系统准确性的指标,表示估计轨迹和参考(groundtruth)轨迹之间的位置误差。
  • tum:
    • 指定输入文件的格式为TUM格式。两个轨迹文件都应该是TUM格式,通常包含时间戳、位置和姿态。
  • data.tum 和 CameraTrajectory.txt:
    • data.tum:参考轨迹(通常是groundtruth)。
    • CameraTrajectory.txt:估计轨迹(由SLAM或VO系统生成)。
  • -va:
    • -v:显示详细信息,输出更多调试信息。
    • -a:启用自动对齐。如果估计轨迹和参考轨迹的初始位置不一致,evo会自动进行对齐(通过旋转、平移和尺度调整)。
  • --plot:
    • 绘制轨迹误差图。
  • --plot_mode xyz:
    • 以XYZ轴的方式绘制误差图,显示轨迹在X、Y、Z轴方向上的误差。
  • -s:
    • 保存对齐的轨迹,这意味着运行后对齐的轨迹也会保存下来。
  • --save_results results/ape.zip:
    • 将计算结果保存到指定文件夹中,结果会打包为ape.zip文件,便于后续分析或共享。

4.2.执行

bash 复制代码
xx@xx-virtual-machine:/ORB_SLAM3_detailed_comments/output$ evo_ape tum data.tum CameraTrajectory_converted.txt -va --plot --plot_mode xyz -s --save_results results/ape.zip
--------------------------------------------------------------------------------
Loaded 36382 stamps and poses from: data.tum
Loaded 1404 stamps and poses from: CameraTrajectory_converted.txt
--------------------------------------------------------------------------------
Synchronizing trajectories...
Found 1404 of max. 1404 possible matching timestamps between...
	data.tum
and:	CameraTrajectory_converted.txt
..with max. time diff.: 0.01 (s) and time offset: 0.0 (s).
--------------------------------------------------------------------------------
Aligning using Umeyama's method... (with scale correction)
Rotation of alignment:
[[-0.39706455  0.34844771 -0.8490724 ]
 [ 0.15265088  0.93731368  0.31327429]
 [ 0.90500688 -0.00522154 -0.42536489]]
Translation of alignment:
[ 4.70026488 -1.77603851  0.81074106]
Scale correction: 1.0192248050345414
--------------------------------------------------------------------------------
Compared 1404 absolute pose pairs.
Calculating APE for translation part pose relation...
--------------------------------------------------------------------------------
APE w.r.t. translation part (m)
(with Sim(3) Umeyama alignment)

       max	0.450752
      mean	0.015207
    median	0.008146
       min	0.001974
      rmse	0.026672
       sse	0.998835
       std	0.021913

--------------------------------------------------------------------------------
Plotting results... 

下面对输出内容进行解析:

1.加载轨迹文件

bash 复制代码
Loaded 36382 stamps and poses from: data.tum
Loaded 1404 stamps and poses from: CameraTrajectory_converted.txt
  • 36382个姿态数据从data.tum(参考轨迹)中加载,1404个姿态数据从CameraTrajectory_converted.txt(估计轨迹)中加载。参考轨迹包含更多的位姿数据,估计轨迹可能是关键帧或较低频率的位姿估计。

2.同步时间戳

bash 复制代码
Synchronizing trajectories...
Found 1404 of max. 1404 possible matching timestamps between...
	data.tum
and:	CameraTrajectory_converted.txt
..with max. time diff.: 0.01 (s) and time offset: 0.0 (s).
  • 时间戳同步:在估计轨迹和参考轨迹中找到了1404个匹配的时间戳。这意味着两个轨迹中的时间戳在误差范围(最大时间差0.01秒)内是可以同步的,表明所有1404个姿态都匹配成功。

3.轨迹对齐

bash 复制代码
Aligning using Umeyama's method... (with scale correction)
Rotation of alignment:
[[-0.39706455  0.34844771 -0.8490724 ]
 [ 0.15265088  0.93731368  0.31327429]
 [ 0.90500688 -0.00522154 -0.42536489]]
Translation of alignment:
[ 4.70026488 -1.77603851  0.81074106]
Scale correction: 1.0192248050345414
  • Umeyama对齐方法:这是一个经典的Sim(3)对齐算法,它通过旋转、平移和尺度来对齐两个轨迹。以下是对齐信息:
    • 旋转矩阵:表示在对齐时对轨迹施加的旋转。
    • 平移向量:表示对齐时在XYZ方向上施加的平移偏移。
    • 尺度修正:1.0192,表示估计轨迹在对齐时需要进行1.019倍的尺度缩放。

4.计算绝对位姿误差(APE)

bash 复制代码
APE w.r.t. translation part (m)
(with Sim(3) Umeyama alignment)

       max	0.450752
      mean	0.015207
    median	0.008146
       min	0.001974
      rmse	0.026672
       sse	0.998835
       std	0.021913
  • APE w.r.t. translation part (m):这里的APE是基于平移部分的误差,单位为米(m)。
    • max(最大误差):0.450752米,表示最大平移误差为约0.45米。
    • mean(平均误差):0.015207米,表示所有时间点的平均误差约为0.015米。
    • median(中位数):0.008146米,表示中位误差为0.008米。中位数往往能更好地反映整体误差的典型水平,避免极端值的影响。
    • min(最小误差):0.001974米,最小误差为0.0019米。
    • rmse(均方根误差):0.026672米,表示轨迹的整体误差水平,均方根误差反映了整体误差的平均水平。
    • sse(平方和误差):0.998835,所有误差的平方和。
    • std(标准差):0.021913米,表示误差的波动范围,标准差越大,误差越不稳定。

5.绘制结果

bash 复制代码
Plotting results...
  • 通过evo工具绘制的结果会显示两个轨迹的误差曲线图,显示每个时间点的位姿误差以及轨迹的可视化比较。

6.总结:

  • 对齐和误差评估:此过程通过对齐两个轨迹(估计和参考),并计算它们之间的绝对位姿误差(APE)。APE的指标告诉您系统在整体轨迹估计中的平移误差表现。
  • 误差统计:通过最大值、均值、中位数、最小值、RMSE和标准差,您可以全面了解轨迹估计的精度和误差波动情况。

4.3.结果显示


5.evo案例--计算相对位姿误差

运行

cpp 复制代码
evo_rpe tum data.tum CameraTrajectory.txt  -va --plot --plot_mode xyz -s --save_results results/rpe.zip

从您提供的图像来看,evo_rpe 计算了**相对位姿误差(RPE, Relative Pose Error)**的相关信息,并生成了图表。下面是对图中"raw"部分的解析:

图表解析

  • X轴 (t, 时间/s)

    • X轴表示时间,单位是秒(s)。从图中可以看到,时间从 0 到大约 70 秒,表示轨迹的整个时间跨度。
  • Y轴 (RPE, 平移误差/m)

    • Y轴表示相对位姿误差(RPE)平移部分,单位是米(m)。误差显示的是估计轨迹和参考轨迹在相邻帧之间的相对平移变化的差异。

-- 误差线条

  • 蓝色实线 :表示每一帧的相对位姿误差,即估计轨迹相对于参考轨迹的位姿变化误差。
  • 绿色线条(median):表示误差的中位数,中位数往往能更好地反映误差的典型水平。
  • 红色线条(mean):表示误差的均值,反映总体的平均误差水平。
  • 紫色区域(std):表示误差的标准差,反映误差的波动范围。
  • 灰色背景区域:表示误差的整体波动范围,反映相对误差的变化情况。

分析图中的趋势

  • 开始阶段的高误差峰值

    • 在图的前期(大约 0-2 秒),可以看到误差较高,RPE值接近 0.4 米。这可能是由于初始化阶段的误差较大,或者是由于相机运动开始时存在较大的误差。
  • 稳定阶段

    • 随着时间的推移,误差逐渐趋于稳定,误差值基本保持在 0.02 米以下。这表明在估计的轨迹与参考轨迹的相对位姿变化在后续时间段内表现稳定。
  • 整体误差较小

    • 除了开头的一些误差波动外,绝大多数的相对位姿误差都非常小,图中显示均值和中位数线几乎贴近0,这表明轨迹估计在相邻帧之间的变化误差较小。

命令输出中的结果解析

  • max (最大误差):0.442313米,表示相对位姿误差的最大值大约为0.44米。
  • mean (平均误差):0.007207米,表示相对位姿误差的平均值约为0.007米,误差非常小。
  • median (中位数):0.000986米,中位误差为0.0009米,表明误差的典型水平较低。
  • min (最小误差):0米,最小误差为0。
  • rmse (均方根误差):0.015202米,表示相对位姿误差的整体平均水平。
  • sse (平方和误差):0.324230,表示误差的平方和。
  • std (标准差):0.014960米,表示误差的波动范围,表明误差的离散性较小。

总结

从图中的趋势可以看出,虽然在轨迹开始的阶段存在较高的相对位姿误差峰值,但整体上误差在后续时间段表现得非常稳定,误差值非常小。这表明您的估计轨迹在相对位姿变化上与参考轨迹非常接近,尤其是在轨迹后期,RPE的均值、中位数和标准差都非常小。

这个图展示的是**相对位姿误差(RPE)**的三维轨迹图,并通过颜色来表示误差的大小。以下是对图的详细解析:

图中要素解析:

  • 轨迹展示

    • 蓝色到红色的线条表示的是估计轨迹的路径。这个轨迹是基于SLAM或视觉里程计生成的估计结果。
    • 虚线reference:图中标示了参考轨迹(groundtruth),通常用虚线表示。参考轨迹通常来自真实的传感器数据,目的是用于评估估计轨迹的精度。
  • 颜色表示误差

    • 颜色条(右侧的彩色条) :这个颜色条代表相对位姿误差(RPE)的大小 ,单位为米。误差越大,颜色越接近红色;误差越小,颜色越接近蓝色。
      • **深蓝色(0.000)**表示误差接近0,表明估计轨迹与参考轨迹在该点的相对位姿误差非常小。
      • **红色(0.442)**表示误差较大,达到最大误差值0.442米。红色区域对应的地方误差较大。
    • 颜色随轨迹的变化表示不同时间点上的相对位姿误差。通过观察轨迹的颜色变化,您可以看到误差随路径的不同而波动。
  • 坐标轴

    • X轴(x)Y轴(y)、**Z轴(z)**分别表示空间中的三维位置,单位是米(m)。这个三维图显示了相机或传感器在空间中的运动轨迹。
  • Umeyama对齐方法

    • 图中已经使用了Sim(3) Umeyama对齐方法,对估计轨迹和参考轨迹进行了对齐。这种对齐方法通过旋转、平移和尺度调整来最大化轨迹之间的匹配度。

分析与总结:

  • 轨迹路径:从图中可以看到,轨迹大部分是深蓝色,这表示该段路径的相对位姿误差很小,表明估计的轨迹在局部与参考轨迹吻合较好。
  • 误差峰值:图中某些区域颜色稍微偏红,表明这些区域的相对位姿误差较大,特别是在某些转弯处,这可能是由于传感器噪声、轨迹初始化误差或者局部场景复杂度导致的。
  • 整体误差表现:大部分路径是蓝色的,意味着估计轨迹整体上相对误差较小。通过颜色对比,您可以清晰看到误差在不同时间段和空间位置上的波动情况。

该图帮助您直观地查看了SLAM系统在轨迹估计中的局部误差分布,并展示了在轨迹中误差较大或较小的区域。


参考

evo--slam结果评估

SLAM轨迹精度测评(TUM格式)

veo 学习笔记

[KITTI] EVO评价前端里程计精度

SLAM和里程计评估工具------evo使用方法全解

从零入门激光SLAM(十二)------evo工具箱


相关推荐
别NULL6 分钟前
机试题——疯长的草
数据结构·c++·算法
CYBEREXP20081 小时前
MacOS M3源代码编译Qt6.8.1
c++·qt·macos
yuanbenshidiaos2 小时前
c++------------------函数
开发语言·c++
yuanbenshidiaos2 小时前
C++----------函数的调用机制
java·c++·算法
tianmu_sama2 小时前
[Effective C++]条款38-39 复合和private继承
开发语言·c++
羚羊角uou2 小时前
【C++】优先级队列以及仿函数
开发语言·c++
姚先生972 小时前
LeetCode 54. 螺旋矩阵 (C++实现)
c++·leetcode·矩阵
FeboReigns2 小时前
C++简明教程(文章要求学过一点C语言)(1)
c语言·开发语言·c++
FeboReigns2 小时前
C++简明教程(文章要求学过一点C语言)(2)
c语言·开发语言·c++
264玫瑰资源库3 小时前
从零开始C++棋牌游戏开发之第二篇:初识 C++ 游戏开发的基本架构
开发语言·c++·架构