【VINS-Fusion入门之一】让系统跑起来

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangbaodong070411209/article/details/86551370

简介

VINS,英文缩写Visual-Inertial Systems.是一个实时视觉SLAM框架,2017年由香港科技大学开源的一个VIO算法。官方提供的下载链接:https://github.com/HKUST-Aerial-Robotics/VINS-Mono。
经过一年多的优化,该团队又推出一套更强大的开源算法框架:VINS-Fusion,下载链接:https://github.com/HKUST-Aerial-Robotics/VINS-Fusion。

那么,接下来我们就演示如何将该系统跑起来。

配置

一方面参考官方提供的Readme,进行安装,这里提供的安装环境为Ubuntu and ROS系统下,Ceres Solver安装,Ceres是什么就不做介绍,安装过程参考官网或者CSDN其他博客。
下面是关键库Ceres安装过程:

# CMake
sudo apt-get install cmake
# google-glog + gflags
sudo apt-get install libgoogle-glog-dev
# BLAS & LAPACK
sudo apt-get install libatlas-base-dev
# Eigen3
sudo apt-get install libeigen3-dev
# SuiteSparse and CXSparse (optional)
# - If you want to build Ceres as a *static* library (the default)
#   you can use the SuiteSparse package in the main Ubuntu package
#   repository:
sudo apt-get install libsuitesparse-dev

tar zxf ceres-solver-1.14.0.tar.gz
mkdir ceres-bin
cd ceres-bin
cmake ../ceres-solver-1.14.0
make -j3
make test
# Optionally install Ceres, it can also be exported using CMake which
# allows Ceres to be used without requiring installation, see the documentation
# for the EXPORT_BUILD_DIR option for more information.
make install

基本的库还有Eigen3和OpenCV,这里就不做赘述,相信从事计算机视觉算法的同学,都很熟练使用了。

然后,按照官方说明编译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

这个过程和ROS其他程序操作流程基本一样,不了解的同学可以学习一下《ROS机器人程序设计》。
下图为编译过程,电脑性能可以的话,几分钟就可以了:
编译
图一:编译环境
最后,我们还需要下载数据集,常用的数据有EuRoC,KITTI等,这里我们以下载EuROC上Easy的数据包为例,登录官网,在Download下选择你要测试的数据包。里面包含了我们需要的数据。
ROS bag
至此,我们已经完成了环境的配置,接下来,我们就基于ROS环境,进行简单的实验吧。

执行

这里也安装官方的方法,分三个环节。

单目 + IMU

下面,我们就在ROS工作空间执行对应的操作了,我们先运行单目+IMU的开环和闭环节点。

	// 新增这一句
	source devel/setup.bash
	// 单独终端窗口
	roscore
	// 运行启动文件
    roslaunch vins vins_rviz.launch
    // catkin_ws目录下
    rosrun vins vins_node src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml 
    // 闭环,必须在开环执行到一定程度才能启动
    (optional) rosrun loop_fusion loop_fusion_node src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml 
    // 运行刚才下载的ROS bag
    rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

测试效果如下:
在这里插入图片描述
我们看到在不加闭环的情况下,轨迹和GroundTruth非常接近,也能回到起始位置。那我们再看一下加闭环之后的效果:
闭环
通过上图我们发现闭环对轨迹优化的效果。

扫描二维码关注公众号,回复: 4985650 查看本文章

双目 + IMU

也是使用我们刚才的安装包,操作流程如下:

	// 执行启动文件
    roslaunch vins vins_rviz.launch
    // 开环
    rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml 
    // 闭环优化
    (optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml 
    // 运行ROS bag
    rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

这里我们就不展示图片了。

双目相机

这也是我们很多工程师关注的地方,具体流程如下:

	// 启动文件
    roslaunch vins vins_rviz.launch
    // 运行节点
    rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml 
    // 运行ros bag
    rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

留一个问题,为什么双目没有闭环优化这一环节呢?欢迎大家留言。

下面是KITTI数据集做了一个GPS和双目的融合实验。

双目 + 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

通过,上面的测试已经完成了VINS-Fusion的功能验证。

最后,我们将看看如何将开源框架应用到我们的产品上。

落地

开源该算法不仅仅是一个软件算法,它也非常依赖硬件平台,对于初学者,作者推荐我们使用全局曝光相机和已经实现了双目同步和IMU同步的硬件平台。
不同的硬件平台,如果想引用EuROC或者KITTI作为仿真数据,需要编写自己的配置文件。
标定也是我们离不开的一个环节,虽然,该算法支持多种相机模型,但是,也需要你将自己的相机标定参数写到配置文件中。
其中,作者也提供了一种ROS环境下的标定方法:
cd ~/catkin_ws/src/VINS-Fusion/camera_models/camera_calib_example/
rosrun camera_models Calibrations -w 12 -h 8 -s 80 -i calibrationdata --camera-model pinhole

最后,也需要大家了解我们使用ceres solver非线性优化工具和DBoW2作为闭环检测,通用的相机模型和GeographicLib库。

备注:

The source code is released under GPLv3 license.

猜你喜欢

转载自blog.csdn.net/wangbaodong070411209/article/details/86551370