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

目录

一、安装依赖项

二、安装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)

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值