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

一、运行环境搭建

1. VINS-Mono安装

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

2. EVO安装

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

3. 数据集

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

二、VINS-Mono运行

1. vins-mono代码修改

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

visualization.cpp(第一处)

源代码位置:vins_estimator/src/utility/visualization.cpp
在这里插入图片描述

	 // write result to file
	 ofstream foutC(VINS_RESULT_PATH, ios::app);
	 foutC.setf(ios::fixed, ios::floatfield);
	 foutC.precision(0);
	 foutC << header.stamp.toSec() * 1e9 << ",";
	 foutC.precision(5);
	 foutC << estimator.Ps[WINDOW_SIZE].x() << ","
	       << estimator.Ps[WINDOW_SIZE].y() << ","
	       << estimator.Ps[WINDOW_SIZE].z() << ","
	       << tmp_Q.w() << ","
	       << tmp_Q.x() << ","
	       << tmp_Q.y() << ","
	       << tmp_Q.z() << ","
	       << estimator.Vs[WINDOW_SIZE].x() << ","
	       << estimator.Vs[WINDOW_SIZE].y() << ","
	       << estimator.Vs[WINDOW_SIZE].z() << "," << endl;

修改后:

 // write result to file
	 ofstream foutC(VINS_RESULT_PATH, ios::app);
	 foutC.setf(ios::fixed, ios::floatfield);
	 foutC.precision(9);
	 foutC << header.stamp.toSec() << " ";
	 foutC.precision(5);
	 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;
	       //<< estimator.Vs[WINDOW_SIZE].x() << ","
	       //<< estimator.Vs[WINDOW_SIZE].y() << ","
	       //<< estimator.Vs[WINDOW_SIZE].z() << "," << endl;

pose_graph.cpp(第二处)

源代码位置:pose_graph/src/pose_graph.cpp
具体位置: /pose_graph/src/pose_graph.cpp 在函数 addKeyFrame() 中

if (SAVE_LOOP_PATH)
{
		    ofstream loop_path_file(VINS_RESULT_PATH, ios::app);
        loop_path_file.setf(ios::fixed, ios::floatfield);
        loop_path_file.precision(0);
        loop_path_file << cur_kf->time_stamp * 1e9 << ",";
        loop_path_file.precision(5);
        loop_path_file  << P.x() << ","
              << P.y() << ","
              << P.z() << ","
              << Q.w() << ","
              << Q.x() << ","
              << Q.y() << ","
              << Q.z() << ","
              << endl;
        loop_path_file.close();
 }

修改为:

if (SAVE_LOOP_PATH)
{
		    ofstream loop_path_file(VINS_RESULT_PATH, ios::app);
        loop_path_file.setf(ios::fixed, ios::floatfield);
        loop_path_file.precision(9);
        loop_path_file << cur_kf->time_stamp  << " ";
        loop_path_file.precision(5);
        loop_path_file  << P.x() << " "
              << P.y() << " "
              << P.z() << " "
              << Q.x() << " "
              << Q.y() << " "
              << Q.z() << " "
              << Q.w() << endl;
        loop_path_file.close();
 }

pose_graph.cpp(第三处)

源代码位置:pose_graph/src/pose_graph.cpp
具体位置: /pose_graph/src/pose_graph.cpp 在函数 updatePath() 中

if (SAVE_LOOP_PATH)
        {
            ofstream loop_path_file(VINS_RESULT_PATH, ios::app);
            loop_path_file.setf(ios::fixed, ios::floatfield);
            loop_path_file.precision(0);
            loop_path_file << (*it)->time_stamp * 1e9 << ",";
            loop_path_file.precision(5);
            loop_path_file  << P.x() << ","
                  << P.y() << ","
                  << P.z() << ","
                  << Q.w() << ","
                  << Q.x() << ","
                  << Q.y() << ","
                  << Q.z() << ","
                  << endl;
            loop_path_file.close();
        }

修改为:

if (SAVE_LOOP_PATH)
        {
            ofstream loop_path_file(VINS_RESULT_PATH, ios::app);
            loop_path_file.setf(ios::fixed, ios::floatfield);
            loop_path_file.precision(9);
            loop_path_file << (*it)->time_stamp << " ";
            loop_path_file.precision(5);
            loop_path_file  << P.x() << " "
                  << P.y() << " "
                  << P.z() << " "
                  << Q.x() << " "
                  << Q.y() << " "
                  << Q.z() << " "
                  << Q.w() << endl;
            loop_path_file.close();
        }

