SLAM 精度评估

news2024/11/20 13:39:26
SLAM 精度的评估有两个最重要的指标,即绝对轨迹误差(ATE)和相对位姿误差(RPE)的
均方根误差(RMSE):
绝对轨迹误差:直接计算相机位姿的真实值与 SLAM 系统的估计值之间的差值,首先将真实
值与估计值的时间戳对齐,然后计算每对位姿之间的差值,适合于评估 SLAM 系统的性能。
相对位姿误差:用于计算两个相同时间戳上相机位姿的真实值与 SLAM 算法的估计值之间每
隔一段时间位姿变化量之间的差值,也可以理解为位姿真实值与与估计值的实时比较。该标
准适合于估计系统的漂移。
端到端误差(回环误差):一段存在回环的轨迹里,SLAM 算法估算的轨迹起点与终点之间
的距离差值。
二 评估工具
evo是一款用于视觉里程计和 slam 问题的轨迹评估工具。核心功能是能够绘制相机的轨迹,
或评估估计轨迹与真值的误差。支持多种数据集的轨迹格式(TUM、KITTI、EuRoC MAV、
ROS 的 bag),同时支持这些数据格式之间进行相互转换。在此仅对其基本功能做简要介绍。
1.evo 安装方法
该工具目前被托管在 github 上了,其项目地址为 https://github.com/MichaelGrupp/evo。
作者提供了两种安装方法。推荐使用 pip 工具进行安装,只需要一行代码即可,将如下代码
复制到你的终端中运行
pip install evo --upgrade --no-binary evo
2.evo 使用方法
evo 工具主要有如下六个命令:
evo_ape - 用于评估绝对轨迹误差;
evo_rpe- 用于评估相对位姿误差;
46
cvlife.net evo_traj - 这个主要是用来画轨迹、输出轨迹文件、转换数据格式等功能;
evo_config - 这个主要用于 evo 工具全局设置和配置文件操作;
evo_res- 比较来自 evo_ape 或 evo_rpe 生成的一个或多个结果文件的工具;
evo_fig - 用于重新打开序列化图(使用–serialize_plot 保存);
2.1 evo_ape 用法
该命令用于评估两条轨迹的绝对位姿误差,最简单的使用方法为:
evo_ape kitti a.txt b.txt
解释:如上命令的意思是,比较 kitti 数据集格式的 a.txt 和 b.txt 文件的绝对误差精度。如果
你要比较的数据集格式为 euroc,那么此时可以使用如下命令:
evo_ape euroc a.csv b.csv
evo 共支持 kitti、tum、euroc 这三个公开数据集格式。
需要注意两个待比较的数据文件必须格式一致,都为 kitti、tum 或者 euroc
当你使用上面的命令之后,会在你的终端中产生如下类型的结果:
其中:
max:表示最大误差;
mean:平均误差;
median:误差中位数;
min:最小误差;
rmse:均方根误差;
sse:和方差、误差平方和;
std:标准差。
evo_ape 命令后面可以添加的参数有很多,使用如下命令查看参数解析:
evo_ape kitti -h
同样的是你还可以使用:
evo_ape tum -h
下面示范一个常用的用法,当我们获得单目 SLAM 生成的轨迹文件时,此时我们需要和真实
轨迹进行对比,但是我们知道单目 SLAM 是没有尺度的,所以两个轨迹一定不会一样大,所
以我们需要对轨迹进行 sim(3)相似变换,那么 evo 就会自动的对轨迹的位移、旋转、尺度进
行对齐,完成这个任务的代码如下:
evo_ape tum data.tum CameraTrajectory.txt -aps
解释:参数-a、-s、-p 即为选择的参数,分别表示进行轨迹的对齐和尺度修正,以及-p 表
示画图误差的图和两个轨迹的图。
2.2 evo_rpe 用法
该命令用于比较两个轨迹之间的相对轨迹误差,也就是两个时间戳相同时刻的轨迹轨迹误
47
cvlife.net 差,更具体来说,两组轨迹持续时间相同,但是采样频率不同,那么之间就会有一些少量的
相同时间戳,那么这些相同的时间戳就可以进行一对一比较误差。同样的这些误差也会有平
均误差、最大、最小误差等等结果。命令使用方法如下:
evo_rpe xxx a.txt b.txt
evo_rpe 命令依然可以添加一些可选参数项,你同样可以使用如下命令查看可选参数的具体
介绍和用法:
evo_rpe xxx -h
解释:其中 xxx 为 tum、kitti、euroc、rosbag 中的一种
2.3 evo_traj 用法
该命令 evo_traj 命令十分有用,它主要用于画轨迹图、表格,转换数据格式等等操作。
下面我们来看一个简单的用法:
evo_traj tum a.txt
输出为:
该命令如果不添加任何参数项,那么就输出轨迹的相关信息。
我们只要简单的添加一个参数-p 或者--plot 即可看到轨迹的图形,命令如下:
evo_traj tum a.txt -p
效果如下:
进一步当我们想要画两个或者两个以上的轨迹时:
48
cvlife.net evo_traj tum a.txt b.txt c.txt -p
如果我们想要两个轨迹匹配到同一个原点那么可以使用参数如下:
evo_traj tum a.txt b.txt c.txt -p --align_origin
又比如下面的命令:
evo_traj kitti 0.txt 1.txt --ref=0.txt -p --plot_mode=xz
解释:上面命令中参数--ref 表示设置轨迹为参考,--plot_mode=xz 表示轨迹投影到 xz 轴
显示。
还有一些额外的可选项,它们很有用,你可以通过-h 选项查看参数的介绍和用法。
2.4 evo_config 用法
evo_config 命令比较少用,多数情况下,我们使用默认配置即可。
你可以使用如下命令,查看 evo 默认的一些系统参数设置:
evo_config show --brief
运行上面的命令之后,你的终端上就可以输出如下信息:
{
"console_logging_format": "%(message)s",
"euler_angle_sequence": "sxyz",
"global_logfile_enabled": false,
"plot_axis_marker_scale": 0.0,
"plot_backend": "Qt5Agg",
"plot_export_format": "pdf",
"plot_figsize": [
6,
6
],
"plot_fontfamily": "sans-serif",
"plot_fontscale": 1.0,
"plot_invert_xaxis": false,
"plot_invert_yaxis": false,
"plot_linewidth": 1.5,
"plot_multi_cmap": "none",
"plot_reference_alpha": 0.5,
"plot_reference_color": "black",
"plot_reference_linestyle": "--",
"plot_seaborn_palette": "deep6",
"plot_seaborn_style": "darkgrid",
"plot_split": false,
"plot_statistics": [
"rmse",
"median",
"mean",
"std",
"min",
"max"
49
cvlife.net ],
"plot_texsystem": "pdflatex",
"plot_trajectory_alpha": 0.75,
"plot_trajectory_cmap": "jet",
"plot_trajectory_linestyle": "-",
"plot_usetex": false,
"plot_xyz_realistic": true,
"ros_map_alpha_value": 1.0,
"ros_map_unknown_cell_value": 205,
"save_traj_in_zip": false,
"table_export_data": "stats",
"table_export_format": "csv",
"table_export_transpose": true
}
如果你想要对某一项参数进行修改,比如你想修改输出的图像格式,你可以使用如下命令:
evo_config set plot_export_format png
又比如你想做如下的操作:
1.将画图背景更改成白色网格
evo_config set plot_seaborn_style whitegrid
2.将字体改为衬线型并调为 1.2 倍大小
evo_config set plot_fontfamily serif plot_fontscale 1.2
3.将画图所使用的线型改为 -
evo_config set plot_reference_linestyle -
4.将所画图的图像大小调整为 10 9(宽 高)
evo_config set plot_figsize 10 9
5.当你想要将配置还原为默认时,只需要使用命令:
evo_config reset
当你对 evo 的使用有一个大致的理解之后,我觉得你再摸索和使用就会方便很多,当你看完
本篇博客之后,如果你还想进一步了解它更细致的使用,你可以浏览的 evo 在 github 上的
wiki,网址为:https://github.com/MichaelGrupp/evo/wiki
参考 https://www.guyuehome.com/37988
https://blog.csdn.net/u011341856/article/details/104594392
https://blog.csdn.net/qq_42601453/article/details/121024209

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

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

