VINS-fusion 跑通Euroc、TUM、KITTI数据集,以及评估工具EVO的下载和使用

2024-02-01 15:10

本文主要是介绍VINS-fusion 跑通Euroc、TUM、KITTI数据集,以及评估工具EVO的下载和使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

零、EVO工具获取与使用

ubuntu20.04中python版本是3.x,因此对应的pip工具会变成pip3,可以先参考如下链接查看自己系统的python和pip版本。

Ubuntu20.04安装evo(详细教程)【亲测有效】_ubantu20.04 evo_学无止境的小龟的博客-CSDN博客

再调用如下命令对evo工具进行安装

pip3 install evo --upgrade --no-binary evo

evo使用如下:

EVO工具的使用_evo rmse-CSDN博客

一、Euroc

1.1 Euroc数据集

Euroc数据集包含双目摄像头和IMU的录制数据格式,可以完成mono+imu、stereo、stereo+imu三种形式的数据播放。

首先应该获取Euroc数据集,Euroc数据集的获取网址如下:

kmavvisualinertialdatasets – ASL Datasets

在该页面,通过下载ROS bag格式数据集,使用ros进行数据读取。下载ASL数据格式,在解压后的压缩包中可以获得gt值,方便EVO工具评估使用。

1.2  VINS-fusion文件存储格式修改

需要修改的有三个地方,修改这三个地方以保证跑完vins后文件的存储格式能够被evo工具识别。

可以参考如下文件:

SLAM中evo评估工具(用自己的数据集评估vinsFusion)_vins-fusion运行自己的数据集_linzs.online的博客-CSDN博客

1.3 数据集运行

使用rosbag运行数据集命令如下,以MH_04_difficult.bag为例。

我选择的方式是双目stereo+imu的形式,命令如下:

#分别在五个终端的vins_ws空间下source后,运行:
roscore
rosrun vins vins_node /home/jetson/vins_ws/src/vins-fusion-master/config/euroc/euroc_stereo_imu_config.yaml
rosrun loop_fusion loop_fusion_node /home/jetson/vins_ws/src/vins-fusion-master/config/euroc/euroc_stereo_imu_config.yaml
roslaunch vins vins_rviz.launch
rosbag play MH_04_difficult.bag

1.4 结果保存与评估

根据euroc_stereo_imu_config.yaml文件中对结果存储路径的改写,我的结果存储在

其中,vio.csv和vio_loop.csv为vins运行后的结果。MH_04_GT.tum是根据下载下来的ASL压缩包中data.csv,使用evo工具转换来的,转换命令如下:

evo_traj euroc data.csv --save_as_tum

得到真值文件之后,可以通过evo中的一些命令工具,参考零中的

“EVO工具的使用_evo rmse-CSDN博客”

可以编写如下命令对evo工具进行调用并评估算法性能。

在/home/jetson/vins_ws/data/euroc路径下调用:

evo_ape tum vio_loop.csv /home/jetson/vins_ws/data/euroc/MH_04_GT.tum -va --plot --plot_mode xyz
evo_rpe tum vio_loop.csv /home/jetson/vins_ws/data/euroc/MH_04_GT.tum -r full -va --plot --plot_mode xyz

评估结果如下:

二、TUM数据集

2.1 TUM数据集获取

Computer Vision Group - Datasets - Visual-Inertial Dataset

这里以dataset-room1_512_16.bag文件为例,.bag文件是用rosbag进行播放的,而.tgz文件中包含了gt值,可以用来评估算法性能。

2.2 TUM配置文件编写

首先需要编写对应的TUM配置文件,可以参考euroc文件格式,修改对应的相机内参、相机和IMU之间的外参即可。

目前,我的tum_mono_imu.yaml和cam0.yaml文件编写如下

tum_mono_imu.yaml

这里需要注意,在本身VINS-fusion关于euroc_mono_imu_config.yaml 或者 euroc_stereo_imu_config.yaml中有一个重要参数FLOW_BACK,当该参数调整为1时将会开启光流特征点检测,提升准确性。网上大部分写好的tmu_mono_imu.yaml并没有该参数,需要自行配置。配置好的文件如下:

