SLAM精度评估—evo

 

evo是一款用于SLAM轨迹精度的评估工具。核心功能是(1)能够绘制(传感器运动)轨迹,(2)评估估计轨迹与真值(ground truth)的误差。evo支持多种数据集的轨迹格式(TUM、KITT、EuRoC MAV、ROS的bag),同时支持这些数据格式之间进行相互转换。在此仅对其基本功能做简要介绍。

目录

1. evo的安装(evo共有两种安装方式)

1.1 采用pip安装,直接安装最新的稳定发行版(在翻墙的情况下可以使用)

1.2 源码安装 ,下载源码进行安装(必须翻墙,要不然装不上)

2. 基础指令

2.1 轨迹对齐

2.2 轨迹尺度缩放

3. 精度测评

3.1 evo_ape

3.2 evo_rpe

3.3 evo_res进行结果比较

3.4 格式互相转换

4. 评价指标和评价工具对比

1. ATE:Absolute Trajectory Error 绝对轨迹误差(使用evo)

参数说明

2. RPE:Relative Pose Error 相对位姿误差(使用evo)

参数说明

3. RPE和RRE(使用 KITTI_odometry_evaluation_tool)

示例命令

参数说明

综述

5. ORB-SLAM2 (Stereo)和DynSLAM (Stereo)中的应用 

1. evo的安装(evo共有两种安装方式)

1.1 采用pip安装,直接安装最新的稳定发行版(在翻墙的情况下可以使用)

输入代码:

# 遇到网络不好中断,就多试几次(但是一定要翻墙)pip install evo --upgrade --no-binary evo

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

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

sudo apt install python-pip

1.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

安装时会自动安装相关依赖项。

安装完毕后,在命令行输入evo,若显示了相关信息,则表明安装成功。若提示"command not found"也不用惊慌,很多人遇到这种问题,重启电脑即可找到evo相应指令。

2. 基础指令

evo绘制轨迹的指令为:evo_traj,后跟必要参数有:数据的格式(tum / kitti / bag / euroc等)+ 轨迹文件。轨迹文件可以有多个,例如:

evo_traj tum traj1.txt traj2.txt

这个指令只是显示轨迹的基本信息,若要绘制轨迹,则增加可选参数 -p 或 --plot

evo_traj tum traj1.txt –p

2.1 轨迹对齐

我们时常需要将估计轨迹与真实轨迹同时绘制,可采用指令:

evo_traj tum realTraj.txt estTraj.txt -p

存储时轨迹多为相对位置变化,所以绘制出的轨迹在初始位置上存在一定的位置和角度偏移。

这时我们采用对齐指令将两条轨迹进行对齐。为此我们需要通过--ref参数指定参考轨迹,并增加参数-a(或--align)进行对齐(旋转与平移)

evo_traj tum estTraj.txt --ref realTraj.txt -p -a

2.2 轨迹尺度缩放

单目相机会存在尺度的不确定性,evo_traj 支持使用-s(或 --correct_scale)参数进行Sim(3)上的对齐(旋转、平移与尺度缩放)帮助?

可以在命令行通过-h参数查看当前evo指令的参数及相关说明。例如:

evo_traj tum –h

3. 精度测评

3.1 evo_ape

evo_ape  绝对位姿误差(absolute pose error),用于整体评估整条轨迹的全局一致性;

 注意evo_ape默认情况下计算的是ATE(相当于默认加了参数-r tran_part),如果想计算APE,可以加上参数-r full

evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz --save_results results/ORB.zip

绝对位姿误差,用于比较估计轨迹和参考轨迹并计算整个轨迹的统计数据,常用于评估测试轨迹的全局一致性。这里还是以kitti为例,tum和euroc格式相同。

evo_ape kitti ground_truth.txt tra1.txt -r full -va --plot --plot_mode xyz --save_plot ./tra1plot --save_results ./tra1.zip

