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

EVO——视觉里程计/SLAM轨迹评估工具

EVO——SLAM轨迹精度评估软件

EVO简介

evo是一款用于视觉里程计VIO和slam轨迹评估 Python 包(Linux / macOS / Windows / ROS)。能够绘制轨迹评估轨迹与真值的误差。支持多种数据集的轨迹格式(TUM、KITTI、EuRoC的Mav、ROSbag),同时支持这些数据格式之间进行相互转换。
Github网址:https://github.com/MichaelGrupp/evo

EVO支持的文件格式:

TUM 的轨迹文件

KITTI 的pose文件

EuRoC 的MAV(.csv groundtruth 和 TUM 轨迹文件)

ROSbag 包文件

集中常用的公开数据集的文件格式后面再写,大家个参考其他的博客!

安装

我用的是Ubuntu16.04系统,系统默认的是python2.7
EVO支持 Python 3.6+。最后一个支持 Python 2.7 的 EVO版本是 1.12.0。如果你想使用 ROS bagfile 接口,首先检查你的 ROS 安装使用的是哪个 Python 版本并进行相应的安装。版本不兼容会导致很大的问题!

EVO主要由两种安装方式

1.pip安装

参考其他博客

1.源码安装

参考其他博客

使用

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

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

-p 表示绘图;
--plot_mode=xyz - 表示绘图模式为xyz三维;
--save_results - 表示保存结果,后面为文件保存路径及文件名。

TUM数据的评估方法

Euroc Bag文件的评估方法

1.评估绝对轨迹误差APE

evo_ape euroc  data.csv b.csv

euroc 是数据类型标识,标识后面的两个文件都是euroc格式的数据;
第一个文件 data.csv 表示地面轨迹真值groundtrue数据;
第二个文件 b.csv 表示某个SLAM代码计算的结果;

不同数据源的绘图方法相同,命令略有差异

KITTI数据的评估方法

0.绘制轨迹

evo_traj tum abc.txt -p

abc.txt 是计算出来的结果;

在这里插入图片描述

1.评估绝对轨迹误差APE

 evo_ape kitti a.txt b.txt

kitti 是数据类型标识,标识后面的两个文件都是kitti格式的数据;
第一个文件 a.txt 表示地面轨迹真值groundtrue数据;
第二个文件 b.txt 表示某个SLAM代码计算的结果;

2.相对轨迹误差RPE

evo_rpe tum vio_GPS_global.txt kitti_10_gt.txt -p --plot_mode=xyz -a -s -v --save_results /home/lee/output/rpe.zip

tum 是数据类型标识,标识后面的两个文件都是kitti格式的数据;
第一个文件 vio_GPS_global.txt 表示SLAM软件计算的结果(此处为VINS);
第二个文件 kitti_10_gt.txt 表示kitti数据集10 的地面真实轨迹数据;

相对轨迹误差
轨迹图

###VINS计算结果转为tum格式
由于VINS输出结果并不能直接使用EVO读取,还需要进行格式转换!可参考博文:

待续!!!

相关文章:

EVO——视觉里程计/SLAM轨迹评估工具

