文章目录

  • evo参数设置
  • evo_traj
  • 指标度量
    • evo_ape
    • evo_rpe
  • 结果比较

evo工具主要有如下六个常用命令:

  • evo_ape - 用于评估绝对位姿误差;
  • evo_rpe- 用于评估相对位姿误差;
  • evo_traj - 这个主要是用来画轨迹、输出轨迹文件、转换数据格式等功能;
  • evo_res- 比较来自evo_ape或evo_rpe生成的一个或多个结果文件的工具;
  • evo_fig - (实验)工具,用于重新打开序列化图(使用–serialize_plot保存);
  • evo_config - 这个主要用于evo工具全局设置和配置文件操作。

evo参数设置

#改变背景为白色背景的网格
evo_config set plot_seaborn_style whitegrid
#设置字体类型和比例
evo_config set plot_fontfamily serif plot_fontscale 1.3
#设置轨迹线宽
evo_config set plot_linewidth 1.2
#改变参考轨迹的线条样式:
evo_config set plot_reference_linestyle -
#设置参考线颜色为红色
evo_config set plot_reference_color red
#使用 LaTeX 渲染器,因为我们使用 LaTeX 来写论文,所以我们也想使用 LaTeX 来渲染图中的字体:
evo_config set plot_usetex
#您可能需要将 plot texsystem 参数更改为机器上安装的 LaTeX 系统,如果这在第一次尝试时不起作用。
evo_config set plot_texsystem pdflatex
#设置画图的图像大小为宽10 高9
evo_config set plot_figsize 10 9

evo_traj

evo_traj命令十分有用,它主要用于画轨迹图、表格,转换数据格式等等操作。

读取bag轨迹

evo_traj bag data.bag /odom /tf:map.base_link --ref /groundtruth

将bag格式的数据导出为tum格式

evo_traj bag .bag --all_topics --save_as_tum 

将所有轨迹画到一个图里并保存

evo_traj tum --sync  -p --plot_mode xy --save_plot SAVE_PLOT --ref REF traj_file ...
  • --sync
    associate trajectories via matching timestamps , requires --ref
  • --ref REF
    trajectory that will be marked/used as the reference
  • -p, --plot
    show plot window
  • --plot_mode {xy,xz,yx,yz,zx,zy,xyz}
    the axes for plot projection
  • --save_plot SAVE_PLOT
    path to save plo

指标度量

这些内置的命令行应用程序可以让你根据参考(groundtruth)评估估计的轨迹

  • evo_ape
  • evo_rpe
command format reference-trajectory estimated-trajectory [options] 
  • command:
    • evo_ape
    • evo_rpe
  • format:
    • kitti
    • tum
    • euroc
    • bag
    • bag2

evo_ape

用于评估两条轨迹的绝对位姿误差

对于SLAM系统, 估计轨迹的全局一致性是重要度量,如何评估全局一致性? 就是通过比较被估计值和真值轨迹之间的绝对距离来得到。

首先将两条轨迹对齐。记P1:nP_{1:n}P1:n代表轨迹的估计,Q1:nQ_{1:n}Q1:n代表真值轨迹,则时间戳iii处的绝对估计误差为:
Fi=Qi−1SPiF_i=Q_i^{-1}SP_iFi=Qi1SPi
则针对所有时刻定义平移分量的 均方根误差(RMSE)、和方差(SSE):
RMSE(F1:n):=(∑i=1n∥Trans(Fi)∥2)1/2SSE:=∑i=1n∥Trans(Fi)∥2\begin{gathered} RMSE(F_{1:n}) :=\left(\sum\limits_{i=1}^n\|{\rm Trans}(F_i)\|^2\right)^{1/2} \\ SSE :=\sum\limits_{i=1}^n\|{\rm Trans}(F_i)\|^2 \end{gathered} RMSE(F1:n):=(i=1nTrans(Fi)2)1/2SSE:=i=1nTrans(Fi)2

evo_ape tum -a -p --save_plot SAVE_PLOT --plot_mode xy  --save_results SAVE_RESULTS ref_file est_file
  • -a, --align
    alignment with Umeyama’s method (no scale)
  • -p, --plot
    show plot window
  • --plot_mode {xy,xz,yx,yz,zx,zy,xyz}
    the axes for plot projection
  • --save_plot SAVE_PLOT
    path to save plot
  • --save_results SAVE_RESULTS
    .zip file path to store results

evo_rpe

相对位姿误差测量了轨迹在一个固定的时间区间 Δ\DeltaΔ内的局部准确度。 因此,相对位姿误差对应轨迹的漂移。