kitti表明处理的是kitti数据集的相关结果,这里也可以替换为tum和euroc;

ground_truth.txt代表真实轨迹的数据;

tra1.txt代表估计轨迹的数据;

-r full表示同时考虑旋转和平移误差得到的ape,无单位(unit-less);

另外: -r trans_part表示考虑平移部分得到的ape,单位为m;

-r rot_part表示考虑旋转部分得到的ape,无单位(unit-less);

-r angle_deg表示考虑旋转角得到的ape,单位°(deg);

-r angle_rad表示考虑旋转角得到的ape,单位弧度(rad);

-va包含两部分;1.-v或--verbose指明输出文件数据的相关信息;2.-a或--align指明对轨迹进行配准; --plot表示画图;

--plot_mode xy表示图像投影在xoy平面上,其余可选参数为:xz,yx,yz,zx,zy,xyz;

--save_plot ./tra1plot表示保存生成的图片,./tra1plot这里写自己保存的地址;

--save_results ./tra1.zip表示保存计算结果,./tra1.zip这里写自己保存的地址;

3.2 evo_rpe

evo_rpe  相对位姿误差(relative pose error),用于评价轨迹局部的准确性。

相对位姿误差不进行绝对位姿的比较,相对位姿误差比较运动(姿态增量)。相对位姿误差可以给出局部精度,例如SLAM系统每米的平移或者旋转漂移量。这里还是以kitti为例,tum和euroc格式相同。

evo_rpe kitti ground_truth.txt tra1.txt -r full -va --plot --plot_mode xyz --save_plot ./tra1plot --save_results ./tra1.zip

kitti表明处理的是kitti数据集的相关结果,这里也可以替换为tum和euroc;

ground_truth.txt代表真实轨迹的数据;

tra1.txt代表估计轨迹的数据;

-r full表示同时考虑旋转和平移误差得到的ape,无单位(unit-less);

另外:

-r trans_part表示考虑平移部分得到的ape,单位为m;

-r rot_part表示考虑旋转部分得到的ape,无单位(unit-less);

-r angle_deg表示考虑旋转角得到的ape,单位°(deg);

-r angle_rad表示考虑旋转角得到的ape,单位弧度(rad);

-va包含两部分;1.-v或--verbose指明输出文件数据的相关信息;2.-a或--align指明对轨迹进行配准;

--plot表示画图;

--plot_mode xy表示图像投影在xoy平面上,其余可选参数为:xz,yx,yz,zx,zy,xyz;

--save_plot ./tra1plot表示保存生成的图片,./tra1plot这里写自己保存的地址;

--save_results ./tra1.zip表示保存计算结果,./tra1.zip这里写自己保存的地址;

3.3 evo_res进行结果比较

在使用evo_ape或evo_rpe将结果保存为.zip文件后,可以利用evo_res对不同的结果进行比较。

evo_res //*/test/.zip -p --save_table ///test/table.csv///test/.zip是之前使用ape或rpe生成的压缩包的地址; -p表示画图; --save_table //*/test/table.csv表示将统计指标保存在csv文件中;

3.4 格式互相转换

example1 EuRoC→TUM,输出为data.tum

evo_traj euroc data.csv --save_as_tum

example1 EuRoC→kitti,输出为data.kitti

evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_kitti

 TUM数据集格式

timestamp tx ty tz qx qy qz qw

(每行有8个元素,结尾没有空格,时间以秒为单位)

EuRoci数据集

timestamp,px,py,pz,qw,qx,qy,qz,vx,vy,vz,bwx,bwy,bwz,bax,bay,baz

(每行17个元素,逗号隔开,时间以纳秒为单位)

 KTTI数据集

r11 r12 r13 tx r21 r22 r23 ty r31 r32 r33 tz

存储变换矩阵的前三行(每行12元素,空格隔开)没有时间

EuRoc的数据格式转化成TUM数据格式

evo_traj euroc data.csv --save_as_tum

TUM数据转换成kitti格式

