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

本文详细介绍了如何在Ubuntu18.04上搭建VINS-Fusion的运行环境,包括创建ROS工作空间、编译VINS-Fusion和安装EVO。通过修改VINS-Fusion的源代码以适应EVO的轨迹格式,然后运行不同配置(如单相机+IMU、双目相机等)的VINS-Fusion,并使用EVO进行轨迹评测。最后,给出了EVO的使用方法和评价指标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、运行环境搭建

依赖库安装与 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/

<think>好的,用户想在Ubuntu 18.04上配置和运行GPS相关功能或服务。首先,我需要回忆相关的步骤和可能需要的工具。根据之前的引用,用户提到了ROS的安装和配置,比如添加软件源、安装ROS melodic等,这可能说明用户可能在机器人或无人机项目中使用GPS,比如XTDrone或VINS-Fusion。因此,我需要考虑ROS集成的GPS工具。 首先,GPS设备的连接。用户需要确保硬件正确连接,比如通过USB或串口。可能需要检查设备是否被识别,使用dmesg或ls /dev/tty*来查看设备节点。接着,安装驱动或工具,例如gpsd,这是一个管理GPS数据的服务,常用在Linux系统中。安装gpsd后,需要配置它以识别正确的设备端口,比如/dev/ttyUSB0,并启动服务。 然后,测试GPS数据。使用cgps或gpsmon可以实时查看GPS信息。确保设备能够获取卫星信号和定位数据。如果用户是在ROS环境使用,可能需要安装相关的ROS包,比如nmea_navsat_driver,这个包可以解析NMEA语句并发布为ROS话题。用户需要创建启动文件,配置对应的串口参数,然后运行节点,通过rostopic查看数据。 另外,用户可能需要集成GPS数据到其他系统中,比如SLAM或导航。引用中提到VINS-FusionEVO评测,可能用户在进行传感器融合或轨迹评估。因此,GPS数据可能需要其他传感器(如IMU、摄像头)同步。这时候,需要确保时间戳的同步,或者在ROS中使用适当的消息类型,如sensor_msgs/NavSatFix。 用户可能遇到的问题包括权限问题,比如无法访问/dev/ttyUSB0,需要将用户添加到dialout组。或者GPS数据无法解析,检查波特率设置是否正确,NMEA协议版本是否兼容。此外,在ROS中,可能需要检查话题是否正确发布,以及依赖包是否安装完整。 总结步骤:硬件连接→安装驱动和工具→配置服务→测试数据→集成到ROS或其他应用。需要确保每一步都验证通过,并提供相应的命令和调试方法。可能还需要推荐一些相关的工具或包,比如使用GPSD工具套件,或ROS的GPS相关包,以帮助用户更好地开发和集成他们的项目。</think>在Ubuntu 18.04中配置和运行GPS设备或服务,通常涉及硬件连接、驱动配置、数据解析及可视化等步骤。以下是具体实现方法: --- ### 一、硬件准备连接 1. **连接GPS设备** 通过USB或串口连接GPS接收器,使用`ls /dev/tty*`查看设备节点(如`/dev/ttyUSB0`)。 2. **验证设备权限** 若提示权限不足,执行: ```bash sudo usermod -aG dialout $USER # 将当前用户加入dialout组 sudo chmod 666 /dev/ttyUSB0 # 临时权限设置 ``` --- ### 二、安装GPS工具链 1. **安装`gpsd`服务** ```bash sudo apt-get install gpsd gpsd-clients python-gps ``` 2. **配置`gpsd`** 修改配置文件`/etc/default/gpsd`,指定设备路径: ```bash DEVICES="/dev/ttyUSB0" GPSD_OPTIONS="-n" # 强制启动无需等待客户端 ``` 3. **重启服务** ```bash sudo systemctl restart gpsd ``` --- ### 三、测试GPS数据 1. **命令行工具验证** - 实时数据查看: ```bash cgps -s # 显示卫星状态坐标 gpsmon # 交互式数据监控 ``` - 原始NMEA输出: ```bash cat /dev/ttyUSB0 # 直接读取设备原始数据 ``` 2. **检查数据有效性** 确保输出包含`$GPGGA`或`$GPRMC`等有效定位语句[^1]。 --- ### 四、ROS集成(可选) 若需ROS(如Melodic)集成: 1. **安装ROS GPS包** ```bash sudo apt-get install ros-melodic-nmea-navsat-driver ``` 2. **创建启动文件** 编辑`gps_node.launch`: ```xml <launch> <node name="nmea_serial_driver" pkg="nmea_navsat_driver" type="nmea_serial_driver"> <param name="port" value="/dev/ttyUSB0" /> <param name="baud" value="9600" /> </node> </launch> ``` 3. **运行节点** ```bash roslaunch your_pkg gps_node.launch rostopic echo /fix # 查看NavSatFix消息 ``` --- ### 五、高级应用 1. **数据可视化** 使用`rviz`添加`GPS`显示模块,或通过`plotjuggler`绘制轨迹[^4]。 2. **多传感器融合** 参考VINS-Fusion的GPS/IMU融合方法,需同步时间戳和坐标转换[^4]。 ---
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值