Ubuntu20.04从零开始搭建vins-fusion环境并测试数据集(官方+手机摄像头)

本文详细介绍了在Ubuntu20.04系统上从头开始安装依赖项、Pangolin、ROS、OpenCV、Ceres-1.14.0以及VINS-Fusion的过程,包括源码编译、配置文件修改和运行,同时涉及官方和自制数据集的使用以及SLAM相关设置。

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

目录

一、安装依赖项

二、安装Pangolin

三、安装ros

四、安装opencv

五、ceres-1.14.0

六、安装vins-fusion

1、源码

2、修改配置文件

3、编译

4、运行

4.1官方数据集

4.2自制数据集

1)参数标定

2)数据打包

3)添加yaml文件

①打开android_config.yaml

②打开cam0_mei.yaml

4)更改源码

5)运行

七、参考资料


系统:Ubuntu 20.04 

ros:noetic

本文基于Ubuntu20.04从零开始搭建vins-mono环境并测试数据集继续搭建,一些基础配置就不详细写了。

一、安装依赖项

二、安装Pangolin

三、安装ros

四、安装opencv

五、ceres-1.14.0

以上全部内容见vins-mono环境搭建一文。

六、安装vins-fusion

1、源码

cd ~/catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git

2、修改配置文件

①在 VINS-Fusion/camera_models/include/camodocal/chessboard/Chessboard.h 中添加

#include <opencv2/imgproc/types_c.h>
#include <opencv2/calib3d/calib3d_c.h>

②在 VINS-Fusion/camera_models/include/camodocal/calib/CameraCalibration.h 中添加

#include <opencv2/imgproc/types_c.h>
#include <opencv2/imgproc/imgproc_c.h>

③在 VINS-Fusion/global_fusion/CMakeLists.txt 中第5行

VINS-Fusion/camera_models/CMakeLists.txt 中第5行

VINS-Fusion/loop_fusion/CMakeLists.txt 中第5行

VINS-Fusion/vins_estimator/CMakeLists.txt 中第5行改为

set(CMAKE_CXX_STANDARD 14)

④在 VINS-Fusion/loop_fusion/src/pose_graph.cpp 中

同目录下 keyframe.cpp 中

查找替换

CV_FONT_HERSHEY_SIMPLEX 改为 cv::FONT_HERSHEY_SIMPLEX

⑤在 VINS-Fusion/loop_fusion/src/ThirdParty/DVision/BRIEF.cpp 中

VINS-fusion/vins-estamator/src/featureTracker/feature_tracker.cpp 添加

#include <opencv2/imgproc/types_c.h>

⑥在 VINS-fusion/vins-estamator/src/KITTIGPSTest.cpp 中

同目录下 KITTIOdomTest.cpp 中

查找替换

CV_LOAD_IMAGE_GRAYSCALE 改为 cv::IMREAD_GRAYSCALE

3、编译

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

4、运行

依旧是多终端命令运行(alt+T打开),并且不同的运行模式对应不同的第二行命令。

4.1官方数据集

数据集下载省略,具体看之前的文章,这里直接写运行命令了。

终端一:

roslaunch vins vins_rviz.launch

终端二:

#单目+IMU
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml

#双目
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml

#双目+IMU
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml

#双目+GPS
rosrun vins kitti_gps_test ~/catkin_ws/src/VINS-Fusion/config/kitti_raw/kitti_10_03_config.yaml 

终端三(可选择,执行回环检测):

#单目+IMU
rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml

#双目
rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml

#双目+IMU
rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml

终端四:

#其他
rosbag play ./MH_01_easy.bag

#双目+GPS
rosrun global_fusion global_fusion_node

完成~

4.2自制数据集

1)参数标定

参考Ubuntu20.04下vins-mono用自己数据并跑通(手机摄像头/离线)一文。

2)数据打包

自己的数据集打包参考Ubuntu20.04下vins-mono用自己数据并跑通(手机摄像头/离线)一文。

3)添加yaml文件

在VINS-Fusion/config 下新建文件夹并命名为 android

复制 euroc 目录下的 cam0_mei.yaml 和 euroc_mono_imu_config.yaml 文件并贴到 android 文件下,并将第二个yaml重命名为 android_config.yaml

①打开android_config.yaml

第15、16行,相机分辨率

第19行,外旋转矩阵估计设置为1(非精确值)

第48-52行,imu参数

第55行,同步时差估计设置为1(打开)

(可选)第59行,回环重定位设置为1(打开)

画重点:如果要进行重定位,那在保存第一次的轨迹时需要提前新建文件夹,fusion和momo不一样,不能自己建文件夹。如果路径里的文件夹不存在的话,没办法保存,会直接中断回环进程。

保存关闭

②打开cam0_mei.yaml