2. 修改VINS-mono运行参数

在路径 VINS-Mono/config/euroc 下有配置文件 euroc_config.yaml

output_path: 设置轨迹保存位置
pose_graph_save_path 设置位姿图保存位置
loop_closure: 0 表示不使用回环 1表示使用回环
estimate_td: 0表示不估计传感器之间的延时 1表示启动

默认值:
在这里插入图片描述
这里切记需要修改output_path路径(切记切记,血泪教训!!!!!!),修改为自己可以找到的,本文修改为:/home/sfann/output/

在这里插入图片描述

3. 重新编译

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

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

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

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

roscore
//不要忘记设置环境变量:source devel/setup.bash
roslaunch vins_estimator euroc.launch 
roslaunch vins_estimator vins_rviz.launch
rosbag play MH_01_easy.bag

在这里插入图片描述

三、EVO评测

1. 单条轨迹

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// 将euroc格式的文件data.cs转成tum格式。生成data.tum

在这里插入图片描述

evo_traj 显示轨迹(无回环)

在这里插入图片描述

在自己修改output_path路径下,本文为:/home/sfann/output/下打开终端,输入以下命令:

evo_traj tum vins_result_no_loop.csv -p --plot_mode=xyz

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

evo_ape 轨迹绝对位姿误差(无回环)

evo_ape euroc data.v ~/output/vins_result_no_loop.csv -va --plot --plot_mode xyz --save_results a.zip
sfann@sfann-virtual-machine:~/catkin_ws/MH_01_easy/mav0/state_groundtruth_estimate0$ evo_ape euroc data.v ~/output/vins_result_no_loop.csv -va --plot --plot_mode xyz --save_results a.zip
--------------------------------------------------------------------------------
Loaded 36382 stamps and poses from: data.csv
Loaded 1828 stamps and poses from: /home/sfann/output/vins_result_no_loop.csv
Synchronizing trajectories...
Found 1817 of max. 1828 possible matching timestamps between...
	data.csv
and:	/home/sfann/output/vins_result_no_loop.csv
..with max. time diff.: 0.01 (s) and time offset: 0.0 (s).
--------------------------------------------------------------------------------
Aligning using Umeyama's method...
Rotation of alignment:
[[-0.88919702 -0.4572827   0.01487224]
 [ 0.45736265 -0.88927727  0.00231253]
 [ 0.01216807  0.0088583   0.99988673]]
Translation of alignment:
[ 4.58596723 -1.65590688  0.77392137]
Scale correction: 1.0
--------------------------------------------------------------------------------
Compared 1817 absolute pose pairs.
Calculating APE for translation part pose relation...
--------------------------------------------------------------------------------
APE w.r.t. translation part (m)
(with SE(3) Umeyama alignment)

       max	0.349627
      mean	0.144090
    median	0.140709
       min	0.034373
      rmse	0.154609
       sse	43.433440
       std	0.056053

--------------------------------------------------------------------------------
Plotting results... 


在这里插入图片描述
在这里插入图片描述

evo_traj 显示轨迹(有回环)

