SLAM精度评估—evo

news2024/11/20 3:35:10

 

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.coloradmin.cn/o/1791591.html

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

相关文章

eNSP学习——连接RIP与OSPF网络、默认路由

目录 相关主要命令 实验一、连接RIP与OSPF网络 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建RIP和OSPF网络 3、配置双向路由引入 4、手工配置引入时的开销值 实验二、使用OSPF、RIP发布默认路由 原理介绍 实验目的 实验内容 实…

认识微服务,认识Spring Cloud

1. 介绍 本博客探讨的内容如下所示 什么是微服务?什么是springcloud?微服务和springcloud有什么关系? 首先,没有在接触springcloud之前,我写的项目都是单体结构, 但随着网站的用户量越来越大,…

CSS函数:scale、scale3d函数的使用

CSS函数scale()主要是为了实现元素的放大和缩小效果,使用的是元素的变换效果。使用的是元素的转换属性:transform的,该函数可以实现指定X轴和Y轴的放大、缩小效果。除此之外,我们还可以通过如下两种方式实现指定方向的转换&#x…

【Unity每日一记】效应器你应该知道是什么吧!五大2D效应器组件

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

企业im即时通讯WorkPlus私有化部署适配国产信创环境

在信息化时代,高效的沟通和协作对于企业的运营至关重要。企业IM即时通讯平台提供了一种便捷、实时的沟通工具,旨在改善企业的内部和外部沟通效率。然而,随着企业对数据安全性和隐私保护的要求不断提高,许多企业开始选择私有化部署…

GPT-4o:人工智能技术的新里程碑

在人工智能领域,技术的不断演进为我们带来了许多惊喜。最近,GPT-4o横空出世,成为了人工智能技术的新里程碑。在这篇博客中,我们将对GPT-4o进行评价,并进行版本间的对比分析,探讨其技术能力以及个人整体感受…

04--Tomcat

前言:本章整理tomcat的知识点,tomcat知识点相较nginx比较少,但是也是运维必会的软件,这里结合实际项目整理一下。 1、tomcat简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器&#x…

Noisee AI中文站网页版 AI 音乐生成视频全新登场,快来抢先体验——国内第一个登场的中文站来袭 - 516篇

导读 Noisee AI是一个AI音乐转视频工具,可以将你喜欢的旋律转化为音乐视频。用户可以通过Noisee AI的官方网站或提供的链接加入其Discord服务器,并上传音频文件。Noisee AI支持来自Suno、YouTube、Soundcloud的链接,以及直接上传的MP3文件。…

运放应用1 - 反相放大电路

1.前置知识 反相放大电路存在 负反馈电路 ,工作在线性区,可以利用 虚短 概念来分析电路。 注:运放的 虚断 特性是一直存在的,虚短特性则需要运放工作在 线性区 有关运放的基础知识,可以参考我的另外一篇文章&#xff…

1103. 分糖果 II Rust等差求和+一元二次方程求根(击败100% Rust用户)

题目内容 排排坐,分糖果。 我们买了一些糖果 candies,打算把它们分给排好队的 n num_people 个小朋友。 给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果。 然后,…

经典的泡泡龙游戏源码免费下载

源码介绍 HTML5泡泡龙冒险小游戏是一款休闲网页游戏,游戏玩法是玩家从下方中央的弹珠发射台射出彩珠,多于3个同色珠相连则会消失。 源码下载 经典的泡泡龙游戏源码免费下载

多目标优化-NSGA-II

文章目录 一、前置知识NSGA-II帕累托前沿 二、算法流程1.NSGA2.NSGA-II 一、前置知识 1.NSGA(非支配排序遗传算法):旨在同时优化多个冲突的目标函数,寻找帕累托前沿上的解集。 什么是多个冲突的目标: 比如你看上了一辆车,你既想要它便宜,又…

免费开源图片转文字识别软件:Umi-OCR

目录 1.介绍 2.项目亮点 3.项目功能(已实现) 4.功能体验 5.项目集成(调用接口) 6.项目地址 1.介绍 Umi-OCR:免费,开源,可批量的离线OCR软件,目前适用于 Windows7 x64 及以上。…

React@16.x(20)渲染流程-首次渲染

目录 1,渲染的前置知识点1.1,React 元素1.2,React 节点1.3,节点类型1.4,真实DOM 2,首次渲染2.1,根据参数创建节点2.2,不同节点,有不同处理2.3,生成虚拟DOM树2…

Ollama+FastAPI+React手把手构建自己的本地大模型,支持SSE

最近大家都在玩LLM,我也凑了热闹,简单实现了一个本地LLM应用,分享给大家,百分百可以用哦~^ - ^ 先介绍下我使用的三种工具: Ollama:一个免费的开源框架,可以让大模型很容易的运行在…

JVMの垃圾回收

在上一篇中,介绍了JVM组件中的运行时数据区域,这一篇主要介绍垃圾回收器 JVM架构图: 1、垃圾回收概述 在第一篇中介绍JVM特点时,有提到过内存管理,即Java语言相对于C,C进行的优化,可以在适当的…

【AI大模型】Transformers大模型库(三):特殊标记(special tokens)

目录​​​​​​​ 一、引言 二、特殊标记(special tokens) 2.1 概述 2.2 主要功能 2.3 代码示例 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库,为huggingface上数以万计的预训练大模型提供预测、训练等服…

设计模式之过滤器模式FilterPattern(十)

一、过滤器模式 过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模…

Python爬虫之简单学习BeautifulSoup库,学习获取的对象常用方法,实战豆瓣Top250

BeautifulSoup是一个非常流行的Python库,广泛应用于网络爬虫开发中,用于解析HTML和XML文档,以便于从中提取所需数据。它是进行网页内容抓取和数据挖掘的强大工具。 功能特性 易于使用: 提供简洁的API,使得即使是对网页结构不熟悉…

QtCharts使用

1.基础配置 1.QGraphicsView提升为QChartView#include <QtCharts> QT_CHARTS_USE_NAMESPACE #include "ui_widget.h"2. QT charts 2.柱状图 2.1QBarSeries //1.创建Qchart对象QChart *chart new QChart();chart->setTitle("直方图演示");//设…