Ubuntu20.04安装VINS_Mono 和 VINS_Fusion

文章目录

  • 一、问题描述
  • 二、依赖环境
    • [1. Eigen 安装](#1. Eigen 安装)
    • [2. glog 安装](#2. glog 安装)
    • [3. gflags 安装](#3. gflags 安装)
    • [4. ceres 安装](#4. ceres 安装)
  • [三、VINS-Mono 安装](#三、VINS-Mono 安装)
    • [1. git 下载并安装](#1. git 下载并安装)
    • [2. OpenCV 版本冲突](#2. OpenCV 版本冲突)
    • [3. 运行](#3. 运行)
  • [四、VINS---Fusion 安装](#四、VINS—Fusion 安装)
    • [1. git 下载并安装](#1. git 下载并安装)
    • [2. OpenCV 版本冲突](#2. OpenCV 版本冲突)
    • [3. 运行](#3. 运行)
  • 五、日常bug
    • [1. 动静态库链接冲突](#1. 动静态库链接冲突)

一、问题描述

vins 系列vslam是基于ubuntu18.04系统搭建配置的,自己使用的Ubuntu20.04OpenCV 4.2.0 在环境配置方面多少有一些冲突,在此记录一下填坑的过程 。。。填完坑的相应安装包见 网盘链接 提取码: gene,按需取用(自动安装的脚本目前仅根据安装记录整理的,用于以后安装参考,目前没自动化安装过)。

二、依赖环境

1. Eigen 安装

自己使用的是 eigen-3.3.7 版本 官网链接 ,安装命令如下:

bash 复制代码
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 链接 ,安装命令如下:

bash 复制代码
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 链接 ,安装命令如下:

bash 复制代码
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 版本 ,安装命令如下:

bash 复制代码
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 下载并安装

bash 复制代码
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版本均为默认版本。

bash 复制代码
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 编译。

bash 复制代码
# 一键替换
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. 运行

开三个终端,三个终端分别运行如下命令:

bash 复制代码
# 终端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 下载并安装

bash 复制代码
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 添加缺失头文件

  1. camera_model包中的头文件camera_models/include/camodocal/chessboard/Chessboard.h中添加
cpp 复制代码
#include <opencv2/imgproc/types_c.h>
#include <opencv2/calib3d/calib3d_c.h>
  1. camera_model包中的头文件camera_models/include/camodocal/calibCameraCalibration.h;在 loop_fusion包中的头文件loop_fusion/src/pose_graph.hloop_fusion/src/keyframe.hloop_fusion/src/ThirdParty/DVision/BRIEF.h中添加
cpp 复制代码
#include <opencv2/imgproc/types_c.h>
#include <opencv2/imgproc/imgproc_c.h>
  1. vins_estiamtor包中头文件vins_estimator/src/estimator/estimator.h添加
cpp 复制代码
// #include <opencv/cv.h>
// #include <opencv/highgui.h>
#include <opencv2/highgui.hpp>
#include <opencv2/cvconfig.h>
  1. vins_estiamtor包中头文件vins_estimator/src/featureTracker/feature_tracker.h添加
cpp 复制代码
#include <opencv2/imgproc/types_c.h>
  1. vins_estiamtor包中头文件KITTIOdomTest.cppKITTIGPSTest.cpp中的 CV_LOAD_IMAGE_GRAYSCALE 修改为 0 (或 cv::IMREAD_GRAYSCALE)
cpp 复制代码
// 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
  1. 若指定OpenCV版本冲突,与Mono类似执行如下命令
bash 复制代码
find . -name "CMakeLists.txt" | xargs sed -i "s/OpenCV REQUIRED/OpenCV 4 REQUIRED/g"

3. 运行

开三个终端,三个终端分别运行如下命令:

bash 复制代码
# 终端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. 动静态库链接冲突

bash 复制代码
One possibility: file 'gflags.cc' is being linked both statically and dynamically into this executable.

可能与安装gflags 时,系统自身有其他版本,或者flags 安装时没有使用生成静态库编译。自己当时的解决办法是卸载gflags重新按照上述步骤一方法安装。

相关推荐
yunhuibin7 分钟前
ffmpeg面向对象——拉流协议匹配机制探索
学习·ffmpeg
hengzhepa17 分钟前
ElasticSearch备考 -- Search across cluster
学习·elasticsearch·搜索引擎·全文检索·es
C++忠实粉丝23 分钟前
Linux环境基础开发工具使用(2)
linux·运维·服务器
康熙38bdc1 小时前
Linux 环境变量
linux·运维·服务器
蜡笔小新星1 小时前
Python Kivy库学习路线
开发语言·网络·经验分享·python·学习
攸攸太上1 小时前
JMeter学习
java·后端·学习·jmeter·微服务
hakesashou2 小时前
python如何比较字符串
linux·开发语言·python
Ljubim.te2 小时前
Linux基于CentOS学习【进程状态】【进程优先级】【调度与切换】【进程挂起】【进程饥饿】
linux·学习·centos
cooldream20092 小时前
Linux性能调优技巧
linux
yngsqq2 小时前
031集——文本文件按空格分行——C#学习笔记
笔记·学习·c#