/home/sfann/output路径下打开终端:(也就是vins_result_loop.txt所在文件夹下

evo_ape euroc data.csv ~/output/vins_result_loop.csv -va --plot --plot_mode xyz --save_results a.zip
sfann@sfann-virtual-machine:~/catkin_ws/MH_01_easy/mav0/state_groundtruth_estimate0$ evo_ape euroc data.csv ~/output/vins_result_loop.csv -va --plot --plot_mode xyz --save_results a.zip
--------------------------------------------------------------------------------
Loaded 36382 stamps and poses from: data.csv
Loaded 1066 stamps and poses from: /home/sfann/output/vins_result_loop.csv
Synchronizing trajectories...
Found 1060 of max. 1066 possible matching timestamps between...
	data.csv
and:	/home/sfann/output/vins_result_loop.csv
..with max. time diff.: 0.01 (s) and time offset: 0.0 (s).
--------------------------------------------------------------------------------
Aligning using Umeyama's method...
Rotation of alignment:
[[-0.89004862 -0.45569582  0.01244084]
 [ 0.45583067 -0.8899868   0.0119118 ]
 [ 0.00564403  0.01627299  0.99985166]]
Translation of alignment:
[ 4.73616977 -1.8039814   0.80307506]
Scale correction: 1.0
--------------------------------------------------------------------------------
Compared 1060 absolute pose pairs.
Calculating APE for translation part pose relation...
--------------------------------------------------------------------------------
APE w.r.t. translation part (m)
(with SE(3) Umeyama alignment)

       max	0.150666
      mean	0.066654
    median	0.062614
       min	0.002118
      rmse	0.073419
       sse	5.713734
       std	0.030783

--------------------------------------------------------------------------------
Plotting results... 

在这里插入图片描述
在这里插入图片描述

evo_ape 轨迹绝对位姿误差(有回环)

evo_ape euroc data.csv ~/output/vins_result_loop.csv -va --plot --plot_mode xyz --save_results b.zip
sfann@sfann-virtual-machine:~/catkin_ws/MH_01_easy/mav0/state_groundtruth_estimate0$ evo_ape euroc data.csv ~/output/vins_result_loop.csv -va --plot --plot_mode xyz --save_results b.zip
--------------------------------------------------------------------------------
Loaded 36382 stamps and poses from: data.csv
Loaded 1066 stamps and poses from: /home/sfann/output/vins_result_loop.csv
Synchronizing trajectories...
Found 1060 of max. 1066 possible matching timestamps between...
	data.csv
and:	/home/sfann/output/vins_result_loop.csv
..with max. time diff.: 0.01 (s) and time offset: 0.0 (s).
--------------------------------------------------------------------------------
Aligning using Umeyama's method...
Rotation of alignment:
[[-0.89004862 -0.45569582  0.01244084]
 [ 0.45583067 -0.8899868   0.0119118 ]
 [ 0.00564403  0.01627299  0.99985166]]
Translation of alignment:
[ 4.73616977 -1.8039814   0.80307506]
Scale correction: 1.0
--------------------------------------------------------------------------------
Compared 1060 absolute pose pairs.
Calculating APE for translation part pose relation...
--------------------------------------------------------------------------------
APE w.r.t. translation part (m)
(with SE(3) Umeyama alignment)

       max	0.150666
      mean	0.066654
    median	0.062614
       min	0.002118
      rmse	0.073419
       sse	5.713734
       std	0.030783

--------------------------------------------------------------------------------
Plotting results... 
--------------------------------------------------------------------------------
Saving results to b.zip...

在这里插入图片描述
在这里插入图片描述

可能报错

而带有回环检测的可能报错:[ERROR] TUM trajectory files must have 8 entries per row and no trailing delimiter at the end of the rows (space),原因可能是数据中有逗号,保存格式不太一致。

解决方法,pose_graph_node.cpp中的main()函数 原本是csv文件,改成txt。

VINS_RESULT_PATH = VINS_RESULT_PATH + "/vins_result_loop.txt";

修改完成,重新编译catkin_make。

2. 多条轨迹

同时显示回环轨迹和真值轨迹

evo还可以将两个结果放在一个图中,进行对比。参数中的两个zip文件就是刚刚前面生成的。

evo_res a.zip b.zip -p --save_table table.csv
sfann@sfann-virtual-machine:~/catkin_ws/MH_01_easy/mav0/state_groundtruth_estimate0$ evo_res a.zip b.zip -p --save_table table.csv

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


                           max       mean     median         min       rmse  \
vins_result_no_lo...  0.349627    0.14409   0.140709   0.0343734   0.154609   
vins_result_loop.csv  0.150666  0.0666536  0.0626141  0.00211767  0.0734188   

                          sse        std  
vins_result_no_lo...  43.4334  0.0560525  
vins_result_loop.csv  5.71373  0.0307833

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 10
    点赞
  • 123
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
### 回答1: 很高兴听到您想要在Ubuntu 18.04运行VINS-Mono。以下是一些步骤,希望能帮助您完成这个任务: 1. 安装ROS:在Ubuntu 18.04上安装ROS,可以使用以下命令: ``` sudo apt-get install ros-melodic-desktop-full ``` 2. 安装依赖项:在安装VINS-Mono之前,需要安装一些依赖项。您可以使用以下命令来安装它们: ``` sudo apt-get install cmake libgoogle-glog-dev libatlas-base-dev libsuitesparse-dev libeigen3-dev ``` 3. 克隆VINS-Mono使用以下命令克隆VINS-Mono: ``` git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git ``` 4. 编译VINS-Mono:进入VINS-Mono目录并编译它: ``` cd VINS-Mono mkdir build cd build cmake .. make -j4 ``` 5. 运行VINS-Mono:在VINS-Mono目录中,使用以下命令运行它: ``` roslaunch vins_estimator euroc.launch ``` 如果您想使用自己的数据,请将数据放入VINS-Mono/data文件夹中,并在euroc.launch文件中更改数据路径。 希望这些步骤能够帮助您在Ubuntu 18.04上成功运行VINS-Mono。如果您有任何问题,请随时问我。 ### 回答2: 首先,如果您尚未安装Ubuntu 18.04,请先完成此步骤。接下来,我们将讲解在Ubuntu 18.04上如何跑通VINS-MonoVINS-Mono是一个面向单目相机的视觉惯性里程计算法,它使用相机和IMU数据来计算三维运动轨迹。要在Ubuntu 18.04上能够跑通VINS-Mono,您需要执行以下步骤: 1.安装必要的依赖项 在终端中输入以下命令以确保所有依赖项都已安装: ``` sudo apt-get update sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev ``` 2.获取VINS-Mono 在终端中输入以下命令以从GitHub上获取VINS-Mono源代码: ``` mkdir VINS-Mono cd VINS-Mono git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git ``` 3.安装必要的ROS依赖项 在终端中输入以下命令以安装VINS-Mono的ROS依赖项: ``` cd ../VINS-Mono rosdep install --from-paths src --ignore-src -r -y ``` 4.生成ROS工作区 在终端中输入以下命令以生成ROS工作区: ``` cd ../VINS-Mono catkin_make ``` 5.设置环境变量 在终端中输入以下命令以设置ROS工作区的环境变量: ``` source devel/setup.bash ``` 6.运行VINS-Mono 在终端中输入以下命令以启动VINS-Mono: ``` roslaunch vins_mono euroc.launch ``` 在运行VINS-Mono之前,您需要将存储Euroc数据集的文件夹路径添加到euroc.launch文件中。 现在,您应该已经成功地在Ubuntu 18.04运行VINS-Mono。跟随上述步骤,您可以轻松地安装和运行VINS-Mono,从而实现自己的项目和研究。 ### 回答3: VINS-Mono是一种单目视觉SLAM算法,用于机器人或者无人机的位置估计和地图构建。Ubuntu18.04是一种开源的操作系统,因此将这两个工具组合来使用是十分容易的。 首先,需要注意的是VINS-Mono需要安装ROS(机器人操作系统)来支持其运行,因此需要先安装ROS。ROS的安装可以通过官方网站(http://wiki.ros.org/melodic/Installation/Ubuntu)提供的步骤进行。其中,需要选择适当的ROS版本来与Ubuntu18.04兼容。建议选择ROS Melodic Morenia,这是针对Ubuntu18.04版本的ROS版本。 安装完成后,需要安装VINS-Mono包,可以通过以下命令进行安装: ``` $ sudo apt-get install ros-melodic-vins-mono ``` 其中,ros-melodic-vins-monoVINS-Mono的ROS包。 接下来,安装状态估计器(state estimator)。状态估计器是使用VINS-Mono进行位置估计的必要工具。状态估计器常用的是MSCKF(Multi-State Constraint KalmanFilter)。 ``` $ sudo apt-get install ros-melodic-msckf ``` 接着,需要下载VINS-Mono的代码库,通过Git软件进行下载: ``` $ git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git ``` 在下载代码库之后,需要注意一些依赖项,这些依赖项可以通过以下命令进行安装: ``` $ sudo apt-get install libsuitesparse-dev liblapack-dev libblas-dev libopencv-dev ``` 安装完所有依赖项之后,可以运行VINS-Mono,可以通过以下命令使用roslaunch运行: ``` $ roslaunch vins_estimator vins_rviz.launch ``` 这将启动VINS-Mono和RVIZ(一种可视化工具),可用于显示结果。 总之,安装和运行VINS-Mono需要安装ROS、MSCKF、VINS-Mono代码库和VINS-Mono依赖项。如果按照以上步骤操作,则ubuntu18.04就可以跑通VINS-Mono
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值