当前位置: 首页 > news >正文

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中的 dosavedotime参数。

  • 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 (对齐模式)参数的取值有: posyawposyawsinglese3se3singlesim3none类型。

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.txt
    dateset_name_2.txt
algorithms/
    open_vins/
        dataset_name_1/
            run1.txt
            run2.txt
            run3.txt
        dataset_name_2/
            run1.txt
            run2.txt
            run3.txt
    okvis_stereo/
        dataset_name_1/
            run1.txt
            run2.txt
            run3.txt
        dataset_name_2/
            run1.txt
            run2.txt
            run3.txt
    vins_mono/
        dataset_name_1/
            run1.txt
            run2.txt
            run3.txt
        dataset_name_2/
            run1.txt
            run2.txt
            run3.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

相关文章:

  • 与AI对话:探索最佳国内可用的ChatGPT网站
  • 【AIGC调研系列】Bunny-Llama-3-8B-V与其他多模态大模型相比的优劣
  • yolov8操作步骤
  • C#设计树形程序界面的方法:创建特殊窗体
  • python numpy库简述
  • 挑战一周完成Vue3实战项目硅谷甄选Day1:项目初始化、项目配置、项目集成
  • 死磕Elasticsearch:携手六年,感谢有你!
  • html2canvas + JsPDF.js 导出pdf分页时的问题
  • 12 Redis之Lua脚本
  • 【坑】Spring Boot整合MyBatis,一级缓存失效
  • 《TCP/IP详解 卷一》第6章 DHCP
  • OpenHarmony Docker移植实践
  • 中国中封、三边封两用制袋机行业市场发展趋势分析
  • 以太坊质押时代到来,开发者机遇何在?
  • JVM之垃圾收集器
  • 第三篇文章:Docker命令
  • 秋招 2022 年面试不用愁,速看 BATJ 最新 Java 面试题整理合集
  • react面试题
  • STM32F103移植FreeRTOS必须搞明白的系列知识---3(堆栈)
  • 人脑能否重启?
  • 【微信小程序】创建自己的小程序
  • Jmeter基于Java请求的二次开发(结合java代码测Dubbo接口)
  • Redis哨兵模式与Redis缓存穿透、击穿和雪崩
  • python——全局解释器锁(GIL)
  • 武汉市服务业领军企业认定条件、流程及申报政策奖励补贴标准
  • 我的第一篇技术博客 —— 梦的开始
  • 变分自编码器VAE的直观理解与原理推导 及 问题记录
  • 【python】准点跑路人必备小程序~ 不信你用不到
  • 10个常见的使用场景,助你从 Vue2 丝滑过渡到 Vue3 !
  • Java线程安全的时间类
  • 驱动开发:内核枚举IoTimer定时器
  • sumo的简单使用