相关文章

Modbus通信协议学习——调试软件

Modbus通信协议是一种广泛应用于工业自动化领域的串行通信协议,由Modicon公司(现为施耐德电气Schneider Electric)于1979年开发。该协议已成为工业电子设备之间通信的通用标准,支持多种设备和系统之间的数据交换。以下是对Modbus通…

【内网渗透】从0到1的内网渗透基础概念笔记

目录 域 域的介绍 单域 父域和子域 域树 域森林 域名服务器 活动目录 活动目录介绍 域内权限 组 域本地组 全局组 通用组 总结 示例 A-G-DL-P策略 重要的域本地组 重要的全局组、通用组 安全域划分 域 域的介绍 Windows域是计算机网络的一种形式&#xf…

零基础学习MySQL---库的相关操作

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、创建数据库 1.语法 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] .…

vscode(七):设置不同括号有不同颜色

一、打开vscode 的setting界面 输入 bracket pair ,将Editor › Guides: Bracket Pairs这一项设置为true 二、效果 不同括号对具有不同的颜色

系统提示我未定义与 ‘double‘ 类型的输入参数相对应的函数 ‘finverse‘,如何解决?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

【Linux】多线程(互斥 同步)

我们在上一节多线程提到没有任何保护措施的抢票是会造成数据不一致的问题的。 那我们怎么办? 答案就是进行加锁。 目录 加锁:认识锁和接口:初始化:加锁 && 解锁:全局的方式:局部的方式&#xff1a…

rtpengine_mr12.0 基础建设容器运行