根据之前的标定结果改一下分辨率和参数

重点!!!!

projection_parameters下面的四个参数要改成fx,fy,cx,cy,不能用原本的,不然就会遇见能打开rviz有画面但是没有轨迹,终端疯狂报错 Not enough features or parallax; Move device around 的情况。

保存关闭

4)更改源码

①在 VINS-Fusion/vins_estimator/src/utility/visualization.cpp 中

第156-171行,修改为

ofstream foutC2(VINS_RESULT_PATH, ios::app);
foutC2.precision(9);
foutC2.setf(ios::fixed,  ios::floatfield);
foutC2 << header.stamp.toSec() << " ";
foutC2.precision(6);
foutC2     << 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;
foutC2.close();

②在 VINS-Fusion/loop_fusion/src/pose_graph.cpp 中

第184-197行,修改为

ofstream loop_path_file2(VINS_RESULT_PATH, ios::app);
loop_path_file2.setf(ios::fixed,  ios::floatfield);
loop_path_file2.precision(9);
loop_path_file2 << cur_kf->time_stamp << " ";
loop_path_file2.precision(6);
loop_path_file2 << P.x() << " "
                << P.y() << " "
                << P.z() << " "
                << Q.x() << " "
                << Q.y() << " "
                << Q.z() << " "
                << Q.w() << endl;
loop_path_file2.close();

第827-840行,修改为

ofstream loop_path_file2(VINS_RESULT_PATH, ios::app);
loop_path_file2.setf(ios::fixed,  ios::floatfield);
loop_path_file2.precision(9);
loop_path_file2 << (*it)->time_stamp << " ";
loop_path_file2.precision(6);
loop_path_file2 << P.x() << " "
                << P.y() << " "
                << P.z() << " "
                << Q.x() << " "
                << Q.y() << " "
                << Q.z() << " "
                << Q.w() << endl;
loop_path_file2.close();

保存关闭

5)运行

终端一:

roslaunch vins vins_rviz.launch

终端二:

rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/android/android_config.yaml

(可选)终端三:

rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/android/android_config.yaml

终端四:

rosbag play output.bag

完毕

存在问题:

初始化超级快,几乎是一开始轨迹就飞了,由于本身标定的不太精确,所以不确定是标定的问题还是fusion就这么容易飞……

解决:fusion因为不提供外参矩阵自动标定,所以不仅需要自己标相机和imu的参数,还需要联合标定,全部标完以后轨迹就准了。

七、参考资料

在ubuntu20.04上配置VINS_Fusion(亲测有效,一应俱全)

Ubuntu20.04运行Vins-fusion

Ubuntu20.04从零开始搭建vins-mono环境并测试数据集

Ubuntu20.04下vins-mono用自己数据并跑通(手机摄像头/离线)

vins-fusion环境配置、安装与测试

SLAM中evo评估工具(用自己的数据集评估vinsFusion)

### 安装和配置 VINS-Fusion 的方法 #### 准备工作 在开始之前,需确认已安装 Ubuntu 20.04 具备管理员权限。此外,还需满足以下依赖项:ROS Noetic 和必要的开发工具链。 #### ROS Noetic 安装 如果尚未安装 ROS Noetic,则可以通过以下命令完成安装[^1]: ```bash sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install ros-noetic-desktop-full source /opt/ros/noetic/setup.bash ``` #### 配置环境变量 为了使 ROS 能够正常运行,在 `~/.bashrc` 文件中添加如下内容刷新环境变量[^2]: ```bash echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc ``` #### 创建 Catkin 工作空间 创建一个新的 Catkin 工作空间用于克隆和编译 VINS-Fusion 源码[^3]: ```bash mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ wstool init src ``` #### 下载 VINS-Fusion 源码 通过 Git 将 VINS-Fusion 源码下载到本地,初始化所需的依赖包列表[^4]: ```bash git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git src/vins_fusion cd src/vins_fusion rosws merge .rosinstall cd ../.. wstool up ``` #### 编译源码 确保所有依赖项均已解决后,执行以下命令来构建项目[^5]: ```bash sudo apt-get install python-catkin-tools catkin build source devel/setup.bash ``` #### 测试运行 启动测试节点以验证安装是否成功。可以尝试加载默认参数文件运行核心模块[^6]: ```bash roslaunch vins_estimator vins_node.launch cam0_topic:=/cam0/image_raw cam1_topic:=/cam1/image_raw imu_topic:=/imu/data config_file:=vins.yaml ``` #### 常见问题排查 - 如果遇到缺少库的情况,请使用 `rosdep` 自动解析缺失的依赖关系[^7]: ```bash sudo apt install python3-rosdep rosdep init rosdep update rosdep install --from-paths src --ignore-src -r -y ``` ---
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值