Ei:=(Qi−1Qi+Δ)−1(Pi−1Pi+Δ)E_i:=(Q_i^{-1}Q_{i+\Delta})^{-1}(P_i^{-1}P_{i+\Delta})Ei:=(Qi1Qi+Δ)1(Pi1Pi+Δ)

根据上式,对于一个有n个相机位姿的序列中,我们获得m=n−Δm=n−\Deltam=nΔ 个独立的沿着序列的相对位姿误差。则可以定义平移分量的的所有时刻的均方根误差RMSE:
RMSE(E1:n,Δ):=(1m∑i=1m∥Trans(Ei)∥2)1/2RMSE(E_{1:n},\Delta):=\bigg(\frac{1}{m}\sum\limits_{i=1}^{m}\|\rm Trans(E_i)\|^2\bigg)^{1/2} RMSE(E1:n,Δ):=(m1i=1mTrans(Ei)2)1/2
上式中的 (Pi−1Pi+Δ)(P_i^{-1}P_{i+\Delta})(Pi1Pi+Δ) 是估计的(Qi−1Qi+Δ)(Q_i^{-1}Q_{i+\Delta})(Qi1Qi+Δ),计算 (Qi−1Qi+Δ)−1(Pi−1Pi+Δ)(Q_i^{-1}Q_{i+\Delta})^{-1} (P_i^{-1}P_{i+\Delta})(Qi1Qi+Δ)1(Pi1Pi+Δ) 可以直观的得到两条轨迹的差值;

此处计算的是EiE_iEi的平移分量,旋转误差也可以被估计,但一般平移误差就足够了(因为旋转误差会随着平移误差的上升而增加)。时间参数 Δ\DeltaΔ对于帧速较快的相同,如30Hz的传感器,可选择Δ=30\Delta=30Δ=30以得到每秒的漂移。

结果比较

evo_res  --use_rel_time --use_filenames -p --save_plot SAVE_PLOT --save_table SAVE_TABLE result_files [result_files ...]
  • --use_rel_time
    use relative timestamps if available
  • --use_filenames
    use the filenames to label the data
  • -p, --plot
    show plot window
  • --save_plot SAVE_PLOT
    path to save plot
  • --save_table SAVE_TABLE
    path to a file to save the results in a table

参考链接
github wiki

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django+DRF 实战:自定义异常处理流程

文章目录一、DRF 异常处理流程DRF 默认异常处理流程源码二、实战DRF 自定义异常处理流程应用自定义异常处理流程一、DRF 异常处理流程 DRF 默认异常处理流程 DRF默认的异常处理流程如下: 当异常发生时,会自动调用rest_framework.views.exception_hand…

Spring MVC 1

什么是Spring Web MVC 官方对Spring MVC的描述是这样的:Spring Web MVC 是基于Severlet API构建的原始Web框架,从一开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来自其源模块的名称(Spring-webmvc),但它…

一个基于若依(ruoyi-vue3)的小项目部署记录

一、背景 收到朋友的求助,他拿到了一个项目的源代码,说需要我帮助部署。部署要求是需要域名访问。 因为没有文档和其他资料以及帮助,我先清理了源收到的资料: 1.后端:是java代码,一看就是若依框架。心里大大…

【实战总结】WMIC在HW行动中的4类关键应用

WMIC命令完全指南:网络安全运维工程师的深度实践手册 关键词:WMIC命令、Windows管理、网络安全运维、系统信息收集、进程分析、自动化审计 【实战总结】WMIC在HW行动中的4类关键应用 1. 前言 在Windows环境下的网络安全运维中,WMIC&#x…

LKT4304稳定可靠高兼容性国产安全加密芯片

随着 IOT 的飞速发展,智能家居,智能汽车,智能工控等物联网设备和云服务的安全问题成为IOT普及的关键障碍。在设计之初就为物联网产品配备正确的安全解决方案,是帮助预防措施的关键所在。LKT4304是凌科芯安专为物联网应用场景而推出…

Android 网络开发核心知识点

Android 网络开发核心知识点 一、基础网络通信 1. HTTP/HTTPS 协议 HTTP方法:GET、POST、PUT、DELETE等状态码:200(成功)、404(未找到)、500(服务器错误)等HTTPS加密:SSL/TLS握手过程报文结构:请求头/响应头、请求体/响应体 2. 网…

DVWA靶场通关笔记-弱会话IDs(Weak Session IDs Medium级别)

目录 一、Session ID 二、代码审计(Medium级别) 1、配置security为Medium级别 2、源码分析 (1)index.php (2)Medium.php (3)对比分析 (4)渗透思路 三…