evo_traj tum traj_1.txt  traj_2.txt  traj_3.txt  --save_as_kitti

TUM数据转换成bag格式

evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_bag

4. 评价指标和评价工具对比

evo

KITTI_odometry_evaluation_tool

ATE [m]

RPE [%]

RRE [deg/m]

1. ATE:Absolute Trajectory Error 绝对轨迹误差(使用evo)

绝对轨迹误差(ATE)是估计位姿和真实位姿的直接差值,可以非常直观地反映算法的精度和轨迹的全局一致性(ATE只包含平移的误差)。在evo中,有关于ATE的指令。注意,evo_ape默认情况下计算的是ATE(相当于默认加了参数-r trans_part),如果想计算APE,可以加上参数-r full

evo_ape kitti ground_truth.txt tra1.txt -r full -va --plot --plot_mode xyz --save_plot ./tra1plot --save_results ./tra1.zip

参数说明

  • kitti:表明处理的是kitti数据集的相关结果,这里也可以替换为tum和euroc。
  • ground_truth.txt:代表真实轨迹的数据。
  • tra1.txt:代表估计轨迹的数据。
  • -r full:表示同时考虑旋转和平移误差得到的ATE,无单位(unit-less)。
    • 另外:
      • -r trans_part:表示仅考虑平移部分得到的ATE,单位为米(m)。
      • -r rot_part:表示仅考虑旋转部分得到的ATE,无单位(unit-less)。
      • -r angle_deg:表示考虑旋转角得到的ATE,单位为度(deg)。
      • -r angle_rad:表示考虑旋转角得到的ATE,单位为弧度(rad)。
  • -va:包含两部分:
    • -v--verbose:指明输出文件数据的相关信息。
    • -a--align:指明对轨迹进行配准。
  • --plot:表示生成图像。
  • --plot_mode xyz:表示图像投影在xoy平面上,其余可选参数为:xz, yx, yz, zx, zy, xyz。
  • --save_plot ./tra1plot:表示保存生成的图片,./tra1plot这里写自己保存的地址。
  • --save_results ./tra1.zip:表示保存计算结果,./tra1.zip这里写自己保存的地址。

2. RPE:Relative Pose Error 相对位姿误差(使用evo)

相对位姿误差(RPE)是为了估计机器人每一步的精度。RPE包含两部分误差:旋转误差和平移误差。通常,使用平移误差进行评价已足够,但如果需要,旋转角的误差也可以进行统计。RPE的整体大小通常使用均方根误差(RMSE,Root Mean Squared Error)进行衡量,即平方后求均值再开根号。

evo_rpe kitti ground_truth.txt tra1.txt -r full -va --plot --plot_mode xyz --save_plot ./tra1plot --save_results ./tra1.zip

参数说明

  • kitti:表明处理的是kitti数据集的相关结果,这里也可以替换为tum和euroc。
  • ground_truth.txt:代表真实轨迹的数据。
  • tra1.txt:代表估计轨迹的数据。
  • -r full:表示同时考虑旋转和平移误差得到的RPE,无单位(unit-less)。
    • 另外:
      • -r trans_part:表示仅考虑平移部分得到的RPE,单位为米(m)。
      • -r rot_part:表示仅考虑旋转部分得到的RPE,无单位(unit-less)。
      • -r angle_deg:表示考虑旋转角得到的RPE,单位为度(deg)。
      • -r angle_rad:表示考虑旋转角得到的RPE,单位为弧度(rad)。
  • -va:包含两部分:
    • -v--verbose:指明输出文件数据的相关信息。
    • -a--align:指明对轨迹进行配准。
  • --plot:表示生成图像。
  • --plot_mode xyz:表示图像投影在xoy平面上,其余可选参数为:xz, yx, yz, zx, zy, xyz。
  • --save_plot ./tra1plot:表示保存生成的图片,./tra1plot这里写自己保存的地址。
  • --save_results ./tra1.zip:表示保存计算结果,./tra1.zip这里写自己保存的地址。