目录 Dockerfile rtpengine.conf 容器内编译安装 RTPEngine 正常提供功能 1. 启动RTPEngine服务 2. 删除 RTPEngine服务 3. 加载内核模块 检查所有进程是否正在运行 上传到仓库 博主wx:yuanlai45_csdn 博主qq:2777137742 后期会创建粉丝群&…

地埋RF射频电子标识器探测仪ED8000(V400版)使用操作说明之1测量准备工作

地埋RF射频电子标识器探测仪ED8000(V400版)是一台集成了多频率、多种ID标识器调制模式、高低灵敏度调节、可读写标识器等全功能、高性能电子标识器探测仪。它有着极高的灵敏度,同时具备良好的噪声抑制能力,不仅适合专业测绘人员,普…

监控平台—Zabbix对接grafana

目录 一、安装grafana并启动 二.浏览器访问 三、导入zabbix数据,对接grafana 四.如何导入模版 一、安装grafana并启动 添加一台服务器192.168.80.102 初始化操作 systemctl disable --now firewalld setenforce 0 vim /etc/selinux/config SELINUXdisabled cd /…

东哥教你如何用Orange Ai pro为家里做一个垃圾分类检测机器

前言 最近入手了一块香橙派(Orange Ai Pro)的板子,他们的口号是:为AI而生,这让一个算法工程师按捺不住了, 之前主要是在RKNN和ESP32等设备上部署AI模型,看到官方介绍的强大AI算力,很…

入门PHP就来我这(纯干货)08

~~~~ 有胆量你就来跟着路老师卷起来! -- 纯干货,技术知识分享 ~~~~ 路老师给大家分享PHP语言的知识了,旨在想让大家入门PHP,并深入了解PHP语言。 1 PHP对象的高级应用 1.1 final关键字 final 最终的、最后的。被final修饰过的类…

如何在电脑设备上恢复已删除的照片

丢失 PC、智能手机或 USB 闪存盘上的照片可能会让人不知所措。幸运的是,使用最好的照片恢复软件,您可以在 Windows 和 Android 上恢复已删除的照片。本博客讨论如何使用照片恢复来恢复丢失的照片。 数码照片是我们记忆的重要组成部分。然而,它…

UE4_材质基础_切线空间与法线贴图

学习笔记,不喜勿喷,侵权立删,祝愿大家生活越来越好! 一、切线空间 在《OpenGL基础11:空间》中提到了观察空间、裁剪空间、世界空间等。切线空间和它们一样,都属于坐标空间 上面就是一个…

FPGA的理解,个人的见解,不一定对

类似于面包板上搭建电路,但是使用的是逻辑单元模块;如加法器,减法器,寄存器等 没有模拟电路的电容,电阻;但是逻辑单元的底层实现,使用MOS管等电路实现电路的开关;从而表示0&#xf…

springai+pgvector+ollama实现rag

首先在ollama中安装mofanke/dmeta-embedding-zh:latest。执行ollama run mofanke/dmeta-embedding-zh 。实现将文本转化为向量数据 接着安装pgvector(建议使用pgadmin4作为可视化工具,用navicate会出现表不显示的问题) 安装好需要的软件后我们…

【python】OpenCV—Nighttime Low Illumination Image Enhancement

文章目录 1 背景介绍2 代码实现3 原理分析4 效果展示5 附录np.ndindexnumpy.ravelnumpy.argsortcv2.detailEnhancecv2.edgePreservingFilter 1 背景介绍 学习参考来自:OpenCV基础(24)改善夜间图像的照明 源码: 链接&#xff1a…

vue2 webpack使用optimization.splitChunks分包,实现按需引入,进行首屏加载优化

optimization.splitChunks的具体功能和配置信息可以去网上自行查阅。 这边简单讲一下他的使用场景、作用、如何使用: 1、没用使用splitChunks进行分包之前,所有模块都揉在一个文件里,那么当这个文件足够大、网速又一般的时候,首…

原厂商是什么意思?云管平台原厂商有哪些企业?

最近不少IT小伙伴在问关于原厂商相关问题,今天我们就来简单回答一下,仅供参考! 原厂商是什么意思? 原厂商,或称原厂,是指生产特定产品或零部件的原始厂家。 软件原厂商是什么意思? 软件原厂…

课设:选课管理系统(Java+MySQL)

在本博客中,我将介绍用Java、MySQL、JDBC和Swing GUI开发一个简单的选课管理系统。 技术栈 Java:用于编写应用程序逻辑MySQL:用于存储和管理数据JDBC:用于连接Java应用程序和MySQL数据库Swing GUI:用于构建桌面应用程…

Let‘s Encrypt免费SSL证书申请最简单的步骤

随着互联网的飞速发展,网络安全问题愈发凸显其重要性。而HTTPS协议作为保障网站数据传输安全的重要手段,已经得到了广泛的应用。 申请Lets Encrypt免费泛域名SSL证书步骤 登录来此加密网站,输入域名,可以勾选泛域名和包含根域。…