VINS FUSION是香港科技大学在VINS MONO后做的推出的多功能版,有双目的数据,还有和GPS的融合。作为一个SLAM小白,记录一下整个的跑通过程。
代码连接:https://github.com/HKUST-Aerial-Robotics/VINS-Fusion
这里和作者github主页一致,但由于条件有限,我使用的是虚拟机。
Ubuntu 16.04 LTS,ceres1.13.0,ROS Kinect。opencv自己装的3.3。应该网上有很多安装这些软件/库的方法,印象中如果用最新的ceres需要把cmake版本提升,不能用16.04下sudo apt-get获得的默认版本。
这里用作者github页面下的方法就行,但是博主我就是小白,还是写的清楚一点。
首先你要建个文件夹,博主建的文件夹就叫 vins-catkin_ws,里面再建一个叫src的文件夹,然后把解压好的代码(博主的文件夹叫VINS-FUSION-master)放进去。这时候就是/vins-catkin_ws/src/VINS-FUSION-master的目录顺序。
然后命令行进入到/vins-catkin_ws这一层,进行catkin make。
注意:这里博主遇到了问题,博主本来的虚拟机分配了1核1G内存,在前面15%的时候卡死了,查了下自己笔记本的配置,最后分配了2核4G内存,编译花了大概10分钟的时间。另外看到过网上部分人提到使用catkin make是默认-j2的,也有可能会卡主(反正我也小白不太懂),博主就是 -j1进行的编译。有兴趣的朋友可以试一下其他。
(编译完成后的成功截图)
之后需要开启ros的工作空间,就是source devel/setup.bash。这条命令执行完后,博主的终端没有显示。
具体的代码是如下:
mkdir -p vins-catkin_ws/src
cd vins-catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git
cd ..
catkin make -j1
source devel/setup.bash
博主是在home目录下建的文件夹,如果是别的路径,那么自己修改路径就可以了,这些都没问题。
这个对应4.1的KITTI的examples。首先需要注意的是,因为底下跑数据集的数据都需要开多个终端,那么基本顺序是类似的,首先打开一个终端roscore,让ros跑起来。然后注意,在每一个终端运行roslaunch或者rosrun的时候,都需要在工作区间内,就是你都需要source devel/setup.bash。
在跑通demo之前,还需要数据集。对于KITTI,你可以从官网下载,也可以找国内的备份。我所知的泡泡机器人网站分享的连接都是度盘,体感上比国外的网站也快不到哪去(https://www.sohu.com/a/219232053_715754,不过这个好像也不全。)
另外再分享个博文,国内的镜像,速度还不错http://dataset.f3322.net:666/share/kitti/
插一个题外话,因为博主用的是虚拟机,一开始只分配了20G的空间,一次性放入所有的数据集空间不太够,如果有同样的萌新可以参考https://blog.csdn.net/weixin_39510813/article/details/78387334
作者在github主页上有两个基于KITTI数据集的示例,第一个是Odometry,数据是KITT Odometry dataset,作者给出的运行的命令贴在这里
roslaunch vins vins_rviz.launch
(optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml
rosrun vins kitti_odom_test ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml YOUR_DATASET_FOLDER/sequences/00/
首先第二个的optional是可选的(作者也在主页上做出了说明),就是回环检测的部分。感兴趣的同学可以跑两次试试,当然跑的时候(optional)是要去掉的。在跑之前,可以看到作者用的是sequence/00的数据,整个KITTI的Odometry数据包括
可以看到除了最后1M的开发工具,前面是灰阶和彩色图像数据,Velodyne(激光雷达公司名)的数据,标定数据和真实的位姿。这些是分开存储的,每个文件夹都有sequence/很多数据,00是第一个。需要把其中的数据拿出来放到一个文件夹内(如果你偷懒,就叫sequence/00),那么这个路径用来替换后面的YOUR_DATASET_FOLDER/sequence/00/。因为在作者给出的动图中是灰阶,我这里也是用的grayscale的数据,没有用color。
另外,作者也把结果其他的准备工作就是替换成你自己的文件路径(作者默认的路径是如下,替换自己的就好)。
然后再编译成功的基础上就可以尝试跑起来了。具体步骤如下:
①先打开一个终端roscore(默认是已经成功编译);
②再打开一个终端,先进入ros的工作区间,即输入 source vins-catkin_ws/devel/setup.bash,然后把rivz打开。即roslaunch vins vins_rviz.launch;
(我这里坐标系还有问题,还没解决)
③在进入工作区间后,运行rosrun vins kitti_odom_test vins-catkin_ws/src/VINS-Fusion-master/config/kitti_odom/kitti_config00-02.yaml dataset/sequences/00/命令。
④最后运行第三条命令打开回环,(还是要进工作区间),rosrun loop_fusion loop_fusion_node vins-catkin_ws/src/VINS-Fusion-master/config/kitti_odom/kitti_config00-02.yaml
(运行时,rosrun的节点名称,比如loop_fusion_node,是和CMakeLists中add_excutable的可执行文件名一致的,跑KITTI Raw的)
之后,你的rviz就会显示实时的轨迹和双目图像的跟踪情况,具体如下图
(至于为什么回环这里显示no image,还在研究中。。。)
更改配置文件中的输出路径,也可以把回环后的全局位姿输出到表格文件中,如下图:
(数据分析工作还在继续)
和上面跑odometry的情况类似,这里我们也是首先需要把数据下好,还是先贴上原作者的代码:
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
可以看到,作者是需要原始数据中2011_10_03_drive_0027_sync的数据当例子,这个数据在KITTI数据集官网的路径如下:raw data→Residental(善用网页关键字搜索即可)。如果想看最后的结果,还是需要在配置文件的outpath处修改你自己的路径。
顺序类似于跑odometry的结果,这里直接给出步骤:(确保你完成了catkin_make成功的基础上)
①还是打开一个终端,运行roscore
②新终端下打开rviz,运行roslaunch vins vins_rviz.launch
③打开另一个终端,利用source命令进入工作区间后,运行rosrun vins kitti_gps_test vins-catkin_ws/src/VINS-Fusion-master/config/kitti_raw/kitti_10_03_config.yaml dataset/2011_10_03_drive_0027_sync/
④打开另一个新的终端,进入工作区间后,运行rosrun global_fusion global_fusion_node
结果和odometry比较类似。