3. RPE和RRE(使用 KITTI_odometry_evaluation_tool)

使用KITTI_odometry_evaluation_tool可以计算相对位姿误差(RPE)和相对旋转误差(RRE)。举例如下:

python evaluation.py --result_dir=./data/ --eva_seqs=09_pred,10_pred

参数说明

  • --result_dir=./data/:指定结果目录。
  • --eva_seqs=09_pred,10_pred:指定要评估的序列。

5. ORB-SLAM2 (Stereo)和DynSLAM (Stereo)中的应用

RPE[%]以及RRE[deg/100m]:定义参考论文VSO: Visual Semantic Odometry

显示轨迹

evo_traj tum GroundTruth.txt OurAlgorithm.txt A_LOAM_Traj.txt -p

evo_traj tum GroundTruth.txt OurAlgorithm.txt A_LOAM_Traj.txt --plot --plot_mode xz

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

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

相关文章

用户购物性别模型标签(USG)之决策树模型

一、USG模型引入: 首先了解一下,如何通过大数据来确定用户的真实性别, 经常谈论的用户精细化运营,到底是什么? 简单来讲,就是将网站的每个用户标签化,制作一个属于用户自己的网络身份证。然后,运营人员 通…

D3D 顶点格式学习

之前D3D画三角形的代码中有这一句, device.VertexFormat CustomVertex.TransformedColored.Format; 这是设置顶点格式; 画出的三角形如下, 顶点格式是描述一个三维模型的顶点信息的格式;可以包含以下内容, 位置…

Xcode设置cocoapods库的最低兼容版本

目录 前言 1.使用cocoapods遇到的问题 2.解决办法 1.用法解释 1. config.build_settings: 2.IPHONEOS_DEPLOYMENT_TARGET 2.使用实例 3.注意事项 1.一致性 2.pod版本 前言 这篇文章主要是介绍如何设置cocoapods三方库如何设置最低兼容的版本。 1.使用cocoapods遇到的…

qt学习笔记

qt的对象树 在 Qt中创建对象的时候会提供一个 Parent 对象指针,Q0bject是以对象树的形式组织起来的。 当你创建一个 Q0biect 对象时,会看到 Q0biect 的构造函数接收一个Q0b.ject指针作为参数,这个参数就是 parent,也就是父对象指…

三次样条插值的实现(Matlab)

一、问题描述 三次样条插值的实现。 二、实验目的 掌握三次样条插值方法的原理,能够编写代码获得自然、抛物线端点以及非纽结三次样条。 三、实验内容及要求 找出并画出三次样条S,满足S(0) 1, S(1) 3, S(2) 3, S(3) 4, S(4) 2,其中…

Spring Boot 开发 -- 过滤器与拦截器详解

引言 在Web开发中,经常需要对请求进行预处理或在响应后进行后处理,Spring Boot提供了过滤器和拦截器两种机制来实现这一需求。虽然它们都可以用来处理HTTP请求和响应,但在使用场景、执行顺序和配置方式上存在明显的差异。本文将详细讲解Spri…

LeetCode 2928.给小朋友们分糖果 I:Java提交的运行时间超过了61%的用户

【LetMeFly】2928.给小朋友们分糖果 I:Java提交的运行时间超过了61%的用户 力扣题目链接:https://leetcode.cn/problems/distribute-candies-among-children-i/ 给你两个正整数 n 和 limit 。 请你将 n 颗糖果分给 3 位小朋友,确保没有任何…

易语言贪吃蛇游戏(附带源码)

易语言贪吃蛇游戏 效果图源码说明源码领取下期更新预报 效果图 源码说明 本源码用易语言来编写,供大家研究,保留版权,谢谢! 源码领取 易语言贪吃蛇游戏源码领取地址:https://www.123pan.com/s/ji8kjv-TKPU3.html提取…