EVO——SLAM轨迹精度评估软件 EVO简介 evo是一款用于视觉里程计VIO和slam轨迹评估 Python 包(Linux / macOS / Windows / ROS)。能够绘制轨迹,评估轨迹与真值的误差。支持多种数据集的轨迹格式(TUM、KITTI、EuRoC的Mav、ROSbag&…...

TCP为什么要三次握手,而不是两次或四次?

文章目录TCP为什么要三次握手,而不是两次或四次?三次握手才可以阻止重复历史连接的初始化(主要原因)同步双方初始序列号避免资源浪费小结TCP为什么要三次握手,而不是两次或四次? TCP连接时用于保证可靠性和…...

git 命令:工作日常使用

git start 存储分支 git start list 查看所有存储 拉取最新master 合并到自己分支: git remote add [远程名称] [远程仓库链接] //关联(添加)远程仓库; 第一步:查看分支在哪里,是自己的吗,添加暂存区,添加到仓…...

Http和Https

http和https的区别 开销:HTTPS 协议需要到 CA 申请证书,一般免费证书很少,需要交费;资源消耗:HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 ssl 加密传输协议,需要…...

【计算机网络复习】第三章 传输层 2

UDP: 用户数据报协议 u 简单高效的传输层协议 u 提供“尽力而为(best effort)”服务 UDP数据报可能丢失 接收的顺序可能与发送顺序不一致 u 无连接协议 在发送数据之前,发送端和接收端没有握手(handshaking ) 每个UDP数据报都是独立的,…...

你真的会自动化测试?自动化测试技术选型抉择

自动化测试框架 在学习自动化测试或者实践自动化测试时,我们一定会对一个名词不陌生,那就是“自动化测试框架”,而有些人也将Selenium、Appium这样的工具也称之为“自动化测试框架”,那么到底自动化测试框架如何理解呢&#xff1…...

【id:31】【20分】A. Point(类与构造)

题目描述 下面是一个平面上的点的类定义,请在类外实现它的所有方法,并生成点测试它。 输入 测试数据的组数 t 第一组测试数据点p1的x坐标 第一组测试数据点p1的y坐标 第一组测试数据点p2的x坐标 第一组测试数据点p2的y坐标 .......... 输出 输出…...

ASM字节码处理工具原理及实践(二)

0. 相关分享 ASM字节码处理工具原理及实践(一) 上一篇讲了ASM的简介、导入,以及字节码文件结构,并给出了ASM通过ClassVisitor对class进行访问的基础实战。本篇将进入MethodVisitor,尝试对方法进行访问、生成、转换。…...

Golang每日一练(leetDay0030)

目录 88. 合并两个有序数组 Merge Sorted Array 🌟 89. 格雷编码 Gray Code 🌟🌟 90. 子集 II Subsets II 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/…...

QT5.15.2 在线安装下载速度慢的解决办法

系列文章目录 文章目录系列文章目录前言一、解决前言 QT对5.15以及以上版本已经停止提供离线安装包,在线安装网速慢如蜗牛,而且一旦断了又得从头下载,不支持断点续传 由于Qt5.15及以上版本不提供离线安装包,则需要使用在线安装进…...

Cadence Allegro 导出Waived Design Rules Check Report报告详解

⏪《上一篇》   🏡《上级目录》   ⏩《下一篇》 目录 1,概述2,Waived Design Rules Check Report作用3,Waived Design Rules Check Report示例4,Waived Design Rules Check Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频...

Java阶段一Day19

Java阶段一Day19 文章目录Java阶段一Day19对象流字符流WriterReader转换流缓冲字符流BufferedWriter与PrintWriterBufferedReader异常Throwable、Error、Exception异常处理机制throwthrowstry-catchfinally面试题教师总结新单词JAVA IO对象流对象输入流构造器方法例transient关…...

radmin远程控制软件怎么样,有没有替代品

Radmin 是流行的、屡获殊荣的安全远程控制软件,它使您能够在远程计算机上实时工作,就像使用它自己的键盘和鼠标一样。 您可以从多个地方远程访问同一台计算机,是网络和管理类别中流行的远程桌面工具。 Radmin 是外国软件,在国内使…...

Java反射面试总结(一)

什么是反射? Java的反射是指在程序运行时,对于任意一个类,都可以获取到这个类的所有属性和方法,并能够对其进行操作。通过反射机制,可以在程序运行时动态地创建对象、调用方法、获取属性值等。反射可以帮助我们更轻松…...

【论文阅读】3D-LaneNet

【论文阅读】3D-LaneNet 主要要做的事情就是 lane detection。这里提一下 BEV(Bird‘s Eye View) 感知算法,为了将 2D 图像映射到 3D 空间中,能够更准确的检测物体位置,需要 BEV 感知的结果。后续还会继续了解这方面内…...

Kafka的概念|架构|搭建|查看命令

Kafka的概念|架构|搭建|查看命令一 Kafka 概述二 使用消息队列的好处三Kafka 定义3.1Kafka 简介3.2Kafka 的特性3.3 Kafka 系统架构3.4 Partation 数据路由规则四 kafka的架构五 搭建kafka5.1环境准备5.2安装kafka5.3 修改配置文件5.4 编辑其他二台虚拟机的配置文件5.5 编辑三台…...

大数据项目实战之数据仓库:电商数据仓库系统——第5章 数据仓库设计

第5章 数据仓库设计 5.1 数据仓库分层规划 优秀可靠的数仓体系,需要良好的数据分层结构。合理的分层,能够使数据体系更加清晰,使复杂问题得以简化。以下是该项目的分层规划。 5.2 数据仓库构建流程 以下是构建数据仓库的完整流程。 5.2.1 …...

OpenHarmony社区运营报告(2023年3月)

目录 本月快讯 一、代码贡献 二、生态进展 三、社区治理 五、社区活动 六、社区及官网运营 本月快讯 • 《OpenHarmony 2022年度运营报告》于3月正式发布,2022年OpenAtom OpenHarmony(以下简称“OpenHarmony”)开源项目潜心务实、深耕发展&am…...

杰林码图像增强算法——超分辨率、图像放大、轮廓和色彩强化算法(二)

一、前言 2023-03-23我发布了基于加权概率模型(杰林码的理论模型)的图像颜色增强和轮廓预测的应用方法。效果还不太明显,于是我又花了2周的时间进行了技术优化。下面仅提供了x86下的BMP和JPG对应的lib和dll,本文中的算法属于我国…...

在three.js中废置对象

基于three.js子如何废置对象(How to dispose of objects) 前言: 为了提高性能,并避免应用程序中的内存泄露,一个重要的方面是废置未使用的类库实体。 每当创建一个three.js中的实例时,都会分配一定数量的内存。然而,three.js会创建在渲染中所必需的特定对象, 例如几何…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...