当前位置: 首页 > 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

相关文章:

  • (十三)MipMap
  • 谷歌正在试行人脸识别办公室安全系统
  • mmaction2版本适配(Linux)
  • 比赛获奖的武林秘籍:01 如何看待当代大学生竞赛中“卷”“祖传老项目”“找关系”的现象?
  • 龙芯杯个人赛记录
  • Django 对模型创建的两表插入数据
  • 11.SQL注入-盲注基于(base on boolian)
  • sharepoint api 没有这个文件所属site的权限的情况下访问指定文件
  • 脑启发设计:人工智能的进化之路
  • 深入理解计算机系统 CSAPP 家庭作业8.26
  • RPM方式安装mysql
  • 无法解析的外部符号 _imp_XXX
  • 基于Hadoop平台的电信客服数据的处理与分析④项目实现:任务15:数据生产
  • 【unity实战】使用Unity实现动作游戏的攻击 连击 轻重攻击和打击感
  • 航空数据管控系统-①项目准备阶段:任务2:项目技术预研(技术架构)
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Angular2开发踩坑系列-生产环境编译
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java比较器对数组,集合排序
  • Java编程基础24——递归练习
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • rc-form之最单纯情况
  • uni-app项目数字滚动
  • webgl (原生)基础入门指南【一】
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 排序(1):冒泡排序
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • #FPGA(基础知识)
  • $.ajax()参数及用法
  • (+4)2.2UML建模图
  • (3)(3.5) 遥测无线电区域条例
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (南京观海微电子)——I3C协议介绍
  • (四)汇编语言——简单程序
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET CLR基本术语
  • .Net core 6.0 升8.0
  • .Net MVC4 上传大文件,并保存表单
  • .NetCore部署微服务(二)
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET中 MVC 工厂模式浅析
  • @EnableWebMvc介绍和使用详细demo
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [ 第一章] JavaScript 简史
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用
  • [C#]winform部署官方yolov10目标检测的onnx模型