Oracle中rman的增量备份使用分享

继上次使用RMAN的全量备份和异机还原以后,开始研究一下增量备份和还原的方法。相比于全量RMAN的备份还原,增量的备份还原就相对简单。本实践教程直接上操作,还是回归到一个问题,就是关于两个数据库创建时候,必须保持or…

泄漏libc基地址

拿libc基地址 方法一:格式化字符串 格式化字符串,首先确定输入的 AAAA 在栈上的位置(x)。使用 elf.got[fun] 获得got地址。利用格式化字符串,构造payload泄漏got地址处的值,recv接受到的字符串中&#xf…

linux部署运维1——centos7.9离线安装部署web或java项目所需的依赖环境,包括mysql8.0,nginx1.20,redis5.0等工具

在实际项目部署运维过程中,如果是云服务器,基本安装项目所需的依赖环境都是通过yum联网拉取网络资源实现自动化安装的;但是对于一些特殊场合,在没有外部网络的情况下,就无法使用yum命令联网操作,只能通过编…

网络报文协议头学习

vxlan:就是通过Vxlan_header头在原始报文前面套了一层UDPIP(4/6)Eth_hdr 需求背景:VXLAN:简述VXLAN的概念,网络模型及报文格式_vxlan报文格式-CSDN博客 如果服务器作为VTEP,那从服务器发送到接…

jmeter之MD5加密请求秒杀接口教程

前言: 有时候在项目中,需要使用MD5加密的方法才可以登录,或者在某一个接口中遇到 登录获取token后才可以进行关联,下面介绍下遇到的常见使用 一、第一种方法:使用jmeter自带的函数助手digest 选择工具,选…

并查集拓展(扩展域并查集)

事实证明,扩展域并查集应该在带权并查集前面讲的,因为比较好理解,而且回过头看带权并查集可能也会更轻松一些。 https://www.luogu.com.cn/problem/P1892https://www.luogu.com.cn/problem/P1892 题目描述 现在有 𝑛 个人&…

算法解析——单身狗问题

欢迎来到博主的专栏:算法解析 博主ID代码小豪 文章目录 什么是单身狗问题leetcode_136——只出现一次的数字I使用位运算解决单身狗问题。 leetcode_137——只出现一次的数字II统计二进制数解决单身狗问题leetcode_260 只出现一次数字III分区域按位异或解决问题。 总…

C语言:如何写文档注释、内嵌注释、行块注释?

技术答疑流程 扫描二维码,添加个人微信;支付一半费用,获取答案;如果满意,则支付另一半费用; 知识点费用:10元 项目费用:如果有项目任务外包需求,可以微信私聊

【scikit-learn009】异常检测系列:单类支持向量机(OC-SVM)实战总结(看这篇就够了,已更新)

1.一直以来想写下机器学习训练AI算法的系列文章,作为较火的机器学习框架,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下scikit-learn框架OCSVM模型相关知识体系。 3.欢迎批评指正,欢迎互三,跪谢一键三连! 4.欢迎…

Vue3实战笔记(57)—一键换肤:在Vuetify中打造个性化主题切换体验

文章目录 前言一键换肤总结 前言 在当今追求极致用户体验的时代,为应用程序提供个性化的主题切换功能已经成为提升用户满意度和留存率的关键因素之一。Vuetify,作为基于Vue.js的流行前端框架,以其丰富的组件库和高度可定制性,为开…

day05-多任务-正则-装饰器

一、多任务 1-进程和线程 进程是操作系统分配资源的最小单元 线程执行程序的的最小单元 线程依赖进程,可以获取进程的资源 一个程序执行 先要创建进程分配资源,然后使用线程执行任务 默认情况下一个进程中有一个线程 2-多任务介绍 运行多个进程或线程执…

民国漫画杂志《时代漫画》第38期.PDF

时代漫画38.PDF: https://url03.ctfile.com/f/1779803-1248636380-dd7daa?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!