当前位置: 首页 > news >正文

SLAM 精度评估

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

相关文章:

SLAM 精度评估

SLAM 精度的评估有两个最重要的指标,即绝对轨迹误差(ATE)和相对位姿误差(RPE)的 均方根误差(RMSE): 绝对轨迹误差:直接计算相机位姿的真实值与 SLAM 系统的估计值之间的差值,首先将…...

Postman使用教程

传统接口风格 RESTful风格 使用Postman完成测试用例目标: Postman教程 (1)准备工作,下载Postman新建 (2)登录接口调试-获取验证码 (3)登录接口调试-登录 (4)…...

UDP协议深入解析

一. UDP报文结构 UDP报文由以下4个字段组成: 源端口号(Source Port):16位,标识发送方的端口号。如果发送方没有使用端口号,则该字段为0。 目标端口号(Destination Port):16位,标识接收方的端口号。 长度(Length):16位,表示UDP报文的总长度,…...

Rethinking Federated Learning with Domain Shift: A Prototype View

CVPR2023,针对分布式数据来自不同的域时,私有模型在其他域上表现出退化性能(具有域转移)的问题。提出用于域转移下联邦学习的联邦原型学习(FPL)。核心思想是构建集群原型和无偏原型,提供富有成效的领域知识和公平的收敛目标。将样本嵌入拉近到属于相同语义的集群原型,而…...

打卡第2天----数组双指针,滑动窗口

今天是参与训练营第二天,这几道题我都看懂了,自己也能写出来了,实现思路很重要,万事开头难,希望我可以坚持下去。希望最后的结果是量变带来质变。 一、理解双指针思想 leetcode编号:977 不止是在卡尔这里…...

Running cmake version 2.8.12.2解决方案

Centos7安装mysql8.0,编译环节出现如下报错: Running cmake version 2.8.12.2 CMake Warning at CMakeLists.txt:82 (MESSAGE):Please use cmake3 rather than cmake on this platform-- Please install cmake3 (yum install cmake3) CMake Error at CMa…...

stm32中IIC通讯协议

参考资料:大部分均引用b站江协科技课程、GPT及网络资料 什么是IIC(i2C)通讯协议? 关键字:SCL、SDA、半双工、同步、串行。 IIC(Inter-Integrated Circuit),也称为I2C(In…...

允许防火墙通过端口 6379(通常用于 Redis 服务)那些年因为连接失败而一起熬过的夜

要允许防火墙通过端口 6379(通常用于 Redis 服务),您可以按照以下步骤在防火墙中添加规则。这里提供了使用 firewalld 和 ufw 两种常见防火墙管理工具的方法。 使用 firewalld (CentOS、Red Hat 等) 1. 启动并启用 f…...

tsconfig.json的include和exclude作用

tsconfig.json中的include和exclude属性用于指定需要被编译的TypeScript文件和需要被排除的文件。‌ include属性:‌用于指定哪些.ts、‌.tsx或.d.ts文件需要被编译。‌如果不指定include属性,‌则默认当前目录下除了exclude之外的所有.ts、‌.d.ts、‌…...

firewalld(8) policies

简介 前面的文章中我们介绍了firewalld的一些基本配置以及NAT的相关配置。在前面的配置中,我们所有的策略都是与zone相关的,例如配置的rich rule,--direct,以及NAT,并且这些配置都是数据包进入zone或者从zone发出时设置的策略。 我们在介绍…...

为什么进口主食冻干那么高贵?必入榜主食冻干总结分享

新手养猫人常常会有这样的疑问:为何进口主食冻干价格如此昂贵,但仍有大量养猫达人对其推崇备至?与国产主食冻干相比,进口产品的价格高出3-4倍之多,那么这高昂的价格背后,进口主食冻干是否真的值得推荐&…...

状态模式在金融业务中的应用及其框架实现

引言 状态模式(State Pattern)是一种行为设计模式,它允许对象在内部状态改变时改变其行为。状态模式通过将状态的相关行为分离到独立的状态类中,使得状态转换更加明确和简洁。在金融业务中,状态模式可以用于实现交易状…...

redis学习(002 安装redis和客户端)

黑马程序员Redis入门到实战教程,深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第5p-第p7的内容 文章目录 安装redis启动启动方式1:可执行文件启动启动方式2 基于配置文件启动修改redis配置文件 …...

在线客服系统多国语言,适合跨境外贸业务对外沟通 ,哈萨克语客服系统,根据浏览器语种标识自动切换...

我们看一下我们客服系统的哈萨克语展示。 演示网站:gofly.v1kf.com 有个客户,他们的业务主要是位于哈萨克斯坦,需求是访客端使用哈萨克语来展示。 现在这个界面就是哈萨克语的。当然,也可以切换成中文。界面上的文案已经切换成中文…...

等保2.0是否强制要求所有物联网设备都必须支持自动更新?

等保2.0对物联网设备自动更新的要求 等保2.0(网络安全等级保护2.0)是中国政府为了加强网络安全而推出的一套标准和要求。在物联网设备的安全管理方面,等保2.0确实提出了一系列措施,以确保设备的软件安全更新。这些措施包括&#…...

gin框架解决跨域问题

文章目录 前言一、使用github.com/gin-contrib/cors 前言 今天遇到了前后端跨域问题,前后端跨域解决蛮简单的,下面是解决方案 一、使用github.com/gin-contrib/cors go get github.com/gin-contrib/cors在路由的地方 r : gin.Default()corsConfig : c…...

4.判断登录用户选择按钮的展示

接着上一个文章,我们把按钮设置好了之后怎样可以做到登录的用户不同,选择展示的按钮不同? 我们可以从面向对象上手,例如获取到返回网站数据中,判断登录用户有特殊权限,就是管理员: # 1.判断登录…...

【硬核科普】存算一体化系统(Processing-in-Memory, PIM)深入解析

文章目录 0. 前言1. 提出背景1.1 存储墙1.2 功耗墙 2. 架构方案2.1 核心特征2.2 技术实现2.2.1 电流模式2.2.2 电压模式2.2.3 模式选择 2.3 PIM方案优势 3. 应用场景4. 典型产品4.1 鸿图H304.2 三星HBM-PIM 5. 存算一体化缺点6. 总结 0. 前言 按照国际惯例,首先声明…...

基于Java的壁纸网站设计与实现

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...

Zookeeper底层原理

ZooKeeper 是一个高可用的分布式协调服务,广泛应用于分布式系统中,用于解决分布式系统的一致性问题。下面将详细介绍 ZooKeeper 的底层原理,包括其架构、数据模型、核心机制和一致性协议等方面。 1. 架构 ZooKeeper 采用主从架构&#xff0…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

在rocky linux 9.5上在线安装 docker

前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...