编辑器Vim的快速入门

如大家所了解的,Vim是一个很古老的编辑器,但是并没有随着时间的流逝消失在编辑器/IDE 的竞争中,Vim 独创的模式机制和 hjkl 移动光标方式使得使用者在编辑文件时可以双手不离开键盘,极大地提升了工作效率。由于 Vim 学习曲线极为陡…

深度学习核心:从基础到前沿的全面解析

🧠 深度学习核心:从基础到前沿的全面解析 🚀 探索深度学习的核心技术栈,从神经网络基础到最新的Transformer架构 📋 目录 🔬 神经网络基础:从感知机到多层网络🖼️ 卷积神经网络&am…

MySQL索引:数据库的超级目录

MySQL索引:数据库的「超级目录」 想象你有一本1000页的百科全书,要快速找到某个知识点(如“光合作用”): ❌ 无索引:逐页翻找 → 全表扫描(慢!)✅ 有索引:直接…

景观桥 涵洞 城门等遮挡物对汽车安全性的影响数学建模和计算方法,需要收集那些数据

对高速公路景观桥影响行车视距的安全问题进行数学建模,需要将物理几何、动力学、概率统计和交通流理论结合起来。以下是分步骤的建模思路和关键模型:一、 核心建模目标 量化视距(Sight Distance, SD):计算实际可用视距…

Git 用户名和邮箱配置指南:全局与项目级设置

查看全局配置 git config --global user.name # 查看全局name配置 git config --global user.email # 查看全局email配置 git config --global --list # 查看所有全局配置查看当前项目配置 git config user.name # 查看当前项目name配置 git config user.email # 查看当前项目…

视频序列和射频信号多模态融合算法Fusion-Vital解读

视频序列和射频信号多模态融合算法Fusion-Vital解读概述模型整体流程视频帧时间差分归一化TSM模块视频序列特征融合模块跨模态特征融合模块概述 最近看了Fusion-Vital的视频-射频(RGB-RF)融合Transformer模型。记录一下,对于实际项目中的多模…

frp内网穿透下创建FTP(解决FTP“服务器回应不可路由的地址。使用服务器地址替代”错误)

使用宝塔面板,点击FTP,下载Pure-FTPd插件 点击Pure-FTPd插件,修改配置文件,找到PassivePortRange, 修改ftp被动端口范围为39000 39003,我们只需要4个被动端口即可,多了不好在内网穿透frp的配置文件中增加…

STM32控制四自由度机械臂(SG90舵机)(硬件篇)(简单易复刻)

1.前期硬件准备 2s锂电池一个(用于供电),stm32f103c8t6最小系统板一个(主控板),两个摇杆(用于摇杆模式),四个电位器(用于示教器模式)&#xff0c…

华为OD机试_2025 B卷_最差产品奖(Python,100分)(附详细解题思路)

题目描述 A公司准备对他下面的N个产品评选最差奖, 评选的方式是首先对每个产品进行评分,然后根据评分区间计算相邻几个产品中最差的产品。 评选的标准是依次找到从当前产品开始前M个产品中最差的产品,请给出最差产品的评分序列。 输入描述 第…

飞算JavaAI:重塑Java开发效率的智能引擎

飞算JavaAI:重塑Java开发效率的智能引擎 一、飞算JavaAI核心价值 飞算JavaAI是全球首款专注Java语言的智能开发助手,由飞算数智科技(深圳)有限公司研发。它通过AI大模型技术实现: 全流程自动化:从需求分析→软件设计→代码生成一气呵成工程级代码输出:生成包含配置类、…

Java和Go各方面对比:现代编程语言的深度分析

Java和Go各方面对比:现代编程语言的深度分析 引言 在当今的软件开发领域,选择合适的编程语言对项目的成功至关重要。Java作为一门成熟的面向对象语言,已经在企业级开发中占据主导地位超过25年。而Go(Golang)作为Google…

CloudCanal:一款企业级实时数据同步、迁移工具

CloudCanal 是一款可视化的数据同步、迁移工具,可以帮助企业构建高质量数据管道,具备实时高效、精确互联、稳定可拓展、一站式、混合部署、复杂数据转换等优点。 应用场景 CloudCanal 可以帮助企业实现以下数据应用场景: 数据同步&#xff…

如何发现 Redis 中的 BigKey?

如何发现 Redis 中的 BigKey? Redis 因其出色的性能,常被用作缓存、消息队列和会话存储。然而,在 Redis 的使用过程中,BigKey 是一个不容忽视的问题。BigKey 指的是存储了大量数据或包含大量成员的键。它们不仅会占用大量内存&…