%YAML:1.0imu: 1         
num_of_cam: 1  #common parameters
imu_topic: "/imu0"
image0_topic: "/cam0/image_raw"
output_path: "/home/jetson/vins_ws/data/tum/"cam0_calib: "cam0.yaml"
image_width: 512
image_height: 512# Extrinsic parameter between IMU and Camera.
estimate_extrinsic: 0   # 0  Have an accurate extrinsic parameters. We will trust the following imu^R_cam, imu^T_cam, don't change it.# 1  Have an initial guess about extrinsic parameters. We will optimize around your initial guess.# 2  Don't know anything about extrinsic parameters. You don't need to give R,T. We will try to calibrate it. Do some rotation movement at beginning.                        
#If you choose 0 or 1, you should write down the following matrix.
#Rotation from camera frame to imu frame, imu^R_cam
body_T_cam0: !!opencv-matrixrows: 4cols: 4dt: ddata: [ -9.9951465899298464e-01, 7.5842033363785165e-03, -3.0214670573904204e-02, 4.4511917113940799e-02,2.9940114644659861e-02, -3.4023430206013172e-02, -9.9897246995704592e-01, -7.3197096234105752e-02,-8.6044170750674241e-03, -9.9939225835343004e-01, 3.3779845322755464e-02 ,-4.7972907300764499e-02,0,   0,    0,    1]#Multiple thread support
multiple_thread: 1#feature traker paprameters
max_cnt: 150            # max feature number in feature tracking
min_dist: 15            # min distance between two features 
freq: 10                # frequence (Hz) of publish tracking result. At least 10Hz for good estimation. If set 0, the frequence will be same as raw image 
F_threshold: 1.0        # ransac threshold (pixel)
show_track: 1           # publish tracking image as topic
equalize: 1             # if image is too dark or light, trun on equalize to find enough features
fisheye: 1              # if using fisheye, trun on it. A circle mask will be loaded to remove edge noisy points
flow_back: 1            # perform forward and backward optical flow to improve feature tracking accuracy#optimization parameters
max_solver_time: 0.04  # max solver itration time (ms), to guarantee real time
max_num_iterations: 8   # max solver itrations, to guarantee real time
keyframe_parallax: 10.0 # keyframe selection threshold (pixel)#imu parameters       The more accurate parameters you provide, the better performance
acc_n: 0.04          # accelerometer measurement noise standard deviation. #0.2   0.04
gyr_n: 0.004         # gyroscope measurement noise standard deviation.     #0.05  0.004
acc_w: 0.0004         # accelerometer bias random work noise standard deviation.  #0.02
gyr_w: 2.0e-5       # gyroscope bias random work noise standard deviation.     #4.0e-5
g_norm: 9.80766     # gravity magnitude#unsynchronization parameters
estimate_td: 0                      # online estimate time offset between camera and imu
td: 0.0                             # initial value of time offset. unit: s. readed image clock + td = real image clock (IMU clock)#rolling shutter parameters
rolling_shutter: 0                  # 0: global shutter camera, 1: rolling shutter camera
rolling_shutter_tr: 0               # unit: s. rolling shutter read out time per frame (from data sheet). #loop closure parameters
load_previous_pose_graph: 0        # load and reuse previous pose graph; load from 'pose_graph_save_path'
pose_graph_save_path: "/home/jetson/vins_ws/data/tum/" # save and load path
save_image: 0                   # save image in pose graph for visualization prupose; you can close this function by setting 0 

 cam0.yaml

%YAML:1.0
---
model_type: KANNALA_BRANDT
camera_name: camera
image_width: 512
image_height: 512
mirror_parameters:xi: 3.6313355285286337e+00gamma1: 2.1387619122017772e+03
projection_parameters:k2: 0.0034823894022493434k3: 0.0007150348452162257k4: -0.0020532361418706202k5: 0.00020293673591811182mu: 190.97847715128717mv: 190.9733070521226u0: 254.93170605935475v0: 256.8974428996504

2.3 数据集运行

#分别在五个终端的vins_ws空间下source后,运行:
roscore
rosrun vins vins_node /home/jetson/vins_ws/src/vins-fusion-master/config/TUM/tum_mono_imu.yaml
rosrun loop_fusion loop_fusion_node /home/jetson/vins_ws/src/vins-fusion-master/config/TUM/tum_mono_imu.yaml
roslaunch vins vins_rviz.launch
rosbag play dataset-room1_512_16.bag

2.4 结果保存与评估

首先,调用如下命令将真值转换成tum格式,方便evo进行评比

evo_traj euroc gt_imu.csv --save_as_tum
evo_traj tum groundtruth.txt --save_as_tum

之后,再将得到的vio_loop.csv与真值文件进行比较,得到比较结果

在/home/jetson/vins_ws/data/tum路径下调用(为了与tum其它数据集区分开,我这里选择命名为_room1)

evo_ape tum vio_loop.csv /home/jetson/vins_ws/data/tum/gt_tum_room1.tum -va --plot --plot_mode xyz
evo_rpe tum vio_loop.csv /home/jetson/vins_ws/data/tum/gt_tum_room1.tum -r full -va --plot --plot_mode xyz

多轨迹比较(根据slam方案的存储文件格式,需要自主修改名字,这里举例是真值、开回环和无回环的情况):

evo_traj tum vio.csv vio_loop.csv /home/jetson/vins_ws/data/tum/gt_tum_room1.tum -p --plot_mode=xyz

评估结果如下:

 三条轨迹比较结果如下:

 如果想比较多轨迹并对齐,可以调用如下命令:

evo_traj tum Ours_tumroom1.csv VINS+F_tumroom1.csv VINS+TH_tumroom1.csv MASOR1_tumroom1.csv VINS_tumroom1.csv --ref=/home/jetson/vins_ws/data/tum/gt_tum_room1.tum -p --plot_mode=xy --align --correct_scale

三、KITTI数据集

KITTI数据集是纯双目的,不考虑IMU的融合。

3.1 KITTI数据集获取

下载地址为The KITTI Vision Benchmark Suite,GT值也可以在这个页面下载。

或者在下面的博客里有KITTI的链接。

VINS-Fusion : EUROC、TUM、KITTI测试成功 + 程序进程详细梳理_vins fusion kitti-CSDN博客

这篇关于VINS-fusion 跑通Euroc、TUM、KITTI数据集,以及评估工具EVO的下载和使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/667633

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传