SLAM-evo 评估

文章目录

  • 1.evo介绍
    • 1.1.evo安装
      • 1.1.2.evo的安装(evo共有两种安装方式)
        • 1.1.2.1.采用pip安装,直接安装最新的稳定发行版(在翻墙的情况下可以使用)
        • 将路径添加到系统 PATH 中
        • 1.1.2.2.源码安装 ,下载源码进行安装(必须翻墙,要不然装不上)
    • 1.2.evo评估指标、工具
    • 1.3.格式转换
  • 2.evo案例--运行单轨迹,即数据集的真实值轨迹可视化:
    • 2.1.对命令` evo_traj euroc data.csv --plot` 的详细解读
    • 2.2.trajectories:轨迹图
    • 2.3.xyz_view:xyz轴视图,其中三个图分别代表在xyz三个方向的位置变化
    • 2.4.rpy_view:欧拉角视图
    • 2.5.speeds解读
  • 3.evo案例--运行多轨迹(多轨迹比较)
    • 3.1.将data.csv文件转为tum形式
    • 3.2.直接使用命令 evo_traj,出现报错
  • 4.evo案例--计算绝对位姿误差
    • 4.1.evo_ape 命令解析:
    • 4.2.执行
    • 4.3.结果显示
  • 5.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安装,直接安装最新的稳定发行版(在翻墙的情况下可以使用)
# 遇到网络不好中断,就多试几次(但是一定要翻墙)pip install evo --upgrade --no-binary evo

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

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

sudo apt install python-pip
将路径添加到系统 PATH 中

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

export PATH=$PATH:/home/damon/.local/bin

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

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

首先切换到你的目录

下载evo源码:

git clone https://github.com/MichaelGrupp/evo.git

cd 到evo 目录下

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

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

pip python -m pip install --upgrade pip

1.2.evo评估指标、工具

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

1.3.格式转换

"把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 的详细解读

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格式,命令如下:

evo_traj euroc data.csv --save_as_tum

会得到tum格式的data.tum

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

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中的时间戳从纳秒转换为秒:

# 命名为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 命令解析:

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.执行

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.450752mean	0.015207median	0.008146min	0.001974rmse	0.026672sse	0.998835std	0.021913--------------------------------------------------------------------------------
Plotting results... 

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

1.加载轨迹文件

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.同步时间戳

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.轨迹对齐

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)

APE w.r.t. translation part (m)
(with Sim(3) Umeyama alignment)max	0.450752mean	0.015207median	0.008146min	0.001974rmse	0.026672sse	0.998835std	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.绘制结果

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

6.总结:

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

4.3.结果显示

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

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

运行

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工具箱


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/18279.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习chp3】判别式分类器:线性判别函数、线性分类器、广义线性分类器、分段线性分类器

前言: 本文遗留问题:(1)对最小平方误差分类器的理解不清晰.(2)分段线性判别函数的局部训练法理解不清晰。 推荐文章1,其中有关于感知机的分析 【王木头从感知机到神经网络】-CSDN博客 推荐文…

04 搭建linux驱动开发环境

虽然 petalinux 功能很全面,但是其编译速度较慢,不适用于驱动调试阶段(因为驱动调试阶段会频繁修改驱动模块、内核、设备树等),因此本章将采用分步编译的方式来编译启动开发板所需要的各种镜像文件,虽然步骤…

Linux性能优化之火焰图的起源

Linux火焰图的起源与性能优化专家 Brendan Gregg 密切相关,他在 2011 年首次提出这一工具,用于解决性能分析过程中可视化和数据解读的难题。 1. 背景:性能优化的需求 在现代计算中,性能优化往往需要对程序执行中的热点和瓶颈进行…

半桥驱动芯片调试中的问题

结论:低于12V的场景应用分立的MOS驱动电路压根不合适,选用集成桥臂的芯片合适。 HIN的输入电平不能是长时间的高电平,否则自举电容没法充放电从而没办法自举升压,上管无法控制: 电容C2的容值应该尽可能大&#xff…

【C++】类和对象-深度剖析默认成员函数-上

> 🍃 本系列为初阶C的内容,如果感兴趣,欢迎订阅🚩 > 🎊个人主页:[小编的个人主页])小编的个人主页 > 🎀 🎉欢迎大家点赞👍收藏⭐文章 > ✌️ 🤞 &#x1…

RabbitMQ黑马笔记

目录 1.初识MQ 1.1.同步和异步通讯 1.1.1.同步通讯 1.1.2.异步通讯 1.2.技术对比: 2.快速入门 2.1.安装RabbitMQ 2.2.RabbitMQ消息模型 2.3.导入Demo工程 2.4.入门案例 2.4.1.publisher实现 2.4.2.consumer实现 2.5.总结 3.SpringAMQP 3.1.Basic Queu…

