准备工作:
虚拟机
ubuntu:20.04
ROS:Neotic
Ubuntu20.04+ROS Noetic的安装与配置可以参考这篇文章,以下步骤在完成上述安装的基础上进行。
一、 安装ceres solver1.14.0
目前官网最新的版本是2.1.0,但是我安装这个版本时编译较慢,会出现一些莫名的问题,于是选择安装1.14.0。
1.安装相关依赖
sudo apt install libgoogle-glog-dev libatlas-base-dev libeigen3-dev libsuitesparse-dev liblapack-dev libcxsparse3.1.2 libgflags-dev libgtest-dev
2.下载ceres-solver-1.14.0,然后解压
#点击上面的链接,或者直接使用如下命令行都可以安装ceres-solver-1.14.0
wget ceres-solver.org/ceres-solver-1.14.0.tar.gz
#在压缩包在的目录下打开终端,输入如下命令解压
tar zxf ceres-solver-1.14.0.tar.gz
3.在解压后的同级目录下,编译安装
mkdir ceres-bin
cd ceres-bin
cmake ../ceres-solver-1.14.0
make -j2
sudo make install
PS:make速度较慢的问题——考虑是内存不足(我给虚拟机分配的内存只有2G),于是增加swap 分区,即当实际内存不够用的时候,操作系统会从内存中取出一部分暂时不用的数据,放在交换分区中,从而为当前运行的程序腾出足够的内存空间。
- 创建swap分区
#count的大小就是增加的swap空间块,bs是块大小,所以空间大小是bs*count=8192MB
sudo dd if=/dev/zero of=/swapfile bs=1M count=8192
#把刚才空间格式化成swap格式
sudo mkswap /swapfile
#使用刚才创建的swap空间
sudo swapon /swapfile
#重新make
make
#释放临时加的内存空间
sudo swapoff /swapfile
sudo rm /swapfile
二、下载编译Vins-Fusion
1.创建工作空间vins/src,在src目录下下载Vins-Fusion
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git
2.在vins目录下编译
catkin_make
解决编译时的错误:
①ROS noetic版本中自带的OpenCV4和VINS-mono中需要使用的OpenCV3冲突的问题。
修改camera_model文件包:
在camera_model包中的头文件Chessboard.h中添加
#include <opencv2/imgproc/types_c.h>
#include <opencv2/calib3d/calib3d_c.h>
在CameraCalibration.h中添加
#include <opencv2/imgproc/types_c.h>
#include <opencv2/imgproc/imgproc_c.h>
②报错:
error: ‘CV_FONT_HERSHEY_SIMPLEX’ was not declared in this scope
将报错文件上的CV_FONT_HERSHEY_SIMPLEX参数改为cv::FONT_HERSHEY_SIMPLEX
③报错:
error: ‘CV_RGB2GRAY’ was not declared in this scope
在报错头文件里添加
#include <opencv2/imgproc/types_c.h>
④报错:
error: ‘CV_LOAD_IMAGE_GRAYSCALE’ was not declared in this scope
将报错文件上的CV_LOAD_IMAGE_GRAYSCALE改为cv::IMREAD_GRAYSCALE
3.下载EuroC数据集的MH_01_easy.bag(常用slam数据集)
官网下载速度较慢,于是通过百度云下载,在上文链接中选择对应的文件即可下载,将下载后的文件保存到设置的共享文件夹F:\Shared
中的EuroC文件夹中(共享文件夹路径在虚拟机的设置中进行配置,即windows和虚拟机都能访问的文件夹)
在终端输入如下命令查看共享文件夹是否挂载成功
cd /mnt/hgfs
ls
注:若已经设置共享文件夹,但进入mnt/hgfs中找不到文件夹,可以使用下述指令
# 查看设置共享文件夹是否成功
vmware-hgfsclient
# 安装open-vm-tools
sudo apt-get install open-vm-tools
# 挂载共享文件夹
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o nonempty -o allow_other
# 再次查看是否挂载成功
cd /mnt/hgfs
ls
4.在vins目录下打开五个终端,分别输入如下指令
单目+IMU:
roscore
source ./devel/setup.bash
roslaunch vins vins_rviz.launch
source ./devel/setup.bash
rosrun vins vins_node ./src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
source ./devel/setup.bash
rosrun loop_fusion loop_fusion_node ./src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
source ./devel/setup.bash
# 以下路径需要根据你保存EuroC的路径进行修改(保留/mnt/hgfs/)
rosbag play /mnt/hgfs/Shared/EuroC/MH_01_easy.bag
双目+IMU:
roscore
source ./devel/setup.bash
roslaunch vins vins_rviz.launch
source ./devel/setup.bash
rosrun vins vins_node ./src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml
source ./devel/setup.bash
rosrun loop_fusion loop_fusion_node ./src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml
source ./devel/setup.bash
rosbag play /mnt/hgfs/Shared/EuroC/MH_01_easy.bag
双目:
roscore
source ./devel/setup.bash
roslaunch vins vins_rviz.launch
source ./devel/setup.bash
rosrun vins vins_node ./src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml
source ./devel/setup.bash
rosrun loop_fusion loop_fusion_node ./src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml
source ./devel/setup.bash
rosbag play /mnt/hgfs/Shared/EuroC/MH_01_easy.bag
注:若出现错误[rviz-3] process has died
,则输入如下指令
export LIBGL_ALWAYS_SOFTWARE=1
三、最终效果
单目+IMU:
rqt_graph:
rviz: