文章目录
- 一、问题描述
- 二、依赖环境
- 1. Eigen 安装
- 2. glog 安装
- 3. gflags 安装
- 4. ceres 安装
- 三、VINS-Mono 安装
- 1. git 下载并安装
- 2. OpenCV 版本冲突
- 3. 运行
- 四、VINS—Fusion 安装
- 1. git 下载并安装
- 2. OpenCV 版本冲突
- 3. 运行
- 五、日常bug
- 1. 动静态库链接冲突
一、问题描述
vins 系列vslam是基于ubuntu18.04系统搭建配置的,自己使用的Ubuntu20.04
、OpenCV 4.2.0
在环境配置方面多少有一些冲突,在此记录一下填坑的过程 。。。填完坑的相应安装包见 网盘链接 提取码: gene,按需取用(自动安装的脚本目前仅根据安装记录整理的,用于以后安装参考,目前没自动化安装过)。
二、依赖环境
1. Eigen 安装
自己使用的是 eigen-3.3.7
版本 官网链接 ,安装命令如下:
tar -zxvf eigen-3.3.7.tar.gz
mkdir eigen-3.3.7/build && cd eigen-3.3.7/build
sudo cmake ..
sudo make install
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
pkg-config --modversion eigen3 # 查看安装 eigen 版本
2. glog 安装
自己使用的是 glog-0.4.0
版本 git 链接 ,安装命令如下:
tar -zxvf glog-0.4.0.tar.gz
cd glog-0.4.0/ && mkdir build
cmake -DGFLAGS_NAMESPACE=google -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_SHARED_LIBS=ON ..
make -j4
sudo make install
3. gflags 安装
自己使用的是 gflags-2.2.2
版本 git 链接 ,安装命令如下:
tar -zxvf gflags.tar.gz
mkdir gflags/build && cd gflags/build
# 编译静态库
cmake -DGFLAGS_NAMESPACE=google -DCMAKE_CXX_FLAGS=-fPIC ..
# 编译动态库
# cmake -DGFLAGS_NAMESPACE=google -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_SHARED_LIBS=1 -DINSTALL_SHARED_LIBS=1 ..
make -j4
sudo make install
pkg-config --modversion gflags
4. ceres 安装
自己使用的是 ceres-solver-1.14.0
版本 ,安装命令如下:
wget ceres-solver.org/ceres-solver-1.14.0.tar.gz
tar -zxvf ceres-solver-1.14.0.tar.gz
mkdir ceres-solver-1.14.0/build && cd ceres-solver-1.14.0/build
cmake ..
make -j4
sudo make install
cat /usr/local/include/ceres/version.h # 查看安装版本
三、VINS-Mono 安装
1. git 下载并安装
mkdir -p vins_mono_ws/src && cd vins_mono_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git
catkin_make
2. OpenCV 版本冲突
Ubuntu20.04 默认ROS的版本为 Noetic 对应的OpenCV为4.2.0 ,在步骤1编译时会出现版本冲突:
在工作空间下执行如下命令,可见,OpenCV版本均为默认版本。
grep -r "find_package(OpenCV REQUIRED)"
src/VINS-Mono/vins_estimator/CMakeLists.txt:find_package(OpenCV REQUIRED)
src/VINS-Mono/camera_model/CMakeLists.txt:find_package(OpenCV REQUIRED)
src/VINS-Mono/data_generator/CMakeLists.txt:find_package(OpenCV REQUIRED)
src/VINS-Mono/ar_demo/CMakeLists.txt:find_package(OpenCV REQUIRED)
src/VINS-Mono/feature_tracker/CMakeLists.txt:find_package(OpenCV REQUIRED)
指定OpenCV版本为4.2.0,并重新catkin_make 编译。
# 一键替换
find . -name "CMakeLists.txt" | xargs sed -i "s/OpenCV REQUIRED/OpenCV 4 REQUIRED/g"
grep -r "find_package(OpenCV REQUIRED)"
src/VINS-Mono/vins_estimator/CMakeLists.txt:find_package(OpenCV 4 REQUIRED)
src/VINS-Mono/camera_model/CMakeLists.txt:find_package(OpenCV 4 REQUIRED)
src/VINS-Mono/data_generator/CMakeLists.txt:find_package(OpenCV 4 REQUIRED)
src/VINS-Mono/ar_demo/CMakeLists.txt:find_package(OpenCV 4 REQUIRED)
src/VINS-Mono/feature_tracker/CMakeLists.txt:find_package(OpenCV 4 REQUIRED)
3. 运行
开三个终端,三个终端分别运行如下命令:
# 终端1
source ./devel/setup.bash
roslaunch vins_estimator vins_rviz.launch
# 终端2
source ./devel/setup.bash
roslaunch vins_estimator euroc.launch
# 终端3
rosbag play MH_03_medium.bag # 需下载数据集
注:终端3 对应 数据集
不出意外的话,,,会出现如下运行界面。
四、VINS—Fusion 安装
1. git 下载并安装
mkdir -p vins_mono_ws/src && cd vins_mono_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git
catkin_make
2. OpenCV 版本冲突
首次编译,不出意外的又要出意外了,,,同样,是因为OpenCV版本冲突,解决方法是直接添加缺失的头文件即可。
2.1 添加缺失头文件
- 在
camera_model
包中的头文件camera_models/include/camodocal/chessboard/Chessboard.h
中添加
#include <opencv2/imgproc/types_c.h>
#include <opencv2/calib3d/calib3d_c.h>
- 在
camera_model
包中的头文件camera_models/include/camodocal/calibCameraCalibration.h
;在loop_fusion
包中的头文件loop_fusion/src/pose_graph.h
和loop_fusion/src/keyframe.h
、loop_fusion/src/ThirdParty/DVision/BRIEF.h
中添加
#include <opencv2/imgproc/types_c.h>
#include <opencv2/imgproc/imgproc_c.h>
- 将
vins_estiamtor
包中头文件vins_estimator/src/estimator/estimator.h
添加
// #include <opencv/cv.h>
// #include <opencv/highgui.h>
#include <opencv2/highgui.hpp>
#include <opencv2/cvconfig.h>
- 将
vins_estiamtor
包中头文件vins_estimator/src/featureTracker/feature_tracker.h
添加
#include <opencv2/imgproc/types_c.h>
- 将
vins_estiamtor
包中头文件KITTIOdomTest.cpp
、KITTIGPSTest.cpp
中的CV_LOAD_IMAGE_GRAYSCALE
修改为0
(或cv::IMREAD_GRAYSCALE
)
// imLeft = cv::imread(leftImagePath, CV_LOAD_IMAGE_GRAYSCALE );
imLeft = cv::imread(leftImagePath, 0 );
// imRight = cv::imread(rightImagePath, CV_LOAD_IMAGE_GRAYSCALE );
imRight = cv::imread(rightImagePath, 0 );
补充:opencv4.x以上,有些宏,API名字有所变化:
修改前 修改后 CV_LOAD_IMAGE_UNCHANGED cv::IMREAD_UNCHANGED CV_LOAD_IMAGE_GRAYSCALE cv::IMREAD_GRAYSCALE CV_LOAD_IMAGE_COLOR cv::IMREAD_COLOR CV_LOAD_IMAGE_ANYDEPTH cv::IMREAD_ANYDEPTH
- 若指定OpenCV版本冲突,与Mono类似执行如下命令
find . -name "CMakeLists.txt" | xargs sed -i "s/OpenCV REQUIRED/OpenCV 4 REQUIRED/g"
3. 运行
开三个终端,三个终端分别运行如下命令:
# 终端1
source ./devel/setup.bash
roslaunch vins vins_rviz.launch
# 终端2
source ./devel/setup.bash
rosrun vins vins_node src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml
# 终端3
rosbag play MH_03_medium.bag # 需下载数据集
注:终端3 对应 数据集
不出意外的话,,,会出现如下运行界面:
到此,安装成功,继续填坑中。。。
五、日常bug
1. 动静态库链接冲突
One possibility: file 'gflags.cc' is being linked both statically and dynamically into this executable.
可能与安装gflags
时,系统自身有其他版本,或者flags 安装时没有使用生成静态库编译。自己当时的解决办法是卸载gflags重新按照上述步骤一方法安装。