Ubuntu 18.04 ——— VINS-Fusion运行与EVO的评测与使用

2023-05-16

Ubuntu 18.04 ——— VINS-Fusion运行与EVO的评测与使用

  • 一、运行环境搭建
    • 1. VINS-Fusion安装
      • 1. 创建ros工作空间
      • 2. 编译VINS-Fusion
    • 2. EVO安装
    • 3. 数据集
  • 二、VINS-Fusion运行
    • 1.单相机+IMU
    • 2.Monocualr camera + IMU
    • 3.Stereo cameras + IMU
    • 4.Stereo cameras
    • 5.Stereo cameras + GPS
    • 6.VINS-Fusion代码修改
      • 1.visualization.cpp(第一处)
      • 2.pose_graph.cpp(第二处)
      • 3.globalOptNode.cpp(第三处)
    • 7. 重新编译
    • 8.运行代码获得轨迹信息
  • 三、EVO评测
  • 参考文献

一、运行环境搭建

依赖库安装与 ROS安装说明:本次运行过程是在以前安装的VINS-Mono环境基础之上,详细的依赖库安装过程见我的另一篇博客Ubuntu18.04 —— 安装环境及运行Vins_mono(2022年)

1. VINS-Fusion安装

1. 创建ros工作空间

#由于我以前装过 VINS-Mono这里我将文件名修改一下;如果你是第一次安装VINS-Fusion以前没有装过VINS-Mono可不做修改
mkdir -p ~/catkin_ws/src              
cd ~/catkin_ws/src
catkin_init_workspacek

##############修改后##################
mkdir -p ~/catkfu_ws/src              
cd ~/catkfu_ws/src
catkin_init_workspace
######################################

2. 编译VINS-Fusion

cd ~/catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git
cd ../
catkin_make
source ~/catkin_ws/devel/setup.bash

##############修改后##################
cd ~/catkfu_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git
cd ../
catkin_make
source ~/catkfu_ws/devel/setup.bash
####################################
  1. 至此VINS-Fusion编译完成,后面需要打开四个shell窗口分别运行ros命令,为了避免每次打开新的shell都需要source,我们将其添加到bash配置文件中
sudo  vi ~/.bashrc
最后一行添加:source ~/catkin_ws/devel/setup.bash
#修改后#source ~/catkfu_ws/devel/setup.bash
保存,退出

在这里插入图片描述

2. EVO安装

详细的安装过程见我的另一篇博客Ubuntu 18.04 ——— VIO算法评测工具EVO的安装与使用

3. 数据集

Euroc数据集:数据集采用MH_01_easy.bag。

二、VINS-Fusion运行

1.单相机+IMU

在这里插入图片描述
以单相机+IMU为例,分别打开四个shell窗口,运行命令

#打开第一个终端,运行下面的命令
//roscore  //上面我们配置了bash文件就不需要每次打开新的shell都需要source!!!!
 
#打开第二个终端,分别运行下面的命令
//source ~/catkin_ws/devel/setup.bash
roslaunch vins vins_rviz.launch
 
