vins fusion是vins mono的多功能版,有双目数据、GPS融合。
代码下载链接:https://github.com/HKUST-Aerial-Robotics/VINS-Fusion
环境
UBUNTU,ceres1.13.0,ROS Kinect
编译
- 新建文件夹
vins-catkin_ws
,里面再建一个叫src的文件夹,然后把解压好的代码集VINS-FUSION-master
放进去。 - 命令行进入到
/vins-catkin_ws
这一层,进行catkin_make
。 - 开启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
source devel/setup.bash
跑数据集:首先打开一个终端roscore,让ros跑起来。然后注意,在每一个终端运行roslaunch或者rosrun的时候,都需要在工作区间内,就是你都需要source devel/setup.bash。
出现错误1:
这里会遇到ceres报错:Eigen3版本和ceres版本冲突问题。具体解决办法可见-----https://zhuanlan.zhihu.com/p/149775218?from_voters_page=true.
出现错误2:
cv_bridge与python版本问题导致编译错误error: return-statement with no value, in function returning ‘void*’ [-fpe…
解决办法:https://www.freesion.com/article/2504990067/
执行
单目+IMU
终端执行命令:
- 开一单独终端窗口
roscore
另开一窗口:
- 运行启动文件
进入工作区间内:
source devel/setup.bash
再输入:
roslaunch vins vins_rviz.launch
另开一窗口:
- vins-catkin_ws目录下
再进入工作区间内:
source devel/setup.bash
再输入:
rosrun vins vins_node src/VINS-Fusion-master/config/euroc/euroc_mono_imu_config.yaml
另开一窗口:
4. 闭环,必须在开环执行到一定程度才能启动
再进入工作区间内:
source devel/setup.bash
这里的回环检测部分是可选的。可以跑两次试试。
rosrun loop_fusion loop_fusion_node src/VINS-Fusion-master/config/euroc/euroc_mono_imu_config.yaml
(运行时,rosrun的节点名称,比如loop_fusion_node,是和CMakeLists中add_excutable的可执行文件名一致的,跑KITTI Raw的)
另开一窗口:
- 运行下载的ROS bag
再进入工作区间内:
source devel/setup.bash
输入:
rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag
我的是:rosbag play /home/ji***xin/dataset/MH_05_difficult.bag
实验结果:
-
闭环
-
没有回环
双目+IMU
vins-catkin_ws目录下:
不要忘记另开窗口,并进入工作环境,和前面一样就简写了。
// 执行启动文件
roslaunch vins vins_rviz.launch
// 开环
rosrun vins vins_node src/VINS-Fusion-master/config/euroc/euroc_stereo_imu_config.yaml
// 闭环优化
(optional) rosrun loop_fusion loop_fusion_node src/VINS-Fusion-master/config/euroc/euroc_stereo_imu_config.yaml
// 运行ROS bag
rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag
加闭环的实验结果:
目前就只试了这些。