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环境,进行简单的实验吧。
这里也安装官方的方法,分三个环节。
下面,我们就在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非常接近,也能回到起始位置。那我们再看一下加闭环之后的效果:
通过上图我们发现闭环对轨迹优化的效果。
也是使用我们刚才的安装包,操作流程如下:
// 执行启动文件
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和双目的融合实验。
这个实验我们没有做,就不做介绍了。
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.