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

### OpenVINS 轨迹处理方法 OpenVINS 是一款开源的基于 C++ 的视觉惯性里程计 (VIO) 解决方案,广泛应用于机器人导航、无人机飞行控制等领域。为了实现高精度的姿态估计和轨迹重建,OpenVINS 结合了相机图像与IMU传感器的数据。 #### 数据获取方式 在实际应用中,可以通过多种途径获得适用于 OpenVINS 处理的数据流: - **摄像头输入**:支持单目、双目以及 RGB-D 类型的摄像机作为视觉观测源。 - **IMU 测量值**:通常来自内置加速度计和陀螺仪组合而成的小型模块化装置。 - **外部同步机制**:确保不同类型的感知设备之间的时间戳严格对应[^1]。 #### 使用教程概述 针对初学者而言,官方文档提供了详尽的操作指南,帮助开发者快速入门并掌握核心功能。以下是几个关键环节: ##### 安装依赖库 安装必要的第三方软件包,如 Eigen, Sophus 等数学运算工具;Pangolin 或者 ROS 进行可视化展示;还有 glog 和 yaml-cpp 来辅助日志管理和参数配置文件读取。 ```bash sudo apt-get install libeigen3-dev libsophus-dev ros-noetic-pcl-ros python-catkin-tools libyaml-cpp-dev google-mock libcxxabi-dev ``` ##### 编译项目源码 下载最新版本的 OpenVINS 并按照指示完成编译过程。 ```bash git clone https://github.com/rpng/open_vins.git ~/catkin_ws/src/ cd ~/catkin_ws && catkin build open_vins source devel/setup.bash ``` ##### 配置运行环境 调整 launch 文件中的各项设置项以适应具体应用场景需求,比如选择合适的前端跟踪模式(FAST 特征点检测器 vs ORB 描述子)、设定初始位姿猜测等。 ##### 启动 VIO 系统 执行预设好的启动脚本即可让整个系统运转起来,在此期间可以借助 rviz 工具实时查看当前状态变化趋势图。 ```xml roslaunch ov_msckf euroc.launch ``` #### 实例演示 下面给出一段简单的 Python 代码片段用来订阅话题 `/vins_estimator/odometry` 下发布的消息,并将其转换成易于理解的形式打印出来供进一步分析使用。 ```python import rospy from nav_msgs.msg import Odometry def callback(data): position = data.pose.pose.position orientation = data.pose.pose.orientation print(f'Position X:{position.x:.4f}, Y:{position.y:.4f}, Z:{position.z:.4f}') print(f'Oriention W:{orientation.w:.4f}, X:{orientation.x:.4f}, ' f'Y:{orientation.y:.4f}, Z:{orientation.z:.4f}') if __name__ == '__main__': rospy.init_node('odom_subscriber', anonymous=True) sub = rospy.Subscriber('/vins_estimator/odometry', Odometry, queue_size=10, callback=callback) try: rospy.spin() except KeyboardInterrupt as e: pass ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值