#打开第三个终端,分别运行下面的命令
//source ~/catkin_ws/devel/setup.bash
rosrun vins vins_node src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
#可选择运行,执行回环检测
(optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml 
#MH_01_easy.bag所在文件夹下在打开第四个终端,分别运行下面的命令
//source ~/catkin_ws/devel/setup.bash
rosbag play MH_01_easy.bag

在这里插入图片描述

2.Monocualr camera + IMU

roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/vins-fusion/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml 
(optional) rosrun loop_fusion loop_fusion_node ~/vins-fusion/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml 
rosbag play ~/SLAM/test_data/MH_01_easy.bag

3.Stereo cameras + IMU

roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/vins-fusion/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml 
(optional) rosrun loop_fusion loop_fusion_node ~/vins-fusion/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml 
rosbag play ~/SLAM/test_data/MH_01_easy.bag

4.Stereo cameras

roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/vins-fusion/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml 
(optional) rosrun loop_fusion loop_fusion_node ~/vins-fusion/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml 
rosbag play ~/SLAM/test_data/MH_01_easy.bag

5.Stereo cameras + GPS

roslaunch vins vins_rviz.launch
rosrun vins kitti_gps_test ~/catkin_ws/src/VINS-Fusion/config/kitti_raw/kitti_10_03_config.yaml YOUR_DATASET_FOLDER/2011_10_03_drive_0027_sync/ 
rosrun global_fusion global_fusion_node

6.VINS-Fusion代码修改

由于VINS-Fusion保存的轨迹格式与EVO所使用的格式不同,VINS-Fusion输出的轨迹格式不符合tum数据集和euroc数据集的格式。因此需要对源代码就行修改,更改保存轨迹的格式。

1.visualization.cpp(第一处)

源代码位置:vins_estimator/src/utility/visualization.cppvoid pubOdometry函数中white result to file部分(第153行左右)
在这里插入图片描述

// write result to file
	double turetime = header.stamp.toSec();
        ofstream foutC("自己的路径/src/VINS-Fusion-master/data/result.csv", ios::app);
        foutC.setf(ios::fixed, ios::floatfield);
        foutC << turetime << " ";
        foutC << estimator.Ps[WINDOW_SIZE].x() << " "
              << estimator.Ps[WINDOW_SIZE].y() << " "
              << estimator.Ps[WINDOW_SIZE].z() << " "
              << tmp_Q.x() << " "
              << tmp_Q.y() << " "
              << tmp_Q.z() << " "
              << tmp_Q.w() << endl;
        foutC.close();

修改后:

2.pose_graph.cpp(第二处)

改pose_graph.cpp中if(SAVE_LOOP_PATH)部分(第203行左右)

 if (SAVE_LOOP_PATH)
    {
        ofstream loop_path_file("自己的路径/src/VINS-Fusion-master/data/loop_result.csv", ios::app);
	double turetime = cur_kf->time_stamp;
        loop_path_file.setf(ios::fixed, ios::floatfield);
        loop_path_file << turetime << " ";
        loop_path_file  << P.x() << " "
              << P.y() << " "
              << P.z() << " "
              << Q.x() << " "
              << Q.y() << " "
              << Q.z() << " "
              << Q.w() << endl;
        loop_path_file.close();
    }

修改后:

/home/sfann/catkfu_ws

3.globalOptNode.cpp(第三处)

修改globalOptNode.cpp中write result to file部分:(第143行左右)

 // write result to file
    std::ofstream foutC("自己的路径/src/VINS-Fusion-master/data/vio_global.csv", ios::app);
    foutC.setf(ios::fixed, ios::floatfield);
    foutC.precision(0);
    foutC << pose_msg->header.stamp.toSec() << " ";
    foutC.precision(5);
    foutC << global_t.x() << " "
            << global_t.y() << " "
            << global_t.z() << " "
            << global_q.w() << " "
            << global_q.x() << " "
            << global_q.y() << " "
            << global_q.z() << endl;
    foutC.close();

修改后:

在这里插入图片描述

7. 重新编译

修改、设置完成之后,vins_mono代码重新编译catkin_make

cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

##############修改后##################
cd ~/catkfu_ws
catkin_make
source ~/catkfu_ws/devel/setup.bash
####################################

8.运行代码获得轨迹信息

catkin_ws文件夹下打开打开四个终端分别运行以下命令:

//没有添加环境变量的不要忘记设置环境变量:source devel/setup.bash
roslaunch vins_estimator euroc.launch //这是运行euroc数据集的三个启动节点.
roslaunch vins_estimator vins_rviz.launch //启动rviz
rosbag play MH_01_easy.bag//bag数据集

三、EVO评测

euroc数据集evo只支持tum格式的绘制,使用euroc格式转tum格式的工具把他转成tum格式;
MH_01_easy的ASL Dataset Format格式,所以当我们下载完成后,解压,进入到该文件下的state_groundtruth_estimate0文件夹中,我们会发现里面有一个data.csv文件

state_groundtruth_estimate0/文件夹下打开终端,输入以下命令:

evo_traj euroc data.csv --save_as_tum

在这里插入图片描述

2。因为上面三个csv文件已经是tum格式的了,所以直接运行命令(在自己的路径/src/VINS-Fusion-master/data/文件夹下

"自己的路径/src/VINS-Fusion-master/data/***.csv"
#这里需要自己新建VINS-Fusion-master/data/文件夹,如果不新建的话有可能路径位姿可能保存不成功!!!!
#重新运行程序,待地图跑完之后,在运行 roslaunch vins_estimator euroc.launch 的terminal中,输入 “s” ,并按下回车键Enter,等待地图保存,我电脑花了20秒左右的时间。然后会出现下列信息:

pose graph path: /home/kk/happy/pose_graph_map/
pose graph saving...
save pose graph time: 22.858210 s
save pose graph finish
you can set 'load_previous_pose_graph' to 1 in the config file to reuse it next time

evo_ape tum data.tum loop_result.csv -va --plot

一定要进行轨迹对齐!!!
结果:

APE w.r.t. translation part (m)
(with SE(3) Umeyama alignment)

       max	0.415883
      mean	0.155404
    median	0.133628
       min	0.013710
      rmse	0.180707
       sse	59.399797
       std	0.092222

其中:

max:表示最大误差;
mean:平均误差;
median:误差中位数;
min:最小误差;
rmse:均方根误差;
sse:和方差、误差平方和;
std:标准差。
在这里插入图片描述
在这里插入图片描述
evo工具主要有如下六个常用命令:

evo_ape - 用于评估绝对位姿误差;
evo_rpe- 用于评估相对位姿误差;
evo_traj - 这个主要是用来画轨迹、输出轨迹文件、转换数据格式等功能;
evo_res- 比较来自evo_ape或evo_rpe生成的一个或多个结果文件的工具;
evo_fig - (实验)工具,用于重新打开序列化图(使用–serialize_plot保存);
evo_config - 这个主要用于evo工具全局设置和配置文件操作。

参考文献

https://www.freesion.com/article/7413495661/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu 18.04 ——— VINS-Fusion运行与EVO的评测与使用 的相关文章

随机推荐

  • 【亲测可用】kali linux 2020.1 设置为中文方法

    目录 0x00 提示0x01 更换更新源0x02 默认语言选择0x03 安装中文字体0x04 重启 xff0c 完成0x05 参考文章 kali 2020 1可用 进入我们的正题 xff0c 修改为中文的步骤 0x00 提示 由于kali
  • QT的TCP应用-传输图片

    1 server h span class token macro property span class token directive hash span span class token directive keyword ifnde
  • gazebo教程---使用roslaunch来启动gazebo,加载models

    1 使用roslaunch加载一个世界模型 roslaunch gazebo ros willowgarage world span class token punctuation span launch 运行效果如图 xff1a 下面看一
  • gazebo教程---ros_control

    一 ros control和Gazebo的数据流向 在Gazebo中模拟机器人的控制器是可以通过使用ros control和一个简单的Gazebo插件适配器来完成 下面是仿真 xff0c 硬件 xff0c 控制器和传动之间关系的概览 xff
  • CentOS Stream 安装 Docker

    版本LinuxCentOS Stream release 8 xff08 需要 CentOS 7 及以上 xff09 Docker20 10 17 卸载旧版本 旧版本的 Docker 被称为 docker 或 docker engine 如
  • CMakeLists.txt和.h头文件

    CMakeLists txt格式 xff08 随学习进度不断更新 xff09 声明要求的cmake最低版本 cmake minimum required VERSION 2 8 声明一个cmake工程 project HelloSLAM 添
  • 网络程序设计 面向TCP/IP编程总结

    第一章 网络编程基础知识 网络由节点和连线构成 现实用应用中的网络由硬件设备 xff08 路由器 交换机 网线 xff09 43 应用软件组成 计算机网路技术发展的第一个里程碑以报文或分组交换技术的出现为标志 数据交换的三种主要形式 xff
  • 训练时的Batchsize和Epoch之间的区别是什么?

    阅读这篇文章后 xff0c 你会知道 xff1a 随机梯度下降是一种迭代学习算法 xff0c 它使用训练数据集来更新模型 批量大小是梯度下降的超参数 xff0c 在模型的内部参数更新之前控制训练样本的数量 Epoch数是梯度下降的超参数 x
  • 如何在ROS下向ROS_PACKAGE_PATH中添加路径来解决找不到包的情况

    如果在创建ROS工作空间时不是严格按照 mkdir p catkin ws src 来创建的话可能后面会出现找不到包的情况 xff0c 这个时候你用命令 echo ROS PACKAGE PATH 会发现所找不到的包没有包含在这个路径里面
  • 移动平均法又称滑动平均法、滑动平均模型法(Moving average,MA)

    转自http jingji 100xuexi com view otdetail 20130625 230f09b0 6e36 473b 8830 7f2b873a5252 html 什么是移动平均法 移动平均法是用一组最近的实际数据值来预
  • C/C++ 数学库文件 (math.h)

    目录 1 三角函数 Trigonometric functions 1 1 cos 函数 1 2 sin 正弦函数 1 3 tan 正切函数 1 4 acos 反余弦函数 1 5 asin 反正弦函数 1 6 atan 反正切函数 1 7
  • C语言进阶 ~ 内存四区(栈、堆、全局、代码区)

    特别声明 xff1a 该部分是根据B站大佬 什么都想干好的视频学习而来 目录 1 1 数据类型本质分析 1 1 1 数据类型概念 1 1 2 数据类型的本质 1 1 3 数据类型的别名 1 1 4 数据类型之 void 1 2 变量的本质分
  • C语言进阶 ~ 一级指针与字符串

    目录 2 1 指针强化 2 2 一级指针 char 易错地方 2 2 1 对空字符串和非法字符串的判断 2 2 2 越界 2 2 3 指针的叠加会不断改变指针的方向 2 2 4 局部变量不要外传 2 2 5 函数内使用辅助变量的重要性 2
  • STC51从入门到精通(汇编)~~~ 第八讲:串行通信技术

    目录 8 1 80C51单片机串行通信技术的特点 8 2 串行通信基本知识 8 2 1 数据通信 8 2 2 串行通信的传输方式 8 2 3 异步通信和同步通信 8 3 串行接口的组成和特性 8 3 1 串行口的结构 8 3 2 串行口控制
  • 基于arduino的循迹小车(含有PID算法)

    循迹小车一般分为两方面 xff1a 一方面是简单的闭环赛道只有直道和弯道 xff0c 另一方面是毕设类型的包括一些元素 xff1a 90度弯道 十字道路 S形弯道等 1 CSDN下载 xff1a 含有PID xff1a https down
  • 基于手机蓝牙的arduino遥控小车

    遥控小车是每个人童年的最爱 xff0c 不仅好奇它的奇妙 xff0c 更是喜欢它带来的刺激 小编为大家带来几篇博客 xff0c 来给大家讲讲制作遥控小车的程序 看大标题可知我们一共有五个方法去制作一款带有遥控功能的小车 xff0c 小编分开
  • 课程设计题四:LED彩灯控制器设计

    要求 xff1a 1 至少10个发光管4种花样自动变换 xff0c 循环往复 2 彩灯花样变换的快慢节拍可以手动和自动方式控制 xff0c 手动控制按钮按一次转换一次 xff1b 自动控制方式每15秒变换一次 xff0c 1分钟循环一遍 3
  • PyCharm 调试Debug入门

    为了摈弃print的暴力调试法 xff0c 在mentor的耳濡目染下 xff0c 我开始了PyCharm的Debug 例程 xff1a def helloworld print 39 hello world 39 a 61 1 b 61
  • 树莓派自带SSH server,但默认关闭,需手动开启ssh

    命令行输入sudo raspi config 选择Interfacing Options 选择SSH项 enable
  • Ubuntu 18.04 ——— VINS-Fusion运行与EVO的评测与使用

    Ubuntu 18 04 VINS Fusion运行与EVO的评测与使用 一 运行环境搭建1 VINS Fusion安装1 创建ros工作空间2 编译VINS Fusion 2 EVO安装3 数据集 二 VINS Fusion运行1 单相机