麒麟KylinServer的网站,并部署一套主从DNS服务器提供域名解析服务

一、KylinServer网站搭建 ifconfig Copy 注意:根据实际网卡设备名称情况调整代码!不同环境下网卡名称略有不同! 获取本机IP地址,记住IP地址用于之后的配置填写。 ifconfig enp0s2 Copy 下载nginx源码包,并解压缩 wget http://10.44.16.102:60000/allfiles/Kylin/ng…

解决IntelliJ IDEA的Plugins无法访问Marketplace去下载插件

勾选Auto-detect proxy setting并填入 https://plugins.jetbrains.com 代理URL,可以先做检查连接:

AWTK-WIDGET-WEB-VIEW 发布

awtk-widget-web-view 是通过 webview 提供的接口,实现的 AWTK 自定义控件,使得 AWTK 可以方便的显示 web 页面。 项目网址: https://gitee.com/zlgopen/awtk-widget-web-view webview 提供了一个跨平台的 webview 接口,是一个非…

Pandas教程之Pandas 简介

Pandas 简介 接下来一段时间,我会持续发布并完成Pandas教程 Pandas 是一个功能强大的开源 Python 库。Pandas 库用于数据操作和分析。Pandas 由数据结构和函数组成,可对数据执行有效的操作。 本免费教程将概述 Pandas,涵盖 Python Pandas 的基…

【linux】网络基础 ---- 数据链路层

用于两个设备(同一种数据链路节点)之间进行传递 数据链路层解决的问题是:直接相连的主机之间,进行数据交付 1. 认识以太网 "以太网" 不是一种具体的网络, 而是一种技术标准: 既包含了数据链路层的内容, 也包含了一些物理层的内容…

i春秋-FUZZ(python模板注入、base64编码命令执行)

练习平台地址 竞赛中心 题目描述 题目内容 很直接就是要fuzz参数 参数字典 dpaste/eH2Z1 (Plain Text) BP爆破参数 发现存在name参数 尝试sql注入 发现输入啥就回显啥,猜测是模板注入 测试是不是模板注入 虽然9*9没有被执行,但是config执行了&#…

另外一种缓冲式图片组件的用法

文章目录 1. 概念介绍2. 使用方法2.1 基本用法2.2 缓冲原理3. 示例代码4. 内容总结我们在上一章回中介绍了"FadeInImage组件"相关的内容,本章回中将介绍CachedNetworkImage组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的CachedNetwo…

Java中的CAS

目录 一.问题提出 1.1解决思路-锁 1.2解决思路-无锁 二.什么是CAS 三.CAS的特点 四.ABA问题 4.1解决方案-AtomicStampedReference 4.2解决方案-AtomicMarkableReference 一.问题提出 如何保证 withdraw 取款方法的线程安全 public class Cas {public static void mai…

git push时报错! [rejected] master -> master (fetch first)error: ...

错误描述:在我向远程仓库push代码时,即执行 git push origin master命令时发生的错误。直接上错误截图。 错误截图 错误原因: 在网上查了许多资料,是因为Git仓库中已经有一部分代码,它不允许你直接把你的代码覆盖上去…

药房智控:中药实验管理的自动化

6系统测试 6.1概念和意义 测试的定义:程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为: 目的:发现程序的错误; 任务:通过在计算机上执行程序,暴露程序中潜在的错误。 另一个…

C语言实现数据结构之二叉树

文章目录 二叉树一. 树概念及结构1. 树的概念2. 树的相关概念3. 树的表示4. 树在实际中的运用(表示文件系统的目录树结构) 二. 二叉树概念及结构1. 概念2. 特殊的二叉树3. 二叉树的性质4. 二叉树的存储结构 三.二叉树链式结构的实现1. 前置说明2. 二叉树…

SpringCloud篇(服务保护 - Sentinel)

目录 一、雪崩问题及解决方案 1. 雪崩问题 2. 解决方案 方案一:超时处理 方案二:仓壁模式 方案三:断路器模式 方案四:限流 3. 总结 二、服务保护技术对比 三、Sentinel介绍与安装 1. 初识Sentinel 2. Sentinel 优势 3…

MCU的时钟体系

stm32F4的时钟体系图 1MHZ 10^6 HZ 系统时钟频率是168MHZ;AHB1、AHB2、AHB3总线上的时钟频率是168MHz;APB1总线上的时钟频率为42MHz;APB2总线上的时钟频率为84MHz; stm32F4的时钟体系图 在system_stm32f4xx.c文件中查看APB1和APB2的预分频值到底是多少…

Redis设计与实现 学习笔记 第十八章 发布与订阅

第18到24章是本书第四部分:独立功能的实现。 Redis的发布与订阅功能由PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令组成。 通过执行SUBSCRIBE命令,客户端可订阅一个或多个频道,从而成为这些频道的订阅者(subscriber)&#…