OpennVINS运行、评估笔记
1、安装运行
1.1 下载&编译
cd catkin_ws/src
git clone https://github.com/rpng/open_vins.git
cd ..
catkin_make
1.2 EUROC 数据集运行
在EUROC数据集上测试,需要指定bag包的路径和设置轨迹保存的位置。
step1: 修改文件
pgeneva_ros_eth.launch 或者 pgeneva_serial_eth.launch中的 path_bag 参数,指定数据集的路径。
<param name="path_bag" type="string" value="/home/vslam/datasets/euroc/V1_01_easy.bag" /><param name="path_gt" type="string" value="$(find ov_data)/euroc_mav/V1_01_easy.csv" />
step2: 设置轨迹输出
pgeneva_ros_eth.launch 或者 pgeneva_serial_eth.launch中的 dosave 和 dotime参数。
- dosave 表示是否保存轨迹,结果写入到traj_estimate.txt中;
- dotime 表示是否保存跟踪时间,结果写入到 traj_timing.txt文件中。
<!-- saving trajectory path and timing information --><arg name="dosave" default="true" /><arg name="dotime" default="true" /><arg name="path_est" default="$(find ov_msckf)/../traj_estimate.txt" /><arg name="path_time" default="$(find ov_msckf)/../traj_timing.txt" />
注意:有和没有ros名称的launch文件只是判断是否是把bag包加载到程序中一起运行,没有ros的launch文件需要手动播放bag包
1.3 open_vins输出轨迹的格式
open_vins输出轨迹的每一行都包含时间戳(1维)、坐标(3维)、姿态四元数(4维)、姿态协方差矩阵(6维)、位置协方差矩阵(6维)共计20个数据
# timestamp(s) tx ty tz qx qy qz qw Pr11 Pr12 Pr13 Pr22 Pr23 Pr33 Pt11 Pt12 Pt13 Pt22 Pt23 Pt33
由于协方差矩阵是对称的因此使用协方差矩阵的上三角或者下三角的6个元素就可以确定协方差矩阵。
2、轨迹评估
open_vins 的轨迹评估脚本放在 ov_eval 文件夹中,主要包含以下三类(数据获取、格式转换、轨迹评估)
2.1 数据获取
从指定的topic上获取位姿数据,并存为txt文件中
支持的消息类型有:PoseWithCovarianceStamped, PoseStamped, TransformStamped, Odometry
<node name="recorder_estimate" pkg="ov_eval" type="pose_to_file" output="screen"><param name="topic" type="str" value="/ov_msckf/poseimu" /><param name="topic_type" type="str" value="PoseWithCovarianceStamped" /><param name="output" type="str" value="/home/user/data/traj_log.txt" />
</node>
2.2 格式转换
提取 csv 文件的前八个字段,time(ns),px,py,pz,qw,qx,qy,qz,转成 time(s) x y z qx qy qz qw(把四元数转换成JPL的格式)
rosrun ov_eval format_convert <file.csv>
rosrun ov_eval format_convert <folder>
这个脚本可以用来转换TUM-VI数据集的真实值,使其符合OpenVINS的格式。OpenVINS只提供了room序列的真实值,剩下的可以通过该脚本进行转换。
2.3 轨迹评估
2.3.1 计算轨迹误差 error_singlerun
命令格式
rosrun ov_eval error_singlerun <align_mode> <file_gt.txt> <file_est.txt>
对单条输出轨迹进行评估,在终端输出轨迹的 ATE, RPE, RMSE, NEES。并绘制误差的3 sigma包络
rosrun ov_eval error_singlerun posyaw src/open_vins/ov_data/euroc_mav/MH_01_easy.txt OpenVINS_result/OpenVINS_traj_estimate_EUROC_MH01_1.txt
align_mode (对齐模式)参数的取值有: posyaw、posyawsingle、se3、se3single、sim3和none类型。
2.3.2 error_dataset
问题:有多个算法运行在数据集上的同一个序列上运行有结果,每个算法对单个序列运行多次,计算每个算法在这个序列上多次运行的平均RMSE,NEES
rosrun ov_eval error_dataset <align_mode> <file_gt.txt> <folder_algorithms>
这里算法输出的轨迹文件,必须要满足以下的命名格式[3] truth 存放轨迹的真实值。open_vins、okvis_stereo是算法的名字,dataset_name_1表示的是数据集中序列的名称,run1-3表示算法在该序列上多次运行的值。
truth/dateset_name_1.txtdateset_name_2.txt
algorithms/open_vins/dataset_name_1/run1.txtrun2.txtrun3.txtdataset_name_2/run1.txtrun2.txtrun3.txtokvis_stereo/dataset_name_1/run1.txtrun2.txtrun3.txtdataset_name_2/run1.txtrun2.txtrun3.txtvins_mono/dataset_name_1/run1.txtrun2.txtrun3.txtdataset_name_2/run1.txtrun2.txtrun3.txt
例如:在TUM-VI数据集上的dataset-corridor1_512_16序列上得到了不同算法的结果,则truth文件夹下存有一个名为 dataset-corridor1_512_16.txt 的轨迹真实文件;在 algorithms文件夹中存有 open_vins的文件夹,且 open_vins 文件夹下 又有与 dataset-corridor1_512_16序列同名的文件夹,该文件夹下放的 run1.txt 表示第一次运行的轨迹。
使用实列如下:
rosrun ov_eval error_dataset posyaw src/open_vins/ov_data/tum_vi/dataset-corridor1_512_16.txt algorithms/
2.3.3 error_comparison
多个序列,多个算法,多次运行。这个命令可以理解为 error_dataset 的升级版。用于计算多个算法在多个序列的 ATE和 RPE。文件命名的方式与2.3.2的格式一致。
rosrun ov_eval error_comparison <align_mode> <folder_groundtruth> <folder_algorithms>
2.3.4 绘制轨迹 plot_trajectories
命令格式为:
- file_gt.txt 表示轨迹的真值
- align_mode ( posyaw、 posyawsingle、se3、 se3single、sim3、none、Identity)
rosrun ov_eval plot_trajectories <align_mode> <file_gt.txt> <file_est1.txt> ... <file_est9.txt>
对EUROC数据集运行结果测试:
rosrun ov_eval plot_trajectories posyaw src/open_vins/ov_data/euroc_mav/MH_01_easy.txt OpenVINS_result/OpenVINS_traj_estimate_EUROC_MH01_1.txt
3、时间分析工具 ov-timing
在 launch 文件中有 dotime参数设置是否保存跟踪时间,结果写入到 traj_timing.txt文件中。
<!-- saving trajectory path and timing information --><arg name="dosave" default="true" /><arg name="dotime" default="true" /><arg name="path_est" default="$(find ov_msckf)/../traj_estimate.txt" /><arg name="path_time" default="$(find ov_msckf)/../traj_timing.txt" />
在使用该工具时要注意将时间输出打开。
traj_timing文件的输出格式是(每一行8个数据):
# timestamp (sec),tracking,propagation,msckf update,slam update,slam delayed,re-tri & marg,total
3.1 分析单个序列 timing_flamegraph
命令格式
rosrun ov_eval timing_flamegraph <file_times.txt>
实际运行
rosrun ov_eval timing_flamegraph OpenVINS_result/OpenVINS_traj_timing_EUROC_MH01_1.txt
3.2 分析不同算法 timing_comparison
用于比较不同算法的计算耗时
rosrun ov_eval timing_comparison <file_times1.txt> ... <file_timesN.txt>
注意:不同的算法输出的时间格式文件要和open_vins的timing格式文件一致
4、参考资料
[1] OpenVINS Github地址: https://github.com/rpng/open_vins
[2] OpenVINS详细文档: https://docs.openvins.com/
[3] ov-eval工具: https://docs.openvins.com/namespaceov__eval.html
[4] eval-timing 工具: https://docs.openvins.com/eval-timing.html
[5] Open_VINS初试:https://blog.csdn.net/weixin_39752599/article/details/105906652
[6] https://zhuanlan.zhihu.com/p/103593125
OpennVINS运行、评估笔记相关推荐
- 参照国家一级博物馆运行评估指标体系,博物馆综合业务服务平台就该如此建设
博物馆综合业务服务平台首先是针对博物馆展览.社教等核心业务设计的<博物馆业务服务平台>. 平台参考<国家一级博物馆运行评估指标体系>设计,平台精选业务领域涉及到的多种研究文献与 ...
- 全志v3s linux 编译,全志 V3S 编译运行 xboot 笔记
全志 V3S 编译运行 xboot 笔记 目录 1. 目的 2. 环境准备 3. 下载 3.1 fel 模式进入 3.2 sunxi-fel 工具的使用 3.3 烧录 4. 串口打印 5. 总结 1. ...
- 全志v3s linux 编译,全志V3S 编译运行xboot笔记
全志V3S 编译运行xboot笔记 [toc] 1.目的 现在手上有一块V3S的板子,想将其用起来.现在来记录一下这个过程.记录一下荔枝派zero的使用流程. 2.环境准备 首先需要clone代码 g ...
- 线性回归+逻辑回归+过拟合+模型评估笔记
笔记 什么是线性回归 具体的内容 参数计算 什么是逻辑回归?(什么问题) 具体的内容(怎么解决的?) 建立预测函数(线性回归再套一个函数) Sigmoid函数(Logistic函数) 损失函数 逻辑回 ...
- 运行ORB-SLAM笔记_使用篇(二)
1. 编译完成之后就可以使用了,按照说明我们可以知道,首先开启roscore 再打开一个命令窗口使用命令:rosrun ORB_SLAM ORB_SLAM PATH_TO_VOCABULARY PAT ...
- 运行ORB-SLAM笔记_编译篇(一)
1.下载代码 https://github.com/raulmur/ORB_SLAM/ (同时也可以看看作者的牛叉论文,我是打算先用代码,再回头看论文) 2.打开后如下 就好像是用一件新产品 ...
- Servlet运行流程笔记
servlet的定义: 1.servlet是一种运行在we服务器或者服务器上的一种程序,用于解决和实现动态网页.用于客户端与服务端之间的请求处理和发送响应,是web浏览器和其他http客户端的请求和h ...
- Linux上的node站点之centos配置nodejs运行环境笔记
centos配置nodejs运行环境 原来的项目放在windowsserver上了,现在换个系统要重新配置下. 先看看是不是安装python rpm -qa|grep python 一般租的云服务器会 ...
- JavaWeb关于工程运行的笔记
1.不同IDEA版本创建web部署的方式不同 IDEA2020.3:Idea2020.2.3 创建JavaWeb项目(部署Tomcat)方法 IDEA2020.2:Idea2020.2创建JavaWe ...
最新文章
- mustache模板技术
- 8-7-Exercise
- 2019牛客暑期多校训练营(第九场) E	All men are brothers
- 现在c++链接oracle,C++ 连接Oracle
- formdata 接受参数中带有class 对象_Django(五)- 请求与响应 - request对象
- 用上 RocketMQ,系统性能提升了 10 倍!
- SharePoint自动化系列——Solution auto-redeploy using Selenium(C#)
- Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置)
- centos7设置键盘类型_CentOS 7 系统区域(语言)和键盘设置
- powerdesigner 导入html,使用PowerDesigner导出Word/HTML的一些配置
- (CSDN迁移) 输入一个链表,从尾到头打印链表每个节点的值
- 基于python管理系统论文_基于Python的学生信息管理系统
- CodeCanyon上的12种最佳CSS动画
- Python中print函数细节——默认换行
- Unity 生成随机房间、洞穴(2D、3D地图)总结
- 在闲鱼实习是一种什么样的体验
- 突破次元壁垒,让身边的玩偶手办在屏幕上动起来!
- 递归与递归方程T(N)=aT(N/b)+O(N^d)
- FPGA原理和结构简介
- camera调试名词及问题策略